blob: 135d8de1cab44e09139d20ce994ee5f8d2992b95 (
plain)
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
|
- name: Create the target disk image
command: qemu-img create -f raw "{{ vyos_raw_img }}" 1G
- name: Find loopback
shell: losetup -f
register: loopback
- name: Loopback attach
command: "losetup {{ loopback.stdout }} {{ vyos_raw_img }}"
- name: Partition the target drive
parted:
device: "{{ loopback.stdout }}"
state: present
label: msdos
number: 1
part_type: primary
part_start: 0%
part_end: 100%
align: optimal
flags: [boot]
- name: Create a filesystem on root partition
filesystem:
fstype: "{{ ROOT_FSTYPE }}"
device: "{{ loopback.stdout }}"
opts: "-L persistence"
- name: Mount root partition
mount:
name: "{{ WRITE_ROOT }}"
src: "{{ loopback.stdout }}"
fstype: "{{ ROOT_FSTYPE }}"
state: mounted
# ---- Install image from ISO ----
- name: Create {{ WRITE_ROOT }} directories
file:
path: "{{ WRITE_ROOT }}/boot/{{ version_string.stdout }}/rw"
state: directory
register: RW_DIR
- name: Create the work directory
file:
path: "{{ WRITE_ROOT }}/boot/{{ version_string.stdout }}/work/work"
state: directory
- name: Copy squashfs image from ISO to root partition
command: cp -p {{ SQUASHFS_IMAGE }} {{ WRITE_ROOT }}/boot/{{ version_string.stdout }}/{{ version_string.stdout }}.squashfs
args:
creates: "{{ WRITE_ROOT }}/boot/{{ version_string.stdout }}/{{ version_string.stdout }}.squashfs"
- name: Copy boot files (kernel and initrd images) from ISO to root partition
shell: find {{ CD_SQUASH_ROOT }}/boot -maxdepth 1 \( -type f -o -type l \) -print -exec cp -dp {} {{ WRITE_ROOT }}/boot/{{ version_string.stdout }}/ \;
args:
creates: "{{ WRITE_ROOT }}/boot/{{ version_string.stdout }}/vmlinuz"
- name: Mount squashfs image from root partition
mount:
name: "{{ READ_ROOT }}"
src: "{{ WRITE_ROOT }}/boot/{{ version_string.stdout }}/{{ version_string.stdout }}.squashfs"
fstype: squashfs
opts: loop,ro
state: mounted
- name: Set up union root for post installation tasks
mount:
name: "{{ INSTALL_ROOT }}"
src: none
fstype: aufs
opts: "noatime,dirs={{ RW_DIR.path }}=rw:{{ READ_ROOT }}=rr"
state: mounted
# ---- Post image installation tasks ----
## ---- VyOS configuration ----
- name: Make sure that config partition marker exists
file:
path: "{{ INSTALL_ROOT }}/opt/vyatta/etc/config/.vyatta_config"
state: touch
- name: Copy the default config for QEMU to the installed image
copy:
src: files/config.boot
dest: "{{ INSTALL_ROOT }}/opt/vyatta/etc/config/config.boot"
mode: 0755
## ---- Install GRUB boot loader ----
- name: Create GRUB directory
file:
path: "{{ WRITE_ROOT }}/boot/grub"
state: directory
# It is necessary to mount and bind /dev, /proc, /sys and /boot in order to execute grub-install
# and install GRUB correctly within the {{ volume_drive }} using chroot
# XXX: ansible mount module requires fstype so it cannot be used for binding an already
# mounted location, we get to use mount directly at least for /boot
- name: Mount and bind /dev /proc /sys and {{ WRITE_ROOT }}/boot to {{ INSTALL_ROOT }}
shell: mount --bind /dev {{ INSTALL_ROOT }}/dev &&
mount --bind /proc {{ INSTALL_ROOT }}/proc &&
mount --bind /sys {{ INSTALL_ROOT }}/sys &&
mount --bind {{ WRITE_ROOT }} {{ INSTALL_ROOT }}/boot
args:
warn: no
- name: Install GRUB in the boot sector of {{ loopback.stdout }}
command: chroot {{ INSTALL_ROOT }} grub-install --no-floppy --root-directory=/boot {{ loopback.stdout }} --force
args:
creates: "{{ INSTALL_ROOT }}/boot/grub/grubenv"
- name: Configure GRUB
template:
src: templates/boot/grub/grub.cfg.j2
dest: "{{ WRITE_ROOT }}/boot/grub/grub.cfg"
mode: 0644
- name: Create the persistence config
copy:
src: files/persistence.conf
dest: "{{ WRITE_ROOT }}/persistence.conf"
mode: 0644
|