3. A boot eszköz beállítása

3.1. A virtuális fájlrendszer (ramdisk) létrehozása

Első lépésként chroot-oljunk a titkosított partícióra, és hozzuk létre a boot eszközhöz a felcsatolási pontot:

chroot /mnt/efs
mkdir /loader

Ezután hozzuk létre a virtuális rendszerindító fájlrendszert (initial ramdisk, initrd), amelyre később szükségünk lesz:

cd
dd if=/dev/zero of=initrd bs=1k count=4096
mke2fs -F initrd
mkdir ramdisk
mount -o loop initrd ramdisk

Hozzuk létre a fájlrendszer könyvtárszerkezetét, és másoljuk be a szükséges fájlokat:

mkdir ramdisk/{bin,dev,lib,mnt,sbin}
cp /bin/{bash,mount,umount} 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/

Ha a következő vagy hasonló hibaüzenetet kapjuk, az nem jelent problémát: "/lib/libncurses.so.5: No such file or directory", vagy "/lib/libtermcap.so.2: No such file or directory"; a bash-nek csak ezen programkönyvtárak egyike szükséges. Megtudhatjuk azt, hogy esetünkben melyik szükséges:

ldd /bin/bash

Hozzuk létre a rendszerindító (init) szkriptet (ne felejtsük a "xxxxxxxxxx" helyére beírni a kiválasztott álvéletlen sorozat kiindulóértéket (random seed)):

cat > ramdisk/sbin/init << "EOF"
#!/bin/sh

/sbin/losetup -e aes256 -S xxxxxxxxxx /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext2 /dev/loop0 /mnt

while [ $? -ne 0 ]
do
    /sbin/losetup -d /dev/loop0
    /sbin/losetup -e aes256 -S xxxxxxxxxx /dev/loop0 /dev/hda2
    /bin/mount -r -n -t ext2 /dev/loop0 /mnt
done

cd /mnt
/sbin/pivot_root . loader
exec /usr/sbin/chroot . /sbin/init
EOF

chmod 755 ramdisk/sbin/init

Csatoljuk le a loopback eszközt, és tömörítsük be a virtuális rendszerindító fájlrendszert:

umount -d ramdisk
rmdir ramdisk
gzip initrd
mv initrd.gz /boot/

3.2. Rendszerindítás CD-ROM-ról

Erősen ajánlott a rendszert egy írásvédett eszközről indítani, például egy indítható CD-ROM-ról.

Töltsük le, majd csomagoljuk ki a syslinux csomagot:

wget ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-2.07.tar.gz
tar -xvzf syslinux-2.07.tar.gz

Állítsuk be az isolinux-ot:

mkdir bootcd
cp /boot/vmlinuz-2.4.23 bootcd/vmlinuz
cp /boot/initrd.gz syslinux-2.07/isolinux.bin bootcd/
echo "DEFAULT vmlinuz initrd=initrd.gz ro root=/dev/ram0 vga=4" \
    > bootcd/isolinux.cfg

Hozzuk létre az indítható cd-képet (cd image), és írjuk ki egy írható cd-re:

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}

3.3. Rendszerindítás fizikai partícióról

A boot partíció egy alternatív rendszerindító eszköz: szükség lehet rá, ha az indítható CD elvész. Vegyük figyelembe, hogy a hda1 egy írható eszköz, ezért nem biztonságos; csak szükség esetén használjuk!

Hozzuk létre és csatoljuk fel az ext2 fájlrendszert:

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

Másoljuk át a rendszermagot és a virtuális rendszerindító fájlrendszert:

cp /boot/vmlinuz-2.4.23 /loader/vmlinuz
cp /boot/initrd.gz /loader/

Ha grub-ot használunk:

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 vga=4
    initrd /initrd.gz
EOF
grub-install --root-directory=/loader /dev/hda
umount /loader

Ha lilo-t használunk:

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/ram0 b 1 0
cat > /loader/etc/lilo.conf << EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/vmlinuz
    label=Linux
    initrd=/initrd.gz
    read-only
    root=/dev/ram0
    vga=4
EOF
lilo -r /loader
umount /loader