Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
freebsd:freebsd_port_creation [2007/04/12 13:41]
hotbox typo
freebsd:freebsd_port_creation [2010/01/12 13:29] (current)
Line 1: Line 1:
 +====== Creation d'un port FreeBSD ======
 +
 +===== Intro =====
 +
 +Cela faisait un petit moment que l'​envie d'​écrire un tip sur la création de ports sous FreeBSD me titillait le slip.
 +Cependant, j'​avoue avoir eu un peu de mal à trouver un cas d'​école,​ et encore il n'est pas parfait (voir un peu plus bas).
 +En effet, la difficulté consiste à trouver une application qui :
 +
 +  * N'est évidemment pas présente dans le ports tree de FreeBSD (on approche des 17000 ports)
 +  * Compile pratiquement out-of-the-box
 +
 +Apres avoir tourné un moment avec google, les FreeBSD PR et les logs de portmgr, je suis tombé sur [[http://​gimmix.berlios.de/​index.php|gimmix]]..
 +
 +__GCU Breaking News__
 + 
 +On (flz) me chuchote à l'​oreillette le port "​porttools"​
 +
 +<​code>​
 +FreeBSD Port Tools includes the following commands:
 +- port create: create a new port from a template
 +- port diff: generate a diff against a previous version of the port
 +- port fetch: fetch distfile(s) of a new version of the port
 +- port help: display usage summary for port(1) commands
 +- port submit: submit a PR with new port, or port change/​update
 +- port test: automate testing a new port or a port update
 +
 +WWW:    http://​sourceforge.net/​projects/​porttools/​
 +</​code>​
 +
 +Bien évidemment ça peut aider.
 +
 +===== Prérequis =====
 +
 +  * FreeBSD (ça aide..)
 +  * Un port à AJOUTER dans /usr/ports
 +
 +
 +===== Ce qui manque à ce tip =====
 +
 +Avant d'​aller plus loin, je précise que la création de ce port n'a nécessité aucun patch, c'est à dire que l'​auteur de gimmix a suffisament bien bossé pour que tout compile parfaitement sous FreeBSD bien que sa platforme de base soit Linux.
 +
 +Où est le probleme ? Ben justement, j'​aurai préferé faire un ou deux petits patchs pour rendre ce tip un peu plus complet et croustillant. Je propose donc au lecteur de ne pas hésiter à le compléter (wiki wiki wiki) pour palier ce manque.
 +
 +
 +
 +===== Un peu de nettoyage =====
 +
 +Je tiens à préciser que la documentation de FreeBSD, et dans ce cas, le [[http://​www.freebsd.org/​doc/​en_US.ISO8859-1/​books/​porters-handbook/​book.html|Porter'​s Handbook]], est _trés_ bien foutue.
 +Elle rend presque inutile la présence de ce tip c'est donc dire.. JETEZ Y UN OEIL !@#@ ET MEME DEUX !@#!
 +
 +Evidemment, pour ceux que la lecture de documentation reloute et qui préferent le style lutinesque, je vous propose de lire la suite.
 +
 +Commençons tout d'​abord à créer un environnement propre, nettoyer son bureau, bref préparer l'​espace pour bien bosser :
 +
 +<​code>​
 +[lutin@monstrebon /​home/​lutin]% mkdir -p FreeBSD/​ports/#​@!NOMDUPORT#​@!
 +</​code>​
 +
 +Idéalement,​ et je pense même que c'est indispensable pour porter de gros poissons ou si l'on est pas sûr des dependances,​ il faudrait un FreeBSD installation minimale, c'est à dire avec les ports de base ou alors un environnement chrooté/​jail..
 +
 +CE N'EST PAS LE CAS DANS CE TIP car j'ai voulu éviter toute complication (oui flemme toussa *kof*kof*).
 +
 +Ne pas oublier que vous allez devenir un port _maintainer_,​ et du coup, on compte sur vous :
 +Il vous faudra donner un peu de votre temps pour maintenir le port (lors de mises à jour du software par exemple), vérifier sa compilation sur plusieurs architectures (amd64, i386..), bref vous êtes LA réference vis à vis de FreeBSD pour la bonne tenue de votre port.
 +
 +Pour en savoir plus allez voir [[http://​www.freebsd.org/​doc/​en_US.ISO8859-1/​books/​porters-handbook/​book.html#​PORTING-DADS|ici]]
 +
 +
 +===== Le portage =====
 +
 +Maintenant qu'on a un espace de travail, nous allons sereinement récupérer et compiler notre application de manière authentique :
 +
 +<​code>​
 +[lutin@monstrebon ~/​FreeBSD/​ports]% fetch http://​download.berlios.de/​gimmix/​gimmix-0.4.1.tar.bz2
 +[lutin@monstrebon ~/​FreeBSD/​ports]% tar jvxf gimmix-0.4.1.tar.bz2
 +[lutin@monstrebon ~/​FreeBSD/​ports]% cd gimmix-0.4.1/​
 +[lutin@monstrebon ~/​FreeBSD/​ports/​gimmix-0.4.1]% ./configure
 +- SNIP -
 +[lutin@monstrebon ~/​FreeBSD/​ports/​gimmix-0.4.1]% make && make install
 +</​code>​
 +
 +Normalement tout s'est bien déroulé car nous avions les bonnes dépendances et que c'est un cas d'​école et que ça se passe comme ça dans le jardin.
 +Mais il est possible que la compilation foire sur votre application et il sera nécessaire de la patcher (non abordé ici)
 +
 +Dirigeons nous maintenant dans le répertoire de notre futur port (~/​FreeBSD/​ports/​gimmix) et éditons son futur Makefile
 +
 +Makefile :
 +<​code>​
 +# New ports collection makefile for:   ​gimmix #nom du port
 +# Date created: ​                       11 April 2007 #date de création
 +# Whom:                                Matthieu Guegan <​monmail>​ #mainteneur du port
 +#                                                                #+ addr email
 +#
 +# $FreeBSD$ #laisser tel quel : sera remplacé par le CVS
 +#
 +
 +PORTNAME= ​      ​gimmix #nom du port
 +PORTVERSION= ​   0.4.1 #version du port au final cela donne $PORTNAME-$PORTVERSION ​
 +                      #respectez donc bien ce schema
 +CATEGORIES= ​    audio #catégorie dans l'​arbre des ports
 +MASTER_SITES= ​  ​${MASTER_SITE_BERLIOS} ​ #site de téléchargement,​ dans mon cas berlios.de étant
 +                                        #connu, il bénéficie d'une variable propre
 +
 +MASTER_SITE_SUBDIR= ​    ​gimmix ​         #sous répertoire du site de téléchargement ​
 +                                        #cad. http://​download.berlios.de/​gimmix/​
 +
 +MAINTAINER= ​    ​MONEMAIL #mettre ici son email
 +COMMENT= ​       Gimmix is a graphical MPD client written in C using GTK+2 
 +                #COURTE description du port
 +
 +LIB_DEPENDS= ​   mpd:​${PORTSDIR}/​audio/​libmpd \  #librairies nécéssaires pour la compilation du
 +                                                #port -dépendances-
 +                tag.5:​${PORTSDIR}/​audio/​taglib ​ #attention il existe BUILD_DEPENDS,​ RUN_DEPENDS
 +                                                #etc... voir leur description dans 
 +                                                #/​usr/​ports/​Mk/​bsd.port.mk
 +
 +USE_GNOME= ​     gtk20 libglade2 ​                #gtk2 et libglade2 sont requis et il existe
 +                                                #USE_GNOME (/​usr/​ports/​Mk/​bsd.gnome.mk)
 +                                                #pour gérer ces dépendances
 +
 +USE_BZIP2= ​     yes                             #​l'​archive n'est pas en .tar.gz (défaut) mais
 +                                                #.tar.bz2
 +
 +GNU_CONFIGURE= ​ yes                     #il y a un configure dans l'​archive qu'il faut utiliser
 +
 +.include <​bsd.port.mk> ​                 #​nécessaire pour que le Makefile soit compréhensible..
 +
 +</​code>​
 +
 +Apres ce joli Makefile nous allons créer rapidement le descriptif du port dans le fichier pkg-descr.
 +Dans mon cas j'ai simplement fait un copy/paste du fichier README présent dans l'​archive initiale
 +
 +pkg-descr :
 +<​code>​
 +Gimmix is a graphical Music player daemon (MPD) client written in C
 +using GTK+2.
 +
 +Features:
 +=========
 +* Simple and Clean Interface.
 +* Library Browser.
 +* Library search. (search by artist, album, filename, etc)
 +* Playlist management (manage mpd playlists)
 +* ID3v2 tag editing support.
 +* System tray icon support.
 +* Support for controlling gimmix through Keyboard.
 +* Notification support (Displays the currently playing song in systray).
 +* Small memory footprint.
 +
 +WWW: http://​gimmix.berlios.de/​index.php
 +</​code>​
 +
 +Enfin, il faut renseigner le fichier pkg-plist qui est utilisé pour la création de package et la désinstallation du port.
 +C'est en fait une liste qui indique les fichiers installés par le port (et donc qui doivent être effacés lors de sa suppression).
 +
 +Il existe plusieurs méthodes pour le renseigner :
 +
 +  * A la mano ! c'est mon cas, j'​avais une dizaine de fichiers à renseigner
 +  * Par la méthode dite [[http://​www.freebsd.org/​doc/​en_US.ISO8859-1/​books/​porters-handbook/​book.html#​PLIST-AUTOPLIST|automatique]] qui a l'​avantage de ne rien oublier et qui s'​occupe aisément des gros ports (grui)
 +
 +On refait la même que pour le Makefile (supprimez les commentaires hein)
 +
 +<​code>​
 +bin/​gimmix ​     #la racine est /usr/local/ par défaut (var $LOCALBASE)
 +share/​applications/​gimmix.desktop
 +%%DATADIR%%/​gimmix.glade #DATADIR est le chemin créé pour l'​application : /​usr/​local/​share/​gimmix
 +%%DATADIR%%/​gimmix_firstrun.png
 +share/​pixmaps/​gimmix.png
 +share/​pixmaps/​gimmix_logo_small.png
 +share/​pixmaps/​gimmix_playlist.png
 +@dirrmtry share/​pixmaps #​suppression si possible (vide)
 +@dirrm %%DATADIR%% #​suppression dans tous les cas
 +@dirrmtry share/​applications
 +#executé à l'​installation pour les librairies partagées
 +@exec %%LOCALBASE%%/​bin/​update-desktop-database > /dev/null || /​usr/​bin/​true
 +#pareil mais à la désinstallation
 +@unexec %%LOCALBASE%%/​bin/​update-desktop-database > /dev/null || /​usr/​bin/​true ​
 +</​code>​
 +
 +Voilà, nous avons les trois fichiers renseignés à la main, il nous reste plus qu'a générer le fichier distinfo qui contient les signatures de notre archive (afin de s'​assurer de sa validité) :
 +
 +<​code>​
 +[lutin@monstrebon ~/​FreeBSD/​ports/​gimmix]% make makesum
 +</​code>​
 +
 +Donc au final nous avons :
 +
 +<​code>​
 +[lutin@monstrebon ~/​FreeBSD/​ports/​gimmix]%ls ​
 +Makefile ​  ​distinfo ​  ​pkg-descr ​ pkg-plist
 +</​code>​
 +
 +
 +
 +===== On essaye ça vite fait =====
 +
 +Pour vérifier que nos fichiers ne comportent pas d'​erreurs importantes,​ un outil a été crée pour l'​occasion :
 +//​portlint//​
 +
 +Installez-le (portinstall / pkg_add / cquevouvoulez) et exécutez-le dans le répertoire de votre port.
 +Au final vous devriez obtenir cette sortie :
 +
 +<​code>​
 +[lutin@monstrebon ~/​FreeBSD/​ports/​gimmix]% portlint
 +looks fine.
 +</​code>​
 +
 +Le Porter'​s handbook, décrit une méthode rapide pour tester votre port avant son commit :
 +
 +<​code>​
 +      make install
 +      make package
 +      make deinstall
 +      pkg_add package-name
 +      make deinstall
 +      make reinstall
 +      make package
 +</​code>​
 +
 +Vérifiez bien que tout se déroule comme prevu.
 +
 +
 +
 +===== envoi du port =====
 +
 +On a pas fait tout ça pour rien, vous avez la possibilité d'​ajouter votre port dans l'​arbre officiel de FreeBSD.
 +L'​opération peut durer quelque semaines mais dans mon cas le commit s'est deroulé.. assez rapidement :
 +
 +<​code>​
 +Arrival-Date: ​  Wed Apr 11 17:20:16 GMT 2007
 +Closed-Date: ​   Wed Apr 11 18:43:36 GMT 2007
 +</​code>​
 +
 +*ch0mp* *ch0mp*
 +
 +Courage lutin, pour effectuer cette operation, il te faut (si tu n'as pas déjà le commit bit hinhin...) envoyer un PR à freebsd-ports-bugs AVEC les champs suivants (via //​send-pr(1)//​ ou [[http://​www.freebsd.org/​send-pr.html|l'​interface web]]) :
 +
 +<​code>​
 +Subject/​Synopsis: ​      New port: %categorie du port%/%nom du port% - %COMMENT%
 +Category: ​              ports
 +Severity: ​              ​non-critical
 +Priority: ​              low
 +Class: ​                 change-request
 +</​code>​
 +
 +Il te faut bien évidemment avec cela envoyer ton travail. La commande //shar(1)// est faite pour cela :
 +
 +<​code>​
 +[lutin@monstrebon ~/​FreeBSD/​ports]% shar `find gimmix` > gimmix.shar
 +</​code>​
 +
 +Attache-le avec le mail ou alors copy/paste le résultat dans le champ "​Fix:"​
 +
 +Le reste étant trivial (from, release ...) consulte, http://​www.freebsd.org/​cgi/​query-pr.cgi?​pr=111482 pour te donner une idée
 +
 +Il ne reste plus qu'à attendre la réponse d'un membre de portmgr@ pour enfin avoir son petit dans le port tree
 +
 +Comme tu es beau lutin, profites-en pour informer l'​auteur de l'​application portée que son bébé est maintenant disponible sous FreeBSD.
 +
 +
 +===== Changelog =====
 +
 +  * 12/​04/​2007 ​ création du tip par hotbox
 +
 +
 +
 +===== References =====
 +
 +  * [[http://​www.freebsd.org/​doc/​en_US.ISO8859-1/​books/​porters-handbook/​book.html|Porter'​s Handbook]]
 +  * [[http://​www.freebsd.org/​doc/​en_US.ISO8859-1/​articles/​contributing-ports/​article.html|Contribuing to the FreeBSD ports collection]]
 +  * [[http://​www.freebsd.org/​doc/​en_US.ISO8859-1/​articles/​committers-guide/​article.html|Committer'​s Guide]]
  
freebsd/freebsd_port_creation.txt · Last modified: 2010/01/12 13:29 (external edit)