Available Languages: | Deutsch | English | Français |

Wie erstelle ich ein Fink-Paket? - eine Einführung

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.

Contents

1 Der Anfang

1.1 Grundlagen

Beachten sie: In diesem Dokument wird davon ausgegangen, dass fink im Verzeichnis /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:

1.2 Paket erstellen

Speichern sie ihre info-Datei (falls benötigt auch die patch-Datei) im Verzeichnis /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.

1.3 Validieren sie ihr Paket

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 /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 /sw/src/root-paketname-%v-%r/sw. Von dort erstellt fink das binäre Paket. Nichts darf direkt in das Verzeichnis /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 /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 /sw installiert werden.

Jetzt kann man auch das binäre Paket mit diesem Kommando validieren:

finkdev% fink validate /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.

1.4 Paket einreichen

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:

2 Beispiel - das Maxwell Paket

2.1 Grundlagen

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 /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 /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 /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!

2.2 Paket erstellen

Jetzt können sie einfach versuchen, das Paket zu erstellen:

finkdev% fink -m --build-as-nobody rebuild maxwell
/usr/bin/sudo /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 /sw/src/maxwell-0.5.1.tar.gz | /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=/sw
Can't exec "./configure": No such file or directory at \
/sw/lib/perl5/Fink/Services.pm line 403.

Das hat wohl noch nicht so gut geklappt. Lesen sie bitte nach, was in der Datei /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 /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 /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 /sw/src/maxwell-0.5.1.tar.gz | /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/sw/lib -c -o maxwell.o maxwell.c
cc  -I/sw/include -o maxwell -framework IOKit -framework CoreFoundation maxwell.o
/bin/rm -rf /sw/src/root-maxwell-0.5.1-1
/bin/mkdir -p /sw/src/root-maxwell-0.5.1-1/sw
/bin/mkdir -p /sw/src/root-maxwell-0.5.1-1/DEBIAN
/var/tmp/tmp.1.A3sRc2
#! /bin/sh -ev
make install prefix=/sw/src/root-maxwell-0.5.1-1/sw
/usr/bin/install -d -m 755 /sw/src/root-maxwell-0.5.1-1/sw/doc/maxwell
/usr/bin/install -m 644 LICENSE /sw/src/root-maxwell-0.5.1-1/sw/doc/maxwell/LICENSE
/usr/bin/install -m 644 README /sw/src/root-maxwell-0.5.1-1/sw/doc/maxwell/README
/usr/bin/install -d -m 755 /sw/src/root-maxwell-0.5.1-1/sw/bin
/usr/bin/install -m 755 maxwell /sw/src/root-maxwell-0.5.1-1/sw/bin/maxwell
/usr/bin/install -d -m 755 /sw/src/root-maxwell-0.5.1-1/sw/man/man8
/usr/bin/install -m 644 maxwell.8 /sw/src/root-maxwell-0.5.1-1/sw/man/man8/maxwell.8
/bin/rm -f /sw/src/root-maxwell-0.5.1-1/sw/info/dir \
/sw/src/root-maxwell-0.5.1-1/sw/info/dir.old \
/sw/src/root-maxwell-0.5.1-1/sw/share/info/dir \
/sw/src/root-maxwell-0.5.1-1/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 /sw/fink/dists/local/main/binary-darwin-powerpc
dpkg-deb: building package `maxwell' in \
`/sw/fink/dists/local/main/binary-darwin-powerpc/maxwell_0.5.1-1_darwin-powerpc.deb'.

Anscheinend hat Fink alles am korrekten Platz installiert: /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/sw/include).

Schauen sie noch nach, was das binäre Paket enthält:

finkdev% dpkg -c \
/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 ./sw/
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/bin/
-rwxr-xr-x root/admin    29508 2004-07-15 09:40:39 ./sw/bin/maxwell
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/doc/
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/doc/maxwell/
-rw-r--r-- root/admin     1076 2004-07-15 09:40:39 ./sw/doc/maxwell/LICENSE
-rw-r--r-- root/admin     1236 2004-07-15 09:40:39 ./sw/doc/maxwell/README
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/man/
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/man/man8/
-rw-r--r-- root/admin     1759 2004-07-15 09:40:39 ./sw/man/man8/maxwell.8
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/var/
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/var/lib/
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/var/lib/fink/
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/var/lib/fink/prebound/
drwxr-xr-x root/admin        0 2004-07-15 09:40:39 ./sw/var/lib/fink/prebound/files/
-rw-r--r-- root/admin       16 2004-07-15 09:40:39 ./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 \
/sw/fink/dists/local/main/binary-darwin-powerpc/maxwell_0.5.1-1_darwin-powerpc.deb
Validating .deb file \
/sw/fink/dists/local/main/binary-darwin-powerpc/maxwell_0.5.1-1_darwin-powerpc.deb...
Warning: File installed into deprecated directory /sw/doc/
Offender is /sw/doc/
Warning: File installed into deprecated directory /sw/doc/
Offender is /sw/doc/maxwell/
Warning: File installed into deprecated directory /sw/doc/
Offender is /sw/doc/maxwell/LICENSE
Warning: File installed into deprecated directory /sw/doc/
Offender is /sw/doc/maxwell/README
Warning: File installed into deprecated directory /sw/man/
Offender is /sw/man/
Warning: File installed into deprecated directory /sw/man/
Offender is /sw/man/man8/
Warning: File installed into deprecated directory /sw/man/
Offender is /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 /sw/share/man installiert werden müssen und Dateien wie README in /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 /sw/bin/fink  install maxwell
Information about 3377 packages read in 30 seconds.
The following package will be installed or updated:
maxwell
dpkg -i /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 Notice

Copyright (c) 2001 Christoph Pfisterer, Copyright (c) 2001-2015 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.1 2015/03/05 23:40:46 k-m_schindler Exp $