(26.01.2014 21:10)thosch97 schrieb: aber interessieren würde mich deine initrd schon.
create_initramfs.sh
Code:
#!/bin/bash
# BusyBox definieren
export BUSYBOX="busybox"
# Installationsverzeichnis definieren
export BOOT="/boot"
export ROOT="`pwd`/initramfs"
export ROOT_MICROCODE="`pwd`/initramfs-microcode"
export TEMP="/tmp"
# Bestehendes Installationsverzeichnis entfernen, falls existent
if [ -d $ROOT ]; then
rm -fR $ROOT
fi
if [ -d $ROOT_MICROCODE ]; then
rm -fR $ROOT_MICROCODE
fi
# Splash definieren
export SPLASH="battlestar-galactica"
# Installationsverzeichnis erstellen
mkdir $ROOT
cd $ROOT
# Verzeichnisstruktur erstellen
mkdir -m 755 bin
mkdir -m 755 dev dev/fb dev/misc dev/vc
mkdir -m 755 etc etc/lvm etc/splash etc/splash/$SPLASH etc/splash/$SPLASH/images
mkdir -m 755 lib64 lib64/splash lib64/splash/proc lib64/splash/sys
mkdir -m 755 mnt mnt/root
mkdir -m 755 proc
mkdir -m 755 sbin
mkdir -m 755 usr usr/bin usr/lib usr/lib/suspend usr/share usr/share/consolefonts usr/share/keymaps usr/share/keymaps/i386 usr/share/keymaps/i386/qwertz usr/share/splashutils
mkdir -m 755 sys
# Devicenodes erstellen
mknod $ROOT/dev/console c 5 1
mknod $ROOT/dev/null c 1 3
mknod $ROOT/dev/tty0 c 4 0
mknod $ROOT/dev/tty1 c 4 1
mknod $ROOT/dev/zero c 1 5
# BusyBox kopieren
cp /bin/busybox $ROOT/bin/busybox
# Cryptsetup kopieren
cp /sbin/cryptsetup $ROOT/sbin/cryptsetup
# FBSplash inkl. Theme kopieren
cp /etc/splash/luxisri.ttf $ROOT/etc/splash/luxisri.ttf
cp /etc/splash/$SPLASH/*.cfg $ROOT/etc/splash/$SPLASH/
cp /etc/splash/$SPLASH/images/*.jpg $ROOT/etc/splash/$SPLASH/images/
cp /sbin/fbcondecor_helper $ROOT/sbin/fbcondecor_helper
cp /usr/share/splashutils/initrd.splash $ROOT/usr/share/splashutils/initrd.splash
# LVM kopieren
cp /sbin/lvm $ROOT/sbin/lvm
cp /etc/lvm/lvm.conf $ROOT/etc/lvm/lvm.conf
# Terminus-Font kopieren
cp /usr/share/consolefonts/ter-v16b.psf.gz $ROOT/usr/share/consolefonts/ter-v16b.psf.gz
# USWSUSP kopieren
cp /etc/suspend.conf $ROOT/etc/suspend.conf
cp /usr/lib/suspend/resume $ROOT/usr/lib/suspend/resume
# Keymap erstellen
busybox dumpkmap > $ROOT/usr/share/keymaps/i386/qwertz/de-latin1-nodeadkeys.map.bin
# Startscript kopieren
cd $ROOT/..
cp init.sh $ROOT/init
# Symlinks unterhalb / erstellen
cd $ROOT
ln -s lib64 lib
# Symlinks unterhalb /bin erstellen
cd $ROOT/bin
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/ash
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/cat
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/cut
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/echo
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/kbd_mode
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/loadkmap
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/mdev
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/mount
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/printf
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/setfont
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/sleep
chroot $ROOT $BUSYBOX ln -s /bin/busybox /bin/umount
# Symlinks unterhalb /usr/bin erstellen
cd $ROOT/usr/bin
chroot $ROOT $BUSYBOX ln -s /bin/busybox /usr/bin/kbd_mode
chroot $ROOT $BUSYBOX ln -s /bin/busybox /usr/bin/printf
chroot $ROOT $BUSYBOX ln -s /bin/busybox /usr/bin/setfont
# Symlinks unterhalb /sbin erstellen
cd $ROOT/sbin
chroot $ROOT $BUSYBOX ln -s /bin/busybox /sbin/loadkmap
chroot $ROOT $BUSYBOX ln -s /bin/busybox /sbin/mdev
chroot $ROOT $BUSYBOX ln -s /bin/busybox /sbin/switch_root
chroot $ROOT $BUSYBOX ln -s /sbin/fbcondecor_helper /sbin/splash_helper
# Installationsverzeichnis erstellen
mkdir $ROOT_MICROCODE
cd $ROOT_MICROCODE
# Verzeichnisstruktur erstellen
mkdir -m 755 kernel kernel/x86 kernel/x86/microcode
# Microcode kopieren
cp /lib/firmware/microcode.dat $ROOT_MICROCODE/kernel/x86/microcode/GenuineIntel.bin
# Initramfs-Image erstellen
cd $ROOT/
find . | /bin/cpio --quiet -o -H newc | /usr/bin/lzma -9 > $TEMP/initramfs-`uname -r`.img
# Initramfs-Microcode-Image erstellen
cd $ROOT_MICROCODE/
find . | /bin/cpio --quiet -o -H newc > $TEMP/initramfs-microcode-`uname -r`.img
# Initramfs-Image zusammenbauen
rm -rf $BOOT/initramfs-*
cat $TEMP/initramfs-microcode-`uname -r`.img $TEMP/initramfs-`uname -r`.img > $BOOT/initramfs-`uname -r`.img
init.sh
Code:
#!/bin/busybox ash
# PATH setzen
export PATH="/bin:/sbin:/usr/bin:/usr/lib/suspend"
# Systemverzeichnisse einbinden
mount -t devtmpfs dev /dev
mount -t proc proc /proc
mount -t sysfs sys /sys
# MDEV aktivieren
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
mdev -s
# Kurze Pause (Damit die restlichen Meldungen noch angezeigt werden!)
sleep "5"
# Kernelmeldungen unterdruecken
echo "0" > /proc/sys/kernel/printk
# Benoetigte Kernelparameter einlesen
export CMDLINE=`/bin/cat /proc/cmdline`
# Benoetigte Kernelparameter auswerten
for PARAMETER in $CMDLINE; do
case "$PARAMETER" in
lvm=*)
export LVM=`echo "$PARAMETER" | cut -d "=" -f 2`
;;
rescue)
export RESCUE=`echo "$PARAMETER" | cut -d "=" -f 2`
;;
root=*)
export ROOT=`echo "$PARAMETER" | cut -d "=" -f 2`
;;
swap=*)
export SWAP=`echo "$PARAMETER" | cut -d "=" -f 2`
;;
esac
done
# UTF-8 auf der Konsole aktivieren
kbd_mode -u -C /dev/tty1
printf "\033%%G" >> /dev/console
# Konsolenschriftart laden
setfont "/usr/share/consolefonts/ter-v16b.psf.gz" -C /dev/tty1
printf "\033(K" >> /dev/console
# Tastaturlayout laden
loadkmap < "/usr/share/keymaps/i386/qwertz/de-latin1-nodeadkeys.map.bin"
# Notfall Shell
if [ ! -z "$RESCUE" ]; then
echo
echo '+-------------- # NOTFALL SHELL # --------------+'
echo '| Warnung: Der Parameter "rescue" ist gesetzt.. |'
echo '| --------------------------------------------- |'
echo '| Der Bootvorgang wird daher abgebrochen und |'
echo '| eine minimale BusyBox ash-Shell aktiviert.. |'
echo '+-------------- # NOTFALL SHELL # --------------+'
echo
exec /bin/ash
fi
# Kernelparameterueberpruefung fuer LVM
if [ -z "$LVM" ]; then
echo
echo '+---------- # KERNELPARAMETER FEHLT # -----------+'
echo '| Fehler: Der Kernelparameter "lvm" fehlt! |'
echo '| Damit der Bootvorgang fortgesetzt werden kann, |'
echo '| muss dieser Kernelparameter gesetzt sein.. |'
echo '| +--------------------------------------------+ |'
echo '| | z.B. lvm=/dev/sda2 | |'
echo '| +--------------------------------------------+ |'
echo '| Der Bootvorgang wird daher abgebrochen und |'
echo '| eine minimale BusyBox ash-Shell aktiviert.. |'
echo '+---------- # KERNELPARAMETER FEHLT # -----------+'
echo
exec /bin/ash
fi
# Kernelparameterueberpruefung fuer ROOT
if [ -z "$ROOT" ]; then
echo
echo '+---------- # KERNELPARAMETER FEHLT # -----------+'
echo '| Fehler: Der Kernelparameter "root" fehlt! |'
echo '| Damit der Bootvorgang fortgesetzt werden kann, |'
echo '| muss dieser Kernelparameter gesetzt sein.. |'
echo '| +--------------------------------------------+ |'
echo '| | z.B. root=/dev/mapper/root | |'
echo '| +--------------------------------------------+ |'
echo '| Der Bootvorgang wird daher abgebrochen und |'
echo '| eine minimale BusyBox ash-Shell aktiviert.. |'
echo '+---------- # KERNELPARAMETER FEHLT # -----------+'
echo
exec /bin/ash
fi
# Banner ausgeben
echo
echo '/--------+----------------------------------------+-------\'
echo '| | Lenovo Thinkpad X200 Tablet (7450-EQG) | |'
echo '| +----------------------------------------+ |'
echo '| _________ .__ __ |'
echo '| / _____/ ___________ ____ ____ |__|/ |_ ___.__. |'
echo '| \_____ \_/ __ \_ __ \_/ __ \ / \| \ __< | | |'
echo '| / \ ___/| | \/\ ___/| | \ || | \___ | |'
echo '| /_______ /\___ >__| \___ >___| /__||__| / ____| |'
echo '| \/ \/ \/ \/ \/ |'
echo '\-----------+-----------------------------------+---------/'
echo ' | | '
echo ' _/ How Are You Gentlemen? \_ '
echo ' \ All Your Base Are Belong To Us... / '
echo ' | | '
echo '/-----------+-----------------------------------+---------\'
echo '| THIS IS A PRIVATE SYSTEM FOR AUTHORIZED USERS ONLY! |'
echo '| UNAUTHORIZED ACCESS PROHIBITED.. |'
echo '\---------------------------------------------------------/'
echo
# Passwort fuer die LUKS-Verschluesselung abfragen und speichern
read -p "ACCESS DENIED! ENTER PASSWORD FOR AUTHENTICATION: " -s PASSWORD
# LUKS-Partition mit gespeichertem LUKS-Passwort entschluesseln
while ! echo "$PASSWORD" | cryptsetup --allow-discards luksOpen "$LVM" root > /dev/null 2>1; do
echo "...FAILED!"
read -p "ACCESS DENIED! ENTER PASSWORD FOR AUTHENTICATION: " -s PASSWORD
done
# Erfolgsmeldung ausgeben
echo "...SUCCESS!"
echo
echo "ACCESS GRANTED! WELCOME BACK, COMMANDER!"
echo
# LVM2-Volumes suchen und einbinden
/sbin/lvm vgscan --ignorelockingfailure --mknodes > /dev/null 2>1
/sbin/lvm vgchange -a y --sysinit > /dev/null 2>1
# Falls S4 (Suspend-to-Disk) aktiv ist, die Sitzung wiederherstellen
if [ ! -z "$SWAP" ]; then
resume -r $SWAP > /dev/null 2>1
fi
# Die entschluesselte ROOT-Partition einbinden
if ! /bin/mount -o ro $ROOT /mnt/root; then
echo
echo '+-------------- # NOTFALL SHELL # --------------+'
echo '| Fehler: Die entschluesselte ROOT-Partition |'
echo '| konnte nicht eingebunden werden! |'
echo '| --------------------------------------------- |'
echo '| Der Bootvorgang wird daher abgebrochen und |'
echo '| eine minimale BusyBox ash-Shell aktiviert.. |'
echo '+-------------- # NOTFALL SHELL # --------------+'
echo
exec /bin/ash
fi
# LUKS-Passwort loeschen
unset "$PASSWORD"
# MDEV deaktivieren
/bin/echo > /proc/sys/kernel/hotplug
# Systemverzeichnisse auswerfen
/bin/umount /dev
/bin/umount /proc
/bin/umount /sys
# Wechsel zur entschluesselten ROOT-Partition durchfuehren
exec switch_root /mnt/root /sbin/init
Beide Dateien in einen Ordner und die create_initramfs.sh erzeugen. Rest läuft automatisch. Denk dran, dass alle Abhängigkeiten STATISCH kompiliert sein müssen!