Packaging Gentoo
Un article de ALW - Another Linux Wiki.
Sommaire |
[modifier] Packaging Gentoo
Portage et le système d'ebuild de Gentoo sont des outils très puissants et flexibles, mais un peu obscur à utiliser au départ pour qui veut faire son package. Voyons comment s'y prendre. Première étape, il faut définir un overlay si ce n'est déjà fait. Pour rappel, l'overlay consiste en un dossier parallèle au dossier /usr/portage qui constitue en fait une extension de la base de données des paquets. Il est alors possible de rajouter ses propres paquets dans cet overlay, pour notamment y mettre des ebuilds de version de test ou tout simplement de logiciel non encore présent dans Portage.
[modifier] Création de l'overlay
Rien de plus simple :
On créé un répertoire pour stocker l'overlay.
$ mkdir /usr/local/portage
Ensuite il suffit d'éditer le fichier /etc/make.conf et d'y ajouter cette ligne.
$ PORTDIR_OVERLAY="/usr/local/portage"
Voila, l'overlay est défini.
[modifier] Création d'un ebuild
Avant toute chose, il faut savoir que votre ebuild doit avoir un nom précis, et être dans un dossier précis (on rapelle que l'overlay doit avoir la même structure que Portage). Votre ebuild doit donc être dans un de ces dossiers (que vous créerez dans le dossier de l'overlay pour l'occasion si ce n'est déjà fait) :
app-accessibility app-admin app-antivirus app-arch app-backup app-benchmarks app-cdr app-crypt app-dicts app-doc app-editors app-emacs app-emulation app-forensics app-i18n app-laptop app-misc app-mobilephone app-office app-pda app-portage app-shells app-text app-vim app-xemacs dev-ada dev-cpp dev-db dev-dotnet dev-embedded dev-games dev-haskell dev-java dev-lang dev-libs dev-lisp dev-ml dev-perl dev-php dev-php4 dev-php5 dev-python dev-ruby dev-scheme dev-tcltk dev-tex dev-tinyos dev-util games-action games-arcade games-board games-emulation games-engines games-fps games-kids games-misc games-mud games-puzzle games-roguelike games-rpg games-server games-simulation games-sports games-strategy games-util gnome-base gnome-extra gnustep-apps gnustep-base gnustep-libs kde-base kde-misc mail-client mail-filter mail-mta media-fonts media-gfx media-libs media-plugins media-radio media-sound media-tv media-video net-analyzer net-dialup net-dns net-firewall net-fs net-ftp net-im net-irc net-libs net-mail net-misc net-nds net-news net-nntp net-p2p net-print net-proxy net-wireless net-www net-zope perl-core rox-base rox-extra sci-astronomy sci-biology sci-calculators sci-chemistry sci-electronics sci-geosciences sci-libs sci-mathematics sci-misc sci-visualization sys-apps sys-auth sys-block sys-boot sys-cluster sys-devel sys-fs sys-kernel sys-libs sys-power sys-process www-apache www-apps www-client www-misc www-servers x11-apps x11-base x11-drivers x11-libs x11-misc x11-plugins x11-proto x11-terms x11-themes x11-wm xfce-base xfce-extra
L'ebuild basique : il télécharge, décompresse, configure, compile et installe une archive de source. L'ebuild est nommé de la manière suivante : nom_du_soft-version.ebuild et est stocké dans /usr/local/portage/dossier-correspondant-au-type-de-l'application (voir juste au dessus)/nom_du_soft/
| Warning: N'oubliez pas de créer aussi le répertoire /usr/local/portage/app-portage/clean-distfiles/files qui sert à stocker tous les digest |
Décortiquons l'ebuild d'aMule 2.1.0 par exemple. Il s'appelle logiquement amule-2.1.0-r1.ebuild.
L'entête standard
# Copyright 1999-2006 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: /var/cvsroot/gentoo-x86/net-p2p/amule/amule-2.1.0-r1.ebuild,v 1.1 2006/01/13 11:18:44 mkay Exp $
L'ebuild va utiliser des fonctions des ces classes
inherit eutils flag-o-matic wxwidgets
Définition de quelques variables par praticité. Emerge définit un certains nombre de variables lui même, comme par exemple ${PV} qui donne directement la version du paquets selon le nom de l'ebuild. Pratique pour mettre à jour un paquet juste en renommant l'ebuild.
MY_P=${P/m/M}
S=${WORKDIR}/${MY_P}
Le description du paquet.
DESCRIPTION="aMule, the all-platform eMule p2p client"
La homepage du paquet.
HOMEPAGE="http://www.amule.org/"
L'url de téléchargement. On remarque l'utilisation de variable, ce qui rend l'ebuild plus "dynamique".
SRC_URI="mirror://sourceforge/${PN}/${MY_P}.tar.bz2"
La licence du soft.
LICENSE="GPL-2"
Le slot d'installation. Cela permet d'installer parallèlement plusieurs versions du même paquets (surtout utiliser pour certaines librairies, ou pour les kernel).
SLOT="0"
Les keywords du paquets.
KEYWORDS="~alpha ~amd64 ~ppc ~ppc64 ~sparc ~x86"
Définit les flags USE auquels l'ebuild peut réagir.
IUSE="amuled debug gtk nls remote stats unicode"
Définition des dépendances du paquets. aMule dépend donc de wxGTK, de zlib et ce, inconditionnellement. Par contre, il dépend de gd si le flag USE "stats" est utilisé. De même pour libpng avec le flag USE "remote". Pour finir, aMule ne peut pas être installé en même temps que xmule (provoquera une erreur "ebuild blocked by another".
DEPEND=">=x11-libs/wxGTK-2.6.0 >=sys-libs/zlib-1.2.1 stats? ( >=media-libs/gd-2.0.26 ) remote? ( >=media-libs/libpng-1.2.0 ) !net-p2p/xmule"
L'étape de configuration. Elle est utilisée pour vérifier que les paramètres ne comporte pas d'erreur. La fonction "use" est utilisé pour savoir un flag USE est défini ou non.
pkg_setup() {
export WX_GTK_VER="2.6"
if ! use gtk && ! use remote && ! use amuled; then
eerror ""
eerror "You have to specify at least one of gtk, remote or amuled"
eerror "USE flag to build amule."
eerror ""
die "Invalid USE flag set"
fi
if use unicode && use gtk; then
einfo "wxGTK with gtk2 and unicode support will be used"
need-wxwidgets unicode
elif use gtk; then
einfo "wxGTK with gtk2 support will be used"
need-wxwidgets gtk2
elif use unicode; then
einfo "wxGTK with unicode and without X support will be used"
need-wxwidgets base-unicode
else
einfo "wxGTK without X support will be used"
need-wxwidgets base
fi
if use stats && ! use gtk; then
einfo "Note: You would need both the gtk and stats USE flags"
einfo "to compile aMule Statistics GUI."
einfo "I will now compile console versions only."
fi
if use stats && ! built_with_use media-libs/gd jpeg; then
die "media-libs/gd should be compiled with the jpeg use flag when you have the stats use flag set"
fi
}
L'étape de configuration/compilation. De même que pour pkg_setup, on utilise la fonction "use" pour configurer dynamiquement les sources. Classiquement, on définit une variable locale (ici myconf) à laquelle on rajoute des arguments selon les flags USE utilisés. Pour configurer le paquet, on n'utilise pas directement ./configure, mais plutôt la fonction econf et pour compiler non pas make mais emake.
src_compile() {
local myconf=""
if use gtk ; then
use stats && myconf="${myconf}
--enable-wxcas
--enable-alc"
use remote && myconf="${myconf}
--enable-amule-gui"
else
myconf="
--disable-monolithic
--disable-amule-gui
--disable-wxcas
--disable-alc"
fi
econf \
--with-wx-config=${WX_CONFIG} \
--with-wxbase-config=${WX_CONFIG} \
--enable-amulecmd \
`use_enable debug` \
`use_enable !debug optimize` \
`use_enable amuled amule-daemon` \
`use_enable nls` \
`use_enable remote webserver` \
`use_enable stats cas` \
`use_enable stats alcc` \
${myconf} || die
# we filter ssp until bug #74457 is closed to build on hardened
if has_hardened; then
filter-flags -fstack-protector -fstack-protector-all
fi
emake -j1 || die
}
L'étape d'installation des sources, utilisée notamment si des manipulations sont à faire après la compilation (ici par exemple, la création de nouveaux groupes ou d'utilisateurs).
src_install() {
make DESTDIR=${D} install || die
if use amuled || use remote; then
if ! id p2p >/dev/null; then
enewgroup p2p
enewuser p2p -1 -1 /home/p2p p2p
fi
fi
if use amuled; then
insinto /etc/conf.d; newins ${FILESDIR}/amuled.confd amuled
exeinto /etc/init.d; newexe ${FILESDIR}/amuled.initd amuled
fi
if use remote; then
insinto /etc/conf.d; newins ${FILESDIR}/amuleweb.confd amuleweb
exeinto /etc/init.d; newexe ${FILESDIR}/amuleweb.initd amuleweb
fi
}
Comme on a pu le voir, certaines fonctions sont à la dispositions de l'utilisateur dans les ebuilds. Les plus courantes :
- use : permet de vérifier la présence d'un flag USE. - einfo : affiche un message d'information. - eerror : affiche un message d'erreur et stoppe. - econf : configure les sources. - emake : compile les sources.
Une fois l'ebuild créé, il doit être placé dans le bon répertoire. Ensuite, il faut créer le digest :
$ ebuild chemin_vers_l'ebuild digest
Une fois ceci fait sans erreur, votre paquet est près à être emergé.
[modifier] Plus d'infos ?
Pour avoir plus d'informations sur la création d'ebuilds Gentoo, vous pouvez allez directement consulter la page de référence du handbook Gentoo. Vous y retrouverez tout ce qui a été dit ici, mais aussi la liste complète des variables et des fonctions définies par emerge.
