Feinabstimmung
Portage – das Paketsystem von Gentoo Linux
Ebuilds
Die Gentoo-Paketdatenbank trägt den Namen Portage und umfasst derzeit weit über 100 000 nach Paketgruppen sortierten Dateien samt Beschreibungen. Die Paketbeschreibungen Portages heißen unter Gentoo Linux Ebuilds. Sie legen fest, was mit dem Paket nach dem Download aus dem Internet passiert.
Über den ganzen Globus verstreute Rsync-Server verteilen und aktualisieren Portage ständig. Die Datenbank auf dem lokalen Rechner bringt der Befehl emerge --sync auf den aktuellen Stand. Das sollte allerdings nicht dazu einladen, jeden Tag eine Portage-Aktualisierung und danach ein System-Update seiner Gentoo-Installation zu machen.
Sicherheits-Updates müssen dagegen laufend erfolgen. Im Web unter [4] meldet das Gentoo-Projekt gefundene Sicherheitslücken. Im Paket app-portage/portage-utils gibt es das Tool glsa-check, das nach Berichten über Sichwachstellen sucht. Allerdings steckt es derzeit noch in der Testphase und eignet sich nicht für den Einsatz auf Produktivsystemen.
Ein Update der Installation führt der Befehl emerge -u world aus, wobei auch hier wieder der Optionskombi -pv nützlich ist, um die zu aktualisierenden Pakete anzuzeigen. Diese kennzeichnet anstelle eines N oder R ein U.
Ein Beispiel für ein Ebuild findet sich in Listing 2. Die Abbildung 2 zeigt den schematischen Ablauf beim Einspielen des Paketes. Es handelt sich dabei wieder um Xfig, dessen Ebuild in der Datenbank unter /usr/portage/media-gfx/xfig/xfig-3.2.4-r2.ebuild liegt. Ebuilds bedienen sich einer eigenen auf Python basierten Syntax und unterteilen sich in einen deklarierenden Teil sowie drei Kernabschnitte.
Listing 2
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/media-gfx/xfig/xfig-3.2.4-r1.ebuild,v 1.10 2004/11/01 20:17:28 corsair Exp $
inherit eutils
MY_P=${PN}.${PV}
S=${WORKDIR}/${MY_P}
DESCRIPTION="A menu-driven tool to draw and manipulate objects interactively in an X window."
HOMEPAGE="http://www.xfig.org"
SRC_URI="http://www.xfig.org/xfigdist/${MY_P}.full.tar.gz
mirror://gentoo/${P}-gentoo.diff.bz2"
LICENSE="BSD"
SLOT="0"
KEYWORDS="x86 ppc ~sparc alpha ~hppa amd64 ~ppc64"
IUSE=""
DEPEND="virtual/x11
x11-libs/Xaw3d
media-libs/jpeg
media-libs/libpng"
RDEPEND="${DEPEND}
media-gfx/transfig
media-libs/netpbm"
src_unpack() {
unpack ${A}
cd ${S}
epatch ${WORKDIR}/${P}-gentoo.diff
epatch ${FILESDIR}/${P}-xaw3d.diff
}
src_compile() {
xmkmf || die
make || die
}
src_install() {
make DESTDIR=${D} install || die
make \
DESTDIR=${D} \
MANDIR=/usr/share/man/man1 \
MANSUFFIX=1 \
install.all || die
dodoc README FIGAPPS CHANGES LATEX.AND.XFIG
}
Die Deklaration beschreibt vorab die Paketbezeichnung in der Variablen MY_P, die sich aus Paketnamen und Version zusammensetzt. In Zeile 9 legt DESCRIPTION die Beschreibung fest, die eine Suche nach dem Paket ausspuckt. Zeile 11 gibt an, wo Emerge das Paket im Internet findet.
Die KEYWORDS in Zeile 16 legen fest, für welche Architektur das Paket als stabil (ohne Tilde) respektive instabil (mit Tilde) gilt. Die darauf folgenden Tags DEPEND und RDEPEND teilen Emerge mit, welche Abhängigkeiten das Paket hat. In Zeile 27 beginnt mit src_unpack() die Installation. Dann leitet der Ebuild das Entpacken des Pakets in das Temporärverzeichnis von Portage ein, wechselt dorthin und patcht nötigenfalls die Quellen. Das Einpflegen von Patches übernehmen die Package-Maintainer von Gentoo, um etwaige Probleme bei der Installation auszuräumen.
Im zweiten Teil beginnt der arbeitsintensivste Schritt, das Kompilieren. Der Befehl in Zeile 35 erstellt ein Makefile, der folgende übersetzt das Paket. Je nach Größe des Quellcodes und Leistung des Rechners dauert dieser Vorgang entsprechend lange. Auf einem Pentium-4 mit 1 GByte Speicher dauert das Übersetzen von Xfig etwas mehr als zwei Minuten.
Ist das Paket kompiliert, folgt das Kopieren der fertigen Produkte ins Dateisystem. Das erledigt der Abschnitt src_install().
Hoch flexibel
Die hohe Anpassungsfähigkeit von Gentoo Linux verleiht der Distribution eine besondere Note. Hier bestimmt der User, wie sein System letztendlich aussieht. Daher eignet sich Gentoo perfekt für Desktop-, aber gerade auch für Server-Systeme. Ein Server braucht keine grafische Oberfläche, da die meiste Arbeit via SSH über die Konsole erfolgt.
Ferner verschmilzt das Kompilat mit seinem Rechner geradezu. Deshalb ist Gentoo ein perfektes Betriebssystem für den professionellen IT-Einsatz, aber gerade auch für User mit Experimentierdrang und Spieltrieb. Letzteren befriedigen beispielweise auch die Paketgruppen games-fps und games-rpg. Außerdem gibt es wohl keine Distribution mit einer aktiveren Community. Hilfe und erste Schritte bei der Arbeit und Installation von und mit Gentoo liefert die umfangreiche Dokumentation [5] sowie der zweiteilige Gentoo-Workshop in LinuxUser [6, 7].
Konfigurationsdatei
Die Konfigurationsdatei /etc/make.conf fasst alle wichtigen, zum Übersetzen und zur Installation notwendigen Optionen zusammen. Etliche davon muss man kaum je ändern: etwa jene, die beschreiben, woher Gentoo seine Pakete bezieht, und mit welchen Kommandos das geschieht. Die Beispiel-Konfigurationsdatei /etc/make.conf.example enthält sehr gute Kommentare. In /etc/make.globals finden sich grundlegende Optionen, die man ebenfalls nicht zu editieren braucht.
Compiler-Optionen
Die Variable CHOST sollte man nicht verändern, da das System sonst irreparabel beschädigt und die weitere Arbeit damit unmöglich würde. Sichere Compiler-Optionen für die CFLAGS und CXXFLAGS finden sich im Netz unter [2]. Die GNU-Compiler für C und C++ bieten weitaus mehr Flags als dort beschrieben, aber auch hier gilt Vorsicht beim Experimentieren. Im Allgemeinen sind folgende Optionen für die meisten Architekturen die sichersten:
CFLAGS="-march=<I>Architektur<I> -O2 -pipe -fomit-frame-pointer"
CXXFLAGS="${CFLAGS}"
Das Flag -march bestimmt die Compiler-Optionen für die Rechnerarchitektur. Zum Übersetzen der Pakete für alle Intel-basierten CPUs ab einem Pentium Pro dient hier beispielsweise ein i686. Für einen AMD64 hieße das korrekte Flag -march=k8, für einen Pentium 4 mit EM64T -march=nocona.
Die Option -O legt den Grad des Optimierens fest. -Os optimiert die Kompilate auf Größe, was speziell für Embedded-Systemen Sinn macht. -O3 verursacht bei vielen Paketen. Damit während des Übersetzens keine temporären Dateien anfallen, sorgt die Option -pipe dafür, dass die Übersetzungsprozesse direkt miteinander kommunizieren. Die Option -fomit-frame-pointer verwirft Debug-Informationen, die einem Entwickler zwar nützliche Informationen liefern, dem Anwender aber eher egal sind.
Eine weitere Compiler-Option findet sich mit MAKEOPTS="-j2" weiter unten in der Konfigurationsdatei. Dies legt die Anzahl von parallel ausführbaren Übersetzungsprozessen fest – in der Regel also die Anzahl der Prozessoren (auch Hyperthreading) plus Eins.
USE-Flags
Die USE-Flags legen fest, welche Features ein übersetztes Programm unterstützt. In vielerlei Fällen bestimmen die USE-Flags die Parameter, die das System dem Configure-Skript vor dem Kompilieren übergibt. Die Stärke der USE-Flags liegt darin, dass sie es erlauben, das System ganz konkret an die jeweiligen Anforderungen anzupassen.
Ein Server beispielsweise braucht keine grafische Oberfläche, was man in der Konfigurationsdatei einfach mit USE="-X -kde -gnome -arts einstellt. Binary-Distributionen dagegen benötigen spezifische Server- und Client-Pakete, unter Gentoo genügt das Anpassen der USE-Flags.
Portage
Einige Optionen bestimmen das Verhalten der Paketdatenbank Portage. Hier legt der Benutzer über /var/tmp fest, wo die temporären Daten während des Übersetzens liegen sollen. Außerdem finden sich Angaben zur Lokation der Paketdatenbank und der Quellpakete. Ein wichtiger Aspekt ist hier das PORTDIR_OVERLAY.
Die lokale Paketdatenbank Gentoos logiert unter /usr/portage. Durch die Pfadangabe in PORTDIR_OVERLAY legt das System eine zusätzliche Paketdatenbank im Pfad an. Die Variable darf mehrere Pfade enthalten. Auf diese Weise trennen Sie die Standardpakete sauber von solchen, die Sie von Dritten einspielen [8].
Features
Der Features-Abschnitt erlaubt, spezielle Funktionen für das Kompilieren festzulegen. Beispielsweise forciert FEATURES="ccache" den Einsatz des Programms Ccache. Oft verarbeitet der Compiler beim Übersetzen Teile von Programmen und deren Abhängigkeiten doppelt. In diesem Fall greift Ccache ein und puffert die Ergebnisse. Das ermöglicht ein fünf- bis zehnfach schnelleres Übersetzen. Die Umgebungsvariablen CCACHE_SIZE und CCACHE_DIR in /etc/make.conf sorgen dabei für das Feintuning.
Eine wichtige Option stellt ACCEPT_KEYWORDS dar. Sie legt fest, ob das Paketsystem ausschließlich stabile – also als definitiv kompilierbar eingestufte – Pakete nutzt, oder auch solche, die noch nicht ausreichend getestet wurden. Die Option ACCEPT_KEYWORDS="~x86" vor einem Emerge legt fest, dass das System ein als noch nicht stabil eingestuftes Paket mit höherer Versionsnummer installiert. Für einen AMD-Prozessor lautet die entsprechende Angabe ~amd. Wer Probleme beim Installieren mit ACCEPT_KEYWORDS="~x86" hat, findet im Gentoo-Forum [9] garantiert Gleichgesinnte und mit hoher Wahrscheinlichkeit auch eine Lösung.
Infos
[1] Gentoo Linux: http://www.gentoo.org
[2] Sichere Compiler-Flags: http://gentoo-wiki.com/Safe_Cflags
[3] Portage-Online-Suche: http://www.gentoo-portage.com
[4] Gentoo Linux Security Advisories (GLSA): http://www.gentoo.org/security/en/glsa/
[5] Gentoo-Linux-Dokumentationen: http://www.gentoo.org/doc/de/index.xml
[6] Gentoo-Workshop (Teil 1): Alexander Reiterer, "Installation in 12 Schritten", LinuxUser 05/2005, S. 68
[7] Gentoo-Workshop (Teil 2): Alexander Reiterer, "Systemwartung mit Portage", LinuxUser 06/2005, S. 69
[8] Zusätzliche Paketdaten einbinden: http://gentoo-wiki.com/HOWTO_Installing_3rd_Party_Ebuilds
[9] Gentoo-Forum: http://forums.gentoo.org



