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 pkgnameMit 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/chrootzu 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]