Kochwerkzeuge-Handbuch

SliTaz „Cook“ & „Cooker“

Die SliTaz-Kochwerkzeuge dienen zum Erzeugen von Paketen im SliTaz-eigenen Format. Sie sind schnell, genügsam, leicht zu erlernen und zu benutzen. Das Erstellen von Paketen für SliTaz erfordert nur wenige Kommandos. Die Kochwerkzeuge enthalten „Cook“ und „Cooker“.

Mit cook kann ein Paket aus den Quellen übersetzt und gepackt werden; dabei wird eine Protokolldatei erstellt. Die Qualität des Rezeptes und des Paketes kann geprüft werden. „Cooker“ ist ein Kompilierungsautomat, der als Benutzerschnittstelle mit einer Weboberfläche für cook verwendet werden kann. Damit können auch die Protokolldateien farbig aufbereitet angesehen werden. „Cook“ und „Cooker“ greifen auf dieselben Datenbankdateien und denselben Wok zu, sie haben gesperrte und defekte Pakete wie auch alle Aktivitäten gemeinsam.

Technische Details, wie etwa die Programmierung usw., sind in der Datei /usr/share/doc/cookutils/README beschrieben.

„Cook“-Anwendung

„Cook“ enthält eine Kurzanleitung, die mit cook usage ausgegeben werden kann. Es können auch Optionen angegeben werden, mit denen besondere Arbeiten vor oder nach der Paketerzeugung ausgeführt werden. Anzeige der Kurzanleitung:

# cook usage

Praktische Anleitung

Bevor Pakete erzeugt werden können, muss zunächst die Umgebung dafür eingerichtet werden. Es gibt zwei Möglichkeiten für die Paketerzeugung: direkt auf dem Rechner, an dem Sie angemeldet sind oder in einer „chroot“-Umgebung zum Schutz der Dateien Ihres Rechners vor ungewollten Veränderungen. Wenn Sie in einer „chroot“-Umgebung arbeiten wollen, können Sie tazdev installieren und benutzen:

# tazdev gen-chroot && tazdev chroot

Standardmäßig erzeugt tazdev eine „chroot“-Umgebung in /home/slitaz/cooking/chroot, aber Sie können auch einen Pfad als Parameter angeben. Der Ort für die „chroot“-Umgebung ist unwichtig; wenn in die „chroot“-Umgebung gewechselt wurde, werden Standard-SliTaz-Pfade wie z.B. /home/slitaz/wok für den Wok oder /home/slitaz/log für die Generierungsprotokolle verwendet. Wie üblich kann eine Kurzanleitung ausgegeben werden mit:

$ tazdev usage

Wenn Sie eine „chroot“-Umgebung verwenden, gibt es zwei besondere Verzeichnisse, die mit der bind-Option eingehängt sind: src und packages. Die Quellarchive aller Pakete werden standardmäßig im Verzeichnis /home/slitaz/src abgelegt. Dieses Verzeichnis wird in der „chroot“-Umgebung eingehängt, so dass die Programme darauf zugreifen können. Dadurch können Quellprogramme von mehreren „chroot“-Umgebungen gemeinsam benutzt werden, etwa einer für die Entwicklungsversion und einer für die stabile Version. Das Verzeichnis für die fertigen Pakete ist standardmäßig /home/slitaz/[version]/packages, also nicht in einer „chroot“-Umgebung, wo sie sicher aufbewahrt sind für den Fall, dass die „chroot“-Umgebung versehentlich verlassen wird.

Einrichten der Umgebung

Wenn Sie sich für eine der Möglichkeiten entschieden haben, kann die Umgebung für cook eingerichtet werden. „Cook“ verwendet die Konfigurationsdatei cook.conf. Wenn andere als die Standardpfade der Verzeichnisse und Dateien verwendet werden sollen, müssen diese dort eingetragen werden. Mit setup werden einige Verzeichnisse und Dateien erzeugt, in denen Aktivitäten und Fehler festgehalten werden. Alle Dateien sind einfache Textdateien, die mit einem Texteditor betrachtet werden können. Die Umgebung wird eingerichtet mit:

# cook setup

Bei setup kann mit der Option --wok bestimmt werden, dass beim Einrichten der Umgebung der Wok wok aus dem SliTaz-Mercurial-Depot dupliziert werden soll. Auch wenn Sie kein offizieller Entwickler sind, können Sie den Wok duplizieren und darin enthaltene Pakete als Muster für Ihre eigenen Pakete verwenden. Mit den folgenden Kommandos wird die Umgebung eingerichtet und der Entwicklungswok bzw. der inoffizielle Wok dupliziert:

# cook setup --wok
# cook setup --undigest

Testen der Umgebung

„Cook“ bietet die Möglichkeit, die Umgebung zu testen, indem ein Paket erzeugt wird. Damit können Sie feststellen, ob Ihre Umgebung funktionsfähig ist, und Sie haben ein Beispielpaket mit einem Rezept. Dieses Pseudo-Paket heisst cooktest und kann nach dem Test entfernt werden. Der Test wird ausgeführt mit:

# cook test

Paket erzeugen

Wenn die Umgebung korrekt eingerichtet ist, können neue Pakete für SliTaz aus dem Wok erzeugt werden. Mit dem folgenden Kommando wird ein neues Paket mit einem leeren Rezept definiert:

# cook new pkgname
Mit dem folgenden Kommando wird ein neues Paket definiert, wobei das Rezept interaktiv erstellt wird:
# cook new pkgname --interactive

Wenn Sie ein neues Paket mit leerem Rezept definiert haben, muss das Rezept mit einem Texteditor bearbeitet werden. Wenn das Rezept fertig ist, oder wenn das Paket schon existierte, kann es anschließend erstellt werden:

# cook pkgname

Wenn alles gut ging, befindet sich das Paket im Verzeichnis $SLITAZ/packages und weitere erzeugte Dateien im Verzeichnis $SLITAZ/wok/pkgname.

Paket erzeugen und installieren

Wenn das Paket erzeugt und anschließend auch installiert werden soll, geht das mit:

# cook pkgname --install

Paketquellen transferieren

Wenn Sie nur die Quelldateien eines Paketes benötigen, aber das Paket nicht erstellen wollen, können Sie die Option getsrc verwenden:

# cook pkgname --getsrc

Wok aufräumen

Nach dem Erzeugen und Packen eines Paketes enthält der Wok verschiedene Dateien, die Plattenplatz belegen. Diese Dateien eines einzelnen Paketes können gelöscht werden mit:

# cook pkgname --clean

Es können auch die Dateien aller Pakete aus dem Wok entfernt werden, oder nur die Quelldateien:

# cook clean-wok
# cook clean-src

Suchen im Wok

„Cook“ bietet auch eine einfache Suchfunktion, um schnell ein Paket im Wok zu finden. Diese verwendet grep und unterstützt damit reguläre Ausdrücke:

# cook search busybox

Rezept-Funktionen

Viele Pakete, so wie die *-dev-Pakete, enthalten gleichartige Dateien wie statische Bibliotheken, pkgconfig-Dateien und include-Dateien. Dafür bietet cook eine Funktion, die im Rezept verwendet werden kann:

get_dev_files     : Install /usr/lib/{lib.*a,pkgconfig} /usr/include

Liste der Paket-Datenbank

„Cook“ kann eine Liste der Pakete im Wok ausgeben, und zwar in einem für Tazpkg geeigneten Format. Damit kann sehr einfach ein lokales Paket-Depot erstellt werden; damit wird auch die offizielle SliTaz-Paketliste aller Spiegel-Depots erstellt. Eine Liste der Pakete im aktuellen Wok erhält auch ein nicht privilegierter Benutzer mit:

$ cook list-wok

Wenn die Paket-Datenbank erstellt wird, prüft cook, ob ein Varianten-Depot im Verzeichnis /home/slitaz/flavors vorhanden ist. Ist dies der Fall, so werden alle Varianten gemäß der letzten verfügbaren Paketliste gepackt. Das Kommando dafür ist:

# cook pkgdb

„Cooker“

„Cooker“ ist ein Kompilierungsautomat, der zunächst nach Übergaben in einem Wok sucht, eine geordnete Liste zu erzeugender Pakete erstellt und schließlich alle geänderten Pakete erzeugt. „Cooker“ kann auch als Benutzeroberfläche für cook verwendet werden, da beide dieselben Dateien benutzen. „Cooker“ kann auch eine lange Liste von Paketen abarbeiten, wie etwa alle Pakete einer Variante. „Cooker“ bietet eine gefällige Web-Oberfläche, die standardmäßig auf jedem SliTaz verwendet werden kann, da die benötigte CGI-Unterstützung von dem Busybox-Webserver httpd bereitgestellt wird.

„Cooker“ enthält eine Kurzanleitung, die mit folgenden Kommandos ausgegeben werden kann:

# cooker usage
# cooker -u

„Cooker“-Einrichtung

Wie „Cook“ benötigt auch „Cooker“ eine Arbeitsumgebung für seinen Einsatz. Der wesentliche Unterschied zur Umgebung von „Cook“ ist, dass „Cooker“ zwei Woks benötigt. Ein sauberer, aus einem Mercurial-Depot duplizierter Wok als Referenz und einen Wok für die Paketerzeugung. Damit ist es einfach, beide Woks zu vergleichen und Änderungen festzustellen. Wenn schon eine Umgebung für cook vorhanden ist, muss der Wok umbenannt werden, bevor die Umgebung für „Cooker“ eingerichtet wird, sonst meckert „Cooker“. Bei der Einrichtung wird auch eine Reihe von Entwickler-Paketen installiert, die über die Variable SETUP_PKGS in der Konfigurationsdatei cook.conf angegeben werden können. Das Kommando lautet:

# cooker setup

Wenn alles gut gegangen ist, sind jetzt zwei Woks vorhanden, die Basis-Entwickler-Pakete installiert und alle benötigten Dateien erstellt. Da zunächst nach Übergaben in einem Wok gesucht wird, können Sie testweise eingeben:

# cooker

„Cooker“-Paketerzeugung

Auch hier gibt es wieder zwei Möglichkeiten: Änderungen in dem sauberen, aus einem Mercurial-Depot duplizierten Wok vornehmen und „Cooker“ ohne Parameter starten oder Pakete manuell erzeugen. Mit „Cooker“ können ein einzelnes Paket oder alle Pakete einer Kategorie oder einer Variante erzeugt werden. Sie können auch versuchen, alle noch nicht erzeugten Pakete zu erzeugen. Beachten Sie aber, dass „Cooker“ nicht dafür eingerichtet ist, tausende von Paketen zu verarbeiten.

Ein einzelnes Paket wird (wie mit cook pkgname, aber mit erweiterter Protokollierung) erzeugt mit:

# cooker pkg pkgname

Es gibt verschiedene Möglichkeiten, mehrere Pakete mit einem Kommando zu erzeugen: Sie können ein existierendes Paket angeben, wie es für eine Variante eines ISO-Abbildes verwendet wird, oder Sie können eine Datei angeben, die je Zeile den Namen eines Paketes enthält. Schließlich können Sie auch eine Kategorie angeben.

# cooker flavor [name]
# cooker list [/path/to/cooklist]
# cooker cat [category]

„Cooker“ ermöglicht es auch, einen bestimmten Änderungsstand aus einem Mercurial-Depot anzugeben. Das ist nützlich, wenn der Kompilierungsautomat bei der Paketerzeugung unterbrochen wurde: Sie können dann bestimmte Pakete manuell erzeugen:

# cooker rev 9496

Gesperrte Pakete

„Cook“ und „Cooker“ benutzen eine Datei, die eine Liste gesperrter Pakete enthält, die nicht erzeugt werden, wenn Übergaben erfolgen oder eine Liste zu erzeugender Pakete verwendet wird. Dies ist sehr nützlich, wenn ein Kompilierungsautomat „Cooker“ in einer Produktivumgebung eingesetzt wird. Beim Sperren oder Entsperren eines Paketes kann eine Bemerkung angegeben werden. Beispiel:

# cook pkgname --block
# cooker block pkgname
# cooker -n "pkgname gesperrt, weil..."

Eine Liste der gesperrten Pakete kann auch in der Web-Oberfläche von „Cooker“ angezeigt werden. Zum Entsperren eines Paketes kann cooker unblock oder cook --unblock verwendet werden:

# cook pkgname --unblock
# cooker unblock pkgname

„Cooker“-Web-Oberfläche

Mit der „Cooker“-Web-Oberfläche können Protokolldateien farbig aufbereitet angesehen, Aktivitäten verfolgt und Fehler gesucht werden. Die dazu benötigten Dateien befinden sich im Verzeichnis /var/www/cooker. Wenn Sie keine „chroot“-Umgebung verwenden und der Busybox-Webserver httpd läuft, kann die Web-Oberfläche ohne weitere Konfigurierung verwendet werden und sollte über http://localhost/cooker/cooker.cgi erreichbar sein.

Wenn Sie eine „chroot“-Umgebung verwenden, sollten Sie cookutils ebenfalls auf Ihrem Rechner installieren und die Pfadvariable SLITAZ anpassen. Ein Standardverfahren ist es, eine chroot-Umgebung in:

/home/slitaz/cooking/chroot
zu haben und /etc/slitaz/cook.conf wie folgt zu ändern:

SLITAZ="/home/slitaz/cooking/chroot/home/slitaz"

Beachten Sie: Um die Web-Oberfläche zu verwenden ist es nicht erforderlich, cookutils auf Ihrem Rechner zu installieren. Wenn Sie Lighttpd verwenden, können Sie die Dateien cooker.cgi und style.css beispielsweise in Ihr Verzeichnis ~/Public kopieren und eine eigene Datei cook.conf dafür verwenden. Die Installation von cookutils auf Ihrem Rechner hat den Vorteil, dass Sie über die Paketverwaltung Tazpkg regelmäßig Aktualisierungen erhalten. Wenn Sie cookutils aus einem Mercurial-Depot dupliziert oder aus einem Paket-Depot transferiert haben:

$ cp -a cookutils/web ~/Public/cgi-bin/cooker
$ cp -f cookutils/cook.conf ~/Public/cgi-bin/cooker

Ändern Sie in der Konfigurationsdatei ~/Public/cgi-bin/cooker/cook.conf in der Variablen SLITAZ den Pfad und alles ist erledigt!

Erzeugungsnotizen

Die Notizfunktion ermöglicht es, kleine persönliche Bemerkungen über die Paketerzeugung zu hinterlegen und nutzt der Zusammenarbeit mit anderen Entwicklern. Diese Funktion ist implementiert worden, um Informationen zwischen den Betreuern des Kompilierungsautomaten „Cooker“ und Entwicklern auszutauschen. „Cooker“ kann ein Paket sperren, so dass es nicht mehr erzeugt wird. Dann ist es hilfreich, beim Sperren eine Notiz zu hinterlegen, warum das Paket gesperrt wurde. Die Erzeugungsnotizen werden an der Web-Oberfläche angezeigt und können per Kommando erstellt und abgerufen werden:

# cooker note "pkgname wegen hoher CPU-Last gesperrt"
# cooker notes

„Cooker“ als Kompilierungsautomat

„Cooker“ ist als Kompilierungsautomat für SliTaz gestaltet, das heißt er überwacht zwei Woks, aktualisiert den Mercurial-Wok, stellt die Unterschiede fest und erzeugt alle übergebenen Pakete. Die sicherere und sauberere Art, „Cooker“ als Kompilierungsautomat einzusetzen, stellt die Nutzung einer „chroot“-Umgebung dar; aber auch der direkte Ablauf auf Ihrem Rechner ist möglich.

Mit cron in der „chroot“-Umgebung kann „Cooker“ automatisch gestartet werden, indem in die Datei /var/spool/cron/crontabs/root eine entsprechende Zeile eingefügt wird. Wenn „Cooker“ alle zwei Stunden gestartet werden soll zum Beispiel:

* */2 * * * /usr/bin/cooker

„Cooker“-Kompilierungsautomat bei der Systemeinleitung starten

Bei der Systemeinleitung kann die Umgebung für „Cooker“ eingerichtet werden und der cron-Prozess gestartet werden. Damit dies richtig funktioniert, muss das Paket cookutils-daemon installiert sein und eine Standard-SliTaz-Installation verwendet werden (die Paketerzeugung spielt sich in /home/slitaz/cooking ab). Die Kommandoprozedur von cookutils-daemon hängt alle benötigten virtuellen Dateisysteme ein wie auch source und packages. Quelldateien befinden sich im Verzeichnis /home/slitaz/src und werden in die „chroot“-Umgebung eingebunden, so dass Paketquellen in verschiedenen Versionen (stabil, Entwicklung, inoffiziell) gemeinsam benutzt werden können. So wird cookutils-daemon installiert:

# tazpkg get-install cookutils-daemon

Damit der Hintergrundprozess gestartet werden kann, muss in der „chroot“-Umgebung eine cron-Datei für root vorhanden sein. Die Kommandoprozedur funktioniert wie die aller anderen Hintergrundprozesse und wird aufgerufen mit:

# /etc/init.d/cooker [start|stop|restart]