![LUKS 加密,无法使用 /etc/crypttab 打开](https://linux22.com/image/787851/LUKS%20%E5%8A%A0%E5%AF%86%EF%BC%8C%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%20%2Fetc%2Fcrypttab%20%E6%89%93%E5%BC%80.png)
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
text
url --url=http://caching-proxy/repos/rhel8/8.5/rhn/base/unstable
repo --name=cache-rhn-base --baseurl=http://caching-proxy/repos/rhel8/8.5/rhn/base/unstable --install
repo --name=cacherhn-appstream --baseurl=http://caching-proxy/repos/rhel8/8.5/rhn/appstream/unstable --install
lang en_US.UTF-8
keyboard us
rootpw simplePass
timezone Etc/UTC --isUtc
#authconfig --enableshadow --passalgo=sha512 (*authconfig deprecated, use authselect instead)
selinux --enforcing
firewall --disabled
bootloader --location=mbr --append="loglevel=7"
clearpart --all --initlabel
part /boot --fstype=xfs --size=512
part pv.01 --grow --size=1
volgroup vg01 pv.01
logvol / --fstype=xfs --name=lvroot --vgname=vg01 --size=4096 --grow --encrypted --passphrase=SecretPassword
%packages
@core
#osversion: rhel8
# Default package to be removed... eg:
-firewalld
#-omit random pkgs
# start packages
clevis
clevis-dracut
clevis-luks
dracut-config-generic # we need this image to be portable
dracut-norescue # rescue mode isn't useful here
## bunch of pkgs, omitted
%end
%post --interpreter=/bin/bash
INITIAL_LUKS_PWFILE=/boot/temp-keyfile
echo SecretPassword > ${INITIAL_LUKS_PWFILE}
udevadm settle
#echo "/dev/mapper/vg01-lvroot / xfs defaults 0 0" >> /etc/fstab
blkid /dev/mapper/vg01-lvroot -s UUID -o value > /tmp/luks-uuid
echo "vg01-lvroot UUID=$(cat /tmp/luks-uuid) ${INITIAL_LUKS_PWFILE} luks,keyfile-timeout=30s" > /etc/crypttab
KERNEL_VERSION=$(rpm -q kernel --qf '%{V}-%{R}.%{arch}\n')
INITRAMFS_FILE=/boot/initramfs-$KERNEL_VERSION.img
DRACUT_CMD="dracut --install ${INITIAL_LUKS_PWFILE} --install /etc/crypttab --verbose -f $INITRAMFS_FILE $KERNEL_VERSION"
echo ${DRACUT_CMD} > /tmp/dracut-cmd
eval ${DRACUT_CMD} &> /tmp/dracut-output #run the command, save the output.
%end
上述操作确实会导致/etc/crypttab
文件中的一个条目/mnt/sysroot/etc/crypttab
,它看起来像这样:
luks-<uuid> <uuid> /boot/temp-keyfile luks,keyfile-timeout=30s
但是,它并不能解锁设备,仍然要求我手动输入密码。
我用来尝试诊断问题的一种方法是运行lsinitrd | grep '/etc/crypttab'
,我注意到它不在 initramfs 中。所以我--install /etc/crypttab
在 kickstart 脚本中运行了它,当我 grep 搜索它时,我确实找到了它。然而,这导致图像在启动时(通过 Packer)卡在灰屏背景上的 3 个白点上。(而且,我觉得--install /etc/crypttab
没有必要!)