Mini-Gentoo

Aus Gentoo Linux Wiki

Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der HOWTO Sammlung.
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.

'Persönliche Werkzeuge