#!/bin/bash build() { set +e local mod pub_key map add_module 'dm-crypt' 'dm-integrity' 'hid-generic?' if [[ -n "$CRYPTO_MODULES" ]]; then for mod in $CRYPTO_MODULES; do add_module "$mod" done else add_all_modules '/crypto/' fi add_binary 'cryptsetup' map add_udev_rule \ '10-dm.rules' \ '13-dm-disk.rules' \ '95-dm-notify.rules' \ '/usr/lib/initcpio/udev/11-dm-initramfs.rules' # cryptsetup calls pthread_create(), which dlopen()s libgcc_s.so.1 add_binary '/usr/lib/libgcc_s.so.1' # cryptsetup loads the legacy provider which is required for whirlpool add_binary '/usr/lib/ossl-modules/legacy.so' # above is from encrypt hook, below is for gpg if [ -d $BUILDROOT/etc/initcpio/gpg ]; then echo "WARNING! /etc/initcpio/gpg exists in initramfs buildroot. Huh?" rm -rf "$BUILDROOT/etc/initcpio/gpg" fi mkdir -p $BUILDROOT/etc/initcpio/gpg chmod 0700 $BUILDROOT/etc/initcpio/gpg add_binary "tr" add_binary "dmsetup" add_binary "gpg" add_binary "gpg-agent" add_binary "gpg-connect-agent" add_binary "/usr/lib/gnupg/scdaemon" add_file "/root/disk.bin.gpg" pub_key="/root/disk.pub.key" if [[ ! -f "$pub_key" ]]; then error "file not found: '%s'" "$pub_key" return 1 fi gpg --homedir "$BUILDROOT/etc/initcpio/gpg" --import "$pub_key" rm -f "$BUILDROOT/etc/initcpio/gpg/S.gpg-agent"* add_runscript } help() { cat <