diff options
author | Andrew Cady <d@jerkface.net> | 2020-05-13 18:45:37 -0400 |
---|---|---|
committer | Andrew Cady <d@jerkface.net> | 2020-05-13 20:31:11 -0400 |
commit | 3067270c0c60ab10b803cb57f4b170f42913dd9b (patch) | |
tree | bfdf2c188bc35364ff6b50a4daa250bbd8f66c67 | |
parent | de232155d3c54b3ebf67df2016bb809708d4d34e (diff) |
split btrfs filesystem into two seed layers
-rw-r--r-- | .gitignore | 5 | ||||
-rw-r--r-- | Makefile | 72 |
2 files changed, 73 insertions, 4 deletions
@@ -42,3 +42,8 @@ samizdat.iso | |||
42 | TEST_CHILD.*.log | 42 | TEST_CHILD.*.log |
43 | krng-add-entropy | 43 | krng-add-entropy |
44 | reused-child | 44 | reused-child |
45 | gold.iso | ||
46 | patched.iso | ||
47 | rootfs/samizdat.patch.btrfs | ||
48 | rootfs/samizdat.seed.btrfs | ||
49 | rootfs/seed.iso | ||
@@ -166,7 +166,72 @@ isotest-netinst: samizdat.netinst.iso | |||
166 | gpg_iso_path=gnupghome | 166 | gpg_iso_path=gnupghome |
167 | GPG_INPUT_DIR=${samizdat_child_dir}/child.$(shell cat reused-child)/root/.gnupg | 167 | GPG_INPUT_DIR=${samizdat_child_dir}/child.$(shell cat reused-child)/root/.gnupg |
168 | 168 | ||
169 | samizdat.iso: rootfs/samizdat.iso reused-child | 169 | samizdat_btrfs_patch_size=256M |
170 | |||
171 | get_loop_dev="$$(sudo losetup -n -O name -j $@~tmp)" | ||
172 | get_backing_file="$$(sudo losetup -n -O back-file -j $@~tmp)" | ||
173 | get_min_size="$$(btrfs inspect-internal min-dev-size --id 1 $@.mnt | (read b _; echo $$b))" | ||
174 | |||
175 | rootfs/samizdat.seed.btrfs: rootfs/samizdat.btrfs | ||
176 | ifneq ($(shell id -u),0) | ||
177 | sudo make $@ | ||
178 | else | ||
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 $@ | ||
189 | endif | ||
190 | |||
191 | rootfs/samizdat.patch.btrfs: rootfs/samizdat.seed.btrfs | ||
192 | ifneq ($(shell id -u),0) | ||
193 | sudo make $@ | ||
194 | else | ||
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 $@ | ||
211 | endif | ||
212 | |||
213 | samizdat.iso: patched.iso | ||
214 | cp --reflink $< $@ | ||
215 | |||
216 | patched.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 | |||
234 | gold.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 | ||
196 | rootfs/samizdat.iso: rootfs/samizdat.btrfs | 260 | rootfs/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 | ||