Code: Select all
#!/bin/sh
#Die folgenden Werte muessen angepasst werden
CRYPTPART=/dev/hda3
CRYPTINITRD=/boot/cryptinitrd
SWAPPART=/dev/hda2
#die folgenden Werte koennen angepasst werden
CRYPTMAJOR=`stat -c %t $CRYPTPART`
CRYPTMINOR=`stat -c %T $CRYPTPART`
SWAPMAJOR=`stat -c %t $SWAPPART`
SWAPMINOR=`stat -c %T $SWAPPART`
LOOPDEVICE=/dev/loop1
MOUNTDIR=/tmp/initrd
TOOLS="
sh
cat
mount
umount
mkdir
chroot
cryptsetup
pivot_root
mkswap
head
tr
echo"
#Initialisierung des Images
touch $CRYPTINITRD
dd if=/dev/zero of=$CRYPTINITRD bs=1024k count=4
losetup $LOOPDEVICE $CRYPTINITRD
mke2fs $LOOPDEVICE
mkdir $MOUNTDIR
mount $LOOPDEVICE $MOUNTDIR
mkdir ${MOUNTDIR}/{etc,dev,lib,bin,proc,new}
#Kopieren der Tools und der dazu notwendigen Libraries
for TOOL in $TOOLS; do
APPFILE=`which $TOOL`;
cp $APPFILE ${MOUNTDIR}/bin;
LIBS=`ldd $APPFILE | grep / | sed 's@.*\s/@/@' | sed 's@ (.*)@@'`;
for LIB in $LIBS; do
if [ ! -f "${MOUNTDIR}${LIB}" ]
then
cp $LIB ${MOUNTDIR}${LIB}
fi
done;
done
#Erstellen der Device-Nodes
mknod ${MOUNTDIR}/dev/null c 1 3
mknod ${MOUNTDIR}/dev/console c 5 1
mknod ${MOUNTDIR}${CRYPTPART} b $CRYPTMAJOR $CRYPTMINOR
mknod ${MOUNTDIR}/dev/tty c 4 0
mkdir ${MOUNTDIR}/dev/mapper
mknod ${MOUNTDIR}/dev/mapper/control c 10 63
#mknod ${MOUNTDIR}/dev/random c 1 8
mknod ${MOUNTDIR}/dev/urandom c 1 9
mknod ${MOUNTDIR}${SWAPPART} b $SWAPMAJOR $SWAPMINOR
#linuxrc
echo "#!/bin/sh
export PATH=/bin
# Get cmdline from proc
mount -t proc proc /proc
CMDLINE=\`cat /proc/cmdline\`
umount /proc
echo activate swap crypto
tr -cd [:alnum:] < /dev/urandom | head -c 127 | cryptsetup -c aes-cbc-essiv:sha256 create swap $SWAPPART
mkswap /dev/mapper/swap
# Mount real root and change to it
cryptsetup -c aes-cbc-essiv:sha256 create root $CRYPTPART
mount /dev/mapper/root /new
cd /new
mkdir initrd
pivot_root . initrd
# Start init and flush ram device
exec chroot . /bin/sh <<- EOF >dev/console 2>&1
umount initrd
rm -rf initrd
blockdev --flushbufs /dev/ram0
exec /sbin/init ${CMDLINE}
" > ${MOUNTDIR}/linuxrc
chmod +x ${MOUNTDIR}/linuxrc
#Einbindung des Images loesen
umount $MOUNTDIR
rmdir $MOUNTDIR
losetup -d $LOOPDEVICE
EDIT1: Das war ursprünglich ein Supportthread zum Erstellen dieses Scripts
EDIT2: Habe noch ein paar kleine Fehler und Probleme beseitigt und einen sichereren Cryptomodus gewählt.
EDIT3: Jetzt wird die Swap-Partition auch verschlüsselt
EDIT: Hier noch der ursprüngliche Text
In den meisten Anleitungen zum Erstellen der initrd für eine verschlüsselte Wurzelpartition, steht eine Menge von Einzelanweisungen um diese zu erstellen. Ich denke, dass es eine Menge von Systemveränderungen (z.B. neuer Kernel) gibt, die es notwendig machen die initrd neu zu erstellen. Wenn ich das dann immer händisch mache, etwas vergesse und deshalb das System nicht mehr booten kann, würde mich das ganz schön ankotzen. Also bastle ich gerade an einem Script das die initrd automatisch generiert (ich befürchte jedoch, dass es da schon irgendwo was gibt). Jetzt ärgere ich mich gerade mit der automatischen Bestimmung der für ein Tool notwendigen Libraries herum. Der übliche Weg geht über ldd, aber das hat dafür einen recht schrottigen Output. z.B.
Code: Select all
root # ldd /bin/dir
linux-gate.so.1 => (0xffffe000)
librt.so.1 => /lib/librt.so.1 (0xb7fd2000)
libncurses.so.5 => /lib/libncurses.so.5 (0xb7f8f000)
libc.so.6 => /lib/libc.so.6 (0xb7e73000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7e20000)
/lib/ld-linux.so.2 (0xb7fea000)
Suche etwas besseres als ldd oder eine Anweisung für z.B. awk die mir aus obigem Output
Code: Select all
/lib/librt.so.1
/lib/libncurses.so.5
/lib/libc.so.6
/lib/libpthread.so.0
/lib/ld-linux.so.2


