summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2020-07-20 23:06:29 +0200
committerChristian Pointner <equinox@spreadspace.org>2020-07-20 23:06:29 +0200
commitbd2e6204909d60ae9ea5c13794d1ad0b8edb2da6 (patch)
tree4ef212f5baaeb810ac03b74cbf8cdbc8fb3c7bb8
parentriot is now called element (diff)
parentdebian installer fetch: add support for mini.iso download (diff)
Merge branch 'topic/installer-again'
-rw-r--r--roles/installer/debian/fetch/filter_plugins/main.py16
-rw-r--r--roles/installer/debian/fetch/tasks/main.yml29
-rw-r--r--roles/installer/debian/fetch/tasks/verify-debian.yml26
-rw-r--r--roles/installer/debian/fetch/tasks/verify-ubuntu.yml21
-rw-r--r--roles/installer/debian/fetch/vars/main.yml18
-rw-r--r--roles/installer/debian/preseed/defaults/main.yml2
-rw-r--r--roles/installer/debian/preseed/tasks/main.yml8
-rw-r--r--roles/installer/debian/usb/tasks/main.yml48
-rw-r--r--roles/vm/guest/define/templates/libvirt-domain.xml.j24
-rw-r--r--roles/vm/guest/install/tasks/installer-debian.yml11
10 files changed, 90 insertions, 93 deletions
diff --git a/roles/installer/debian/fetch/filter_plugins/main.py b/roles/installer/debian/fetch/filter_plugins/main.py
index 298e7efd..947db2eb 100644
--- a/roles/installer/debian/fetch/filter_plugins/main.py
+++ b/roles/installer/debian/fetch/filter_plugins/main.py
@@ -4,6 +4,19 @@ __metaclass__ = type
from ansible import errors
+def di_dists_path(data):
+ try:
+ if data[0] != 'ubuntu':
+ return data[1]
+
+ if data[1] in ['xenial']:
+ return data[1]+'-updates'
+
+ return data[1]
+ except Exception as e:
+ raise errors.AnsibleFilterError("di_dists_path(): %s" % str(e))
+
+
def di_images_path(data):
try:
if data[0] != 'ubuntu':
@@ -14,12 +27,13 @@ def di_images_path(data):
return 'legacy-images'
except Exception as e:
- raise errors.AnsibleFilterError("mountpoint_exists(): %s" % str(e))
+ raise errors.AnsibleFilterError("di_images_path(): %s" % str(e))
class FilterModule(object):
filter_map = {
+ 'di_dists_path': di_dists_path,
'di_images_path': di_images_path,
}
diff --git a/roles/installer/debian/fetch/tasks/main.yml b/roles/installer/debian/fetch/tasks/main.yml
index dc87655f..0e756411 100644
--- a/roles/installer/debian/fetch/tasks/main.yml
+++ b/roles/installer/debian/fetch/tasks/main.yml
@@ -1,34 +1,35 @@
---
- name: prepare directories for installer files
file:
- name: "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}"
+ name: "{{ debian_installer_target_dir }}"
state: directory
- name: download and verify installer files
block:
- - name: fetch and verify installer checksums
+ - name: fetch and verify installer checksum file
include_tasks: "verify-{{ install_distro }}.yml"
- - name: download installer kernel image
- get_url:
- url: "{{ debian_installer_base_url }}/{{ debian_installer_variant_path }}/{{ debian_installer_variant_kernal_image_name }}"
- dest: "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/{{ debian_installer_variant_kernal_image_name }}"
- checksum: "{{ debian_installer_kernel_checksum }}"
- force: "{{ debian_installer_force_download }}"
- mode: 0644
+ - name: extract file hashes from SHA256SUMS
+ loop: "{{ debian_installer_variant_files }}"
+ command: grep -E "^[0-9a-z]{64}\s+(./)?{{ debian_installer_variant_path }}/{{ item }}$" "{{ debian_installer_target_dir }}/SHA256SUMS"
+ changed_when: false
+ register: debian_installer_sha256sums
- - name: download installer initrd.gz
+ - name: download installer files
+ loop: "{{ debian_installer_sha256sums.results }}"
+ loop_control:
+ label: "{{ item.item }}"
get_url:
- url: "{{ debian_installer_base_url }}/{{ debian_installer_variant_path }}/initrd.gz"
- dest: "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/initrd.gz"
- checksum: "{{ debian_installer_initrd_checksum }}"
+ url: "{{ debian_installer_base_url }}/{{ debian_installer_variant_path }}/{{ item.item }}"
+ dest: "{{ debian_installer_target_dir }}/{{ item.item }}"
+ checksum: "sha256:{{ item.stdout.split(' ') | first }}"
force: "{{ debian_installer_force_download }}"
mode: 0644
rescue:
- name: remove all downloaded files
file:
- name: "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}"
+ name: "{{ debian_installer_target_dir }}"
state: absent
- fail:
diff --git a/roles/installer/debian/fetch/tasks/verify-debian.yml b/roles/installer/debian/fetch/tasks/verify-debian.yml
index cfd6e53e..9aef7962 100644
--- a/roles/installer/debian/fetch/tasks/verify-debian.yml
+++ b/roles/installer/debian/fetch/tasks/verify-debian.yml
@@ -5,14 +5,14 @@
- Release.gpg
get_url:
url: "{{ debian_installer_base_url | dirname | dirname | dirname | dirname }}/{{ item }}"
- dest: "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/{{ item }}"
+ dest: "{{ debian_installer_target_dir }}/{{ item }}"
+ force: "{{ debian_installer_force_download }}"
- name: verfiy signature of Release file
command: >-
gpg --no-options --trust-model always --no-default-keyring --secret-keyring /dev/null
--keyring "{{ installer_keyrings_path | default(installer_base_path+'/keyrings') }}/debian-{{ install_codename }}.gpg"
- --verify "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/Release.gpg"
- "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/Release"
+ --verify "{{ debian_installer_target_dir }}/Release.gpg" "{{ debian_installer_target_dir }}/Release"
changed_when: False
register: debian_installer_gpg_result
@@ -20,27 +20,13 @@
var: debian_installer_gpg_result.stderr_lines
- name: extract checksum file hash from Release file
- command: grep -E "^ [0-9a-z]{64} .* main/installer-{{ debian_installer_arch }}/current/{{ [debian_installer_distro, debian_installer_codename] | di_images_path }}/SHA256SUMS$" "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/Release"
+ command: grep -E "^ [0-9a-z]{64} .* main/installer-{{ debian_installer_arch }}/current/{{ [debian_installer_distro, debian_installer_codename] | di_images_path }}/SHA256SUMS$" "{{ debian_installer_target_dir }}/Release"
changed_when: false
register: debian_installer_release_sha256
- name: download SHA256SUMS
get_url:
url: "{{ debian_installer_base_url }}/SHA256SUMS"
- dest: "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/SHA256SUMS"
+ dest: "{{ debian_installer_target_dir }}/SHA256SUMS"
checksum: "sha256:{{ (debian_installer_release_sha256.stdout | trim).split(' ') | first }}"
-
-- name: extract kernel image hash from SHA256SUMS
- command: grep -E "^[0-9a-z]{64}\s+(./)?{{ debian_installer_variant_path }}/{{ debian_installer_variant_kernal_image_name }}$" "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/SHA256SUMS"
- changed_when: false
- register: debian_installer_sha256sums_kernel
-
-- name: extract inital ramdisk hash from SHA256SUMS
- command: grep -E "^[0-9a-z]{64}\s+(./)?{{ debian_installer_variant_path }}/initrd.gz$" "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/SHA256SUMS"
- changed_when: false
- register: debian_installer_sha256sums_initrd
-
-- name: set checksum variables
- set_fact:
- debian_installer_kernel_checksum: "sha256:{{ debian_installer_sha256sums_kernel.stdout.split(' ') | first }}"
- debian_installer_initrd_checksum: "sha256:{{ debian_installer_sha256sums_initrd.stdout.split(' ') | first }}"
+ force: "{{ debian_installer_force_download }}"
diff --git a/roles/installer/debian/fetch/tasks/verify-ubuntu.yml b/roles/installer/debian/fetch/tasks/verify-ubuntu.yml
index e7cff3ae..6c6500ea 100644
--- a/roles/installer/debian/fetch/tasks/verify-ubuntu.yml
+++ b/roles/installer/debian/fetch/tasks/verify-ubuntu.yml
@@ -5,31 +5,16 @@
- SHA256SUMS.gpg
get_url:
url: "{{ debian_installer_base_url }}/{{ item }}"
- dest: "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/{{ item }}"
+ dest: "{{ debian_installer_target_dir }}/{{ item }}"
+ force: "{{ debian_installer_force_download }}"
- name: verfiy signature of SHA256SUMS.gpg file
command: >-
gpg --no-options --trust-model always --no-default-keyring --secret-keyring /dev/null
--keyring "{{ installer_keyrings_path | default(installer_base_path+'/keyrings') }}/ubuntu-archive.gpg"
- --verify "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/SHA256SUMS.gpg"
- "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/SHA256SUMS"
+ --verify "{{ debian_installer_target_dir }}/SHA256SUMS.gpg" "{{ debian_installer_target_dir }}/SHA256SUMS"
changed_when: False
register: debian_installer_gpg_result
- debug:
var: debian_installer_gpg_result.stderr_lines
-
-- name: extract kernel image hash from SHA256SUMS
- command: grep -E "^[0-9a-z]{64}\s+(./)?{{ debian_installer_variant_path }}/{{ debian_installer_variant_kernal_image_name }}$" "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/SHA256SUMS"
- changed_when: false
- register: debian_installer_sha256sums_kernel
-
-- name: extract inital ramdisk hash from SHA256SUMS
- command: grep -E "^[0-9a-z]{64}\s+(./)?{{ debian_installer_variant_path }}/initrd.gz$" "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}/SHA256SUMS"
- changed_when: false
- register: debian_installer_sha256sums_initrd
-
-- name: set checksum variables
- set_fact:
- debian_installer_kernel_checksum: "sha256:{{ debian_installer_sha256sums_kernel.stdout.split(' ') | first }}"
- debian_installer_initrd_checksum: "sha256:{{ debian_installer_sha256sums_initrd.stdout.split(' ') | first }}"
diff --git a/roles/installer/debian/fetch/vars/main.yml b/roles/installer/debian/fetch/vars/main.yml
index 404b571a..989fc305 100644
--- a/roles/installer/debian/fetch/vars/main.yml
+++ b/roles/installer/debian/fetch/vars/main.yml
@@ -1,13 +1,21 @@
---
-debian_installer_base_url: "{{ debian_installer_url[debian_installer_distro] }}/dists/{{ debian_installer_codename }}/main/installer-{{ debian_installer_arch }}/current/{{ [debian_installer_distro, debian_installer_codename] | di_images_path }}"
+debian_installer_base_url: "{{ debian_installer_url[debian_installer_distro] }}/dists/{{ [debian_installer_distro, debian_installer_codename] | di_dists_path }}/main/installer-{{ debian_installer_arch }}/current/{{ [debian_installer_distro, debian_installer_codename] | di_images_path }}"
_debian_installer_variant_path_:
netboot: "netboot/{{ debian_installer_distro }}-installer/{{ debian_installer_arch }}"
hd-media: "hd-media"
+ mini-iso: "netboot"
-_debian_installer_variant_kernel_image_name_:
- netboot: "linux"
- hd-media: "vmlinuz"
+_debian_installer_variant_files_:
+ netboot:
+ - linux
+ - initrd.gz
+ hd-media:
+ - vmlinuz
+ - initrd.gz
+ mini-iso:
+ - mini.iso
debian_installer_variant_path: "{{ _debian_installer_variant_path_[debian_installer_variant] }}"
-debian_installer_variant_kernal_image_name: "{{ _debian_installer_variant_kernel_image_name_[debian_installer_variant] }}"
+debian_installer_variant_files: "{{ _debian_installer_variant_files_[debian_installer_variant] }}"
+debian_installer_target_dir: "{{ installer_base_path }}/{{ debian_installer_distro }}-{{ debian_installer_codename }}/{{ debian_installer_arch }}-{{ debian_installer_variant }}"
diff --git a/roles/installer/debian/preseed/defaults/main.yml b/roles/installer/debian/preseed/defaults/main.yml
index b5aad35c..078b5448 100644
--- a/roles/installer/debian/preseed/defaults/main.yml
+++ b/roles/installer/debian/preseed/defaults/main.yml
@@ -1,5 +1,5 @@
---
-# preseed_orig_initrd
+# preseed_initrd
# preseed_tmpdir:
# preseed_force_net_ifnames_policy: path
diff --git a/roles/installer/debian/preseed/tasks/main.yml b/roles/installer/debian/preseed/tasks/main.yml
index 49d08c8b..3c45001f 100644
--- a/roles/installer/debian/preseed/tasks/main.yml
+++ b/roles/installer/debian/preseed/tasks/main.yml
@@ -1,10 +1,4 @@
---
-- name: Copy initramfs into position
- copy:
- remote_src: yes
- src: "{{ preseed_orig_initrd }}"
- dest: "{{ preseed_tmpdir }}/initrd.{{ install_hostname }}.gz"
-
- name: Generate preseed file
template:
src: "preseed_{{ hostvars[install_hostname].preseed_template_name | default(install_distro + '-' + install_codename) }}.cfg.j2"
@@ -42,7 +36,7 @@
NamePolicy={{ preseed_force_net_ifnames_policy }}
- name: Inject files into initramfs
- shell: cpio -H newc -o | gzip -9 >> 'initrd.{{ install_hostname }}.gz'
+ shell: cpio -H newc -o | gzip -9 >> '{{ preseed_initrd }}'
args:
chdir: "{{ preseed_tmpdir }}"
stdin: |
diff --git a/roles/installer/debian/usb/tasks/main.yml b/roles/installer/debian/usb/tasks/main.yml
index 6220b02b..7e603ed6 100644
--- a/roles/installer/debian/usb/tasks/main.yml
+++ b/roles/installer/debian/usb/tasks/main.yml
@@ -11,49 +11,49 @@
that: usb_install_mountpoint.stat.exists
msg: the path to the usb drive does not exist
-- block:
- - name: download installer
- vars:
- debian_installer_distro: "{{ install_distro }}"
- debian_installer_codename: "{{ install_codename }}"
- debian_installer_arch: "{{ install.arch | default('amd64') }}"
- debian_installer_variant: netboot
- run_once: true
- import_role:
- role: installer/debian/fetch
+- name: download installer
+ vars:
+ debian_installer_distro: "{{ install_distro }}"
+ debian_installer_codename: "{{ install_codename }}"
+ debian_installer_arch: "{{ install.arch | default('amd64') }}"
+ debian_installer_variant: netboot
+ run_once: true
+ import_role:
+ role: installer/debian/fetch
- - name: Create temporary workdir
+- block:
+ - name: create temporary workdir
tempfile:
prefix: "usb-install.{{ install_hostname }}."
state: directory
register: tmpdir
- - name: generate pressed file
+ - name: copy the original initramfs to the usb drive
+ copy:
+ src: "{{ debian_installer_target_dir }}/initrd.gz"
+ dest: "{{ usb_install_path }}/initrd.{{ install_hostname }}.gz"
+
+ - name: generate host specific initial ramdisk
vars:
- preseed_orig_initrd: "{{ installer_base_path }}/{{ install_distro }}-{{ install_codename }}/{{ hostvars[install_hostname].install_cooked.arch | default('amd64') }}-netboot/initrd.gz"
+ preseed_initrd: "{{ usb_install_path }}/initrd.{{ install_hostname }}.gz"
preseed_tmpdir: "{{ tmpdir.path }}"
import_role:
name: installer/debian/preseed
- - name: Copy the preseed initramfs to the usb drive
- copy:
- src: "{{ tmpdir.path }}/initrd.{{ install_hostname }}.gz"
- dest: "{{ usb_install_path }}/initrd.{{ install_hostname }}.gz"
-
always:
- - name: Cleanup temporary workdir
+ - name: cleanup temporary workdir
when: tmpdir.path is defined
file:
path: "{{ tmpdir.path }}"
state: absent
-- name: Copy linux kernel image to the USB drive
+- name: copy linux kernel image to the USB drive
run_once: true
copy:
- src: "{{ global_cache_dir }}/debian-installer/{{ install_distro }}-{{ install_codename }}/{{ install.arch | default('amd64') }}-{{ debian_installer_variant }}/linux"
+ src: "{{ debian_installer_target_dir }}/linux"
dest: "{{ usb_install_path }}/"
-- name: Generate syslinux configuration for BIOS boot
+- name: generate syslinux configuration for BIOS boot
run_once: true
vars:
syslinux_base_path: ""
@@ -67,7 +67,7 @@
path: "{{ usb_install_path }}/EFI/boot"
state: directory
-- name: Generate syslinux configuration for UEFI boot
+- name: generate syslinux configuration for UEFI boot
run_once: true
vars:
syslinux_base_path: "../../"
@@ -75,7 +75,7 @@
src: syslinux.cfg.j2
dest: "{{ usb_install_path }}/EFI/boot/syslinux.cfg"
-- name: Make the USB disk bootable
+- name: make the USB disk bootable
pause:
seconds: 0
prompt: |
diff --git a/roles/vm/guest/define/templates/libvirt-domain.xml.j2 b/roles/vm/guest/define/templates/libvirt-domain.xml.j2
index ba0dcd5a..bbca0fea 100644
--- a/roles/vm/guest/define/templates/libvirt-domain.xml.j2
+++ b/roles/vm/guest/define/templates/libvirt-domain.xml.j2
@@ -7,8 +7,8 @@
<type arch='x86_64' machine='pc-0.12'>hvm</type>
{% if vm_define_installer %}
{% if install_distro == 'debian' or install_distro == 'ubuntu' %}
- <kernel>{{ installer_base_path }}/{{ install_distro }}-{{ install_codename }}/{{ hostvars[install_hostname].install_cooked.arch | default('amd64') }}-netboot/linux</kernel>
- <initrd>{{ installer_tmpdir }}/initrd.{{ install_hostname }}.gz</initrd>
+ <kernel>{{ installer_tmpdir }}/linux</kernel>
+ <initrd>{{ installer_tmpdir }}/initrd.gz</initrd>
<cmdline>console=ttyS0,115200n8 DEBCONF_DEBUG=5</cmdline>
<boot dev='hd'/>
{% elif install_distro == 'openbsd' %}
diff --git a/roles/vm/guest/install/tasks/installer-debian.yml b/roles/vm/guest/install/tasks/installer-debian.yml
index 32662f8c..b0bc6e9e 100644
--- a/roles/vm/guest/install/tasks/installer-debian.yml
+++ b/roles/vm/guest/install/tasks/installer-debian.yml
@@ -8,9 +8,18 @@
import_role:
name: installer/debian/fetch
+- name: copy the installer files to the temporary installer directory
+ loop:
+ - linux
+ - initrd.gz
+ copy:
+ remote_src: yes
+ src: "{{ debian_installer_target_dir }}/{{ item }}"
+ dest: "{{ tmpdir.path }}/{{ item }}"
+
- name: generate host specific initial ramdisk
vars:
- preseed_orig_initrd: "{{ installer_base_path }}/{{ install_distro }}-{{ install_codename }}/{{ hostvars[install_hostname].install_cooked.arch | default('amd64') }}-netboot/initrd.gz"
+ preseed_initrd: "{{ tmpdir.path }}/initrd.gz"
preseed_tmpdir: "{{ tmpdir.path }}"
preseed_virtual_machine: yes
preseed_force_net_ifnames_policy: path