summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2020-10-10 22:02:09 -0400
committerAndrew Cady <d@jerkface.net>2020-10-10 22:02:09 -0400
commitdc47371b7329aeda490142d8a42e0cc183f81ed6 (patch)
tree2a63b686985c4247faead22244d1b6629980d188
parent66b5173003d6c9c4bc205f71c987828ec546d239 (diff)
i think it works
-rw-r--r--.gitignore2
-rwxr-xr-xsrc/parted-usb.sh111
2 files changed, 50 insertions, 63 deletions
diff --git a/.gitignore b/.gitignore
index 8649537..c04983b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -55,3 +55,5 @@ apt-get-update-stamp
55*.btrfs.verity.log.asc 55*.btrfs.verity.log.asc
56*.btrfs.verity.log.sig 56*.btrfs.verity.log.sig
57/rootfs/*.btrfs.tmp.* 57/rootfs/*.btrfs.tmp.*
58*.img
59*.tmp
diff --git a/src/parted-usb.sh b/src/parted-usb.sh
index 8c3c048..c7040c8 100755
--- a/src/parted-usb.sh
+++ b/src/parted-usb.sh
@@ -51,21 +51,6 @@ partition_target()
51 51
52make_target_bootable() 52make_target_bootable()
53{ 53{
54 if [ -b "$target" ]
55 then
56 dev=$target
57 part=$target
58 mnt=/mnt/${target#/dev/}
59 else
60 losetup -f "$target"
61 dev=$(losetup -j "$target" -O NAME --noheadings)
62
63 kpartx -vasas "$dev"
64 part=/dev/mapper/${dev##*/}p
65
66 mnt=$target.mnt
67 fi
68
69 mkfs.btrfs -f --mixed "$part"2 54 mkfs.btrfs -f --mixed "$part"2
70 mkdir -p "$mnt" 55 mkdir -p "$mnt"
71 mount "$part"2 "$mnt" 56 mount "$part"2 "$mnt"
@@ -77,39 +62,39 @@ make_target_bootable()
77 sync 62 sync
78} 63}
79 64
80release_target_kernel_resources() 65acquire_target_block_devices()
81{ 66{
82 umount "$mnt"
83 case "$dev" in
84 /dev/loop*)
85 kpartx -d "$dev"
86 losetup -d "$dev"
87 ;;
88 esac
89}
90
91with_target()
92{
93 local mnt dev target="$1"
94 shift
95 if [ -b "$target" ] 67 if [ -b "$target" ]
96 then 68 then
69 dev=$target
70 part=$target
97 mnt=/mnt/${target#/dev/} 71 mnt=/mnt/${target#/dev/}
98 dev=${target}2
99 else 72 else
100 losetup -f "$target" -o $(MiB $start_keys) 73 trap release_target_block_devices EXIT
74 losetup -f "$target"
101 dev=$(losetup -j "$target" -O NAME --noheadings) 75 dev=$(losetup -j "$target" -O NAME --noheadings)
76
77 kpartx -vasas "$dev"
78 part=/dev/mapper/${dev##*/}p
79
102 mnt=$target.mnt 80 mnt=$target.mnt
103 fi 81 fi
82}
104 83
105 mkdir -p "$mnt" 84release_target_block_devices()
106 mount "$dev" "$mnt" 85{
107 "$@" 86 (
108 umount "$mnt" 87 set +e
109 88 [ -z "$mnt" ] || ! mountpoint "$mnt" || umount "$mnt"
110 case "$dev" in 89 case "$dev" in
111 /dev/loop*) losetup -d "$dev" ;; 90 /dev/loop*)
112 esac 91 kpartx -d "$dev"
92 losetup -d "$dev"
93 ;;
94 esac
95 true
96 )
97 unset mnt dev
113} 98}
114 99
115add_keys() 100add_keys()
@@ -117,9 +102,9 @@ add_keys()
117 rsync -a --info=STATS "$GPG_INPUT_DIR"/ "$mnt"/gnupghome/ 102 rsync -a --info=STATS "$GPG_INPUT_DIR"/ "$mnt"/gnupghome/
118} 103}
119 104
120initrd_suffix=.samizdat
121add_initrd() 105add_initrd()
122{ 106{
107 initrd_suffix=.samizdat
123 mkdir -p "$mnt"/linux 108 mkdir -p "$mnt"/linux
124 rsync -aL --info=STATS "${1}vmlinuz${2}" "$mnt"/linux/vmlinuz 109 rsync -aL --info=STATS "${1}vmlinuz${2}" "$mnt"/linux/vmlinuz
125 rsync -aL --info=STATS "${1}initrd.img${2}${initrd_suffix}" "$mnt"/linux/initrd.img 110 rsync -aL --info=STATS "${1}initrd.img${2}${initrd_suffix}" "$mnt"/linux/initrd.img
@@ -133,6 +118,7 @@ add_grub_cfg()
133 118
134individualize() 119individualize()
135{ 120{
121 mountpoint "$mnt" || mount "$part"2 "$mnt"
136 add_keys 122 add_keys
137 add_initrd "$samizdat_linux_dir"/ "${version_suffix}" 123 add_initrd "$samizdat_linux_dir"/ "${version_suffix}"
138 add_grub_cfg 124 add_grub_cfg
@@ -140,14 +126,10 @@ individualize()
140 126
141globalize() 127globalize()
142{ 128{
143 : initialize
144 initialize_target 129 initialize_target
145 : partition
146 partition_target 130 partition_target
147 : install-grub 131 acquire_target_block_devices
148 make_target_bootable 132 make_target_bootable
149 : release
150 release_target_kernel_resources
151} 133}
152 134
153sanity_checks() 135sanity_checks()
@@ -159,12 +141,6 @@ sanity_checks()
159 done 141 done
160} 142}
161 143
162individualize_target_from()
163{
164 cp -T --reflink=always "$1" "$target"
165 with_target "$target" individualize
166}
167
168find_mac() 144find_mac()
169{ 145{
170 start_mac=$1 146 start_mac=$1
@@ -181,7 +157,9 @@ find_mac()
181 157
182boot_vm() 158boot_vm()
183{ 159{
160 boot_drive=$1
184 installer_target=samizdat.disk.img 161 installer_target=samizdat.disk.img
162
185 if [ ! -e "$installer_target" ] 163 if [ ! -e "$installer_target" ]
186 then 164 then
187 fallocate -l 15G "$installer_target" 165 fallocate -l 15G "$installer_target"
@@ -195,7 +173,7 @@ boot_vm()
195 -k en-us \ 173 -k en-us \
196 -net nic,model=virtio,macaddr=$MAC \ 174 -net nic,model=virtio,macaddr=$MAC \
197 -vga qxl \ 175 -vga qxl \
198 -drive file="$final",format=raw \ 176 -drive file="$boot_drive",format=raw \
199 -drive file="$installer_target",format=raw 177 -drive file="$installer_target",format=raw
200} 178}
201 179
@@ -206,31 +184,38 @@ samizdat_linux_dir=/boot
206start_keys=64 # megs 184start_keys=64 # megs
207end_keys=256 # megs 185end_keys=256 # megs
208 186
209if [ "$1" ] 187if [ "$KERNEL_VERSION" ]
210then 188then
211 version_suffix=-$1 189 version_suffix=-$KERNEL_VERSION
212fi 190fi
213 191
214sanity_checks 192sanity_checks
215set -e 193set -e
216 194
217if [ "$TARGET" ] 195if [ "$1" ]
218then 196then
219 target=$TARGET globalize 197 [ -b "$1" ] || die "Not a block device: $1"
220 with_target "$TARGET" individualize 198 target=$1
221 final=$TARGET 199 globalize
222 boot_vm 200 individualize
201 release_target_block_devices
223else 202else
224 template=boot-disk.template.img 203 template=boot-disk.template.img
225 target=boot-disk.img.tmp
226 final=${target%.tmp}
227 if [ ! -e "$template" ] 204 if [ ! -e "$template" ]
228 then 205 then
229 target="$template".tmp globalize 206 target="$template".tmp globalize
207 release_target_block_devices
230 mv -T "$template".tmp "$template" 208 mv -T "$template".tmp "$template"
231 fi 209 fi
210
211 target=boot-disk.img.tmp
232 cp -T --reflink=always "$template" "$target" 212 cp -T --reflink=always "$template" "$target"
233 with_target "$target" individualize 213 acquire_target_block_devices
214 individualize
215 release_target_block_devices
216
217 final=${target%.tmp}
234 mv -T "$target" "$final" 218 mv -T "$target" "$final"
235 boot_vm 219 target=$final
236fi 220fi
221boot_vm "$target"