-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.yml
executable file
·460 lines (395 loc) · 13.6 KB
/
build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
- hosts: all
become: yes
vars_files:
- vars.yml
tasks:
- name: Hostname
ansible.builtin.hostname:
name: "{{ camname | default('cambuild') }}"
- name: Hosts entry
ansible.builtin.replace:
backup: no
dest: /etc/hosts
regexp: "^127.0.1.1(?:.*)$"
replace: "127.0.1.1 {{ camname | default('cambuild') }}"
- name: Upgrade
ansible.builtin.apt:
name: "*"
state: latest
update_cache: true
- name: Install libavahi
ansible.builtin.apt:
name: libavahi-client3
state: latest
become: yes
- name: Install dependencies
ansible.builtin.apt:
name:
- libwebp6
- libtiff5
- libconfig++9v5
- name: Install Python 3 pip
ansible.builtin.apt:
name:
- python3-pip
state: latest
become: yes
- name: Install setuptools
ansible.builtin.pip:
executable: /usr/bin/pip3
name: setuptools
state: present
- name: Getty TTY1
ansible.builtin.file:
src: "/lib/systemd/system/getty@.service"
dest: "/etc/systemd/system/getty.target.wants/getty@tty1.service"
state: link
become: yes
- name: Configure autologin
ansible.builtin.copy:
src: files/autologin.conf
dest: /etc/systemd/system/getty@tty1.service.d/autologin.conf
owner: root
become: yes
- name: config.txt tweaks
ansible.builtin.blockinfile:
path: /boot/config.txt
block: |
start_x=1
gpu_mem=128
hdmi_force_hotplug=1
disable_splash=1
hdmi_drive=1
hdmi_group=1
hdmi_mode=5
state: present
- name: Identify as camera
ansible.builtin.copy:
src: piplatform.txt
dest: /boot/piplatform.txt
- name: SSH directory
ansible.builtin.file:
path: /home/pi/.ssh
state: directory
owner: pi
group: pi
mode: 0750
- name: Authorized keys
ansible.builtin.file:
path: /home/pi/.ssh/authorized_keys
state: touch
owner: pi
group: pi
mode: 0640
- name: Install SSH key
ansible.posix.authorized_key:
key: "{{ ssh_key }}"
user: pi
state: present
- name: Disable password SSH login
ansible.builtin.lineinfile:
path: /etc/ssh/sshd_config
line: "{{ item.line }}"
insertafter: "{{ item.after }}"
state: present
with_items:
- line: "ChallengeResponseAuthentication no"
after: "#ChallengeResponseAuthentication yes"
- line: "PasswordAuthentication no"
after: "#PasswordAuthentication yes"
- name: Restart SSH
ansible.builtin.systemd:
name: ssh
state: restarted
- name: Uninstall packages (for RO SD)
ansible.builtin.apt:
name:
- triggerhappy
- logrotate
- dphys-swapfile
- rsyslog
state: absent
purge: yes
- name: Clean up
ansible.builtin.apt:
autoremove: yes
purge: yes
- name: cmdline
ansible.builtin.replace:
backup: no
dest: /boot/cmdline.txt
regexp: " fastboot noswap ro splash quiet plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default=0"
replace: ""
- name: cmdline
ansible.builtin.replace:
backup: no
dest: /boot/cmdline.txt
regexp: "(.+)"
replace: "\\1 fastboot noswap ro splash quiet plymouth.ignore-serial-consoles logo.nologo vt.global_cursor_default=0"
- name: cmdline
ansible.builtin.replace:
backup: no
dest: /boot/cmdline.txt
regexp: "console=tty1"
replace: "console=tty3"
- name: Install busybox-syslogd
ansible.builtin.apt:
name: busybox-syslogd
state: latest
- name: fstab change (ro boot)
ansible.builtin.replace:
backup: no
dest: /etc/fstab
regexp: "^(.*vfat.*)defaults(?:,ro)?(.*)"
replace: "\\1defaults,ro\\2"
- name: fstab change (ro rootfs)
ansible.builtin.replace:
backup: no
dest: /etc/fstab
regexp: "^(.*ext4.*)defaults(?:,ro)?(.*)"
replace: "\\1defaults,ro\\2"
- name: fstab tmpfs
ansible.builtin.lineinfile:
path: /etc/fstab
line: "{{ item }}"
state: present
with_items:
- "tmpfs /tmp tmpfs nosuid,nodev 0 0"
- "tmpfs /var/log tmpfs nosuid,nodev 0 0"
- "tmpfs /var/tmp tmpfs nosuid,nodev 0 0"
- name: Create dhcpcd.resolv.conf
ansible.builtin.copy:
src: /etc/resolv.conf
dest: /tmp/dhcpcd.resolv.conf
remote_src: yes
- name: Delete stuff
ansible.builtin.file:
path: "{{ item }}"
state: absent
with_items:
- /var/lib/dhcp
- /var/lib/dhcpcd5
- /var/spool
- /etc/resolv.conf
- /var/lib/systemd/random-seed
- name: Link stuff to tmpfs
ansible.builtin.file:
src: /tmp
dest: "{{ item }}"
state: link
with_items:
- /var/lib/dhcp
- /var/lib/dhcpcd5
- /var/spool
- name: Link dhcpcd.resolv.conf
ansible.builtin.file:
src: /tmp/dhcpcd.resolv.conf
dest: /etc/resolv.conf
state: link
- name: Link random-seed
ansible.builtin.file:
src: /tmp/random-seed
dest: /var/lib/systemd/random-seed
state: link
force: yes
- name: Alter random-seed service
ansible.builtin.lineinfile:
dest: /lib/systemd/system/systemd-random-seed.service
line: ExecStartPre=/bin/echo "" >/tmp/random-seed
insertafter: RemainAfterExit=yes
- name: Create raspindi
ansible.builtin.file:
path: /opt/raspindi
state: directory
owner: pi
group: pi
- name: Create raspindi bin
ansible.builtin.file:
path: /opt/raspindi/bin
state: directory
owner: pi
group: pi
- name: Setup NDI
unarchive:
remote_src: yes
src: https://github.com/raspberry-pi-camera/raspindi/releases/download/v{{ raspindi_version }}/libndi-aarch64.tar.gz
dest: /opt/raspindi/
creates: /opt/raspindi/usr/lib/libndi.so
when: ansible_architecture == "aarch64"
- name: Setup NDI
ansible.builtin.unarchive:
remote_src: yes
src: https://github.com/raspberry-pi-camera/raspindi/releases/download/v{{ raspindi_version }}/libndi-armv7.tar.gz
dest: /opt/raspindi/
creates: /opt/raspindi/usr/lib/libndi.so
when: ansible_architecture != "aarch64"
- name: Setup libndioutput
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/raspindi/releases/download/v{{ raspindi_version }}/libndioutput-aarch64.so
dest: /opt/raspindi/usr/lib/libndioutput.so
owner: pi
group: pi
mode: 0755
when: ansible_architecture == "aarch64"
- name: Setup libndioutput
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/raspindi/releases/download/v{{ raspindi_version }}/libndioutput-armv7.so
dest: /opt/raspindi/usr/lib/libndioutput.so
owner: pi
group: pi
mode: 0755
when: ansible_architecture != "aarch64"
- name: Install raspindi
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/raspindi/releases/download/v{{ raspindi_version }}/raspindi-aarch64
dest: /opt/raspindi/bin/raspindi
owner: pi
group: pi
mode: 0755
when: ansible_architecture == "aarch64"
- name: Install raspindi
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/raspindi/releases/download/v{{ raspindi_version }}/raspindi-armv7
dest: /opt/raspindi/bin/raspindi
owner: pi
group: pi
mode: 0755
when: ansible_architecture != "aarch64"
- name: Install Atem Tally
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/atem-tally/raw/v{{ atem_version }}/atem.py
dest: /opt/raspindi/bin/atem
owner: pi
group: pi
mode: 0755
- name: Get Atem Tally requirements
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/atem-tally/raw/v{{ atem_version }}/requirements.txt
dest: /tmp/atem-requirements.txt
owner: pi
group: pi
mode: 0755
- name: Install dependencies
ansible.builtin.pip:
executable: /usr/bin/pip3
requirements: /tmp/atem-requirements.txt
state: present
- name: Install Neopixel
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/neopixel/raw/v{{ neopixel_version }}/neopixel.py
dest: /opt/raspindi/bin/neopixel
owner: pi
group: pi
mode: 0755
- name: Get Neopixel requirements
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/neopixel/raw/v{{ neopixel_version }}/requirements.txt
dest: /tmp/neopixel-requirements.txt
owner: pi
group: pi
mode: 0755
- name: Install dependencies
ansible.builtin.pip:
executable: /usr/bin/pip3
requirements: /tmp/neopixel-requirements.txt
state: present
- name: Install Startup
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/startup/raw/v{{ startup_version }}/startup.py
dest: /opt/raspindi/bin/startup
owner: pi
group: pi
mode: 0755
- name: Get Startup requirements
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/startup/raw/v{{ startup_version }}/requirements.txt
dest: /tmp/startup-requirements.txt
owner: pi
group: pi
mode: 0755
- name: Install dependencies
ansible.builtin.pip:
executable: /usr/bin/pip3
requirements: /tmp/startup-requirements.txt
state: present
- name: Startup scripts
ansible.builtin.lineinfile:
dest: /home/pi/.bashrc
line: /opt/raspindi/bin/startup
- name: Neopixel service
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/neopixel/raw/v{{ neopixel_version }}/neopixel.service
dest: /etc/systemd/system/neopixel.service
- name: Enable Neopixel service
ansible.builtin.systemd:
daemon_reload: yes
name: neopixel
enabled: yes
- name: config file
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/raspindi/raw/v{{ raspindi_version }}/etc/raspindi.conf.default
dest: /boot/raspindi.conf
- name: Set camera number
ansible.builtin.lineinfile:
path: /boot/raspindi.conf
regexp: "^camera_number"
line: 'camera_number = "{{ cam_number }}";'
- name: Link config file
ansible.builtin.file:
src: /boot/raspindi.conf
dest: /etc/raspindi.conf
state: link
force: yes
- name: Plymouth
ansible.builtin.apt:
name:
- plymouth
- plymouth-themes
- pix-plym-splash
state: present
- name: Create plymouth theme dir
ansible.builtin.file:
path: /usr/share/plymouth/themes/raspindi
state: directory
- name: Plymouth Theme
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/plymouth-theme/raw/master/raspindi/{{ item }}
dest: /usr/share/plymouth/themes/raspindi/{{ item }}
with_items:
- raspindi.plymouth
- raspindi.script
- splash.png
- name: Set Plymouth Theme
ansible.builtin.shell:
cmd: plymouth-set-default-theme raspindi
- name: Create monitor server dir
ansible.builtin.file:
path: /opt/monitor-server/
state: directory
- name: Download montor server
ansible.builtin.unarchive:
src: https://github.com/raspberry-pi-camera/monitor-server/archive/master.tar.gz
remote_src: yes
extra_opts:
- '--strip-components=1'
dest: /opt/monitor-server/
- name: Install dependencies
ansible.builtin.pip:
executable: /usr/bin/pip3
requirements: /opt/monitor-server/requirements.txt
state: present
- name: Monitor Server service
ansible.builtin.get_url:
url: https://github.com/raspberry-pi-camera/monitor-server/raw/master/monitor-server.service
dest: /etc/systemd/system/monitor-server.service
- name: Enable Monitor Server service
ansible.builtin.systemd:
daemon_reload: yes
name: monitor-server
enabled: yes
- name: Shut down
ansible.builtin.command: /sbin/shutdown -h now
when: shutdown | default(False)
- name: Reboot
ansible.builtin.command: /sbin/shutdown -r now
when: reboot | default(True)