summaryrefslogtreecommitdiff
path: root/roles/raspios/image/tasks/main.yml
diff options
context:
space:
mode:
Diffstat (limited to 'roles/raspios/image/tasks/main.yml')
-rw-r--r--roles/raspios/image/tasks/main.yml119
1 files changed, 75 insertions, 44 deletions
diff --git a/roles/raspios/image/tasks/main.yml b/roles/raspios/image/tasks/main.yml
index 24c7c821..7baf2b35 100644
--- a/roles/raspios/image/tasks/main.yml
+++ b/roles/raspios/image/tasks/main.yml
@@ -20,63 +20,94 @@
path: "{{ raspios_output_dir }}"
state: directory
- - name: Create temporary build directory
- tempfile:
- state: directory
- register: tmpdir
-
- name: extract image
decompress:
src: "{{ raspios_download_dir }}/{{ raspios_download_image_base_name }}"
- dest: "{{ tmpdir.path }}"
- register: raspios_image_extract_result
+ dest: "{{ raspios_output_dir }}"
+ force: yes
+ register: raspios_image_extract
- set_fact:
- raspios_output_image_base_name: "{{ raspios_image_extract_result.files | first | basename }}"
+ raspios_output_image_base_name: "{{ raspios_image_extract.files | first | basename }}"
- name: read partition layout from image
- command: "sfdisk -q -r -J '{{ tmpdir.path }}/{{ raspios_output_image_base_name }}'"
- register: sfdisk_result
+ command: "sfdisk -q -r -J '{{ raspios_output_dir }}/{{ raspios_output_image_base_name }}'"
+ register: raspios_image_sfdisk
+
+ - set_fact:
+ raspios_image_partitions: "{{ (raspios_image_sfdisk.stdout | from_json)['partitiontable']['partitions'] }}"
+
+ - name: bind loop device for boot partition
+ command: "udisksctl loop-setup --no-user-interaction -o {{ raspios_image_partitions[0].start * 512 }} -s {{ raspios_image_partitions[0].size * 512 }} -f '{{ raspios_output_dir }}/{{ raspios_output_image_base_name }}'"
+ register: raspios_image_loop_setup
+
+ - set_fact:
+ raspios_image_loop_device: "{{ raspios_image_loop_setup.stdout | regex_search('as (/dev/loop[0-9]+)\\.$', '\\1') | first }}"
- - debug:
- var: sfdisk_result.stdout | from_json
+ - name: mount boot partition
+ command: "udisksctl mount --no-user-interaction -b '{{ raspios_image_loop_device }}'"
+ register: raspios_image_mount
- ## TODO:
- # udisksctl loop-setup -o {{ partitions[1].start * 512 }} -s {{ partitions[1].start * 512 }} -f '{{ tmpdir.path }}/{{ raspios_download_image_base_name }}.img'
- # udisksctl mount -b /dev/loop???
- #
- # do customizations.... (needs root?)
+ - set_fact:
+ raspios_image_mount_point: "{{ raspios_image_mount.stdout | regex_search('at (/media/.+)\\.$', '\\1') | first }}"
+
+ - name: edit boot/config.txt
+ when: raspios_boot_config is defined
+ loop: "{{ raspios_boot_config }}"
+ loop_control:
+ label: "{{ item.line }}"
+ lineinfile:
+ path: "{{ raspios_image_mount_point }}/config.txt"
+ regexp: "{{ item.regexp }}"
+ line: "{{ item.line }}"
+
+ - name: install firstrun.sh script
+ template:
+ src: firstrun.sh.j2
+ dest: "{{ raspios_image_mount_point }}/firstrun.sh"
+ mode: 0755
+
+ - name: Generate authorized_keys file
+ authorized_key:
+ user: root
+ manage_dir: no
+ path: "{{ raspios_image_mount_point }}/firstrun.authorized_keys"
+ key: "{{ ssh_keys_root | join('\n') }}"
- - name: copy newly built raspios image
- copy:
- src: "{{ tmpdir.path }}/{{ raspios_output_image_base_name }}"
- dest: "{{ raspios_output_dir }}/{{ raspios_output_image_base_name }}"
+ - name: install firstrun.sh script
+ template:
+ src: firstrun.sh.j2
+ dest: "{{ raspios_image_mount_point }}/firstrun.sh"
+ mode: 0755
- - name: set output image names
- set_fact:
- output_images:
- - "{{ (raspios_output_dir, raspios_output_image_base_name) | path_join | realpath }}"
+ - name: edit boot/cmdline.txt
+ lineinfile:
+ path: "{{ raspios_image_mount_point }}/cmdline.txt"
+ regexp: '^(.*)( systemd.run=/boot/firstrun.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target)?(.*?)$'
+ backrefs: yes
+ line: '\1 systemd.run=/boot/firstrun.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target \3'
always:
- - name: save stdout build-log to output directory
- when: raspios_build is defined
- copy:
- content: "{{ raspios_build.stdout }}\n"
- dest: "{{ raspios_output_dir }}/build-stdout.log"
-
- - name: save stderr build-log to output directory
- when: raspios_build is defined
- copy:
- content: "{{ raspios_build.stderr }}\n"
- dest: "{{ raspios_output_dir }}/build-stderr.log"
-
- - name: delete the temporary build directory
- when: not raspios_keep_temporary_build_dir
- file:
- path: "{{ tmpdir.path }}"
- state: absent
+ - name: unmount image
+ when:
+ - not raspios_keep_boot_dir_mounted
+ - raspios_image_mount_point is defined
+ - raspios_image_mount_point is mount
+ command: "udisksctl unmount --no-user-interaction -b '{{ raspios_image_loop_device }}'"
+
+ - name: delete loop_device
+ when:
+ - not raspios_keep_boot_dir_mounted
+ - raspios_image_loop_device is defined
+ command: "udisksctl loop-delete --no-user-interaction -b '{{ raspios_image_loop_device }}'"
- name: print temporary build directory information
- when: raspios_keep_temporary_build_dir
+ when:
+ - raspios_keep_boot_dir_mounted
debug:
- msg: "The temporary build directory has not been deleted, the path to the directory is: {{ tmpdir.path }}"
+ msg: "As per request the boot partition of the image is still mounted to: {{ raspios_image_mount_point }}"
+
+- name: set output image names
+ set_fact:
+ output_images:
+ - "{{ (raspios_output_dir, raspios_output_image_base_name) | path_join | realpath }}"