projekte:mobileroot
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Vorherige Überarbeitung | |||
— | projekte:mobileroot [2021/01/17 01:06] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | {{page> | ||
+ | ====== mobileRoot ====== | ||
+ | |||
+ | ---- datatemplateentry project ---- | ||
+ | template | ||
+ | name : mobileRoot | ||
+ | imgname_img90 | ||
+ | person_pages | ||
+ | start_dt | ||
+ | end_dt | ||
+ | status_ | ||
+ | ---- | ||
+ | |||
+ | Live-CDs gibt es viele. Umfangreiche, | ||
+ | |||
+ | Hier wird eine Möglichkeit vorgestellt, | ||
+ | |||
+ | < | ||
+ | |||
+ | < | ||
+ | <hr width=" | ||
+ | Man kann auf einer freien Partition oder auch direkt auf der USB-Festplatte ein weiterse Linux installieren. Oder man kopiert das derzeitige System einfach rüber. Zum Kopieren sollte sollte das System nicht in Benutzung sein; also dazu z. B. Knoppix booten, alles beimounten und los (Beispiel ggf. anpassen): | ||
+ | |||
+ | <font color=" | ||
+ | # mkdir / | ||
+ | # mkdir / | ||
+ | # mount /dev/hda3 / | ||
+ | # mount /dev/sda1 / | ||
+ | # cd / | ||
+ | # tar -cvpf - . | tar -C / | ||
+ | # umount / | ||
+ | # umount / | ||
+ | </ | ||
+ | |||
+ | Damit wir später beim Booten die device wiederfinden geben wir ihr das Label mobile Root: | ||
+ | |||
+ | <font color=" | ||
+ | # tune2fs -L mobileRoot /dev/sda1 | ||
+ | </ | ||
+ | |||
+ | |||
+ | <b> | ||
+ | Schritt 2 - Kernel anpassen </b> | ||
+ | <hr width=" | ||
+ | Wir verwenden den Origalkernel der Installation. Er sollte folgendes einkompiliert enthalten: | ||
+ | - RAM Disk support und initrd support mit 8192 kB Größe | ||
+ | - Loopback Block Device Support | ||
+ | - ext2/ext3 Filesystem Support | ||
+ | - tmpfs Filesystem Support | ||
+ | |||
+ | |||
+ | <b> | ||
+ | Schritt 3 - Das linuxrc Script</ | ||
+ | <hr width=" | ||
+ | Das Booten von der CD in die USB-Festplatte läuft so ab, dass wir ein Mini-Linux in die Ramdisk laden und über das linuxrc Script dann auf das System der Platte wechseln. Hier das Script: | ||
+ | |||
+ | <font color=" | ||
+ | #!/bin/sh | ||
+ | |||
+ | # linuxrc Skript | ||
+ | # wird vom kernel von der cd ausgefuehrt und startet das umhaengen zum usb-device | ||
+ | |||
+ | # wir suchen das device mit diesem label | ||
+ | SUCHE=" | ||
+ | # also vorher label mit tune2fs auf der richtigen partition am usb device setzen | ||
+ | |||
+ | echo | ||
+ | echo " | ||
+ | echo " | ||
+ | echo "+ (c) Linux User Group Saar +" | ||
+ | echo " | ||
+ | echo | ||
+ | |||
+ | export PATH="/ | ||
+ | |||
+ | |||
+ | # Speichern der Kernel CMDLINE | ||
+ | mount -t proc none /proc | ||
+ | CMDLINE=`cat / | ||
+ | umount /proc | ||
+ | |||
+ | # cd-rom Laufwerk suchen und baum der module mounten | ||
+ | for x in hda hdb hdc hdd | ||
+ | do | ||
+ | mount -t iso9660 -r /dev/${x} /cdrom >/ | ||
+ | if [ " | ||
+ | then | ||
+ | CDROM=" | ||
+ | echo "cdrom Laufwerk als /dev/$CDROM gefunden" | ||
+ | FIND=" | ||
+ | echo "lade module von der cd" | ||
+ | mount --bind / | ||
+ | # cryptomodule laden | ||
+ | #/ | ||
+ | #/ | ||
+ | break | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | if [ " | ||
+ | then | ||
+ | echo " | ||
+ | #exec /bin/sh | ||
+ | #exit | ||
+ | fi | ||
+ | |||
+ | |||
+ | # warten bis der Kernel das usb-Laufwerk findet | ||
+ | echo | ||
+ | echo " | ||
+ | sleep 8 | ||
+ | |||
+ | for device in sda1 sda2 sda3 sdb1 sdb2 sdb3 sdc1 sdc2 sdc3 sdd1 sdd2 sdd3 sde1 sde2 sde3 | ||
+ | do | ||
+ | echo " | ||
+ | MYLABEL=`tune2fs -l / | ||
+ | sleep 1 | ||
+ | if [ " | ||
+ | then | ||
+ | echo " | ||
+ | mount -t ext3 -o rw / | ||
+ | break | ||
+ | fi | ||
+ | |||
+ | if [ " | ||
+ | then | ||
+ | echo "kein usb-device mit label $SUCHE gefunden - starte mini shell" | ||
+ | exec /bin/sh | ||
+ | exit | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | if [ " | ||
+ | then | ||
+ | echo "cdrom auswerfen" | ||
+ | umount / | ||
+ | umount /cdrom | ||
+ | eject /dev/$CDROM | ||
+ | fi | ||
+ | |||
+ | echo "pivot root ausfuehren" | ||
+ | # pivot root umhaengen und den eigentlichen bootprozess starten | ||
+ | |||
+ | cd /new | ||
+ | / | ||
+ | exec chroot . /bin/sh -c "exec /sbin/init ${CMDLINE}" | ||
+ | </ | ||
+ | |||
+ | |||
+ | <b> | ||
+ | Schritt 4 - initrd anlegen</ | ||
+ | <hr width=" | ||
+ | Hier kommt ein Script, das aus dem bestehenden System dir nötigen Daten extrahiert und in ein initrd-File schreibt. Im Kopf des Scriptes müssen die Quell- und Zielverzeichnisse und der Kernel (so wie er in /boot heißt) angepasst werden. | ||
+ | |||
+ | <font color=" | ||
+ | #!/bin/bash | ||
+ | |||
+ | DIR=`pwd` | ||
+ | echo " | ||
+ | Quelle=/ | ||
+ | echo " | ||
+ | echo | ||
+ | Kernel=2.6.12-gentoo-r10 | ||
+ | echo " | ||
+ | echo | ||
+ | echo " | ||
+ | read user_reply | ||
+ | |||
+ | #cd $Quelle | ||
+ | |||
+ | # beim ersten Durchlauf dieses entkommentieren, | ||
+ | # dann wieder einkommentieren | ||
+ | |||
+ | #touch $DIR/initrd | ||
+ | #dd if=/ | ||
+ | |||
+ | |||
+ | echo | ||
+ | echo " | ||
+ | losetup /dev/loop0 $DIR/initrd | ||
+ | mke2fs /dev/loop0 | ||
+ | echo mounten | ||
+ | mount /dev/loop0 $DIR/mntpnt | ||
+ | |||
+ | echo | ||
+ | echo "das loop Abbild mit notwendigen Dateien und Verzeichnissen fuellen" | ||
+ | |||
+ | cd $DIR/mntpnt | ||
+ | |||
+ | mkdir etc dev lib bin proc new img usb tmpfs newroot base cdrom home sbin usr mnt sys rfsys | ||
+ | mkdir lib/modules | ||
+ | mkdir usr/bin | ||
+ | mkdir usr/lib | ||
+ | touch etc/mtab | ||
+ | touch etc/fstab | ||
+ | |||
+ | |||
+ | cp -a $DIR/ | ||
+ | |||
+ | for x in sh ls cat mount umount dmesg mkdir chroot tar cp sleep echo cut grep cryptsetup | ||
+ | do | ||
+ | cp -v $Quelle/ | ||
+ | done | ||
+ | |||
+ | |||
+ | for x in pivot_root modprobe tune2fs e2fsck grub fdisk dmsetup | ||
+ | do | ||
+ | cp -v $Quelle/ | ||
+ | done | ||
+ | |||
+ | cp -v $Quelle/ | ||
+ | cp -v $Quelle/ | ||
+ | cp -v $Quelle/ | ||
+ | |||
+ | |||
+ | # Hinweis: module sind 23MB gross | ||
+ | echo "/ | ||
+ | #cp -a $Quelle/ | ||
+ | cp $Quelle/ | ||
+ | |||
+ | |||
+ | echo | ||
+ | echo " | ||
+ | |||
+ | cd $Quelle/lib | ||
+ | |||
+ | cp -v `ldd $Quelle/ | ||
+ | cp -v `ldd $Quelle/ | ||
+ | cp -v `ldd $Quelle/ | ||
+ | |||
+ | cp -v `ldd $Quelle/ | ||
+ | |||
+ | for x in sh ls cat mount umount chroot tar cp sleep echo cut grep | ||
+ | do | ||
+ | cp -v `ldd $Quelle/ | ||
+ | done | ||
+ | |||
+ | |||
+ | for x in pivot_root modprobe tune2fs e2fsck grub fdisk dmsetup | ||
+ | do | ||
+ | cp -v `ldd $Quelle/ | ||
+ | done | ||
+ | |||
+ | # cryptomodule fuer cryptsetup-luks | ||
+ | cp -a $Quelle/ | ||
+ | cp -a $Quelle/ | ||
+ | |||
+ | |||
+ | echo | ||
+ | echo " | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | mknod $DIR/ | ||
+ | |||
+ | mkdir $DIR/ | ||
+ | mknod $DIR/ | ||
+ | #mknod $DIR/ | ||
+ | |||
+ | umount $DIR/mntpnt | ||
+ | losetup -d /dev/loop0 | ||
+ | echo | ||
+ | echo " | ||
+ | |||
+ | # logeintrag mit cp: cannot stat `(0xb7fc6000)': | ||
+ | # ist nur ein kleiner schoenheitsfehler | ||
+ | rm $DIR/log | ||
+ | |||
+ | echo "jetzt kann die boot cd erstellt werden" | ||
+ | </ | ||
+ | |||
+ | |||
+ | <b> | ||
+ | Schritt 5 - Boot-CD erstellen</ | ||
+ | <hr width=" | ||
+ | Auch hier wieder im Kopf des Scriptes die Verzeichnisse usw. anpassen. | ||
+ | |||
+ | <font color=" | ||
+ | #!/bin/bash | ||
+ | |||
+ | Quelle=/ | ||
+ | Kernel=kernel-2.6.12-gentoo-r10 | ||
+ | Kernelmod=2.6.12-gentoo-r10 | ||
+ | |||
+ | DIR=`pwd` | ||
+ | |||
+ | echo | ||
+ | echo "boot cd anlegen aus der Quelle $Quelle" | ||
+ | echo "der kernel $Quelle/ | ||
+ | echo "diese angaben koennen ueber die configzeilen in diesem script angepasst werden" | ||
+ | echo " | ||
+ | read user_reply | ||
+ | |||
+ | echo | ||
+ | echo "boot verzeichnis in target anlegen" | ||
+ | rm -rd target 2> $DIR/log | ||
+ | mkdir target | ||
+ | |||
+ | echo " | ||
+ | mkdir target/boot | ||
+ | cp -a $Quelle/ | ||
+ | cp -a $Quelle/ | ||
+ | cp -a $DIR/initrd target/boot | ||
+ | cp -a $Quelle/ | ||
+ | |||
+ | echo " | ||
+ | unlink target/ | ||
+ | rm target/ | ||
+ | # anmerkung iso9660 kann keine links | ||
+ | |||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo "root (cd)" >> target/ | ||
+ | echo " | ||
+ | echo " | ||
+ | |||
+ | echo | ||
+ | echo " | ||
+ | |||
+ | mkisofs -R -b boot/ | ||
+ | |||
+ | #rm -rd target 2> $DIR/log | ||
+ | #rm $DIR/log | ||
+ | echo | ||
+ | echo " | ||
+ | </ | ||
+ | |||
+ | |||
+ | <b> | ||
+ | Schritt 6 - Boot-CD Brennen</ | ||
+ | <hr width=" | ||
+ | |||
+ | <font color=" | ||
+ | # cdrecord -v dev=/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | <b> | ||
+ | Schritt 7 - Verschlüsseltes Filesystem</ | ||
+ | <hr width=" | ||
+ | Als Erweiterung ist es geplant, von einem Verschlüsselten Filesystem zu booten. Demnächst mehr. | ||
+ | |||
+ | |||
+ | <b> | ||
+ | Schritt 8 - Danke</ | ||
+ | <hr width=" | ||
+ | Ich danke allen für Erklärungen, |