Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:mobileroot

Dies ist eine alte Version des Dokuments!


Hinweis: Diese Projektbeschreibung wurde unverändert von http://lugsaar.de übernommen. Sie sollte an die Wiki-Syntax angepasst werden und die Infobox rechts mit den richtigen Informationen gefüllt werden.

Vor allem sollte die Dokumentation überarbeitet werden und auf den aktuellen Stand gebracht werden.

Danach kann dieser Hinweis entfernt werden.

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 „+ © 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:1024×768-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.

projekte/mobileroot.1367454257.txt.gz · Zuletzt geändert: 2021/01/17 01:07 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki