Available Languages: | Deutsch | English | Français | |
Dieses Dokument richtet sich an die, die eine Paket für Fink erstellen wollen. Es ergänzt die detailierte und umfassende Dokumentation in der Anleitung für die Paketerstellung.
Sie werden Schritt für Schritt durch den Prozess geführt, eine Fink-Paket zu erstellen. Nach einer allgemeinen Einführung, wird an einem Beispielpaket namens maxwell gezeigt, wie man ein Paket erstellt.
Beachten sie: In diesem Dokument wird davon ausgegangen, dass fink im Verzeichnis /opt/sw installiert ist, entsprechend der Voreinstellungen. Ein Block mit Code wie dieser
finkdev% somecommand
bedeutet, dass sie das Kommando somecommand in einem Fenster von Terminal.app oder einem anderen Terminalprogramm ihres Macs eingeben müssen.
Zuerst müssen sie einige grundlegende Konzepte über das Erstellen von Fink-Paketen verstehen. Wir schlagen folgendes vor:
Speichern sie ihre info-Datei (falls benötigt auch die patch-Datei) im Verzeichnis /opt/sw/fink/dists/local/main/finkinfo/. Der Name der Datei sollte paketname.info sein (und paketname.patch). paketname ist der Name ihres Pakets. Existiert das Verzeichnis nicht, müssen sie es erzeugen. Paketname sollte klein geschrieben sein.
Beachten sie bitte: Versichern sie sich, dass fink aktuell ist, indem sie folgende Kommandos ausführen:
finkdev% fink selfupdate
Danach:
finkdev% fink configure
Setzen sie dabei die Ausführlichkeits-Stufe auf den höchsten Wert. Aktivieren sie Mac OS X - Versionen bis 10.6 den unstable Baum. Danach sollten sie mit dem folgenden Kommando überprüfen, ob fink ihr Paket findet:
finkdev% fink list paketname
Sollte ihr Paket nicht aufgeführt werden, müssen sie die Konfigurationsdatei von Fink ergänzen, so dass ihr lokaler Baum berücksichtigt wird.
Vielleicht müssen sie auch den Index der Pakete mit folgendem Kommando aktualisieren:
finkdev% fink index
Benötigen sie mehr Details, schauen sie bitte in der Anleitung für die Paketerstellung nach oder nutzen sie eine der folgenden Hilfequellen. Sie sollten auch die fink-devel Mailing-Liste abonnieren.
Während der Validierung sollten sie die Ausführlichkeits-Stufe von fink auf den höchsten Wert setzen. Schauen sie im Abschnitt Konfigurationsdatei von Fink nach, wie man die Ausführlichkeits-Stufe verändert.
Überprüfen sie mit folgendem Kommando, ob ihr Paket validiert werden kann:
finkdev% fink validate /opt/sw/fink/dists/local/main/finkinfo/paketname.info
Ist ihr Paket validiert, versuchen sie es mit diesem Kommando zu erstellen:
finkdev% fink -m --build-as-nobody rebuild paketname
Durchsuchen sie die Ausgabe des Prozesses sorgfältig nach Fehlern und Warnungen. Achten sie insbesondere darauf, dass alles in das richtige Zielverzeichnis installiert wird, nämlich /opt/sw/src/root-paketname-%v-%r/opt/sw. Von dort erstellt fink das binäre Paket. Nichts darf direkt in das Verzeichnis /opt/sw installiert werden.
Mit der fink-Option --keep-build-dir oder -k wird das Verzeichnis, in dem das Paket erstellt wurde, nicht gelöscht, sondern bleibt erhalten. Hierhin hat fink den Quelltext entpackt und das Paket erstellt. Dies kann dabei helfen, Fehler bei der Erstellung zu beheben. Geben sie das Kommando man fink für weitere Details ein.
Mit der fink-Option --keep-root-dir or -K wird auch das Zielverzeichnis nicht gelöscht, sondern bleibt erhalten. hier erstellt fink den Installations-Baum des Pakets. Fehler während der Installation kommt man oft durch einen Vergleich des Verzeichnisses für das Erstellen und dem Zielverzeichnis auf die Spur.
Wird das Paket erfolgreich erstellt, überprüfen sie das Binärpaket mit folgendem Kommando:
finkdev% dpkg -c /opt/sw/fink/dists/local/main/binary-darwin-powerpc/paketname.deb
Überprüfen sie, dass alle Dateien auch tatsächlich in der .deb Datei sind. Ein weiteres Mal: Nichts darf direkt in das Verezichnis /opt/sw installiert werden.
Jetzt kann man auch das binäre Paket mit diesem Kommando validieren:
finkdev% fink validate /opt/sw/fink/dists/local/main/binary-darwin-powerpc/paketname.deb
Ist alles in Ordnung, können sie das Paket installieren
finkdev% fink install paketname
und die Funktionalität ihres Paket überprüfen.
Klappt einer der Schritte nicht, versuchen sie, den Fehler zu beheben und beginnen sie noch einmal von vorne mit dem Schritt fink validate.
Hat ihr Paket alle überprüfungen überstanden, können sie ihre info-Datei (falls benötigt auch die patch-Datei) im Package Submission Tracker einreichen.
Einer der Paket-Reviewer wird sich ihr Paket anschauen und es zu dem entsprechenden Paket-Baum hinzufügen (bis 10.6: unstable-Baum), wenn er es als in Ordnung einschätzt. Falls nicht, werden sie gebeten, das Paket Fehler zu beheben und es in Einklang mit der Paket-Politik zu bringen.
Wichtig:
Als erstes Maxwell. Öffnen sie einen Editor und es kann los gehen. Sie wissen den Namen des Pakets, seine Version und wo man den Quellcode-Tarball bekommt. Tragen sie dies in ihr Editorfenster ein:
Package: maxwell Version: 0.5.1 Revision: 1 Source: mirror:sourceforge:%n/%n-%v.tar.gz
Package und Version sind offensichtlich, aber welche Bedeutung haben die beiden anderen Felder? Revision ist die "version" des Fink-Pakets während Version die Upstream-Version des Quellcodes ist. Da es der erste Versuch ist, ein Paket für maxwell-0.5.1 zu erstellen, bekommt das Paket die Revisionsnummer 1.
Das Feld Source gibt an, wo fink den Quellcode-Tarball abholen soll. Sourceforge hat ein weltweites System von Spiegelservern, das auch von fink benutzt werden kann. Deshalb lautet der Eintrag mirror:sourceforge:. %n wird zum Namen des Pakets erweitert, also maxwell, und %v zur Upstream-Version des Quellcodes, also 0.5.1.
Jetzt können sie die Datei als maxwell.info im Verzeichnis /opt/sw/fink/dists/local/main/finkinfo/ soeichern. Danach können sie mit fink validate schauen, wie weit sie gekommen sind.
finkdev% fink validate maxwell.info Validating package file maxwell.info... Error: Required field "Maintainer" missing. (maxwell.info)
Oha. Sieht also so aus, dass wohl noch einige Felder fehlen. Fügen sie folgendes hinzu:
Maintainer: John Doe <jdoe@example.com> HomePage: http://maxwell.sourceforge.net License: MIT
Tragen sie sich als Betreuer des Fink-Pakets maxwell ein, ebenso seine Homepage. Auf der Projektseite bei sourceforge können sie heraus finden, dass der Quellcode unter MIT-Lizenz vertrieben wird. Machen sie den entsprechenden Eintrag. Der nächste Versuch ergibt:
finkdev% fink validate maxwell.info Validating package file maxwell.info... Warning: Unknown license "MIT". (maxwell.info) Error: No MD5 checksum specified for "source". (maxwell.info) Error: No package description supplied. (maxwell.info)
Mist. Es scheint eher schlechter als besser zu werden, aber geben sie nicht auf und schauen sie in der Anleitung für die Paketerstellung nach, welche Lizensen erlaubt sind. Eine MIT-Lizenz wird mit OSI-Approved abgedeckt, wie man bei dem Link OSI nachschauen kann. Den Einzeiler für die Beschreibung des Pakets kann man sich auch von der Homeoage bei sourceforge holen. Machen sie folgende Einträge:
License: OSI-Approved Description: Mac OS X S.M.A.R.T. Tool
Aber wie löst man das Problem mit der MD5-Prüfsumme? Dazu kann man einfach mit fink den Quellcode holen:
finkdev% fink fetch maxwell /usr/bin/sudo /opt/sw/bin/fink fetch maxwell Reading package info... Updating package index... done. Information about 3377 packages read in 30 seconds. WARNING: No MD5 specified for Source of package maxwell-0.5.1-1 \ Maintainer: John Doe <jdoe@example.com> curl -f -L -O http://distfiles.opendarwin.org/maxwell-0.5.1.tar.gz % Total % Received % Xferd Average Speed Time Curr. Dload Upload Total Current Left Speed 0 0 0 0 0 0 0 0 --:--:-- 0:00:00 --:--:-- 0 curl: (22) The requested URL returned error: 404 ### execution of curl failed, exit code 22 Downloading the file "maxwell-0.5.1.tar.gz" failed. (1) Give up (2) Retry the same mirror (3) Retry another mirror from your continent (4) Retry another mirror (5) Retry using next mirror set "sourceforge" How do you want to proceed? [3] 5 curl -f -L -O http://west.dl.sourceforge.net/sourceforge/maxwell/maxwell-0.5.1.tar.gz % Total % Received % Xferd Average Speed Time Curr. Dload Upload Total Current Left Speed 100 7856 100 7856 0 0 19838 0 0:00:00 0:00:00 0:00:00 6511k
Der Tarball konnte noch nicht von den Fink-Spiegeln geholt werden, weil das Paket noch nicht akzeptiert wurde. Deshalb müssen sie auf den nächsten Satz von Spiegeln wechseln. Weitere Information dazu stehen in der FAQ.
Jetzt kann man die md5-Prüfsumme mit dem Kommando md5sum /opt/sw/src/maxwell-0.5.1.tar.gz erhalten und in der .info-Datei eintragen:
Source-MD5: ce5c354b2fed4e237524ad0bc59997a3
Und jetzt klappt es auch mit fink validate, yippee!
Jetzt können sie einfach versuchen, das Paket zu erstellen:
finkdev% fink -m --build-as-nobody rebuild maxwell /usr/bin/sudo /opt/sw/bin/fink build maxwell Reading package info... Updating package index... done. Information about 3498 packages read in 32 seconds. The following package will be built: maxwell gzip -dc /opt/sw/src/maxwell-0.5.1.tar.gz | /opt/sw/bin/tar -xvf - \ --no-same-owner --no-same-permissions maxwell-0.5.1/ maxwell-0.5.1/LICENSE maxwell-0.5.1/Makefile maxwell-0.5.1/maxwell.8 maxwell-0.5.1/maxwell.c maxwell-0.5.1/README ./configure --prefix=/opt/sw Can't exec "./configure": No such file or directory at \ /opt/sw/lib/perl5/Fink/Services.pm line 403.
Das hat wohl noch nicht so gut geklappt. Lesen sie bitte nach, was in der Datei /opt/sw/src/maxwell-0.5.1-1/maxwell-0.5.1/README steht. Üblicherweise steht da in etwa:
To build type 'make'. To install in /usr/local type 'sudo make install', to install elsewhere, type 'sudo make install prefix=/elsewhere'
Mit anderen Worten: Man kann nicht die voreingestellten Skripte nehmen, sondern muss eigene version von CompileScript und InstallScript eintragen:
CompileScript: make InstallScript: << #! /bin/sh -ev make install prefix=%i <<
Man muss prefix=%i verwenden, denn fink erstellt die binäre .deb-Datei aus den Dateien in %i. Später werden diese Dateien mit dem Befehl fink install maxwell in %p installiert. Die Voreinstellung für %p ist /opt/sw. Weitere Details über %p und %i stehen in der Anleitung für die Paketerstellung.
Normalerweise werden die Zeilen in den Skriptfeldern Zeile für Zeile an die Shell übergeben, aber mit der Zeile #! /bin/sh -ev lässt fink das Ganze als ein separates Skript ausführen. Der Parameter -e bedeutet "die on error" und -v bedeutet "verbose".
Ein erneuter Versuch, das Paket zu erstellen und zu validieren:
finkdev% fink validate maxwell.info Validating package file maxwell.info... Package looks good! finkdev% fink -m --build-as-nobody rebuild maxwell /usr/bin/sudo /opt/sw/bin/fink build maxwell Reading package info... Updating package index... done. Information about 3498 packages read in 32 seconds. The following package will be built: maxwell gzip -dc /opt/sw/src/maxwell-0.5.1.tar.gz | /opt/sw/bin/tar -xvf - \ --no-same-owner --no-same-permissions maxwell-0.5.1/ maxwell-0.5.1/LICENSE maxwell-0.5.1/Makefile maxwell-0.5.1/maxwell.8 maxwell-0.5.1/maxwell.c maxwell-0.5.1/README make cc -L/opt/sw/lib -c -o maxwell.o maxwell.c cc -I/opt/sw/include -o maxwell -framework IOKit -framework CoreFoundation maxwell.o /bin/rm -rf /opt/sw/src/root-maxwell-0.5.1-1 /bin/mkdir -p /opt/sw/src/root-maxwell-0.5.1-1/opt/sw /bin/mkdir -p /opt/sw/src/root-maxwell-0.5.1-1/DEBIAN /var/tmp/tmp.1.A3sRc2 #! /bin/sh -ev make install prefix=/opt/sw/src/root-maxwell-0.5.1-1/opt/sw /usr/bin/install -d -m 755 /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/doc/maxwell /usr/bin/install -m 644 LICENSE /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/doc/maxwell/LICENSE /usr/bin/install -m 644 README /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/doc/maxwell/README /usr/bin/install -d -m 755 /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/bin /usr/bin/install -m 755 maxwell /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/bin/maxwell /usr/bin/install -d -m 755 /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/man/man8 /usr/bin/install -m 644 maxwell.8 /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/man/man8/maxwell.8 /bin/rm -f /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/info/dir \ /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/info/dir.old \ /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/share/info/dir \ /opt/sw/src/root-maxwell-0.5.1-1/opt/sw/share/info/dir.old Writing control file... Finding prebound objects... Writing dependencies... Writing package script postinst... dpkg-deb -b root-maxwell-0.5.1-1 /opt/sw/fink/dists/local/main/binary-darwin-powerpc dpkg-deb: building package `maxwell' in \ `/opt/sw/fink/dists/local/main/binary-darwin-powerpc/maxwell_0.5.1-1_darwin-powerpc.deb'.
Anscheinend hat Fink alles am korrekten Platz installiert: /opt/sw/src/root-maxwell-0.5.1-1, von wo aus das Binärpaket maxwell_0.5.1-1_darwin-powerpc.deb erstellt wurde.
Bitte beachten sie auch, wie fink automatisch einige Optionen für den Compiler setzt, wie den Zugang zu anderen Fink-Paketen (also -I/opt/sw/include).
Schauen sie noch nach, was das binäre Paket enthält:
finkdev% dpkg -c \ /opt/sw/fink/dists/local/main/binary-darwin-powerpc/maxwell_0.5.1-1_darwin-powerpc.deb drwxr-xr-x root/admin 0 2004-07-15 09:40:38 ./ drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/ drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/bin/ -rwxr-xr-x root/admin 29508 2004-07-15 09:40:39 ./opt/sw/bin/maxwell drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/doc/ drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/doc/maxwell/ -rw-r--r-- root/admin 1076 2004-07-15 09:40:39 ./opt/sw/doc/maxwell/LICENSE -rw-r--r-- root/admin 1236 2004-07-15 09:40:39 ./opt/sw/doc/maxwell/README drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/man/ drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/man/man8/ -rw-r--r-- root/admin 1759 2004-07-15 09:40:39 ./opt/sw/man/man8/maxwell.8 drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/var/ drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/var/lib/ drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/var/lib/fink/ drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/var/lib/fink/prebound/ drwxr-xr-x root/admin 0 2004-07-15 09:40:39 ./opt/sw/var/lib/fink/prebound/files/ -rw-r--r-- root/admin 16 2004-07-15 09:40:39 ./opt/sw/var/lib/fink/prebound/files/maxwell.pblist
Sieht gut aus, oder? Aber es bleibt noch zu verifizieren, ob das Paket die Regeln von Fink für Pakete einhält. Validieren sie das Paket mit dem Kommando:
finkdev% fink validate \ /opt/sw/fink/dists/local/main/binary-darwin-powerpc/maxwell_0.5.1-1_darwin-powerpc.deb Validating .deb file \ /opt/sw/fink/dists/local/main/binary-darwin-powerpc/maxwell_0.5.1-1_darwin-powerpc.deb... Warning: File installed into deprecated directory /opt/sw/doc/ Offender is /opt/sw/doc/ Warning: File installed into deprecated directory /opt/sw/doc/ Offender is /opt/sw/doc/maxwell/ Warning: File installed into deprecated directory /opt/sw/doc/ Offender is /opt/sw/doc/maxwell/LICENSE Warning: File installed into deprecated directory /opt/sw/doc/ Offender is /opt/sw/doc/maxwell/README Warning: File installed into deprecated directory /opt/sw/man/ Offender is /opt/sw/man/ Warning: File installed into deprecated directory /opt/sw/man/ Offender is /opt/sw/man/man8/ Warning: File installed into deprecated directory /opt/sw/man/ Offender is /opt/sw/man/man8/maxwell.8
Oha. Noch stimmt etwas nicht. Schauen sie noch einmal in der Anleitung für die Paketerstellung nach. Da steht, dass Seiten für man in /opt/sw/share/man installiert werden müssen und Dateien wie README in /opt/sw/share/doc/%n. Schaut man sich den Makefile von maxwell an, sieht man, dass mandir und datadir gesetzt werden können:
prefix = /usr/local mandir = ${prefix}/man man8dir = ${mandir}/man8 bindir = ${prefix}/bin datadir = ${prefix}/doc/maxwell
Das einfachste ist es, den InstallScript abzuändern:
make install prefix=%i mandir=%i/share/man datadir=%i/share/doc/%n
und das Paket neu zu erstellen:
finkdev% fink -m --build-as-nobody rebuild maxwell
(Man muss fink rebuild nehmen, weil fink build nichts bewirken würde, weil das Paket bereits erfolgreich erstellt wurde.)
Überprüfen sie den Inhalt der .deb-Datei (mit dpkg -c) und und schauen wie, wo die Dateien jetzt installiert werden. Dann validieren die .deb-Datei mit fink validate. Ist alles in Ordnung, können sie das Paket mit diesem Kommando installieren:
finkdev% fink install maxwell /usr/bin/sudo /opt/sw/bin/fink install maxwell Information about 3377 packages read in 30 seconds. The following package will be installed or updated: maxwell dpkg -i /opt/sw/fink/dists/local/main/binary-darwin-powerpc/maxwell_0.5.1-1_darwin-powerpc.deb Selecting previously deselected package maxwell. (Reading database ... 56046 files and directories currently installed.) Unpacking maxwell (from .../maxwell_0.5.1-1_darwin-powerpc.deb) ... Setting up maxwell (0.5.1-1) ...
Jetzt kann man das Programm mit diesem Kommando ausführen:
finkdev% maxwell
Gratuliere. Sie haben ihr erstes Fink-Paket erstellt! Jetzt können sie es selbst versuchen, indem sie dieser Einführung vom Anfang an folgen.
Wir sind auf ihre Beiträge zu Fink gespannt!
Copyright (c) 2001 Christoph Pfisterer, Copyright (c) 2001-2020 The Fink Project. You may distribute this document in print for private purposes, provided the document and this copyright notice remain complete and unmodified. Any commercial reproduction and any online publication requires the explicit consent of the author.
Generated from $Fink: quick-start-pkg.de.xml,v 1.2 2023/08/04 5:18:11 nieder Exp $