====== Wok & Kochwerkzeuge ====== ===== Übersicht ===== Die [[http://hg.slitaz.org/cookutils/raw-file/tip/doc/cookutils.de.html|Kochwerkzeuge]] werden verwendet, um nach den Anweisungen in einem Rezept aus Quellprogrammen ausführbare Programme zu erzeugen (kochen). Die so erzeugten Dateien werden in einem Verzeichnis abgelegt, woraus dann Tazpkg ein Paket erzeugt. Das Rezept in einem Wok unterscheidet sich im „unteren Teil“ von einem Rezept für Tazpkg: Die Kochwerkzeuge benötigen im Rezept Regeln für die Übersetzung **und** das Paketpacken (letztere werden an Tazpkg durchgereicht), wohingegen Tazpkg nur Regeln für das Paketpacken braucht. Die Kochwerkzeuge sind Kommandoprozeduren, mit deren Hilfe vom SliTaz-Projekt automatisch Distributionen aus den Quellprogrammen erzeugt werden. Das Projekt enthält auch ein Archiv mit [[de:cookbook:slitaztools|Werkzeugen]], Beispielen und Konfigurationsdateien. Die Prozedur [[http://hg.slitaz.org/tazlito/raw-file/tip/doc/tazlito.de.html|Tazlito]] zum Erzeugen von Distributionen kann sowohl von Anwendern als auch von Entwicklern verwendet werden; mit ihrer Hilfe kann ein ISO-Abbild transferiert, wieder erzeugt oder verändert werden, indem mithilfe einer Paketliste, einer Konfigurationsdatei und einer Beschreibung eine Variante erzeugt wird. Die Kochwerkzeuge sind alle standardmäßig auf SliTaz installiert. Entwickler und künftige Mitwirkende können sich in der [[http://www.slitaz.org/de/devel/forge.php|Entwickler-Abteilung]] über die SliTaz-Projektverwaltung informieren. === Struktur des Wok === Der Wok ist ein Verzeichnisbaum, der alle verfügbaren Pakete aufnimmt. Jedes Unterverzeichnis (für ein Paket) enthält mindestens ein Rezept, in dem beschrieben ist, wie und woher die Quellen des Pakets zu transferieren sind, wie sie entpackt werden, wie sie übersetzt werden und schließlich wie ein Paket gepackt wird. Die Kochwerkzeuge legen auch ein Verzeichnis an, wohin die Paketquellen transferiert werden (Variable ''SOURCES_REPOSITORY'', standardmäßig ''/home/slitaz/src'') und ein Verzeichnis, in das die gepackten Pakete abgelegt werden (Variable ''PACKAGES_REPOSITORY'', standardmäßig ''/home/slitaz/packages''); in der Datei ''/etc/slitaz/cook.conf'' können über die genannten Variablen andere Namen für diese Verzeichnisse festgelegt werden. In den [[http://hg.slitaz.org|Mercurial-Depots]] gibt es mehr als nur einen Wok: * ''**wok-undigest**'': Zulieferungen, die noch getestet oder korrigiert werden müssen, ehe sie in den Entwicklungswok übernommen werden können * ''**wok**'': Pakete in der Entwicklung („cooking“) * ''**wok-stable**'': Pakete einer stabilen SliTaz-Freigabe Zunächst wird jede Zulieferung in den inoffiziellen Wok ''wok-undigest'' übernommen. Wenn das Paket im Hinblick auf die automatische Erzeugung ausreichend getestet wurde, kann es in den Entwicklungswok ''wok'' übernommen werden. ===== Vorbereitungen ===== Die [[http://www.slitaz.org/de/devel/forge.php|Entwickler-Abteilung]] enthält wertvolle Hintergrundinformationen. Lesen Sie diese bitte und fahren Sie erst fort, wenn Sie diese verstanden haben. Um einen Wok verwenden zu können, müssen zunächst die [[http://hg.slitaz.org/cookutils/raw-file/tip/doc/cookutils.de.html|Kochwerkzeuge]] zusammen mit den wichtigsten Entwicklerwerkzeugen (''binutils'', Übersetzer, ''libraries-dev'', ''make'') installiert werden. Dies kann durch Installation des Meta-Paketes ''slitaz-toolchain'' geschehen: # tazpkg recharge # tazpkg get-install slitaz-toolchain Um auf die SliTaz-Depots zugreifen zu können, muss das Paket ''mercurial'' installiert werden: # tazpkg get-install mercurial Weitere Informationen über das Mercurial-Versionsverwaltungssystem sind in seiner [[http://mercurial-scm.org/|Internetpräsenz]] und in dem Buch [[http://hgbook.red-bean.com/|Mercurial: The Definitive Guide]] erhältlich. === Den Wok duplizieren === Soll ein Paket erstellt werden, das später in die SliTaz-Depots übernommen werden soll, muss zunächst mit Mercurial der aktuelle Wok dupliziert werden. Dieses Duplizieren („cloning“) des Woks besteht darin, dass der ganze Wok mitsamt seiner ganzen Historie in ein Arbeitsverzeichnis (standardmäßig ''/home/slitaz/wok'') transferiert wird. **Dies ist nicht erforderlich, wenn mit den Kochwerkzeugen nur Pakete für den privaten Gebrauch erstellt werden sollen.** Das Verfahren dafür ist im Abschnitt [[#privaten-wok-einrichten|Privaten Wok einrichten]] beschrieben. # cook setup --wok Der Transfer kann einige Zeit dauern; danach ist der vollständige Verzeichnisbaum des [[http://hg.slitaz.org/wok/|Entwicklungswoks]] im Arbeitsverzeichnis vorhanden. Ein Wok ist eines von vielen Projekten in den [[http://hg.slitaz.org|Mercurial-Depots]]. Einzelne Pakete sind zu größeren Projekten zusammengefasst (wok, wok-stable oder wok-undigest) und es gibt keine eigenen Unter-Projekte, sondern nur Unterverzeichnisse; Mercurial kann einzelne Teile eines Projektes (noch) nicht duplizieren, weshalb ein einzelnes Paket nicht dupliziert werden kann. === Privaten Wok einrichten === Soll ein Paket nur für den privaten Gebrauch erstellt werden, also nicht in die SliTaz-Depots übernommen werden, kann ein leerer Wok eingerichtet werden: # cook setup ===== Übersetzen und Erzeugen von Paketen ===== Vor der Übersetzung eines Quell-Paketes muss den Kochwerkzeugen das Arbeitsverzeichnis bekannt gemacht werden. Standardmäßig ist dies ''/home/slitaz/wok''. Der Pfadname kann aber geändert werden. Die Erstellung eines SliTaz-Paketes aus den Quellprogrammen kann so zusammengefasst werden: [[http://www.tuxfiles.org/linuxhelp/softinstall.html#s2|konfigurieren]], [[http://www.tuxfiles.org/linuxhelp/softinstall.html#s3|übersetzen]] & [[http://linux.die.net/man/1/strip|abreichern]]. Die "make install"-artigen Schritte werden nicht ausgeführt: die erzeugten Dateien werden nicht installiert, sondern verbleiben in dem Verzeichnis ($DESTDIR), wo sie für das Paketpacken bereitstehen. Beim Kochen Ihres ersten Paketes sollten Sie [[http://doc.slitaz.org/de:cookbook:devcorner#kiss-comply-to-standards|es einfach halten]] und das Rezept nicht ändern. M4 ist ein geeigneter Kandidat für Ihren ersten Kochversuch: # cook m4 Wenn ''cook'' mit der Erstellung von M4 fertig ist, befindet sich das erzeugte Paket standardmäßig im Verzeichnis ''/home/slitaz/packages'' oder in dem in der Konfigurationsdatei angegebenen. Wenn alles funktioniert hat, kann das Paket dann installiert werden oder es kann mit Tazlito in ein ISO-Abbild übernommen werden! Wenn Sie sich mit [[de:cookbook:receipt|Rezepten]] und dem Kompilierungsprozess vertraut gemacht haben, können sie mit dem folgenden Kommando ein neues Paket erzeugen, wobei Sie zunächst interaktiv ein Rezept schreiben: # cook new --interactive Um Frustrationen zu vermeiden, sollten Sie sich zuvor die Dokumentation über [[de:cookbook:receipt|Rezepte]] und die [[de:guides:tazwoktips|Tazwok-Tipps]] durchlesen! === Mehrere Pakete aus einer Liste kochen === Mit ''cook'' können auch mehrere Pakete mit einem einzigen Kommando erzeugt werden. Dazu wird eine Kochliste verwendet, das ist eine Textdatei mit einem Paketnamen je Zeile. Mit einer Kochliste ''mypkgs.cooklist'' sieht das Kommando so aus: # cook list mypkgs.cooklist ===== Kompilierungsoptionen ===== Sie können jede beliebige Option verwenden, müssen aber die FSH respektieren, die Dokumentation in ''/usr/share/doc'' und die „FreeDesktop“-Standards (.desktop) befolgen. === Paketspezifische Optionen === Paketspezifische Optionen können Sie nach Belieben verwenden; Sie können beispielsweise XML-Unterstützung deaktivieren, kleinere PHP-Objektprogramme einsetzen und auf libxml2 verzichten, was sich aber bei PHP in Anbetracht des Verlusts an Funktionalität nicht lohnt. Im Zweifel schauen Sie in die Rezepte und die Übesetzer-Optionen in ''compile_rules''. === Optimierung === Die offiziellen SliTaz-Pakete sind für die **i486**-Architektur optimiert. Die Optimierungs-Optionen sind in der Variablen ''CONFIGURE_ARGS'' in der Konfigurationsdatei ''/etc/slitaz/cook.conf'' angegeben. Soll ein Paket mit anderen Optionen erzeugt werden, so kann die Konfigurationsdatei geändert werden: CONFIGURE_ARGS="--build=i486-pc-linux-gnu --host=i486-pc-linux-gnu" ==== Zu übernehmende und auszuschließende Dateien ==== Im Allgemeinen enthalten die Basispakete keine //man//-, //info//- oder //doc//-Dateien und auch keine statischen Bibliotheken; diese müssen als Paket ''//package//-doc'' oder ''//package//-dev'' erzeugt werden. Beachten Sie, dass es bei SliTaz nicht vorgesehen ist, das Kommando ''man'' oder ''info'' zu verwenden; es gibt also auch keine „manual“-Seiten oder GNU-info-Dateien. Das Erstellen von Paketen mit Dokumentation ist optional. Vorzugsweise sollte Dokumentation im Handbuch hinterlegt werden, da dieses allgemein verfügbar ist und leicht aktualisiert und korrigiert werden kann. Bei der Konfigurierung ist darauf zu achten, Basis-Konfigurationsdateien zur Verfügung zu stellen, die den sofortigen Einsatz des Paketes ermöglichen. In einigen speziellen Fällen, wie z.B. beim Webserver LightTPD, werden von SliTaz Konfigurationsdateien und Startprozeduren in ''/etc/init.d'' zur Verfügung gestellt (im Handbuch dokumentiert). Bei einem neuen Paket können Sie die Standard-Konfiguration so wählen, wie Sie es für den Endbenutzer am besten halten. In dem Verzeichnis ''/usr/share/examples'' befinden sich Beispielkonfigurationen und nützliche Informationen anderer Art. ===== Paket-Kategorien ===== Die Paket-Kategorien sind nur informativ und nicht festgelegt. Der Zweck ist, Pakete so zu klassifizieren, dass ein Programm, das Daten aus einem Paket-Rezept gewinnt, daraus (z.B. täglich) eine HTML-Seite erstellen kann. Vorübergehend sollten Entwickler-Pakete in die Kategorie 'Entwicklung', Xorg in die Kategorie 'X-Window' und neue Pakete in die Kategorie 'extra' eingeordnet werden. ===== Struktur eines Paketes im Wok ===== Die Struktur der Pakete im Wok darf nicht verändert werden, damit die Kochwerkzeuge die richtigen Dateien und Verzeichnisse finden. Mögliche Bestandteile eines Paketes (Das Verzeichnis ''taz'' wird erst beim Kochen erzeugt!) sind: * ''**stuff/**'' : Alles, was zum Konfigurieren, Übersetzen und Erzeugen des Pakets benötigt wird (patch(es), Makefile, pseudo fs, etc); * ''**receipt**'': Das allgegenwärtige [[de:cookbook:receipt|Rezept]]; * ''**description.txt**'': (optional) Die Beschreibung des Paketes wird in das Wurzeldateisystem des fertigen Pakets übernommen. Wenn das Paket installiert ist, verwendet Tazpkg diese Datei als die Beschreibung des Paketes und zeigt sie mit ''tazpkg desc //pkgname//'' an. * ''**taz/**'' : Verzeichnisbaum, der das von Tazpkg erzeugte Paket enthält; das komprimierte Paket wird in dem Verzeichnis abgelegt, das in der Variablen ''PACKAGES_REPOSITORY'' in der Konfigurationsdatei der Kochwerkzeuge spezifiziert ist. Die Kochwerkzeuge rufen automatisch Tazpkg auf, um aus dem Verzeichnis ''taz'' ein Paket zu packen. Dabei werden die Anweisungen aus dem Rezept zum Packen des Paketes übergeben. ===== Struktur eines SliTaz-Paketes ===== SliTaz-Pakete sind mit gzip komprimierte cpio-Archive, die Dateien und Dateisysteme enthalten: * ''**fs/**'': Pseudo-Dateisystem, das alle zu installierenden Dateien enthält. * ''**receipt**'': Das [[de:cookbook:receipt|Rezept]]. * ''**files.list**'': Eine Liste der Dateien im Paket. * ''**description.txt**'': Die Beschreibung des Paketes (optional).