Mini-Gentoo
Aus Gentoo Linux Wiki
| Installationsmethoden • LiveCDs • Kernel & Hardware • Laptops & Notebooks • Portage • System • Netzwerke & Services • X • Software • Anderes • alphabetischer HOWTO Index |
Dies ist eine Anleitung, mit der man ein möglichst kleines Linux mit ca. 8 MB (uClibc) oder ca. 45 MB (glibc) für beispielsweise USB-Speichersticks oder DoC-Module aufsetzt. Eigentlich nur eine Übersetzung des TinyGentoo-Howtos, aber immerhin ;)
Inhaltsverzeichnis |
[Bearbeiten] Was man braucht
- Den Speicher, auf dem man das System haben möchte. Mindestens 8 MB...
- Einen PC oder Laptop, der das Medium booten kann
- ca. 500 MB freien Festplattenspeicher
- Eine lauffähige Linux-Distribution (vorzugsweise Gentoo Linux)
- Etwas Zeit (kommt auf den verwendeten PC an) und Linux-Grundkentnisse und/oder Experimentierfreudigkeit ;)
[Bearbeiten] uClibc oder glibc?
Die Entscheidung, ob du die uClibc oder die glibc verwenden solltest ist eigentlich einfach. Vorteil der uClibc ist, dass sie sehr klein ist (ca. 5 MB). Ihr Nachteil ist, dass du keine Binärdateien ausführen kannst, die mit der glibc kompiliert wurden. Bei der glibc ist es genau umgekehrt. Es können keine mit der uClibc kompilierten Programme ausgeführt werden, außerdem ist sie viel größer (ca. 45 MB). Da die meisten Programme, die man als Binärpaket angeboten bekommt aber mit der glibc kompiliert wurden, sind diese nur zur glibc kompatibel. Wenn man also genug Speicherplatz hat, sollte man daher auf jeden Fall zur glibc greifen. Die uClibc stellt auch noch nicht 100% der glibc Funktionen zur Verfügung, das führt dazu das sich einige Programme (z.B. VDR) nicht mit der uClibc (ohne Patches) kompilieren lassen.
[Bearbeiten] Los geht's
Als erstes musst du ein passendes Stage-Archiv herunter laden. Wähle dazu einen Mirror in deiner Nähe aus und wechsle in das Verzeichnis experimental/x86/embedded/stages für eine Installation mit der uClibc oder in das Verzeichnis releases/x86/current/stages/ für eine glibc-Installation und lade jeweils das neueste Stage3-Archiv herunter. Ein Stage1- oder Stage2-Archiv bringt hier nichts, da das eigentliche System in jedem Fall komplett kompiliert wird.
[Bearbeiten] Betreten der chroot-Umgebung
mkdir /mnt/gentoo_uclibc #nur ein Beispiel. Verwende einen Namen deiner Wahl. cd /mnt/gentoo_uclibc mv <Pfad zum Stagearchiv>/stage* . tar xjpf stage*.tar.bz2 cp -L /etc/resolv.conf etc/resolv.conf mkdir -p usr/portage
solltest du eine andere Distribution außer Gentoo Linux verwenden, lade dir bitte den aktuellsten Portage-Tarball herunter (auf jedem Mirror snapshots/portage-latest.tar.bz2) und entpacke ihn mit dem Befehl
tar xvjpf portage-latest.tar.bz2 -C /usr/
wenn du Gentoo verwendest, dann binde dein Portage-Verzeichnis im chroot. Diesen Schritt musst du jedes mal machen, wenn du die chroot-Umgebung betrittst!
mount --bind /usr/portage /mnt/gentoo_uclibc/usr/portage
Sobald dein Portage Verzeichnis eingebunden ist, musst Du auch diese Schritte jedes mal machen, wenn du die chroot-Umgebung betrittst!
mount -o bind /dev /mnt/gentoo_uclibc/dev mount -t proc none /mnt/gentoo_uclibc/proc chroot /mnt/gentoo_uclibc/ /bin/bash env-update && source /etc/profile
[Bearbeiten] Grundeinstellungen für die chroot-Umgebung
Wir möchten, dass alle Symlinks für BusyBox erzeugt werden und dass alle Pakete, die es unterstützen, das Useflag "minimal" benutzen. Füge dafür Folgendes zu deiner make.conf hinzu:
| Datei: /etc/make.conf |
FEATURES="ccache buildpkg" # To use previously built packages, use the -k option with emerge
USE="minimal"
PKGDIR="${PORTDIR}/packages/uclibc" # Store .tbz2's in their own directory
|
Weiter geht's mit dem Updaten des Systems und dem Emergen des Kernels. Es wäre theoretisch möglich, einen Kernel außerhalb des Chroots zu verwenden, aber das würde eventuell irritieren.
| Code: chroot Updaten |
ln -snf /usr/portage/profiles/uclibc/x86 /etc/make.profile #für glibc an Stelle von /usr/portage/profiles/uclibc/x86 #/usr/portage/profiles/default-linux/x86 verwenden! emerge ccache emerge -au portage emerge -auDN world emerge gentoo-sources cp /etc/skel/.bash_profile /etc/skel/.bashrc /root/ mkdir /mini-gentoo |
Falls "emerge -auDN world" bei busybox fehlschlägt, versuche zuerst "emerge uclibc" und versuche dann nocheinmal "emerge -auDN world".
[Bearbeiten] /mini-gentoo
Alles, das später auf dem Flash-Speicher oder was auch immer sein wird, kommt in dieses Verzeichnis. Es wird kein gcc oder portage benötigt. Nur das, was du haben möchtest.
[Bearbeiten] Basispakete emergen
mkdir -p /etc/portage echo "sys-apps/baselayout-lite **" >> /etc/portage/package.keywords
für uClibc:
ROOT=/mini-gentoo USE=make-symlinks emerge -avkN baselayout-lite uclibc busybox
für glibc:
ROOT=/mini-gentoo USE=make-symlinks emerge -avkN baselayout-lite glibc busybox
[Bearbeiten] Benutzernamen erstellen
Betrete die Umgebung in /mini-gentoo und setze das root-Passwort. Beachte, dass die Shell die mit BusyBox kommt nicht /bin/bash ist, sondern /bin/ash.
chroot /mini-gentoo /bin/ash passwd
Sollte bei passwd der Fehler "passwd: cannot update password file /etc/shadow" auftreten muß man die chroot-Umgebung verlassen und die Datei "/etc/shadow" kopieren, ansonsten kann dieser Schritt übersprungen werden.
exit cp /etc/shadow /mini-gentoo/etc/ chroot /mini-gentoo /bin/ash passwd
Füge einen normalen Benutzer hinzu. Ändere "foo" in deinen Benutzernamen!
addgroup -g 100 users adduser -h /home/foo -s /bin/ash -G users foo
Verlasse die Umgebung.
exit
[Bearbeiten] Setze den Computernamen
Ersetze Mini-Gentoo durch einen beliebigen Computernamen.
echo "Mini-Gentoo" > /mini-gentoo/etc/hostname
[Bearbeiten] fstab bearbeiten
Damit beim Booten alles nötige gemountet wird, bearbeite deine fstab wie folgt:
| Datei: /mini-gentoo/etc/fstab |
none /tmp tmpfs defaults 0 0 none /proc proc defaults 0 0 /dev/sda1 / ext2 defaults 0 0 |
[Bearbeiten] /init schreiben
| Datei: /mini-gentoo/init |
#!/bin/ash echo echo echo " Welcome to Mini-Gentoo." echo echo echo " * Setting umask.." umask 022 echo " * Mounting /proc.." mount -t proc none /proc echo " * Starting init.." exec <dev/console >dev/console 2>&1 exec chroot . /sbin/init echo "*Starting Network (device eth0)...." dhcpcd eth0 echo " *** Starting init failed! ***" echo " * Trying to start a shell.." exec /bin/ash |
Vergiss nicht, die Datei ausführbar zu machen mit chmod +x /mini-gentoo/init
[Bearbeiten] Gewünschte Pakete nach /mini-gentoo emergen
Jetzt ist es Zeit, die Pakete, die man im Mini-Gentoo haben möchte zu emergen. Dazu einfach so emergen. Was folgt sind Beispiele. Beachte jedoch, dass ohne das Paket dhcpcd das Netzwerk nicht ohne Anpassung der /mini-gentoo/init und /mini-gentoo/etc/conf.d/net funktionieren wird.
ROOT=/mini-gentoo emerge -avk dhcpcd lynx scrollz dropbear screen
[Bearbeiten] Kernel
Konfiguriere den Kernel nach deinen Bedürfnissen. Wenn du ihn nicht manuell konfigurieren willst, kannst du auch unten ab Alternativ: Kernel mit genkernel compilieren weiter lesen.
cd /usr/src/linux make menuconfig
Du solltest darauf achten, dass die Unterstützung für USB-Massenspeicher aktiviert ist.
USB support ---> <*> Support for USB <*> EHCI HCD (USB 2.0) support (EXPERIMENTAL) <*> UHCI Alternate Driver (JE) support <*> OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support <*> USB Mass Storage support
[Bearbeiten] Kernel kompilieren
Kompiliere den Kernel und kopiere ihn in das Mini-Gentoo-Basisverzeichnis.
make -j2 && make modules_install mkdir -p /mini-gentoo/boot cp arch/i386/boot/bzImage /mini-gentoo/boot/vmlinuz-minigentoo
[Bearbeiten] Alternativ: Kernel mit genkernel compilieren
Mit Genkernel wird die Hardware beim Booten automatisch ermittelt, ähnlich wie z.B. bei den Gentoo-Install CDs. Dies ist, gerade wenn das Mini-Gentoo später auf mehreren Rechnern verwendet werden soll, sehr günstig. Dazu wird zunächst das Packet genkernel benötigt, womit dann der Kernel compiliert wird.
emerge genkernel genkernel all
Dies dauert eine ganze Weile, weil bei der Verwendung von genkernel alle Module erstellt werden. Sollte eine Warnmeldung bezüglich des boot Verzeichnisses kommen, kann diese ignoriert werden.
Zur Orientierung bezüglich der "ganzen Weile": AMD Athlon X2 4600+, 2048 MB RAM --> 10m24s
Danach kann man den Kernel und die Initramfs auf das neue System kopieren.
cp /boot/kernel* /mini-gentoo/boot/vmlinuz-minigentoo cp /boot/initramfs* /mini-gentoo/boot/initrd
[Bearbeiten] Module kopieren
Wir wollen alle Module in unserem Basisverzeichnis, also müssen wir sie dort hin kopieren.
mkdir -p /mini-gentoo/lib/modules cp -vr /lib/modules/* /mini-gentoo/lib/modules/
[Bearbeiten] Vorbereiten der USB-Flashdisk
Zuerst werden wir den Inhalt der Flashdisk sichern und dann eine Partition für Mini-Gentoo erstellen.
[Bearbeiten] Sicherung der alten Daten erstellen
Falls du Mini-Gentoo nur ausprobieren willst, oder sonst was, werden wir die Daten des Flash-Speichers sichern. Dazu erstellen wir einfach eine Rohkopie. Vergewissere dich, dass du das richtige Gerät verwendest. /dev/sda kann auch eine SCSI- (oder SATA-) Festplatte, eine Digitalkamera oder ein MP3-Player sein. Du solltest die Sicherung, Partitionierung, usw. außerhalb des Chroots vornehmen. Es funktioniert aber auch so...
cd /root dd if=/dev/sda of=dongle_backup.img bs=4K gzip dongle_backup.img
[Bearbeiten] Erstellen der Partitionen
Verwende cfdisk (oder ähnliches), um den USB-Speicher zu partitionieren. Erstelle eine Partition. Bei Bedarf kannst du eine zweite Partition mit dem Typ "W95 FAT32" erstellen, die unter Windows benutzbar ist (muss erst formatiert werden).
cfdisk /dev/sda mke2fs /dev/sda1 (Optional) mkfs.vfat -v -F 32 -n label /dev/sda2
[Bearbeiten] Grub installieren
Erst müssen die Grub Stages kopiert werden.
mkdir /mnt/dongle mount /dev/sda1 /mnt/dongle mkdir -p /mnt/dongle/boot/grub cp /boot/grub/stage? /boot/grub/e2fs_stage1_5 /mnt/dongle/boot/grub/ umount /mnt/dongle
und anschließend Grub installiert werden.
grub grub> device (hd0) /dev/sda grub> root (hd0,0) grub> setup (hd0) grub> quit
[Bearbeiten] Grubs menu.lst bearbeiten
mount /dev/sda1 /mnt/dongle nano /mnt/dongle/boot/grub/menu.lst
Schreibe das in die menu.lst
timeout 3 title TinyGentoo root (hd0,0) kernel /boot/vmlinuz-minigentoo root=/dev/sda1 init=/init
Sollte genkernel verwendet worden sein, so muss das in die menu.lst geschrieben werden
timeout 3 title TinyGentoo root (hd0,0) kernel /boot/vmlinuz-minigentoo root=/dev/ram0 init=/init ramdisk=8192 real_root=/dev/sda1 udev initrd /boot/initrd
[Bearbeiten] Kopieren der wichtigen Dateien
Kopiere einfach alles aus /mini-gentoo auf die erste Partition des Flash-Speichers.
cp -a /mini-gentoo/* /mnt/dongle/
[Bearbeiten] Neustarten und Spaß haben
Fertig, jetzt muss man nur noch vom USB-Speicher booten und fertig.
