initramfs-pgp-encrypt/pgp-encrypt-install
2024-04-06 01:05:01 -04:00

70 lines
1.7 KiB
Bash

#!/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 <<HELPEOF
Plese refer to the help for the regular Arch encrypt hook, and the
docs in initramfs-pgp-encrypt.install for how to set up the PGP keys
HELPEOF
}
# vim: set ft=sh ts=4 sw=4 et: