mirror of
https://github.com/linuxboot/heads.git
synced 2024-12-26 08:01:06 +00:00
82 lines
1.8 KiB
Plaintext
82 lines
1.8 KiB
Plaintext
|
#!/bin/sh
|
||
|
# Update the /boot partition signatures
|
||
|
set -o pipefail
|
||
|
. /etc/functions
|
||
|
|
||
|
XEN="$1"
|
||
|
KERNEL="$2"
|
||
|
INITRD="$3"
|
||
|
BOOT_HASHES="/boot/boot.hashes"
|
||
|
|
||
|
if [ -z "$XEN" -o -z "$KERNEL" -o -z "$INITRD" ]; then
|
||
|
die "Usage: $0 /boot/xen... /boot/vmlinuz... /boot/initramfs..."
|
||
|
fi
|
||
|
|
||
|
# setup the USB so we can reach the GPG card
|
||
|
if ! lsmod | grep -q ehci_hcd; then
|
||
|
insmod /lib/modules/ehci-hcd.ko \
|
||
|
|| die "ehci_hcd: module load failed"
|
||
|
fi
|
||
|
if ! lsmod | grep -q ehci_pci; then
|
||
|
insmod /lib/modules/ehci-pci.ko \
|
||
|
|| die "ehci_pci: module load failed"
|
||
|
fi
|
||
|
if ! lsmod | grep -q xhci_hcd; then
|
||
|
insmod /lib/modules/xhci-hcd.ko \
|
||
|
|| die "ehci_hcd: module load failed"
|
||
|
fi
|
||
|
if ! lsmod | grep -q xhci_pci; then
|
||
|
insmod /lib/modules/xhci-pci.ko \
|
||
|
|| die "ehci_pci: module load failed"
|
||
|
sleep 2
|
||
|
fi
|
||
|
|
||
|
gpg --card-status \
|
||
|
|| die "gpg card read failed"
|
||
|
|
||
|
# if the /boot.hashes file already exists, read the TPM counter ID
|
||
|
# from it.
|
||
|
if [ -r "$BOOT_HASHES" ]; then
|
||
|
TPM_COUNTER=`grep counter- "$BOOT_HASHES" | cut -d- -f2`
|
||
|
else
|
||
|
warn "$BOOT_HASHES does not exist; creating new TPM counter"
|
||
|
read -s -p "TPM Owner password: " tpm_password
|
||
|
echo
|
||
|
tpm counter_create \
|
||
|
-pwdo "$tpm_password" \
|
||
|
-pwdc '' \
|
||
|
-la 3135106223 \
|
||
|
| tee /tmp/counter \
|
||
|
|| die "Unable to create TPM counter"
|
||
|
TPM_COUNTER=`cut -d: -f1 < /tmp/counter`
|
||
|
fi
|
||
|
|
||
|
if [ -z "$TPM_COUNTER" ]; then
|
||
|
die "$BOOT_HASHES: TPM Counter not found?"
|
||
|
fi
|
||
|
|
||
|
mount -o rw,remount /boot \
|
||
|
|| die "Could not remount /boot"
|
||
|
|
||
|
tpm counter_increment -ix "$TPM_COUNTER" -pwdc '' \
|
||
|
| tee /tmp/counter-$TPM_COUNTER \
|
||
|
|| die "Counter increment failed"
|
||
|
|
||
|
sha256sum \
|
||
|
"$XEN" \
|
||
|
"$KERNEL" \
|
||
|
"$INITRD" \
|
||
|
"/tmp/counter-$TPM_COUNTER" \
|
||
|
| tee "$BOOT_HASHES"
|
||
|
|
||
|
for tries in 1 2 3; do
|
||
|
if gpg --detach-sign -a "$BOOT_HASHES"; then
|
||
|
mount -o ro,remount /boot
|
||
|
exit 0
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
warn "$BOOT_HASHES: Unable to sign boot hashes"
|
||
|
mount -o ro,remount /boot
|
||
|
exit 1
|