|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
PREREQ="cryptroot"
|
|
|
|
|
|
|
|
prereqs()
|
|
|
|
{
|
|
|
|
echo "$PREREQ"
|
|
|
|
}
|
|
|
|
|
|
|
|
case $1 in
|
|
|
|
prereqs)
|
|
|
|
prereqs
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
. /usr/share/initramfs-tools/hook-functions
|
|
|
|
|
|
|
|
# Additional function for copying plugin (library) from multiarch directory.
|
|
|
|
# Based on copy_exec.
|
|
|
|
copy_plugin() {
|
|
|
|
local src target x
|
|
|
|
|
|
|
|
src="${1}"
|
|
|
|
if [ ${src} = "${src#/}" ]; then
|
|
|
|
for x in /${ARCHDIR} /lib /usr/${ARCHDIR} /usr/lib; do
|
|
|
|
if [ -e $x/$src ]; then
|
|
|
|
src=$(echo $x/$src)
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
target="${2:-$src}"
|
|
|
|
|
|
|
|
copy_exec "${src}" "${target}" || return $(($? - 1))
|
|
|
|
}
|
|
|
|
|
|
|
|
# Determine multiarch directory
|
|
|
|
ARCHDIR=$(ldd $SHELL | grep libc\.so |\
|
|
|
|
sed -e "s|^.*=> \(.*\)/[^/]*$|\1|" -e "s|^/usr||" -e "s|^/||")
|
|
|
|
if [ -z "$ARCHDIR" ] && [ -n "$HOSTTYPE" ] && [ -n "$OSTYPE" ]; then
|
|
|
|
ARCHDIR=$HOSTTYPE-$OSTYPE
|
|
|
|
fi
|
|
|
|
if [ -z "$ARCHDIR" ]; then
|
|
|
|
ARCHDIR=$(uname -i)
|
|
|
|
if [ "$ARCHDIR" = "unknown" ]; then
|
|
|
|
ARCHDIR=$(uname -m)
|
|
|
|
fi
|
|
|
|
if [ "$ARCHDIR" = "ppc64le" ]; then
|
|
|
|
ARCHDIR="powerpc64"
|
|
|
|
fi
|
|
|
|
if [ "$ARCHDIR" = "ppc64el" ]; then
|
|
|
|
ARCHDIR="powerpc64"
|
|
|
|
fi
|
|
|
|
ARCHDIR="*${ARCHDIR}*"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Hooks for loading smartcard reading software into the initramfs
|
|
|
|
|
|
|
|
# Install directories needed by smartcard reading daemon, command, and
|
|
|
|
# key-script
|
|
|
|
for dir in etc/opensc lib usr/lib var/run tmp ; do
|
|
|
|
if [ ! -d ${DESTDIR}/${dir} ] ;
|
|
|
|
then
|
|
|
|
mkdir -p ${DESTDIR}/${dir}
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# Install pcscd daemon, drivers, conf file
|
|
|
|
copy_exec /usr/sbin/pcscd /sbin
|
|
|
|
|
|
|
|
copy_plugin libpcsclite.so.1
|
|
|
|
|
|
|
|
find /usr/lib/pcsc ! -type d |
|
|
|
|
while read PSCS_FILE; do
|
|
|
|
if [ ! -x ${PSCS_FILE} ] && [ ${PSCS_FILE} = ${PSCS_FILE%.so} ]; then
|
|
|
|
[ -d ${DESTDIR}${PSCS_FILE%/*} ] || \
|
|
|
|
mkdir -p ${DESTDIR}${PSCS_FILE%/*}
|
|
|
|
cp -pL $PSCS_FILE ${DESTDIR}${PSCS_FILE%/*}
|
|
|
|
else
|
|
|
|
copy_exec $PSCS_FILE
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -d /etc/reader.conf.d ]; then
|
|
|
|
cp -pLR /etc/reader.conf.d ${DESTDIR}/etc/
|
|
|
|
fi
|
|
|
|
if [ -e /etc/reader.conf ]; then
|
|
|
|
cp -pL /etc/reader.conf ${DESTDIR}/etc/
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Install opensc commands and conf file
|
|
|
|
copy_exec /usr/bin/opensc-tool /bin/
|
|
|
|
copy_exec /usr/bin/pkcs15-crypt /bin/
|
|
|
|
copy_exec /usr/bin/pkcs15-tool /bin/
|
|
|
|
cp -pL /etc/opensc/opensc.conf ${DESTDIR}/etc/opensc/
|
|
|
|
|
|
|
|
# Install opensc interface library
|
|
|
|
copy_plugin opensc-pkcs11.so
|
|
|
|
|
|
|
|
# Install other required utilities
|
|
|
|
copy_exec /bin/grep /bin
|
|
|
|
copy_exec /bin/mv /bin
|
|
|
|
copy_exec /bin/cat /bin
|
|
|
|
copy_exec /bin/sleep /bin
|
|
|
|
copy_exec /usr/bin/opensc-explorer /bin
|
|
|
|
copy_exec /usr/bin/openssl /bin
|
|
|
|
copy_exec /usr/bin/perl /bin
|
|
|
|
copy_exec /bin/rm /bin
|
|
|
|
copy_exec /usr/bin/xxd /bin
|
|
|
|
copy_exec /usr/bin/killall /bin
|
|
|
|
copy_exec /bin/sed /bin
|
|
|
|
copy_exec /usr/bin/tr /bin
|
|
|
|
copy_exec /bin/bash /bin
|
|
|
|
|
|
|
|
# Main scripts
|
|
|
|
copy_exec /usr/bin/cryptosmartcard.sh /bin
|
|
|
|
copy_exec /usr/bin/cardpincheck /bin
|
|
|
|
|
|
|
|
# Libraries
|
|
|
|
copy_plugin libncursesw.so.[0-9]
|
|
|
|
|
|
|
|
# LUKS keys
|
|
|
|
if [ -e /etc/trinity/luks/card ]
|
|
|
|
then
|
|
|
|
cp -LRp /etc/trinity/luks/card ${DESTDIR}/tde_luks_keys
|
|
|
|
else
|
|
|
|
mkdir -p ${DESTDIR}/tde_luks_keys
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit 0
|