summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2020-05-13 18:45:37 -0400
committerAndrew Cady <d@jerkface.net>2020-05-13 20:31:11 -0400
commit3067270c0c60ab10b803cb57f4b170f42913dd9b (patch)
treebfdf2c188bc35364ff6b50a4daa250bbd8f66c67
parentde232155d3c54b3ebf67df2016bb809708d4d34e (diff)
split btrfs filesystem into two seed layers
-rw-r--r--.gitignore5
-rw-r--r--Makefile72
2 files changed, 73 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
index 697ef25..70a7dc0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,3 +42,8 @@ samizdat.iso
42TEST_CHILD.*.log 42TEST_CHILD.*.log
43krng-add-entropy 43krng-add-entropy
44reused-child 44reused-child
45gold.iso
46patched.iso
47rootfs/samizdat.patch.btrfs
48rootfs/samizdat.seed.btrfs
49rootfs/seed.iso
diff --git a/Makefile b/Makefile
index c686735..03e748d 100644
--- a/Makefile
+++ b/Makefile
@@ -166,7 +166,72 @@ isotest-netinst: samizdat.netinst.iso
166gpg_iso_path=gnupghome 166gpg_iso_path=gnupghome
167GPG_INPUT_DIR=${samizdat_child_dir}/child.$(shell cat reused-child)/root/.gnupg 167GPG_INPUT_DIR=${samizdat_child_dir}/child.$(shell cat reused-child)/root/.gnupg
168 168
169samizdat.iso: rootfs/samizdat.iso reused-child 169samizdat_btrfs_patch_size=256M
170
171get_loop_dev="$$(sudo losetup -n -O name -j $@~tmp)"
172get_backing_file="$$(sudo losetup -n -O back-file -j $@~tmp)"
173get_min_size="$$(btrfs inspect-internal min-dev-size --id 1 $@.mnt | (read b _; echo $$b))"
174
175rootfs/samizdat.seed.btrfs: rootfs/samizdat.btrfs
176ifneq ($(shell id -u),0)
177 sudo make $@
178else
179 cp --reflink $< $@~tmp
180 btrfstune -f -S0 $@~tmp
181 test -d $@.mnt || mkdir $@.mnt
182 mount -t btrfs -o rw $@~tmp $@.mnt
183 btrfs fi defrag -c -r $@.mnt
184 s=$(get_min_size) && (set -x; btrfs fi resize 1:$$s $@.mnt && truncate -s "$$s" $@~tmp)
185 umount $@.mnt
186 losetup -f $<
187 btrfstune -S1 $@~tmp
188 mv $@~tmp $@
189endif
190
191rootfs/samizdat.patch.btrfs: rootfs/samizdat.seed.btrfs
192ifneq ($(shell id -u),0)
193 sudo make $@
194else
195 rm -f $@~tmp
196 touch $@~tmp
197 fallocate -l $(samizdat_btrfs_patch_size) $@~tmp
198 test -d $@.mnt || mkdir $@.mnt
199 ! mountpoint -q $@.mnt || umount $@.mnt
200 mount -o ro -t btrfs $< $@.mnt
201 a=$(get_loop_dev); [ -z "$$a" ] || losetup -d $$a
202 losetup -f $@~tmp
203 btrfs device add $(get_loop_dev) $@.mnt
204 mount -o rw,remount $@.mnt
205 chroot $@.mnt /bin/sh -c 'echo samizdat > /etc/hostname'
206 chroot $@.mnt bash -i
207 umount $@.mnt
208 losetup -f $<
209 btrfstune -S1 $@~tmp
210 mv $@~tmp $@
211endif
212
213samizdat.iso: patched.iso
214 cp --reflink $< $@
215
216patched.iso: gold.iso rootfs/samizdat.patch.btrfs
217 rm -f $@~tmp
218 cp --reflink $< $@~tmp
219 sudo xorrisofs -iso-level 3 -- \
220 -indev $@~tmp \
221 -outdev $@~tmp \
222 -return_with FAILURE 32 \
223 -pathspecs on \
224 -follow link \
225 -add /rootfs/z00.btrfs=rootfs/samizdat.patch.btrfs -- \
226 -follow default \
227 -as mkisofs -graft-points \
228 -b grub/i386-pc/eltorito.img \
229 -no-emul-boot -boot-info-table \
230 --embedded-boot "${samizdat_grub_efi_dir}"/embedded.img \
231 --protective-msdos-label
232 mv $@~tmp $@
233
234gold.iso: rootfs/seed.iso reused-child
170 sudo grub-efi.sh 235 sudo grub-efi.sh
171 ! grep 'vmlinuz.*nbdroot' -r ${samizdat_grub_efi_dir} 236 ! grep 'vmlinuz.*nbdroot' -r ${samizdat_grub_efi_dir}
172 rm -f $@~tmp 237 rm -f $@~tmp
@@ -175,7 +240,6 @@ samizdat.iso: rootfs/samizdat.iso reused-child
175 -indev $@~tmp \ 240 -indev $@~tmp \
176 -outdev $@~tmp \ 241 -outdev $@~tmp \
177 -return_with FAILURE 32 \ 242 -return_with FAILURE 32 \
178 -volid SamizdatLive \
179 -pathspecs on \ 243 -pathspecs on \
180 -rm_r linux -- \ 244 -rm_r linux -- \
181 -add linux="${samizdat_linux_dir}" -- \ 245 -add linux="${samizdat_linux_dir}" -- \
@@ -193,7 +257,7 @@ samizdat.iso: rootfs/samizdat.iso reused-child
193 --protective-msdos-label 257 --protective-msdos-label
194 mv $@~tmp $@ 258 mv $@~tmp $@
195 259
196rootfs/samizdat.iso: rootfs/samizdat.btrfs 260rootfs/seed.iso: rootfs/samizdat.seed.btrfs
197 rm -f $@~tmp 261 rm -f $@~tmp
198 touch $@~tmp 262 touch $@~tmp
199 fallocate -n -l 10G $@~tmp 263 fallocate -n -l 10G $@~tmp
@@ -204,7 +268,7 @@ rootfs/samizdat.iso: rootfs/samizdat.btrfs
204 -volid SamizdatLive \ 268 -volid SamizdatLive \
205 -pathspecs on \ 269 -pathspecs on \
206 -follow link \ 270 -follow link \
207 -add /rootfs/samizdat.btrfs=/srv/nbd/samizdat.btrfs -- \ 271 -add /rootfs/samizdat.btrfs=$< -- \
208 -follow default 272 -follow default
209 mv $@~tmp $@ 273 mv $@~tmp $@
210 274