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

Création d'un paquet pour Fink - Tutoriel

Ce document est fait pour les personnes qui souhaitent créer un paquet pour Fink. Il vient en complément du Guide de construction de paquets, plus détaillé.

Nous allons vous expliquer le processus de création d'un paquet pour Fink. Nous commencerons par les généralités, puis nous verrons en détail la création d'un paquet maxwell pour Fink.

Contents

1 Préliminaires

1.1 Apprentissage des bases

Note : dans ce document, nous supposons que fink est installé dans /sw - son emplacement par défaut. Quand vous verrez un bloc de code semblable à celui-ci :

finkdev% unecommandequelconque

vous devrez alors saisir unecommandequelconque dans Terminal.app ou dans tout autre terminal sur votre Mac.

Vous devez d'abord assimiler quelques concepts de base sur la création de paquets pour Fink. Nous vous suggérons :

1.2 Création d'un paquet

Sauvegardez le nouveau fichier info (et le fichier rustine si nécessaire) dans le répertoire /sw/fink/dists/local/main/finkinfo/. Le fichier doit avoir pour nom nomdupaquet.info (et la rustine doit s'appeler nomdupaquet.patch), où nomdupaquet est le nom de votre paquet. Si ce répertoire n'existe pas, vous devez le créer.

Note importante : vérifiez que fink est à jour en exécutant la commande :

finkdev% fink selfupdate

Exécutez ensuite :

finkdev% fink configure

pour passer le niveau de verbosité à sa plus grande valeur et activer l'arborescence instable.

Vérifiez alors que fink trouve votre paquet en exécutant :

finkdev% fink list nomdupaquet

S'il n'apparaît pas, vous devez modifier le fichier de configuration de fink, de sorte que l'arborescence locale soit prise en compte.

Vous devrez peut-être réindexer les paquets en exécutant :

finkdev% fink index

Si vous souhaitez de plus amples informations, lisez le Guide de création de paquets ou utilisez l'une ou l'autre des différentes sources d'aide. Vous devez aussi vous abonner à la liste de diffusion fink-devel.

1.3 Validation d'un paquet

Pendant le processus de validation de votre paquet, vous devez régler le niveau de verbosité de fink à la plus haute valeur possible. Voir la section fichier de configuration de fink pour savoir comment le changer.

Vérifiez que votre paquet est valide en exécutant :

finkdev% fink validate /sw/fink/dists/local/main/finkinfo/nomdupaquet.info

Si c'est le cas, essayez de construire le paquet en exécutant :

finkdev% fink -m --build-as-nobody rebuild nomdupaquet

Observez attentivement les messages d'erreur or d'attention du processus de construction. Assurez-vous, en particulier, que tout s'installe dans le répertoire de destination (qui est /sw/src/root-nomdupaquet-%v-%r/sw) à partir duquel fink construit le paquet binaire. Rien ne doit être installé directement dans /sw.

Si vous utilisez l'option --keep-build-dir ou -k de fink, le répertoire de construction sera conservé. C'est là que fink décompresse le fichier source téléchargé et que le paquet est construit. Cela vous aidera à déboguer le processus de construction. Voir man fink pour de plus amples informations.

Vous pouvez aussi utiliser l'option --keep-root-dir ou -K, elle permet de conserver le répertoire de destination. C'est là que fink construit l'arborescence d'installation du paquet. La comparaison entre les répertoires de construction et d'installation peut aider à déboguer la phase d'installation.

Si la construction du paquet se passe bien, vérifiez le contenu du paquet binaire en exécutant :

finkdev% dpkg -c /sw/fink/dists/local/main/binary-darwin-powerpc/nomdupaquet.deb

Vérifiez que tous les fichiers qui sont censés être dans le paquet se trouvent bien dans le fichier .deb. Rappel : assurez-vous que rien n'est installé directement dans /sw.

Vous pouvez maintenant valider le paquet binaire en exécutant :

finkdev% fink validate /sw/fink/dists/local/main/binary-darwin-powerpc/nomdupaquet.deb

Si tout est correct, installez le paquet avec :

finkdev% fink install nomdupaquet

et testez les fonctionnalités de votre paquet.

Si le processus échoue lors d'une des étapes ci-dessus, essayez de corriger les erreurs et recommencez le processus à partir de l'étape fink validate.

1.4 Soumission de votre paquet

Si toutes les étapes de vérification de votre paquet énoncées ci-dessus ont été franchies avec succès, vous pouvez soumettre le fichier info (et le fichier patch s'il existe) au Traqueur de soumissions de paquets.

Une personne se chargera d'examiner votre soumission et d'ajouter le paquet à la branche instable de Fink, si le paquet semble correct. Sinon, on vous demandera de mettre le paquet en accord avec les règles de Fink.

Note très importante :

2 Exemple - le paquet Maxwell

2.1 Préparation

Tout d'abord Maxwell. Ouvrez votre éditeur de texte et commençons. Nous connaissons le nom du paquet, sa version et l'endroit où est située l'archive tar source. Entrons donc ces informations dans la fenêtre de l'éditeur de texte :

Package: maxwell
Version: 0.5.1
Revision: 1
Source: mirror:sourceforge:%n/%n-%v.tar.gz

Les champs nom (Package) et version sont faciles à comprendre, mais qu'en est-il des autres champs ? Le champ Revision correspond à la "version" du paquet dans Fink, tandis que le champ Version correspond à la version du source en amont. Comme c'est la première fois que nous tentons de construire un paquet maxwell-0.5.1 dans Fink, son numéro de révision est 1.

Le champ Source donne l'adresse à partir de laquelle fink téléchargera l'archive tar source. Comme Sourceforge comprend un système mondial de miroirs pour les paquets et que fink le connaît, on utilise mirror:sourceforge:. %n est un raccourci pour le nom du paquet, maxwell, et %v un raccourci pour la version du paquet, 0.5.1.

Nous pouvons maintenant sauvegarder ceci sous le nom maxwell.info dans le répertoire /sw/fink/dists/local/main/finkinfo/. Ceci fait, voyons ce que cela donne avec fink validate.

finkdev% fink validate maxwell.info 
Validating package file maxwell.info...
Error: Required field "Maintainer" missing. (maxwell.info)

Heu ! On dirait que nous avons oublié un certain nombre de champs. Ajoutons-en quelques-uns :

Maintainer: Paul Dupont <pdupont@exemple.com>
HomePage: http://maxwell.sourceforge.net
License: MIT

Nous ajoutons notre nom en tant que mainteneur du paquet maxwell dans Fink ainsi que l'url de sa page d'accueil. En regardant sur la page sourceforge du projet, on voit que maxwell est distribué sous licence MIT, nous ajoutons également cette information. Maintenant, réessayons :

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)

Grrr ! On dirait que c'est de pire en pire, pas de panique, rabattons-nous sur le Guide de construction de paquets pour voir quelles sont les licences autorisées. On voit que l'on peut remplacer MIT par OSI-Approved, car la licence MIT a été approuvée par OSI. On peut aussi copier une courte description du paquet à partir de sa page d'accueil. Voici les changements que nous opérons :

License: OSI-Approved
Description: Mac OS X S.M.A.R.T. Tool

Mais que faire de l'erreur concernant les sommes de contrôle MD5 ? Pourquoi ne pas tout simplement demander à fink de récupérer le source ?

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: Paul Dupont <pdupont@exemple.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

L'archive tar ne peut être téléchargée à partir des miroirs de Fink, car le paquet n'a pas encore été ajouté à la distribution. C'est pourquoi il faut changer de miroir et sélectionner l'option 5. Voir les Q.F.P. pour de plus amples informations à ce sujet.

Maintenant nous pouvons calculer la somme de contrôle md5 en exécutant md5sum /sw/src/maxwell-0.5.1.tar.gz, et l'ajouter à notre fichier .info

Source-MD5: ce5c354b2fed4e237524ad0bc59997a3

Maintenant fink validate marche, youpi !

2.2 Construction

Désormais, nous pouvons construire le paquet, essayons :

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.

Hum ! Ça ne marche pas très bien. Lisons le README (situé dans /sw/src/maxwell-0.5.1-1/maxwell-0.5.1/README) et voyons ce qu'il dit...

To build type 'make'.

To install in /usr/local type 'sudo make install', to install elsewhere, type 
'sudo make install prefix=/elsewhere'

Ah ! Nous ne pouvons pas utiliser les scripts par défaut CompileScript et InstallScript, nous devons créer nos propres scripts, allons-y, c'est facile :

CompileScript: make
InstallScript: <<
#! /bin/sh -ev
make install prefix=%i
<<

Nous devons utiliser prefix=%i car fink construit le fichier binaire à partir des fichiers se trouvant dans %i. Ces fichiers seront ensuite installés dans %p (qui correspond par défaut à /sw) quand on exécutera fink install maxwell. Pour de plus amples informations sur %p et %i, consultez le Guide de construction des paquets.

Normalement, les lignes des champs Script sont passées au shell ligne après ligne. Mais la ligne #! /bin/sh -ev permet à fink d'exécuter l'ensemble comme un script séparé. Le paramètre -e correspond à "die on error" et -v à "verbose".

Validons de nouveau le paquet et tentons de le construire :

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'.

Fink semble avoir tout installé au bon endroit : /sw/src/root-maxwell-0.5.1-1 à partir de l'emplacement où le paquet binaire maxwell_0.5.1-1_darwin-powerpc.deb a été construit.

Notez aussi que fink inclut automatiquement certains drapeaux de compilation pour lui permettre d'accéder à d'autres paquets fink (par exemple -I/sw/include).

Regardons ce qu'il y a à l'intérieur du paquet binaire :

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

Cela semble correct, non ? Mais il faut vérifier que les règles de construction des paquets dans Fink sont respectées. Validons le paquet avec :

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

Heu ! Quelque chose ne va pas. Consultons encore le Guide de construction des paquets. On y voit que les pages man doivent être installées dans /sw/share/man et les fichiers README dans /sw/share/doc/%n. Si nous ouvrons le Makefile de maxwell, nous voyons que nous pouvons définir les répertoires mandir et datadir :

prefix = /usr/local
mandir = ${prefix}/man
man8dir = ${mandir}/man8
bindir = ${prefix}/bin
datadir = ${prefix}/doc/maxwell

On peut régler facilement le problème en changeant le script InstallScript :

make install prefix=%i mandir=%i/share/man datadir=%i/share/doc/%n

et reconstruire le paquet avec :

finkdev% fink -m --build-as-nobody rebuild maxwell

(On utilise fink ... rebuild car fink build ne ferait rien du tout, puisque le paquet a déjà été construit.)

Revérifiez le contenu du fichier .deb (avec dpkg -c) pour voir où les fichiers sont installés maintenant. Puis validez de nouveau le fichier .deb avec fink validate. Si tout se passe bien, vous pouvez installer le nouveau paquet avec :

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) ...

Et faire tourner le paquet avec :

finkdev% maxwell

Félicitations ! Vous venez de construire votre premier paquet Fink. Maintenant, essayez de construire un autre paquet tout seul en suivant le Tutoriel d'empaquetage à partir du début.

Nous attendons impatiemment vos premières contributions à Fink !


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.fr.xml,v 1.11 2012/11/11 15:20:17 gecko2 Exp $