Benutzer-Werkzeuge

Webseiten-Werkzeuge


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>boxen:projekt_uebernommen}}
  
 +====== mobileRoot ======
 +
 +---- datatemplateentry project ----
 +template        : templates:project
 +name            : mobileRoot
 +imgname_img90   : none.png
 +person_pages    : mancas
 +start_dt        : 
 +end_dt          : 
 +status_         : unbekannt
 +----
 +
 +Live-CDs gibt es viele. Umfangreiche, wie z. B. http://www.knopper.net/knoppix zeigen, was Linux alles kann. Kleinere, wie http://damnsmalllinux.org und http://www.puppyos.com zeigen, wie klein man ein Linux machen kann. 
 +
 +Hier wird eine Möglichkeit vorgestellt, wie man genau sein eigenes Linux mit seinen persönlichen Einstellungen, dem gewählten Benutzernamen und den richtigen Rechten an den Dateien im Homeverzeichnis in der Tasche mitnehmen kann. Die richtigen Rechte sind z. B. eine Voraussetzung, um sein mobiles Homeverzeichnis mit dem Rechner zuhause synchronisieren zu können, z. B. mit unison. Und natürlich möchte man unterwegs die gleichen Pakete wie zu Hause nutzen. Dazu packen wir unser Linux, so wie es sein soll, auf eine USB-Festplatte - es gibt ja fast überall genügend Rechner, die man mit einem solchen Live-System booten kann. Nicht alle Rechner können allerdings direkt von USB-Devices booten und so benötigen wir eine zusätzliche Boot-CD.
 +
 +<i>mobileRoot-0.4</i>
 +
 +<b>Schritt 1 - Installation eines Linux Systems </b>
 +<hr width="300" align="left">
 +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="808080">
 +# mkdir /mnt/meinSystem
 +# mkdir /mnt/usbplatte
 +# mount /dev/hda3 /mnt/meinSystem
 +# mount /dev/sda1 /mnt/usbplatte
 +# cd /mnt/meunSystem
 +# tar -cvpf - . | tar -C /mnt/usbplatte -xpf -
 +# umount /mnt/meinSystem
 +# umount /mnt/usbplatte
 +</font>
 +
 +Damit wir später beim Booten die device wiederfinden geben wir ihr das Label mobile Root:
 +
 +<font color="808080">
 +# tune2fs -L mobileRoot /dev/sda1
 +</font>
 +
 +
 +<b>
 +Schritt 2 - Kernel anpassen </b>
 +<hr width="300" align="left">
 +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</b>
 +<hr width="300" align="left">
 +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="808080">
 +#!/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="mobileRoot"
 +# also vorher label mit tune2fs auf der richtigen partition am usb device setzen
 +
 +echo
 +echo "+++++++++++++++++++++++++++++"
 +echo "    starte usb-device     +"
 +echo "+ (c) Linux User Group Saar +"
 +echo "+++++++++++++++++++++++++++++"
 +echo
 +
 +export PATH="/bin:/sbin:/usr/bin"
 +
 +
 +# Speichern der Kernel CMDLINE
 +mount -t proc none /proc
 +CMDLINE=`cat /proc/cmdline`
 +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 >/dev/null 2>&1
 +        if [ "$?" = "0" ]
 +        then
 +                CDROM="${x}"
 +                echo "cdrom Laufwerk als /dev/$CDROM gefunden"
 +                FIND="1"
 +                echo "lade module von der cd"
 +                mount --bind /cdrom/modules /lib/modules
 +                # cryptomodule laden
 +                #/sbin/modprobe aes
 +                #/sbin/modprobe dm-crypt
 +                break
 +        fi
 +done
 +
 +if [ "${CDROM}" == "" ]
 +then
 +        echo "FEHLER: cdrom nicht gefunden, kann keine module laden"
 +        #exec /bin/sh
 +        #exit
 +fi
 +
 +
 +# warten bis der Kernel das usb-Laufwerk findet
 +echo
 +echo "partition mit label $SUCHE suchen"
 +sleep 8
 +
 +for device in sda1 sda2 sda3 sdb1 sdb2 sdb3 sdc1 sdc2 sdc3 sdd1 sdd2 sdd3 sde1 sde2 sde3
 +do
 +        echo "teste, ob $device das richtige device ist ..."
 +        MYLABEL=`tune2fs -l /dev/$device 2>/dev/null | grep -c -e $SUCHE 2>/dev/null`
 +        sleep 1
 +        if [ "$MYLABEL" = 1 ]
 +        then
 +                echo "$device gefunden"
 +                mount -t ext3 -o rw /dev/$device /new >/dev/null 2>&1
 +                break
 +        fi
 +
 +        if [ "$device" = sde3 ]
 +                then
 +                echo "kein usb-device mit label $SUCHE gefunden - starte mini shell"
 +                exec /bin/sh
 +                exit
 +        fi
 +done
 +
 +if [ "$FIND" = "1" ]
 +        then
 +        echo "cdrom auswerfen"
 +        umount /cdrom/modules
 +        umount /cdrom
 +        eject /dev/$CDROM
 +fi
 +
 +echo "pivot root ausfuehren"
 +# pivot root umhaengen und den eigentlichen bootprozess starten
 +
 +cd /new
 +/sbin/pivot_root . newroot
 +exec chroot . /bin/sh -c "exec /sbin/init ${CMDLINE}"
 +</font>
 +
 +
 +<b>
 +Schritt 4 - initrd anlegen</b>
 +<hr width="300" align="left">
 +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="808080">
 +#!/bin/bash
 +
 +DIR=`pwd`
 +echo "Arbeitsverzeichnis $DIR"
 +Quelle=/mnt/usbplatte
 +echo "Quellverzeichnis $Quelle"
 +echo
 +Kernel=2.6.12-gentoo-r10
 +echo "Kernel $Kernel"
 +echo
 +echo "[enter] fuer weiter oder [ctr]-[c] fuer stop"
 +read user_reply
 +
 +#cd $Quelle
 +
 +# beim ersten Durchlauf dieses entkommentieren, damit leeres loop file angelegt wird
 +# dann wieder einkommentieren
 +
 +#touch $DIR/initrd
 +#dd if=/dev/zero of=$DIR/initrd bs=1024k count=8
 +
 +
 +echo
 +echo "initrd als loopfile anlegen und ext2 formatieren"
 +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/linuxrc .
 +
 +for x in sh ls cat mount umount dmesg mkdir chroot tar cp sleep echo cut grep cryptsetup
 +do
 +   cp -v $Quelle/bin/${x} ./bin
 +done
 +
 +
 +for x in pivot_root modprobe tune2fs e2fsck grub fdisk dmsetup
 +do
 +   cp -v $Quelle/sbin/${x} ./sbin
 +done
 +
 +cp -v $Quelle/usr/bin/test ./usr/bin
 +cp -v $Quelle/usr/bin/mkdir ./usr/bin
 +cp -v $Quelle/usr/bin/eject ./usr/bin
 +
 +
 +# Hinweis: module sind 23MB gross
 +echo "/etc/modules.conf"
 +#cp -a $Quelle/lib/modules/ ./lib/modules
 +cp    $Quelle/etc/modules.conf ./etc
 +
 +
 +echo
 +echo "benoetigte libraries hinzu"
 +
 +cd $Quelle/lib
 +
 +cp -v `ldd $Quelle/usr/bin/test |egrep lib|cut -d "=" -f1` $DIR/mntpnt/lib 2> $DIR/log
 +cp -v `ldd $Quelle/usr/bin/eject |egrep lib|cut -d "=" -f1` $DIR/mntpnt/lib 2> $DIR/log
 +cp -v `ldd $Quelle/usr/bin/mkdir |egrep lib|cut -d "=" -f1` $DIR/mntpnt/lib 2> $DIR/log
 +
 +cp -v `ldd $Quelle/usr/bin/dmesg |egrep lib|cut -d "=" -f1` $DIR/mntpnt/lib 2> $DIR/log
 +
 +for x in sh ls cat mount umount chroot tar cp sleep echo cut grep
 +do
 +   cp -v `ldd $Quelle/bin/${x}|egrep lib|cut -d "=" -f1` $DIR/mntpnt/lib 2> $DIR/log
 +done
 +
 +
 +for x in pivot_root modprobe tune2fs e2fsck grub fdisk dmsetup
 +do
 +   cp -v `ldd $Quelle/sbin/${x}|egrep lib|cut -d "=" -f1` $DIR/mntpnt/lib 2> $DIR/log
 +done
 +
 +# cryptomodule fuer cryptsetup-luks
 +cp -a $Quelle/usr/lib/libcrypt* $DIR/mntpnt/usr/lib
 +cp -a $Quelle/lib/libcrypt* $DIR/mntpnt/lib
 +
 +
 +echo
 +echo "devices anlegen"
 +
 +mknod $DIR/mntpnt/dev/console c 5 1
 +mknod $DIR/mntpnt/dev/null c 1 3
 +
 +
 +mknod $DIR/mntpnt/dev/hda b 3 0
 +mknod $DIR/mntpnt/dev/hda1 b 3 1
 +mknod $DIR/mntpnt/dev/hda2 b 3 2
 +mknod $DIR/mntpnt/dev/hda3 b 3 3
 +
 +mknod $DIR/mntpnt/dev/hdb b 3 64
 +mknod $DIR/mntpnt/dev/hdb1 b 3 65
 +mknod $DIR/mntpnt/dev/hdb2 b 3 66
 +mknod $DIR/mntpnt/dev/hdb3 b 3 67
 +
 +mknod $DIR/mntpnt/dev/hdc b 22 0
 +mknod $DIR/mntpnt/dev/hdc1 b 22 1
 +mknod $DIR/mntpnt/dev/hdc2 b 22 2
 +mknod $DIR/mntpnt/dev/hdc3 b 22 3
 +
 +mknod $DIR/mntpnt/dev/hdd b 22 64
 +mknod $DIR/mntpnt/dev/hdd1 b 22 65
 +mknod $DIR/mntpnt/dev/hdd2 b 22 66
 +mknod $DIR/mntpnt/dev/hdd3 b 22 67
 +
 +mknod $DIR/mntpnt/dev/hde b 33 0
 +mknod $DIR/mntpnt/dev/hde1 b 33 1
 +mknod $DIR/mntpnt/dev/hde2 b 33 2
 +mknod $DIR/mntpnt/dev/hde3 b 33 3
 +
 +mknod $DIR/mntpnt/dev/tty c 4 0
 +
 +mknod $DIR/mntpnt/dev/loop0 b 7 0
 +mknod $DIR/mntpnt/dev/loop1 b 7 1
 +mknod $DIR/mntpnt/dev/loop2 b 7 2
 +
 +mknod $DIR/mntpnt/dev/sda1 b 8 1
 +mknod $DIR/mntpnt/dev/sda2 b 8 2
 +mknod $DIR/mntpnt/dev/sda3 b 8 3
 +
 +mknod $DIR/mntpnt/dev/sdb1 b 8 17
 +mknod $DIR/mntpnt/dev/sdb2 b 8 18
 +mknod $DIR/mntpnt/dev/sdb3 b 8 19
 +
 +mknod $DIR/mntpnt/dev/sdc1 b 8 33
 +mknod $DIR/mntpnt/dev/sdc2 b 8 34
 +mknod $DIR/mntpnt/dev/sdc3 b 8 35
 +
 +mknod $DIR/mntpnt/dev/sdd1 b 8 49
 +mknod $DIR/mntpnt/dev/sdd2 b 8 50
 +mknod $DIR/mntpnt/dev/sdd3 b 8 51
 +
 +mknod $DIR/mntpnt/dev/sde1 b 8 65
 +mknod $DIR/mntpnt/dev/sde2 b 8 66
 +mknod $DIR/mntpnt/dev/sde3 b 8 67
 +
 +mkdir $DIR/mntpnt/dev/mapper
 +mknod $DIR/mntpnt/dev/mapper/control c 10 62
 +#mknod $DIR/mntpnt/dev/mapper/cryptpart b 253 0
 +
 +umount $DIR/mntpnt
 +losetup -d /dev/loop0
 +echo
 +echo "fertig, abmounten"
 +
 +# logeintrag mit cp: cannot stat `(0xb7fc6000)': No such file or directory
 +# ist nur ein kleiner schoenheitsfehler
 +rm $DIR/log
 +
 +echo "jetzt kann die boot cd erstellt werden"
 +</font>
 +
 +
 +<b>
 +Schritt 5 - Boot-CD erstellen</b>
 +<hr width="300" align="left">
 +Auch hier wieder im Kopf des Scriptes die Verzeichnisse usw. anpassen.
 +
 +<font color="808080">
 +#!/bin/bash
 +
 +Quelle=/mnt/usbplatte
 +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/boot/$Kernel und die initrd (muss vorher erstellt sein!) werden reinkopiert"
 +echo "diese angaben koennen ueber die configzeilen in diesem script angepasst werden"
 +echo "[enter] fuer weiter oder [ctrl]-[c] fuer stop"
 +read user_reply
 +
 +echo
 +echo "boot verzeichnis in target anlegen"
 +rm -rd target 2> $DIR/log
 +mkdir target
 +
 +echo "kernel, grub verzeichnisse und initrd reinkopieren"
 +mkdir target/boot
 +cp -a $Quelle/boot/$Kernel target/boot
 +cp -a $Quelle/boot/grub target/boot
 +cp -a $DIR/initrd target/boot
 +cp -a $Quelle/lib/modules/ $DIR/target
 +
 +echo "schreibe grubs menu.lst"
 +unlink target/boot/grub/menu.lst 2> $DIR/log
 +rm target/boot/grub/grub.conf 2> $DIR/log
 +# anmerkung iso9660 kann keine links
 +
 +echo "default 0" > target/boot/grub/menu.lst
 +echo "timeout 3" >> target/boot/grub/menu.lst
 +echo "title=GNU-Linux live usb-device" >> target/boot/grub/menu.lst
 +echo "root (cd)" >> target/boot/grub/menu.lst
 +echo "kernel (cd)/boot/$Kernel video=vesafb-tng:1024x768-16@60 root=/dev/ram0 rw init=/linuxrc cdroot" >> target/boot/grub/menu.lst
 +echo "initrd (cd)/boot/initrd" >> target/boot/grub/menu.lst
 +
 +echo
 +echo "bootCD.iso schreiben"
 +
 +mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -iso-level 4 -hide boot.catalog -o bootCD.iso target
 +
 +#rm -rd target 2> $DIR/log
 +#rm $DIR/log
 +echo
 +echo "fertig, jetzt etwa so brennen: cdrecord -v dev=/dev/hdc bootCD.iso"
 +</font>
 +
 +
 +<b>
 +Schritt 6 - Boot-CD Brennen</b>
 +<hr width="300" align="left">
 +
 +<font color="808080">
 +# cdrecord -v dev=/dev/hdc bootCD.iso"
 +</font>
 +
 +
 +<b>
 +Schritt 7 - Verschlüsseltes Filesystem</b>
 +<hr width="300" align="left">
 +Als Erweiterung ist es geplant, von einem Verschlüsselten Filesystem zu booten. Demnächst mehr.
 +
 +
 +<b>
 +Schritt 8 - Danke</b>
 +<hr width="300" align="left">
 +Ich danke allen für Erklärungen, Hilfen, Beschreibungen und freie Software.

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki