Başlamak için, şifrelenmiş disk bölümüne hapsolmalı (chroot) ve önyükleme aygıtı için bağlama noktasını oluşturmalısınız:
# chroot /mnt/efs
# mkdir /loader
Ardından, daha sonra ihtiyacınız olacak başlangıç ramdisk'ini (initrd) oluşturun:
# cd
# dd if=/dev/zero of=initrd bs=1k count=4096
# mke2fs -F initrd
# mkdir ramdisk
# mount -o loop initrd ramdisk
grsecurity kullanıyorsanız "Permission denied" hatasını alabilirsiniz. Bu durumda mount komutunu kafesin (chroot) dışında çalıştırmanız gerekir.
Dosya sistemi ağacını oluşturun ve gerekli dosyaları içine kopyalayın:
# mkdir ramdisk/{bin,dev,lib,mnt,sbin}
# cp /bin/{bash,mount} ramdisk/bin/
# ln -s bash ramdisk/bin/sh
# mknod -m 600 ramdisk/dev/console c 5 1
# mknod -m 600 ramdisk/dev/hda2 b 3 2
# mknod -m 600 ramdisk/dev/loop0 b 7 0
# cp /lib/{ld-linux.so.2,libc.so.6,libdl.so.2} ramdisk/lib/
# cp /lib/{libncurses.so.5,libtermcap.so.2} ramdisk/lib/
# cp /sbin/{losetup,pivot_root} ramdisk/sbin/
Eğer "/lib/libncurses.so.5: No such file or directory" veya "/lib/libtermcap.so.2: No such file or directory" hata iletileri ile karşılaşırsanız dert etmeyin; bash bu kütüphanelerden sadece birine ihtiyaç duyar. Gerçekte hangisinin gerekli olduğunu şöyle kontrol edebilirsiniz:
Parolanızın çekirdek iletileri (usb aygıtlarının kaydedilmesi gibi) tarafından taşırılmasını önlemek için aşağıdaki sleep programını derleyin.
# cat > sleep.c << "EOF"
#include <unistd.h>
#include <stdlib.h>
int main( int argc, char *argv[] )
{
if( argc == 2 )
sleep( atoi( argv[1] ) );
return( 0 );
}
EOF
# gcc -s sleep.c -o ramdisk/bin/sleep
# rm sleep.c
init betiğini oluşturun:
# cat > ramdisk/sbin/init << "EOF"
#!/bin/sh
/bin/sleep 3
echo -n "Enter seed value: "
read SEED
/sbin/losetup -e aes256 -S $SEED /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext3 /dev/loop0 /mnt
while [ $? -ne 0 ]
do
/sbin/losetup -d /dev/loop0
/sbin/losetup -e aes256 -S $SEED /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext3 /dev/loop0 /mnt
done
cd /mnt
/sbin/pivot_root . loader
exec /usr/sbin/chroot . /sbin/init
EOF
# chmod 755 ramdisk/sbin/init
Geridönüş aygıtını dosya sesteminden ayırın ve initrd'yi sıkıştırın:
# umount -d ramdisk
# rmdir ramdisk
# gzip initrd
# mv initrd.gz /boot/