Skip to content

Major regression in binary size between 0.12 and 0.13 #401

Description

@cyyynthia

It appears the init binary has almost doubled in size between Booster 0.12 and Booster 0.13, which has an impact of 4MB on the final binary. For setups without FDE nor LVM that's double the size of the final binary, and ~30% larger for setups with FDE and LVM.

While I guess it's expected as Booster added a lot of new features in the 0.13 release, Booster is larger than mkinitcpio with just the base hook and NVMe modules, and mkinitcpio's very fast with just that hook too. With FDE, Booster is much faster than mkinitcpio and remains smaller, but only by 4MB (and without advanced systemd's features AFAICT; plus I couldn't unlock my drive with my Yubikey). IOW, it's 4MB smaller but with less mature code and more room for failure)

Note that I use a custom script to extract the generated image; this is because Booster 0.13 broke unpack: it can't extract its own archives because of an issue with symlinks (on my system).

# pacman -S booster
# cat /etc/booster.yaml /etc/crypttab
compression: zstd
extra_files: fido2-assert
vconsole: true
enable_fido2: true
enable_lvm: true
# Configuration for encrypted block devices.
# See crypttab(5) for details.
crypt0    	UUID=333d089e-d99b-46e5-bf77-c4e2124c12f6	none      	tpm2-measure-pcr=yes,tpm2-device=auto,fido2-device=auto,x-initrd.attach
# booster build test.img -f; du test.img
16508	test.img
# rm -rf a; booster ls test.img | while read f; do if [[ ! ( "$f" =~ "->" )]]; then mkdir -p "a/"`dirname $f`; booster cat test.img "$f" > "a/$f"; fi; done
# find a -type f -exec du -a {} + | sort -n -r
<See `Booster 0.13-1 (FDE)` below>
# pacman -U https://archive.archlinux.org/packages/c/booster/booster-0.12-2-x86_64.pkg.tar.zst
# booster build test.img -f; du test.img
12444	test.img
# rm -rf a; booster ls test.img | while read f; do if [[ ! ( "$f" =~ "->" )]]; then mkdir -p "a/"`dirname $f`; booster cat test.img "$f" > "a/$f"; fi; done
# find a -type f -exec du -a {} + | sort -n -r
<See `Booster 0.12-2 (FDE) below>

Without FDE:

# pacman -S booster
# cat /etc/booster.yaml /etc/crypttab
compression: zstd
# Configuration for encrypted block devices.
# See crypttab(5) for details.
# booster build test.img -f; du test.img
8116	test.img
# rm -rf a; booster ls test.img | while read f; do if [[ ! ( "$f" =~ "->" )]]; then mkdir -p "a/"`dirname $f`; booster cat test.img "$f" > "a/$f"; fi; done
# find a -type f -exec du -a {} + | sort -n -r
<See `Booster 0.13-1 (No FDE)` below>
# pacman -U https://archive.archlinux.org/packages/c/booster/booster-0.12-2-x86_64.pkg.tar.zst
# booster build test.img -f; du test.img
4312	test.img
# rm -rf a; booster ls test.img | while read f; do if [[ ! ( "$f" =~ "->" )]]; then mkdir -p "a/"`dirname $f`; booster cat test.img "$f" > "a/$f"; fi; done
# find a -type f -exec du -a {} + | sort -n -r
<See `Booster 0.12-2 (No FDE) below>

tech tip: messing with it somehow broke some stuff in /usr/lib/modules at times; pacman -S linux fixes it

Booster 0.13-1 (FDE)
16168	a/init
5784	a/usr/lib/libcrypto.so.3
3788	a/usr/lib/booster/fido2plugin.so
2392	a/usr/bin/lvm
2136	a/usr/lib/libc.so.6
1304	a/usr/lib/libsystemd.so.0.44.0
1224	a/usr/lib/libm.so.6
920	a/usr/lib/libzstd.so.1.5.7
764	a/usr/lib/libbrotlienc.so.1.2.0
600	a/usr/lib/modules/nvme_core.ko
508	a/usr/lib/modules/dm_mod.ko
448	a/usr/lib/libncursesw.so.6.6
400	a/usr/lib/libdevmapper.so.1.02
360	a/usr/lib/libreadline.so.8.3
320	a/usr/lib/libudev.so.1.7.14
296	a/usr/lib/modules/dm_persistent_data.ko
252	a/usr/lib/modules/dm_thin_pool.ko
252	a/usr/lib/libblkid.so.1.1.0
244	a/usr/lib/ld-linux-x86-64.so.2
244	a/lib64/ld-linux-x86-64.so.2
224	a/usr/lib/modules/fat.ko
224	a/usr/lib/libfido2.so.1.17.0
216	a/usr/lib/modules/dm_cache.ko
180	a/usr/lib/libgcc_s.so.1
176	a/usr/lib/modules/nvme.ko
168	a/usr/lib/libz.so.1.3.1.zlib-ng
156	a/usr/lib/modules/aesni_intel.ko
152	a/usr/lib/modules/dm_snapshot.ko
140	a/usr/lib/libbrotlicommon.so.1.2.0
128	a/usr/lib/modules/dm_crypt.ko
124	a/usr/lib/modules/tee.ko
112	a/usr/lib/modules/dm_bufio.ko
92	a/usr/lib/modules/trusted.ko
72	a/usr/lib/libresolv.so.2
72	a/usr/lib/libcbor.so.0.14.0
64	a/usr/lib/modules/dm_mirror.ko
64	a/usr/lib/modules/dm_cache_smq.ko
56	a/usr/lib/modules/encrypted_keys.ko
56	a/usr/lib/libbrotlidec.so.1.2.0
52	a/usr/lib/modules/nvme_auth.ko
52	a/usr/lib/modules/dm_log.ko
52	a/usr/lib/modules/af_alg.ko
48	a/usr/lib/modules/vfat.ko
48	a/usr/lib/modules/dm_region_hash.ko
44	a/usr/lib/modules/dm_bio_prison.ko
32	a/usr/lib/modules/crypto_user.ko
32	a/usr/lib/libdevmapper-event.so.1.02
28	a/usr/lib/modules/algif_hash.ko
28	a/usr/bin/fido2-assert
24	a/usr/lib/modules/nvme_keyring.ko
24	a/usr/lib/modules/algif_skcipher.ko
24	a/usr/lib/modules/aead.ko
16	a/usr/lib/modules/pkcs8_key_parser.ko
16	a/usr/lib/modules/gf128mul.ko
16	a/usr/lib/modules/asn1_encoder.ko
16	a/usr/lib/libaio.so.1.0.2
8	a/etc/booster.init.yaml
4	a/usr/lib/modules/booster.alias
4	a/etc/crypttab
4	a/console/keymap
0	a/etc/initrd-release
Booster 0.12-2 (FDE)
9404	a/init
5784	a/usr/lib/libcrypto.so.3
2392	a/usr/bin/lvm
2136	a/usr/lib/libc.so.6
1304	a/usr/lib/libsystemd.so.0.44.0
1224	a/usr/lib/libm.so.6
920	a/usr/lib/libzstd.so.1.5.7
764	a/usr/lib/libbrotlienc.so.1.2.0
600	a/usr/lib/modules/nvme_core.ko
508	a/usr/lib/modules/dm_mod.ko
448	a/usr/lib/libncursesw.so.6.6
400	a/usr/lib/libdevmapper.so.1.02
360	a/usr/lib/libreadline.so.8.3
320	a/usr/lib/libudev.so.1.7.14
296	a/usr/lib/modules/dm_persistent_data.ko
252	a/usr/lib/modules/dm_thin_pool.ko
252	a/usr/lib/libblkid.so.1.1.0
244	a/usr/lib/ld-linux-x86-64.so.2
244	a/lib64/ld-linux-x86-64.so.2
224	a/usr/lib/modules/fat.ko
224	a/usr/lib/libfido2.so.1.17.0
216	a/usr/lib/modules/dm_cache.ko
180	a/usr/lib/libgcc_s.so.1
176	a/usr/lib/modules/nvme.ko
168	a/usr/lib/libz.so.1.3.1.zlib-ng
156	a/usr/lib/modules/aesni_intel.ko
152	a/usr/lib/modules/dm_snapshot.ko
140	a/usr/lib/libbrotlicommon.so.1.2.0
128	a/usr/lib/modules/dm_crypt.ko
124	a/usr/lib/modules/tee.ko
112	a/usr/lib/modules/dm_bufio.ko
92	a/usr/lib/modules/trusted.ko
72	a/usr/lib/libcbor.so.0.14.0
64	a/usr/lib/modules/dm_mirror.ko
64	a/usr/lib/modules/dm_cache_smq.ko
56	a/usr/lib/modules/encrypted_keys.ko
56	a/usr/lib/libbrotlidec.so.1.2.0
52	a/usr/lib/modules/nvme_auth.ko
52	a/usr/lib/modules/dm_log.ko
52	a/usr/lib/modules/af_alg.ko
48	a/usr/lib/modules/vfat.ko
48	a/usr/lib/modules/dm_region_hash.ko
44	a/usr/lib/modules/dm_bio_prison.ko
32	a/usr/lib/modules/crypto_user.ko
32	a/usr/lib/libdevmapper-event.so.1.02
28	a/usr/lib/modules/algif_hash.ko
28	a/usr/bin/fido2-assert
24	a/usr/lib/modules/nvme_keyring.ko
24	a/usr/lib/modules/algif_skcipher.ko
24	a/usr/lib/modules/aead.ko
16	a/usr/lib/modules/pkcs8_key_parser.ko
16	a/usr/lib/modules/gf128mul.ko
16	a/usr/lib/modules/asn1_encoder.ko
16	a/usr/lib/libaio.so.1.0.2
8	a/etc/booster.init.yaml
4	a/usr/lib/modules/booster.alias
4	a/console/keymap
0	a/etc/initrd-release
Booster 0.13-1 (No FDE)
16168	a/init
2136	a/usr/lib/libc.so.6
600	a/usr/lib/modules/nvme_core.ko
508	a/usr/lib/modules/dm_mod.ko
244	a/usr/lib/ld-linux-x86-64.so.2
244	a/lib64/ld-linux-x86-64.so.2
224	a/usr/lib/modules/fat.ko
176	a/usr/lib/modules/nvme.ko
156	a/usr/lib/modules/aesni_intel.ko
128	a/usr/lib/modules/dm_crypt.ko
124	a/usr/lib/modules/tee.ko
92	a/usr/lib/modules/trusted.ko
72	a/usr/lib/libresolv.so.2
56	a/usr/lib/modules/encrypted_keys.ko
52	a/usr/lib/modules/nvme_auth.ko
52	a/usr/lib/modules/af_alg.ko
48	a/usr/lib/modules/vfat.ko
32	a/usr/lib/modules/crypto_user.ko
28	a/usr/lib/modules/algif_hash.ko
24	a/usr/lib/modules/nvme_keyring.ko
24	a/usr/lib/modules/algif_skcipher.ko
24	a/usr/lib/modules/aead.ko
16	a/usr/lib/modules/pkcs8_key_parser.ko
16	a/usr/lib/modules/gf128mul.ko
16	a/usr/lib/modules/asn1_encoder.ko
8	a/etc/booster.init.yaml
4	a/usr/lib/modules/booster.alias
0	a/etc/initrd-release
Booster 0.12-2 (No FDE)
9404	a/init
600	a/usr/lib/modules/nvme_core.ko
508	a/usr/lib/modules/dm_mod.ko
224	a/usr/lib/modules/fat.ko
176	a/usr/lib/modules/nvme.ko
156	a/usr/lib/modules/aesni_intel.ko
128	a/usr/lib/modules/dm_crypt.ko
124	a/usr/lib/modules/tee.ko
92	a/usr/lib/modules/trusted.ko
56	a/usr/lib/modules/encrypted_keys.ko
52	a/usr/lib/modules/nvme_auth.ko
52	a/usr/lib/modules/af_alg.ko
48	a/usr/lib/modules/vfat.ko
32	a/usr/lib/modules/crypto_user.ko
28	a/usr/lib/modules/algif_hash.ko
24	a/usr/lib/modules/nvme_keyring.ko
24	a/usr/lib/modules/algif_skcipher.ko
24	a/usr/lib/modules/aead.ko
16	a/usr/lib/modules/pkcs8_key_parser.ko
16	a/usr/lib/modules/gf128mul.ko
16	a/usr/lib/modules/asn1_encoder.ko
8	a/etc/booster.init.yaml
4	a/usr/lib/modules/booster.alias
0	a/etc/initrd-release

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions