blob: 9d325438e7abbcfad9f43c9612944d26b3c338f6 (
plain) (
blame)
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
|
---
- name: "Include distribution vars"
ansible.builtin.include_vars: "{{ ansible_facts['distribution'] | lower }}.yml"
- name: "Ensure install dependencies are installed on live environment"
ansible.builtin.apt:
state: "present"
update_cache: true
pkg:
- "debootstrap"
- "arch-install-scripts"
- "bash"
- name: "Run debootstrap"
ansible.builtin.command:
cmd: "debootstrap
{{ bootstrap_opts }}
{{ bootstrap_distro.name }}
{{ mnt_root_path }}
{{ bootstrap_distro.mirror_url }}"
changed_when: true
- name: "Generate fstab"
ansible.builtin.shell:
cmd: "genfstab -t PARTLABEL {{ mnt_root_path }} > {{ mnt_root_path }}/etc/fstab"
changed_when: true
- name: "Configure apt in chroot"
ansible.builtin.copy:
dest: "{{ item.dest }}"
mode: "0640"
content: "{{ item.content }}"
loop:
- dest: "{{ mnt_root_path }}/etc/apt/preferences.d/ignored-package"
content: "{{ bootstrap_apt_ignored_preferences }}"
- dest: "{{ mnt_root_path }}/etc/apt/sources.list"
content: "{{ bootstrap_apt_sources }}"
- name: "Ensure DNS works in chroot"
# debootstrap seeds /etc/resolv.conf as a symlink to the systemd-resolved stub (127.0.0.53),
# which is broken when /run is a tmpfs (e.g. in Docker/molecule)
ansible.builtin.copy:
src: "/etc/resolv.conf"
dest: "{{ mnt_root_path }}/etc/resolv.conf"
follow: false
force: true
mode: "0644"
- name: "Configure system in chroot"
ansible.builtin.command:
cmd: "arch-chroot {{ mnt_root_path }} {{ item }}"
changed_when: true
loop:
- "apt-get update"
- "apt-get install -y {{ bootstrap_distro.packages | join(' ') }}"
- name: "Replace sudo-rs with sudo in chroot"
ansible.builtin.command:
cmd: "arch-chroot {{ mnt_root_path }} apt-get install -y --allow-remove-essential sudo sudo-rs-"
changed_when: true
- name: "Ensure rEFInd package installed"
ansible.builtin.command:
cmd: "arch-chroot {{ mnt_root_path }} apt-get install -y refind"
changed_when: true
- name: "Install rEFInd to EFI partition"
ansible.builtin.command:
# NOTE: --usedefault installs to EFI/BOOT/ without NVRAM registration
# This ensures consistent install location across refind versions (0.13.x installs to EFI/refind/
# via NVRAM, 0.14.x falls back to EFI/BOOT/ when NVRAM write fails in chroot)
cmd: "arch-chroot {{ mnt_root_path }} refind-install --usedefault {{ partition_boot.dev }}"
changed_when: true
- name: "Configure rEFInd base settings"
ansible.builtin.template:
src: "refind.conf.j2"
dest: "{{ item }}"
mode: "0644"
loop:
- "{{ mnt_boot_path }}/EFI/BOOT/refind.conf"
- "{{ mnt_boot_path }}/EFI/refind/refind.conf"
# NOTE: this is skipped because the docker test doesn't have proper EFI/BOOT directory created
tags: ["molecule-notest"]
- name: "Ensure ubuntu EFI boot directory exists"
ansible.builtin.file:
path: "{{ mnt_boot_path }}/EFI/ubuntu"
state: directory
mode: "0755"
- name: "Copy kernel to EFI partition"
ansible.builtin.copy:
src: "{{ mnt_root_path }}/boot/{{ item }}"
dest: "{{ mnt_boot_path }}/EFI/ubuntu/{{ item }}"
remote_src: true
follow: true
mode: "0644"
loop:
- "vmlinuz"
- "initrd.img"
- name: "Configure Ubuntu boot entries"
ansible.builtin.template:
src: "refind_ubuntu.conf.j2"
dest: "{{ mnt_boot_path }}/EFI/BOOT/ubuntu.conf"
mode: "0644"
# NOTE: this is skipped because the docker test doesn't have proper EFI/BOOT directory created
tags: ["molecule-notest"]
- name: "Ensure kernel post-install hook directory exists"
ansible.builtin.file:
path: "{{ mnt_root_path }}/etc/kernel/postinst.d"
state: directory
mode: "0755"
- name: "Install kernel sync script for EFI partition"
ansible.builtin.copy:
dest: "{{ mnt_root_path }}/etc/kernel/postinst.d/refind-sync-kernel"
mode: "0755"
content: |
#!/bin/sh
mkdir -p /boot/efi/EFI/ubuntu
cp /boot/vmlinuz /boot/efi/EFI/ubuntu/
cp /boot/initrd.img /boot/efi/EFI/ubuntu/
|