gblend-1
Accueil du site > Portage > Fonctionnement de Portage

Fonctionnement de Portage

Publié le vendredi 9 décembre 2005, mis a jour le samedi 20 septembre 2008, par maxime


L’arbre PORTAGE

Quelques explications

Quand vous exécutez la commande emerge —sync, vous télécharger le dernier arbre officiel sur les serveurs rsync de Gentoo. Il se situe le plus souvent dans /usr/portage, cela dépend aussi de la configuration du make.conf. L’arbre possède une cinquantaine de sections qui évoluent chaque jour. Dans ses sections, il y a pour chaque paquet un répertoire où se situe :

  • un ebuild pour chaque version : liste de commandes Portage pour installer un paquet
  • un Changelog : indique les améliorations de chaque version
  • un metadata : fichier xml qui donne plus de précision sur le paquet
  • un Manifest : fichier signé en PGP qui donne le MD5 de chaque fichier, le nom du fichier exact, et sa taille. Il sert à vérifier l’intégrité des sources téléchargées
  • un répertoire files : fichier digest-nomdupaquet-version qui indique le MD5, le nom du fichier exact et la version (comme dans le Manifest)

Si nous revenons dans /usr/portage, nous aperçevons des répertoires autres que des catégories de paquets :

  • distfiles : il comprend tous les fichiers téléchargés pendant l’installation d’un paquet
  • eclass : dans ce répertoire, on trouve tous les scripts eclass qui sont des fonctions appelées dans les ebuilds
  • metadata : ce répertoire possède le cache des ebuild, glsa (Gentoo Linux Security Advisory) qui contient toutes les annonces de vulnérabilités des paquets et d’autres fichiers comme timestamp...
  • packages : on y trouve toutes les archives des binaires des paquets
  • profiles : dans ce répertoire, on trouve tous les profiles de Gentoo

On en conclut que l’arbre portage comprend les ebuilds avec une organisation bien spéciale : catégorie/paquet/paquet-version.ebuild et a aussi des fichiers spéciaux pour Portage. Il peut être modifié à tout moment grâce à la commande emerge —sync. Vous pouvez aussi avant de faire cette manipulation, voir les nouveaux paquets de l’arbre portage ici.

Représentation graphique

GIF - 4.7 ko
Représentation de l’arbre portage

Fonctionnement d’emerge

Dans cette section, nous décrivons en gros le fonctionnement d’emerge pour l’installation, la désinstallation... toutes les actions importantes et régulières que vous faites avec emerge.

emerge categorie/paquet

  • Emerge regarde dans le fichier /etc/make.conf pour prendre en compte toutes les options,
  • regarde si le paquet existe dans /usr/portage,
  • regarde dans d’autres fichiers comme /etc/portage/package.unmask, /etc/portage/use...,
  • créé à la fin de l’installation un répertoire avec plein d’informations concernant le paquet dans /var/db/pkg/section/,
  • et installe le paquet.

emerge -C categorie/paquet ou emerge unmerge categorie/paquet

  • Emerge fait le même fonctionnement que l’installation d’un paquet,
  • regarde si le paquet est installé,
  • supprime le répertoire du paquet qui se situe dans /var/db/pkg/section,
  • désinstalle le paquet.

emerge —sync

  • Emerge regarde dans le fichier /etc/make.conf,
  • indique à la fin s’il est important de faire une mise à jour et s’il a téléchargé un nouvel ebuild de portage,
  • indique dans un fichier dans /usr/portage/profiles/updates, les transitions des noms de paquets,
  • télécharge l’arbre portage et
  • supprime tous les fichiers dans /usr/portage/ qui ne sont pas dans l’arbre actuel.

emerge -u world

  • Emerge regarde dans le fichier /etc/make.conf,
  • regarde dans le fichier /var/lib/portage/world qui indique les paquets qui ont des changements dans leur répertoire (exemple : /usr/portage/app-portage/abeni),
  • regarde dans le répertoire /etc/make.profile pour respecter ce qu’indique le profile utilisé (la version de Gentoo),
  • et met à jour.

emerge —clean

  • Nettoie le système en enlevant les paquets qui ne sont plus à jour et qui ne vont pas supprimer de fonctionnalités et, de ce fait, préserve le bon fonctionnement de votre système.

emerge —depclean

  • Nettoie le système en enlevant les paquets qui ne sont pas associés avec des paquets fusionnés explicitement. Depclean fonctionne en créant l’arbre de dépendance complet pour la liste du système et le fichier world, et en le comparant aux paquets installés. Les paquets installés, mais non associés avec une fusion explicite sont listés comme des candidats pour une désinstallation.

Attention : Ceci peut gravement affecter votre système en supprimant des paquets qui pourrait avoir été liés à d’autres, mais qui en raison d’un changement dans les drapeaux USE peuvent ne plus faire partie de l’arbre profond.

emerge —metadata

  • Force portage à gérer tous les fichiers du métacache qui sont normalement gérés à la fin d’une queue d’une mise à jour rsync utilisant "emerge —sync". Le traitement cré la base de donnée du cache que portage utilise pour consulter les données des paquets.

emerge —regen

  • Provoque la vérification et la mise à jour par portage du cache des dépendances de tous les ebuilds dans l’arbre portage. Ce n’est pas recommandé pour des utilisateurs de rsync puisque rsync met à jour le cache en utilisant les caches des autres serveurs. Les utilisateurs devraient simplement faire ’emerge —sync’ pour regénérer.

Autres options

  • —ask : elle propose les USES d’un paquet, ensuite elle affiche les dépendances de ce paquet et elle vous demande si vous voulez installez ce paquet avec les dépendances.
  • —buildpkg : elle sert à créer les binaires d’un paquet avec le fusionnement véritable du paquet.
  • —buildpkgonly : c’est exactement l’option précédente sauf qu’il n’y a aucun fusionnement véritable.
  • —changelog : cette option ne peut marcher qu’avec —pretend. Elle affiche toutes les dépendances d’un paquet et s’il est installé ou non et il affiche les changements de chaque version du paquet designé.
  • —debug : elle sert à installer avec le mode debug, c’est-à-dire qu’elle va faire des commentaires ou indiquer des erreurs.
  • —deep : elle est utilisée avec l’option —update. Elle force la mise à jour des dépendances d’un paquet non-cité dans l’ebuild.
  • —emptytree : cette option peut-être très utile si l’utilisateur a du temps libre :). Par exemple quand vous mettez un nouvel USE (ou une nouvelle USE, je sais pas comment dire), et que vous voulez que toutes les paquets installés utilisent ce USE, il faut donc recompiler tous les paquets. Cette option refusionne tous les paquets installés sur votre système.
  • —fetchonly : elle télécharge juste le paquet indiqué et ses dépendances mais elle ne compile rien. Avec l’option —pretend, emerge vous montrera les URLS avec tous les mirroirs.
  • —fetch-all-uri : même fonctionnement que l’option précédente sauf que tous les fichiers des paquets, y compris ceux non exigés, seront téléchargés.
  • —getbinpkg : elle indique à Portage de télécharger le paquet binaire depuis le serveur que vous avez défini dans la variable PORTAGE_BINHOST. Elle est utilisée avec l’option "—usepkg".
  • —getbinpkgonly : Elle est indentique par rapport à celle précédente, sauf qu’elle n’utilise aucune information de la machine locale. Tous les paquets seront téléchargés sur un serveur sans consulter l’annuaire des paquets.
  • —newuse : Avec cette option, vous pouvez à présent reconstruire tous les paquets qui n’ont pas eu les nouveaux drapeaux de votre variable USE. Un astérisque est marqué quand un drapeau a été changé depuis la première installation du paquet.
  • —noconfmem : Portage maintient les fichiers qui ont été placés dans les répertoires CONFIG_PROTECT, et normalement il ne fusionnera pas le même fichier plus d’une fois. Ceci peut aboutir à des problèmes quand l’utilisateur veut le fichier dans le cas d’une suppression accidentelle. Avec cette option, les fichiers seront toujours fusionnés dans le fs réel au lieu d’être perdus.
  • —nodeps : Comme son nom l’indique, emerge n’installe que le paquet indiqué, les dépendances sont ignorées. L’option est fortement déconseillée.
  • —noreplace : si un paquet est déjà installé, emerge passe alors au paquet suivant.
  • —oneshot : Emerge installe le paquet normalement sauf qu’il ne l’inscrit pas dans le fichier world. Il ne sera mis à jour que s’il dépend d’un paquet que vous voulez installer.
  • —onlydeps : cela n’emerge que les dépendances du paquet indiqué, sans le fusionnement du paquet.
  • —pretend : cette option affiche soit les dépendances et le paquet indiqué, soit tous les paquets qui seront mis à jour, tout en indiquant si le(s) paquet(s) est installé(s) ou pas, sa(ses) version... Le N correspond à Nouveau, le U à la mise à jour(update), le R à remplacement, le F à recherche restreinte(find) et le B à bloqué.
  • —resume : quand vous arrêtez volontairement la compilation, avec cette option, emerge reprend au paquet arrêté.
  • —searchdesc : vous pouvez chercher une description d’un paquet en indiquant quelques mots avec cette option.
  • —skipfirst : Cette option est seulement valide dans un contexte de synthèse. Elle supprime le premier paquet dans la liste du résumé et ainsi une fusion peut se poursuivre malgré la présence d’une erreur fausse ou sans importance. Ceci doit seulement être utilisé dans les cas où passer le paquet ne provoque pas d’échec de dépendances.
  • —tree : Montre l’arbre de dépendance en utilisant l’indentation pour les dépendances.
  • —usepkg : Demande à emerge d’utiliser des paquets binaires (depuis $PKGDIR)) s’ils sont disponibles, et, de ce fait, évite probablement un temps certain de compilation. Cette option est utile pour les installations CD ; vous pouvez exporter PKGDIR=/mnt/cdrom/packages et alors utiliser cette option pour avoir emerge qui "attire" les paquets binaires depuis le CD afin de satisfaire les dépendances.
  • —usepkgonly : Comme —usepkg ci-dessus, excepté que cela permet uniquement d’utiliser des paquets binaires, et que la fusion sera abandonnée si le paquet n’est pas disponible au moment du calcul des dépendances.
  • —verbose : Les effets varient mais le résulat général est une sortie augmentée ou étendue du contenu des affichages de portage.

Fonctionnement d’un ebuild

L’ebuild, comme on l’a vu précédemment, est un script où est indiqué une liste de commandes Portage pour installer le paquet que l’on souhaite. Pour plus d’informations sur les commandes Portage de l’ebuild, allez sur le guide du développeur de Gentoo.

En-tête de l’ebuild

# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/app-misc/worker/worker-2.8.4.ebuild,v 1.6 2004/10/05 13:34:52 pvdabeel Exp $

Note : La syntaxe de l’en-tête doit être exactement identique à celle du fichier /usr/portage/header.txt

Description du paquet

DESCRIPTION="Worker Filemanager: Amiga Directory Opus 4 clone"

Le site officiel du paquet

HOMEPAGE="http://www.boomerangsworld.de/worker/"

L’adresse de l’archive du paquet

SRC_URI="http://www.boomerangsworld.de/worker/downloads/${P}.tar.bz2"

Note : Si jamais la variable SRC_URI n’est pas précisée, alors emerge va prendre l’adresse définie dans la variable GENTOO_MIRRORS du fichier /etc/make.conf.

La licence du paquet

LICENSE="GPL-2"

Indique qu’il n’y aura qu’une version installée de ce paquet

SLOT="0"

Les architectures supportées par le paquet

KEYWORDS="x86 ppc ~amd64 ~ia64 ~sparc alpha ~hppa ~mips"

Les paquets dépendants

DEPEND="virtual/x11"

Section pour l’installation

src_install() {

Installation

make DESTDIR=${D} install || die "install problem"

Commande qui installe les fichiers man

doman man/worker.1

Commande qui installe la documentation

dodoc AUTHORS ChangeLog INSTALL NEWS README README_LARGEFILES THANKS

Fermeture de la section

}

Utilisation avancée d’emerge

Démasquer un paquet

Dans l’arbre portage, on peut trouver des paquets masqués, c’est-à-dire qu’ils sont très instables. On ne peut donc pas les emerger directement avec emerge. Il faut déjà passer par une manipulation pour les démasquer et ensuite les installer.

$ mkdir /etc/portage
$ echo x11-libs/evas >> /etc/portage/package.unmask

Attention : La syntaxe à respecter est : catégorie/paquet. Vous pouvez aussi préciser la version (=categorie/paquet-version). D’autre part, il ne faut surtout pas faire ceci (cela pourrait provoquer une défaillance par la suite) :

$ emerge /usr/portage/x11-libs/evas/evas-9999.ebuild

Masquer un paquet

Si vous voulez par exemple qu’emerge ne fasse pas une mise à jour d’un certain paquet, vous pouvez le masquer et comme ca emerge ne posera plus de problème. La syntaxe est la même que pour démasquer un paquet : categorie/paquet. Vous pouvez aussi préciser la version à l’aide de = (=categorie/paquet-version). Par contre, au lieu d’utiliser le fichier /etc/portage/package.unmask, vous utiliserez /etc/portage/package.mask.

[titre2]Attribuer des USE pour chaque paquets[titre2]

Si vous voulez attribuer des USE pour un cas précis de paquet, il est préférable d’utiliser le fichier /etc/portage/package.use que de faire :

$ USE="foo" emerge bar

La syntaxe du fichier est la même que les fichiers /etc/portage/package.* :

(exemple)
media-video/mplayer -arts dvd nvidia fbcon xvid libcaca matroska real divx4linux dvdread mmx mmxext 3dnow 3dnowext sse win32codecs -xmms custom-cflags -gtk
=sys-libs/slang-1.4.9-r2 unicode

Changer l’architecture d’un paquet

Il existe pour le changement d’architecture d’un paquet comme pour le démasquage un fichier /etc/portage/package.keywords. La syntaxe a respecter se présente comme ceci : catégorie/paquet architecture.

$ mkdir /etc/portage
$ echo x11-misc/lookingglass-bin x86 >> /etc/portage/package.keywords

Note : Pareil que pour le masquage et démasquage d’un paquet, vous pouvez préciser la version du paquet.

Reconstruction d’un paquet avec de nouveaux drapeaux USE

Vous pouvez à présent reconstruire tous les paquets qui n’ont pas eu les nouveaux drapeaux de votre variable USE. Un astérisque est marqué quand un drapeau a été changé depuis la première installation du paquet.

L’option a utiliser est : —newuse

$ emerge --newuse --ask world

Manipulation améliorée de l’injection

L’injection qui se fait par l’option —inject + paquet sert à dire que telle version de paquet est installée même si elle ne l’est pas ou n’existe pas.

Pour l’instant, l’injection est encore instable. Cette méthode devra se faire non pas par l’option —inject mais en indiquant la catégorie du paquet et sa version (syntaxe : categorie/paquet-version) dans le fichier /etc/portage/profiles/package.provided .

$ emerge --inject x11-base/evoak-0.0.1.20040807

GPG dans Portage

Chaque paquet possède un Manifest dans son répertoire, contenu dans l’arbre portage. Le Manifest possède la taille et le MD5 de l’archive du paquet, du Changelog, de l’ebuild... Ce fichier sert à Portage qui va vérifier que l’archive du paquet n’a pas été corrompue. Dans tous les nouveaux Manifest, le Manifest est signé par une clé PGP.

Pour une sécurité suplémentaire, une fonction a été intégrée : gpg qui sert à vérifier que la signature n’a pas été elle aussi corrompue. Plusieurs stades de sécurité existent : strict ou severe strict. Cette fonction n’est pas encore très stable. Si vous n’arrivez pas à la faire marcher, c’est normal.

  • stade minimum de vérification

FEATURES="gpg"

  • stade moyen

FEATURES="gpg strict"

  • stade paranoïaque

FEATURES="gpg severe strict"

Quelques fonctionnalités de Portage

La dernière version de portage, 2.0.51, intégre des nouvelles fonctionnalités. Petit rappel : pour utiliser les fonctions, il faut les entrer dans la variable FEATURES du fichier /etc/make.conf.

  • maketest : Cette fonction effectue un test du paquet à la fin de la compilation. Tous les paquets ne possèdent pas un test de vérification.
  • autoconfig : Cette fonction sert à faire la mise à jour des scripts config.sub et config.guess (qui servent en partie à la configuration de la compilation d’un paquet) contenu dans un paquet par l’outil gnuconfig (config.sub et config.guess) et contenu dans votre système (/usr/share/gnuconfig/). Ceci sert à ce que la configuration soit la même pour chaque paquet.
  • gpg : Elle sert à vérifier les signatures gpgp des Manifests et s’assurent qu’elles sont correctes.

Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | SPIP | squelette