Création de ports FreeBSD

Objet

Ce tutorial présente la méthode à utiliser pour créer un port FreeBSD de façon rapide. Il ne s'agit en rien d'une référence couvrant tout les aspects de cet exercice. Pour tout supplément d'information le Handbook est la réponse.

Pré Requis

Tous les éléments de la chaîne de compilation classique sur un FreeBSD en état de marche.

Remarque

Ce document est un résumé de ce qui est trouvable dans le trés bon Porter's Handbook (/usr/share/doc/en_US.ISO8859-1/books/porters-handbook/index.html habituellement). Néanmoins ce document peut être une bonne référence rapide en français pour combler les trous de mémoire ou servir de feuille de route globale d'un process connu mais pas encore maitrisé. Enfin c'est dans ces deux buts que je l'ai écrit pour moi …

Préparation

Garder sous la main le fichier /usr/ports/Mk/bsd.port.mk qui est inclu par tous les Makefile et qui donne de bonnes infos.

Ecriture du port

Makefile

Le Makefile minimal doit ressembler à cela :

# New ports collection makefile for:   oneko
# Date created:        5 December 1994
# Whom:                asami
#
# $FreeBSD$
#

PORTNAME=      oneko
PORTVERSION=   1.1b
CATEGORIES=    games
MASTER_SITES=  ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/

MAINTAINER=    asami@FreeBSD.org
COMMENT=       A cat chasing a mouse all over the screen

MAN1=          oneko.1
MANCOMPRESSED= yes
USE_IMAKE=     yes

.include <bsd.port.mk>

Description files

Deux fichiers de descriptions sont nécessaires :

  • pkg-descr : une description longue du port
  • pkg-plist : la liste des fichiers installés par le port

pkg-descr

Il s'agit d'une simple description du port. Un paragraphe et l'url vers le site web suffisent.

pkg-plist

Il s'agit d'une liste des fichiers et répertoires créés pendant l'installation. Les manpages ne doivent pas y figurer sauf si vous n'utilisez pas les variables MANn dans le Makefile. Les répertoires créés à l;installation doivent être préfixé du mot clef @dirrm afin qu'ils soient supprimés à la désinstallation.

bin/oneko
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/oneko

Si vous êtes vraiment pressé et qu'il n'y a que peu de fichiers dans le port vous pouvez mettre la liste directement dans le Makefile en utilisant les mots clés PLIST_FILES, PLIST_DIRS :

PLIST_FILES=    bin/oneko \
                lib/X11/app-defaults/Oneko \
                lib/X11/oneko/cat1.xpm \
                lib/X11/oneko/cat2.xpm \
                lib/X11/oneko/mouse.xpm
PLIST_DIRS=     lib/X11/oneko

Dans ce cas là, pas besoin de créer un fichier pkg-plist.

Sommes de contrôle

Utilisez simplement la commande 'make makesum' ce qui générera directement le fichier distinfo.

Test du port

Voilà le plus gros du boulot est fait, il ne reste plus qu'à tester. Il vous faut vérifier et tester que :

  • pkg-plist : ne contient pas de fichiers qui ne soient pas installés par ce port.
  • pkg-plist : contient tous les fichiers installés par ce port.
  • que le port peut être réinstallé plusieurs fois en utilisant la commande make reinstall.
  • que le port se déinstalle correctement.

Pour cela il faut suivre la procédure suivante :

  1. make install
  2. make package
  3. make deinstall
  4. pkg_add package-name
  5. make deinstall
  6. make reinstall
  7. make package

Il existe un outil, devel/portlint, pour vérifier et améliorer vos ports.

$> cd /usr/ports/games/oneko
$> portlint
looks fine.

Patches

Vous pouvez avoir des patchs à vous (ou pas), à appliquer aux sources du biniou que vous voulez porter/packager. Il y a quelques règles à respecter quant nommage de deux ci :

  1. leur nom doit être de la forme patch-*, où '*' représente le chemin du fichier concerné.

Ex : patch-Imakefile, patch-src-config.h

  1. ils ne doivent pas être nommés patch-aa, le nom du fichier impacté est important

Utilisez un diff -u, le -r est valide aussi mais vérifier bien ce qu'il donne avant de l'intégrer au port surtout si vous prévoyez de le proposer à la communauté.

freebsd/qnd_port_creation.txt · Last modified: 2010/01/12 13:29 (external edit)