Önyükleme Aygıtının Ayarlanması

Ramdisk'in oluşturulması

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:

# ldd /bin/bash

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/

CD-ROM'dan önyükleme yapılması

Sisteminizi CD-ROM gibi salt okunur bir ortamı kullanarak yüklemenizi öneririm.

syslinux paketini indirin ve açın:

$ wget http://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.07.tar.bz2
$ tar -xvjf syslinux-3.07.tar.bz2

isolinux'u yapılandırın:

# mkdir bootcd
# cp /boot/{vmlinuz,initrd.gz} syslinux-3.07/isolinux.bin bootcd
# echo "DEFAULT /vmlinuz initrd=initrd.gz ro root=/dev/ram0" > bootcd/isolinux.cfg

Yüklenebilir cd-rom eşlemini oluşturun ve yakın:

# mkisofs -o bootcd.iso -b isolinux.bin -c boot.cat \
        -no-emul-boot -boot-load-size 4 -boot-info-table \
        -J -hide-rr-moved -R bootcd

# cdrecord -dev 0,0,0 -speed 4 -v bootcd.iso

# rm -rf bootcd{,.iso}

Sabit disk bölümünden önyükleme yapılması

Eğer yükleme cd'nizi kaybederseniz sabit disk bölümünüz yükleme yapabilmeniz için elinizin altındadır. Hda1 yazılabilir bir ortam olduğundan güvenilir olmadığını unutmayın ve ancak acil durumlarda kullanın!

Ext2 dosya sistemini oluşturun ve bağlayın:

# dd if=/dev/zero of=/dev/hda1 bs=8192
# mke2fs /dev/hda1
# mount /dev/hda1 /loader

Çekirdeği ve başlangıç ramdisk'ini kopyalayın:

# cp /boot/{vmlinuz,initrd.gz} /loader

grub kullanıyorsanız:

# mkdir /loader/boot
# cp -av /boot/grub /loader/boot/
# cat > /loader/boot/grub/menu.lst << EOF
default 0
timeout 10
color green/black light-green/black
title Linux
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/ram0
    initrd /initrd.gz
EOF
# grub-install --root-directory=/loader /dev/hda
# umount /loader

lilo kullanıyorsanız:

# mkdir /loader/{boot,dev,etc}
# cp /boot/boot.b /loader/boot/
# mknod -m 600 /loader/dev/hda  b 3 0
# mknod -m 600 /loader/dev/hda1 b 3 1
# mknod -m 600 /loader/dev/hda2 b 3 2
# mknod -m 600 /loader/dev/hda3 b 3 3
# mknod -m 600 /loader/dev/hda4 b 3 4
# mknod -m 600 /loader/dev/ram0 b 1 0
# cat > /loader/etc/lilo.conf << EOF
lba32
boot=/dev/hda
prompt
timeout=60
image=/vmlinuz
    label=Linux
    initrd=/initrd.gz
    read-only
    root=/dev/ram0
EOF
# lilo -r /loader
# umount /loader