Sun Dec 18 18:46:56 2016 UTC

Qu'est-ce qu'un port ?

Introduction

Le port est un dossier contenant un certain nombre de fichiers (au minimum 1) nécessaire pour la construction d'un paquet. La commande pkgmk permet de "construire" le paquet qui sera ensuite installable.

Pour être fonctionnel, ce dossier doit contenir au minimum un fichier appelé Pkgfile. C'est grâce à ce fichier que la construction du paquet peut se faire. Le contenu de Pkgfile contient toutes les informations nécessaires pour la construction ou plus exactement la compilation du paquet depuis les sources.

Le nom port est emprunté du monde BSD où un port se réfère à un logiciel "porté" sur un système d'exploitation ou une plateforme. Dans notre cas, le port est simplement la définition de la construction d'un paquet.

Syntaxe minimale d'un port

Les informations minimales pour pouvoir produire le binaire sont:

  • name spécifie le nom du paquet qui sera construit.
  • version spécifie la version des sources du paquet.
  • release spécifie la n'ième tentative de construction du paquet. Sa valeur commence donc toujours à 1
  • source contient l'adresse des sources du paquet que l'on souhaite empaqueter.
  • build() la fonction qui contient la recette proprement dite.

Un petit exemple avec commentaires:

# Nom du paquet
name=gnome-terminal

# Version du paquet
version=2.6.4

# Release du paquet
release=1

# Emplacement des sources du paquet qui sera empaqueté
source=(http://ftp.gnome.org/pub/gnome/sources/$name/${version%.*}/$name-$version.tar.bz2)

# Définition de la recette proprement dite, souvent constitué des trois commandes standards
build() {
cd $name-$version
./configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info
make
make DESTDIR=$PKG install
}

Si vous comparez cet exemple avec un port officiel de NuTyX, vous constaterez que ce dernier contient plus d'informations. C'est ce que nous verrons dans le prochain paragraphe. Une ligne vous a peut-être attiré l'attention:

http://ftp.gnome.org/pub/gnome/sources/$name/${version%.*}/

La syntaxe ${version%.*} permet de subsituer une valeur à N chiffres en une valeur à N-1 chiffres. C'est très souvent le cas pour les sources des paquets gnome. Dans notre exemple donc, la ligne:

http://ftp.gnome.org/pub/gnome/sources/$name/${version%.*}/

est identique à

http://ftp.gnome.org/pub/gnome/sources/$name/2.6/

puisque la variable version=2.6.4

Exemple pratique d'une recette

Le fichier xfce4-libutil/Pkgfile

# Depends on: glib intltool

description="libxfce4util, base library for Xfce"
url="http://docs.xfce.org/"
maintainer="git.xfce.org/xfce/xfce4-libutils"
packager="tyrry at nutyx dot org, tnut at nutyx dot org"

_name=libxfce4util

name=xfce4-libutil
version=4.8.2
release=1

source=(http://archive.xfce.org/src/xfce/${_name}/${version%.*}/${_name}-$version.tar.bz2)

build() {
cd ${_name}-$version
./configure --prefix=/usr \
--disable-static
make
make DESTDIR=$PKG install
}

Si vous souhaitez que le serveur de construction puisse construire le paquet sans soucis, il est important de mentioner toutes les dépendances necessaires à la compilation de votre paquet, et ce en partant toujours d'une NuTyX de base. En effet le serveur construira toujours le paquet en partant de la même base.

La ligne # Depends on: est utilisée à cet effet, elle définie donc les dépendances necessaire à la compilation du paquet. On y indique une dépendance séparée par un espace, une virgule ou les deux.Laughing.