<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1648"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1648/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1648/atom/feed</id>
  <updated>2008-11-19T11:27:20+01:00</updated>
  <entry>
    <title>Gestion des paquets</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1648" />
    <id>http://artisan.karma-lab.net/node/1648</id>
    <published>2008-10-22T11:40:59+02:00</published>
    <updated>2008-11-19T11:27:20+01:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="Systèmes de fichier" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[ <p>
   Une des grandes forces du monde Unix, et donc de GNU/Linux, tient à sa capacité à installer et désinstaller très facilement des applications. Lorsque l'on arrive du monde Windows, cet aspect tient même du magique. C'est la fin des heures de recherche sur le net pour trouver un pov' logiciel, trouver son installation, l'installer, rebooter, comprendre ce qu'il a réellement installé, le désinstaller, pleurer parce qu'on n'y arrive pas...</p>
     ]]></summary>
    <content type="html"><![CDATA[ <p>
   Une des grandes forces du monde Unix, et donc de GNU/Linux, tient à sa capacité à installer et désinstaller très facilement des applications. Lorsque l'on arrive du monde Windows, cet aspect tient même du magique. C'est la fin des heures de recherche sur le net pour trouver un pov' logiciel, trouver son installation, l'installer, rebooter, comprendre ce qu'il a réellement installé, le désinstaller, pleurer parce qu'on n'y arrive pas...</p>
 <!--break-->
   <p>
   Sous GNU/Linux, l'installation est simple comme une requête car le point de différence fondamental avec Windows, c'est que c'est un système indépendant qui est responsable de l'installation et pas l'auteur de l'application elle-même. 
 </p>
 

	<a name='chapter_1'></a>
  <h2>Les paquets, comment ça marche ?</h2>
	
<p>
  Il existe de nombreux systèmes de gestion de paquets sous Linux mais ils partagent tous les caractéristiques suivantes :
  <ul>
    <li><b>Un processus d'installation indépendant de l'application installée</b> - C'est un peu l'aspect fondamental de toutes les gestions de paquets. Une application installée ne sait ainsi jamais par qui et par quoi elle sera mise en place dans le système. Contrairement à ce qui se passe couramment sous Windows, ce n'est donc jamais elle qui gère son installation et sa désinstallation.</p>

    <li><b>Le paquet</b> - C'est l'unité de base de l'installation. Il s'agit d'un fichier (.rpm, .deb, etc) qui contient les divers éléments à installer, une description, un nom, une version, une liste des changements, et surtout une liste des autres paquets (nom et version) dont il dépend.</li>
    
   <li><b>La base de donnée locale</b> - Elle contient la liste de TOUS les paquets installés. Cet aspect peut faire penser à l'Ajouter/Supprimer de Windows à la nuance près qu'il est beaucoup plus efficace, car il garde la trace non seulement des applications haut-niveau (ex. OpenOffice v2.2), mais aussi de <b>toutes les librairies et de leurs versions respectives</b>. C'est un composant vital et extrêmement précieux qui permet jusqu'à de savoir de quel paquet provient un fichier sur le système et s'il a par exemple été modifié depuis son installation. Cette base facilite et fiabilise grandement la processus de désinstallation. </li>

   <li><b>Un utilitaire de gestion locale des paquets</b> - Il chargé de l'installation et désinstallation d'un paquet ainsi que du maintien et de l'interrogation de la base de donnée.  Selon les distributions, cet utilitaire est <kbd>yum</kbd> (RedHat/Fedora), <kbd>apt</kbd> (Debian), <kbd>rpm</kbd> (RedHat, Mandriva), etc.</li>
   
    <li><b>Un dépôt</b> - Les dépôts sont des dossiers au sens large du terme (locaux, ftp, http, etc.)  contenant des paquets prêt à être installés. Les dépôts sont généralement spécifiques à une distribution et même à une version de distribution. D'une distribution à l'autre ils peuvent être plus ou moins vastes et plus ou moins nombreux. Pour Mandriva, cela représente pas moins d'une vingtaine de dépôts (environ 34Go), disponibles sur internet où l'on trouve à peu près tout d'OpenOffice à FireFox en passant par Gimp. Tout cela directement accessible sans avoir à lancer Google... </li>
    
   <li><b>Un utilitaire de gestion dépendances entre les paquets</b> - cet outil va ainsi avoir une vision globale de la base de donnée locale des paquets installés mais aussi des paquets disponibles dans les dépôts locaux ou sur internet. C'est lui qui va ainsi être capable lors de l'installation d'une application, sur la base des informations de dépendance renvoyées par l'utilitaire de gestion locale des paquets, d'aller chercher les paquets manquants. Il s'agit par exemple de <kbd>yum</kbd>, <kbd>urpmi</kbd>, etc. .</li>

   <li><b>Un frontal graphique</b> - Il s'agit d'une application graphique qui va rendre tout cela plus visuel. Il peut cumuler les deux précédents rôles ou simplement utiliser les précédents utilitaires. Il s'agit par exemple de <kbd>Synaptic</kbd>, <kbd>rpmdrake</kbd>, etc... Certains de ces frontaux, comme <kbd>smart</kbd>, sont capable d'utiliser des paquets provenant de plusieurs systèmes (.deb, .rpm). </li>
</ul>
 </p>
<p>
  Pour le reste de ce billet, nous allons nous concentrer spécifiquement sur le système de paquets <kbd>.rpm</kbd>, avec l'utilitaire de gestion locale <kbd>rpm</kbd> et de dépendances <kbd>urpmi</kbd>. 
</p>


	<a name='chapter_2'></a>
  <h2>Ajouts de dépôts dans URPMI</H2>
<p>
   Pour rendre tout cela plus parlant, imaginons que nous partions de rien, d'une installation standard, et que nous voulions installer <kbd>openOffice</kbd> à partir d'internet sur une <kbd>Mandriva</kbd>. Mandriva utilise le système de paquet hérité de la RedHat : rpm. D'ailleurs au passage, techniquement Mandriva <i>est</i> une RedHat, du moins à l'origine, comme Ubuntu <i>est</i> une Debian. 
</p>
<p>
  L'utilitaire bas niveau de gestion des paquets <kbd>RPM</kbd> est la commande <kbd>rpm</kbd>. La base de données locale utilise est la petite SGBD BerkleyDB. L'utilitaire qui gère les dépôts et les dépendances entre paquets est <kbd>urpmi</kbd>.
</p>

<p>
   L'utilitaire <kbd>urpmi</kbd> utilise donc en interne l'utilitaire <kbd>rpm</kbd> qui lui utilise des paquets RedHat au format <kbd>.rpm</kbd>. Pour Urpmi, un dépôt s'appelle un <kbd>média</kbd>. Ce média peut être un dossier local, un DVD à insérer, un site FTP, une page HTML, etc... Lorsque vous venez d'installer Mandriva, les seuls médias connus d'urpmi sont les 3 CD, ou le DVD, d'installation. Nous allons changer cela, et lui donner un plus vaste choix de logiciel via internet.
 </p>
 <p>
 Le plus simple est d'utiliser l'excellent site <a class='external' target='_blank' href='http://easyurpmi.zarb.org' >easyUrpmi</a> (je continue à préférer l'ancienne interface). Vous sélectionnez alors la version de Mandriva que vous utilisez et vous pressez <kbd>process Step 2</kbd>. Une liste de dépôt disponibles apparaît. Petite explication sur ces dépôts et leur rôle.
 </p>
 
<h2>Les dépôts, ou médias, pour Mandriva</h2>
	
<p>
  Mandriva a fortement normalisé la structure de ses dépôts depuis quelques années. Aujourd'hui chaque dépôt peut avoir 4 parfums différent : release, updates, backports et testing.
</p>
<p>
  Le dépôt "release" est celui qui contient les paquets qui ont été livrés au moment où la distribution est sortie. Le dépôt "updates", comme son nom l'indique, est le dépôt des mises à jour du dépôt "release". Le dépôt "backports" contient des versions pas toujours stables mais beaucoup plus récentes, qui feront généralement parti de la prochaine version de Mandriva. Enfin le dépôt "testing" est en quelque sorte le pre-backports. 
</p>
<p>
  Cela veut dire que si vous êtes en train de régler un serveur de production, vous allez éviterez backports et testing. En revanche, pour tester et s'amuser, c'est une vraie mine d'or réglant pas mal d'aigreurs de mandriviens qui n'avaient droit à de nouvelles version qu'à chaque release de Mandriva. 
</p>
<p>
 Maintenant que nous connaissons les parfums, regardons les dépôts existants. Il y a déjà "main", c'est le dépôt officiel de Mandriva qui contient plus ou moins tout ce qu'il y a déjà dans le DVD d'installation.
</p>
<p>
 Il y a ensuite le très volumineux "contrib". Comme son nom l'indique, il s'agit du dépôt des contributeurs à Mandriva. Il n'est pas officiellement supporté par Mandriva mais presque. Ce dépôt est simplement vitale et complète parfaitement le dépôt principale pour fournir à peu près tout ce qui peut exister comme application libre.
</p>
<p>
 Ensuite nous avons le fameux PLF et le plus récent "non-free". Pour commencer par le plus simple "non-free" est comme son nom l'indique un dépôt de ce qui ne peut pas être mis dans une distribution considérée comme libre mais sans pour autant que ce qu'il contient puisse donner lieu à un procès. Il s'agit généralement de pilotes et de firmwares propriétaires (sources fermés) ou aux licences incompatibles avec la GPL et que l'éditeur veut bien voir distribué par d'autres que lui. C'est par exemple là que se trouvent les pilotes nVidia. 
</p>
<p>
  Avec les dépôt "plf-nonfree" c'est un peu plus "obscure". Vous trouverez là les codecs de Microsoft, les fontes de Windows, l'émulation d'une PlayStation, etc... En bref des choses qui sont non seulement non-libre mais aussi relativement problématiques d'un point de vue légal. Pour bien situer le débat, PLF veut dire <kbd>Pingouin Liberation Front</kbd> ! 
</p>
<p>
  Mais n'espérez cependant pas y échapper car ce dépôt est lui aussi vital. Car sans lui comment lire ces maudites vidéos WMF ? Et même comment lire aussi... un simple DVD ? 
 </p>
<p>
 Il existe encore bien d'autres dépôts pour Mandriva hors ceux cités par easyUrpmi. KDE.org fournit des dépôts pour ses versions les plus récentes. Le site <a class='external' target='_blank' href='http://seerofsouls.com/' >Seer Of Soul (SoS)</a> fournit lui aussi des versions plus récentes de Gnome, Kde, etc... Mais commençons déjà avec les dépôts easyUrpmi. 
</p>

<p>
 Maintenant que vous savez tout cela, retours sur le choix des médias dans <kbd>easyurpmi.zarb.org</kbd> où vous n'avez plus qu'à... tout sélectionner <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/> Sauf bien sur si vous êtes en train de monter un serveur... Ensuite vous pouvez choisir le site où se connecter pour récupérer les dépôts. Choisissez un serveur en France et rapide (ex. proxad, free, club-internet). Ensuite pressez <kbd>proceed step 3</kbd>. 
 </p>
 <p>
 Là s'affiche la liste des commandes à exécuter dans une console, en root, pour récupérer toutes ces bonnes choses. Avant de vous lancer, vous devez vider la liste des médias existant sur votre machine puis coller brutalement la liste des commande fournit par le site :
 
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>urpmi.removemedia -a</div><div class='result'>&nbsp;</div><div class='command'><span class='prompt'>root#</span>urpmi.addmedia --update plf-free ftp://ftp.free.fr/pub/Distributions_Linux/plf/mandriva/2009.0/free/release/binary/i586/ with media_info/hdlist.cz</div><div class='result'>...etc...</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
 </p>
<p>
  Une autre solution intéressante pour mettre en place les dépôts sur une machine à partir d'une autre machine qui les a correctement réglés est la commande <kbd>--dump-config</kbd> d'urmpq qui liste les médias sous une forme exploitable par <kbd>urpmi.addmedia</kbd> :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>urpmq --dump-config</div><div class='result'>contrib.release http://somewhere.net/medias/2009.0/ftp.proxad.net/contrib/release</div><div class='result'>...</div><div class='co0'># et pour une version directement exploitable</div><div class='result'>urpmq --dump-config | awk '{print "urpmi.addmedia $0"}'</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
 

	<a name='chapter_3'></a>
  <h2>Recherche dans les dépôts</h2>
	
 <p>
  L'autre aspect pour le peu génial de la gestion par paquets des installations est la recherche. Avec <kbd>urpmi<Kbd> la commande de recherche s'appelle <kbd>urpmq</kbd>. Les options sont riches mais voici quelques utilisations "standard".
 
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='co0'># Recherche d'un paquet simple, le Y en majuscule indique une recherche "floue"</div><div class='command'><span class='prompt'>gaston$</span>urpmq -Y openoffice</div><div class='result'>openoffice.org</div><div class='result'>openoffice.org-base</div><div class='result'>openoffice.org-calc</div><div class='result'>openoffice.org-common</div><div class='result'>etc...</div><div class='result'>&nbsp;</div><div class='co0'># Maintenant une recherche avec affichage des numéros de version par l'ajout de l'option -r</div><div class='command'><span class='prompt'>gaston$</span>urpmq -Yr openoffice</div><div class='result'>openoffice.org-3.0-0.rc2.2mdv2009.0</div><div class='result'>openoffice.org-base-3.0-0.rc2.2mdv2009.0</div><div class='result'>openoffice.org-calc-3.0-0.rc2.2mdv2009.0</div><div class='result'>openoffice.org-common-3.0-0.rc2.2mdv2009.0</div><div class='result'>etc...</div><div class='result'>&nbsp;</div><div class='co0'># On poursuite avec une recherche avec affichage de la liste</div><div class='co0'># de tous les fichiers (option -l) contenus dans le paquets.</div><div class='co0'># Pratique avec un grep pour chercher où va s'installer un fichier en particulier.</div><div class='co0'># si nous avions remplacé "openoffice" par "openoffice.org-base", la même chose</div><div class='co0'># serait affiché mais spécifiquement pour ce paquet</div><div class='command'><span class='prompt'>gaston$</span>urpmq -Yl openoffice</div><div class='result'>/usr/share/edos/tests/mandriva-manual-tests/OpenOffice</div><div class='result'>/usr/share/edos/tests/mandriva-manual-tests/OpenOffice/OpenOffice.xml</div><div class='result'>/usr/share/edos/tests/mandriva-manual-tests/OpenOffice/tc</div><div class='result'>/usr/share/edos/tests/mandriva-manual-tests/OpenOffice/tc/Integration.xml</div><div class='result'>/usr/lib/ooo-3.0/basis3.0</div><div class='result'>etc...</div><div class='result'>&nbsp;</div><div class='co0'># Maintenant une recherche plus précise avec affichage des informations sur les paquets (-i)</div><div class='co0'># là aussi il auraitété possible de limiter à un seul paquet.</div><div class='command'><span class='prompt'>gaston$</span>urpmq -Yi openoffice</div><div class='result'>Name        : edos-mandriva-manual-tests-openoffice</div><div class='result'>Version     : 1.0.0</div><div class='result'>Release     : 4mdv2009.0</div><div class='result'>Group       : Development/Other</div><div class='result'>Size        : 1039                         Architecture: noarch</div><div class='result'>Source RPM  : edos-mandriva-manual-tests-1.0.0-4mdv2009.0.src.rpm</div><div class='result'>URL         : http://www.edos-project.org</div><div class='result'>Summary     : EDOS XML specification files for Mandriva manual test procedures (OpenOffice)</div><div class='result'>Description :</div><div class='result'>The EDOS XML specification files for Mandriva manual test procedures, for the</div><div class='result'>OpenOffice suite</div><div class='result'>etc...</div><div class='result'>&nbsp;</div><div class='co0'># Pour obtenir seulement les informations de changement sur un paquet</div><div class='command'><span class='prompt'>gaston$</span>urpmq --changelog openoffice.org</div><div class='result'>* Sat Oct  4 2008 Frederic Crozat <<script>document.write(String.fromCharCode(60,97,32,104,114,101,102,61,39,109,97,105,108,116,111,58,102,99,114,111,122,97,116,64,109,97,110,100,114,105,118,97,46,99,111,109,39,62,102,99,114,111,122,97,116,64,109,97,110,100,114,105,118,97,46,99,111,109,60,47,97,62));</script>> 0:3.0-0.rc2.2mdv2009.0</div><div class='result'>- Add epoch to fix upgrade from Mdv 2009 RC2 and allow gnome subpackage to be installed</div><div class='result'>&nbsp;</div><div class='result'>* Wed Oct  1 2008 Rafael da Veiga Cabral <<script>document.write(String.fromCharCode(60,97,32,104,114,101,102,61,39,109,97,105,108,116,111,58,99,97,98,114,97,108,64,109,97,110,100,114,105,118,97,46,99,111,109,39,62,99,97,98,114,97,108,64,109,97,110,100,114,105,118,97,46,99,111,109,60,47,97,62));</script>> 3.0-0.rc2.1mdv2009.0</div><div class='result'>+ Revision 290159</div><div class='result'>&nbsp;</div><div class='co0'># Enfin, une autre recherche très pratique, savoir dans paquet se trouve un fichier donné</div><div class='co0'>#urpmf /usr/bin/oowriter</div><div class='result'>openoffice.org-writer:/usr/bin/oowriter3.0</div><div class='result'>&nbsp;</div><div class='co0'># Rechercher les paquets qui dépendent d'un autre paquet</div><div class='command'><span class='prompt'>gaston$</span>urpmq --whatrequires libunique0</div><div class='result'>marlin</div><div class='result'>midori</div><div class='result'>...</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
 </p>
 

	<a name='chapter_4'></a>
  <h2>Installation d'un paquet</h2>
	
 <p>
 Lorsque nous avons trouvé ce que nous voulons, nous pouvons l'installer :
 
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>urpmi openoffice.org</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
 </p>
  <p>
 C'est aussi simple que cela... Les Windowsiens apprécieront même si j'ai entendu dire qu'un projet de ce genre se lançait sur cette plate-forme. 
 </p>
<p>
  Techniquement il serait possible de complètement se passer d'urpmi et de gérer tout avec <kbd>rpm</kbd>, mais cela implique de gérer toutes les dépendances à la main, ce qui n'est pas très amusant. Imaginez qu'à chaque appel à <kbd>rpm -i</kbd> (-i pour "installer"), il faille 1/ fournit la bonne URL vers le paquet et 2/ l'entendre couiner qu'il n'a pas la librairie <kbd>bidulo-atomique-1234.rpm</kbd> et qu'il vous faille chercher l'URL de cette librairie, lancer un <kbd>rpm -i</kbd> dessus, entendre le zinzin couiner qu'il manque une dépendance <kbd>libatom-machin-1234.rpm</kbd>, et ainsi de suite jusqu'à ce que mort s'en suive... Il faut l'avoir vécu au moins une fois pour bien comprendre l'apport du gestionnaire de dépendances et de dépôts...
<p>
<p>
  <kbd>urpmi</kbd> peut aussi être utilisé pour installer automatiquement des mises à jours. 
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='co0'># recherche des mise à jour dans les médias</div><div class='command'><span class='prompt'>root#</span>urpmi.update -a</div><div class='result'>&nbsp;</div><div class='co0'># Lance une installation de tout ce qui est nouveau (attention en production !!!)</div><div class='command'><span class='prompt'>root#</span>urpmi --auto-select</div><div class='result'>&nbsp;</div><div class='co0'># La même chose en une seule commande</div><div class='command'><span class='prompt'>root#</span>urpmi --auto-update</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
  <div class='inline-box note'>Si vous avez des soucis de MD5, vous pouvez rajouter l'option <kbd>-no-md5sum</kbd> aux deux commandes et <kbd>-force --allow-force</kbd> en plus à la seconde. 
 </div>
<p>
  Maintenant nous savons installer, comment faire pour remplacer à neuf un paquet qui a été torpillé par exemple par une compilation malheureuse ? Et bien cela se fait très simplement avec l'option <kbd>--replacepkg</kbd>:
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='co0'># remplacement d'un paquet simple...</div><div class='command'><span class='prompt'>root#</span>urpmi --replacepkg enchant libenchant1</div><div class='result'>&nbsp;</div><div class='co0'># remplacement de tous les paquets de gedit</div><div class='result'>urpmi --replacepkg $(rpm -qa | grep gedit)</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>  


	<a name='chapter_5'></a>
  <h2>Travail sur la base de donnée locale</h2>
	
<p>
  Maintenant que notre paquet est installé, avec toutes ses dépendances, nous rentrons dans le domaine de l'utilitaire de gestion locale des paquets, <kbd>rpm</kbd>, et de sa base de donnée. En effet chaque appel à <kbd>urpmi</kbd> a généré une série d'appel à <kbd>rpm -i</kbd> qui a chaque fois a ajouté à la base de données locales les versions installées, les noms de librairies, tous les fichiers ajoutés, etc..
</p>
<p>
 Sachant ceci, il est possible de faire plein de choses intéressantes avec cette base de donnée locale.
 
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='co0'># rechercher (option -q) la liste de tous les fichiers installés (option -a) et</div><div class='co0'># de filtrer sur une clef donnée, ici xorg</div><div class='command'><span class='prompt'>gaston$</span>rpm -qa | grep -i xorg</div><div class='result'>libxorg-x11-devel-7.3-4mdv2009.0</div><div class='result'>x11-server-xorg-1.4.2-7mdv2009.0</div><div class='result'>xorg-x11-75dpi-fonts-7.3-4mdv2009.0</div><div class='result'>&nbsp;</div><div class='result'>&nbsp;</div><div class='co0'># savoir de quel paquet vient un fichier installé (option -f)</div><div class='command'><span class='prompt'>gaston$</span>rpm -qf /usr/bin/zcat</div><div class='result'>gzip-1.3.12-3mdv2009.0</div><div class='result'>&nbsp;</div><div class='co0'># la même chose avec seulement le nom d'une commande</div><div class='command'><span class='prompt'>gaston$</span>rpm -qf $(which ls)</div><div class='result'>coreutils-6.12-2mdv2009.0</div><div class='result'>&nbsp;</div><div class='co0'># obtenir la liste des fichiers installés par un paquet</div><div class='command'><span class='prompt'>gaston$</span>rpm -ql gzip-1.3.12-3mdv2009.0</div><div class='result'>/bin/gunzip</div><div class='result'>/bin/gzip</div><div class='result'>/bin/zcat</div><div class='result'>/usr/bin/gunzip</div><div class='result'>/usr/bin/gzexe</div><div class='result'>/usr/bin/gzip</div><div class='result'>/usr/bin/zcat</div><div class='result'>&nbsp;</div><div class='co0'># obtenir la liste des paquets dont dépend un paquet</div><div class='command'><span class='prompt'>gaston$</span>rpm -qR pm-utils-1.2.0-3mdv2009.0</div><div class='result'>rpmlib(VersionedDependencies) <= 3.0.3-1</div><div class='result'>usermode</div><div class='result'>pciutils</div><div class='result'>radeontool</div><div class='result'>... pm-utils-1.2.0-3mdv2009.0</div><div class='result'>rpmlib(VersionedDependencies) <= 3.0.3-1</div><div class='result'>usermode</div><div class='result'>pciutils</div><div class='result'>radeontool</div><div class='result'>&nbsp;</div><div class='result'>&nbsp;</div><div class='co0'># plus fort encore, obtenir la liste des fichiers modifiés depuis leur installation.</div><div class='co0'># Le système anti-intrusion du pauvre en quelque sorte...</div><div class='result'>$rpm -Va</div><div class='result'>S.5....T    /usr/share/fonts/OTF/fonts.scale</div><div class='result'>S.5....T    /usr/share/fonts/Speedo/fonts.dir</div><div class='result'>S.5....T    /usr/share/fonts/Speedo/fonts.scale</div><div class='result'>S.5....T    /usr/share/fonts/TTF/fonts.dir</div><div class='result'>S.5....T    /usr/share/fonts/TTF/fonts.scale</div><div class='result'>&nbsp;</div><div class='co0'># il est aussi possible de spécifier un format avancé à rpm -q</div><div class='command'><span class='prompt'>gaston$</span>rpm -q -a --queryformat='%{N}-%{V}-%{R}.%{arch}\n'</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
 </p>
 
 

	<a name='chapter_6'></a>
  <h2>Désinstallation</h2>
	
 <p>
 Pour supprimer une application, c'est aussi simple que ça :
 
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>urpme openoffice.org</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
 </p>
 <p>
   <kbd>urpme</kbd> fonctionne comme <kbd>urpmi</kbd>, c'est à dire qu'il va chercher à vérifier que l'on ne déstabilise pas le système. Si un paquet a besoin de celui que l'on cherche à retirer, <kbd>urpmi</kbd> va alors demander de le désinstaller aussi. C'est un bon fonctionnement sécurisé. Cependant, il est parfois utile de désinstaller comme un sauvage une série de paquets sans pour autant faire jouer les dépendances. Par exemple pour ré-installer un composant qui a été corrompu. On va donc le désinstaller, j'insiste, sauvagement, puis demander à <kbd>urpmi</kbd> de le réinstaller à neuf. 
   
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>rpm -e --nodeps $(rpm -qa | grep -i xorg)</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
 </p>
 <p>
   Tout simplement... A noter pour les Windowsiens que l'on n'a pas sous Unix cette histoire de "erreur, fichier utilisé". Il est parfaitement possible par cette méthode (comme par urpme d'ailleurs) de désinstaller le serveur X complètement et de le réinstaller de A à Z.. sans quitter X <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>
</p>
<p>
  Une autre commande utile est la possibilité de supprimer les paquets orphelins, c'est à dire ceux qui ne sont utilisés par aucun paquets :
  
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>urpme --auto-orphans</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>

	<a name='chapter_7'></a>
  <h2>PANIC: fatal region error detected</h2>
	
<p>
  Il peut arriver que la base de données soit corrompue et que tout utilisation de la gestion de paquet soit ainsi bloquée. Contrairement à ce que l'erreur renvoyée suggère, ne paniquez pas :

  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='co0'># Si vous obtenez ce genre de message en installant l'indispensable "tagazok"</div><div class='command'><span class='prompt'>root#</span>urpmi tagazok</div><div class='result'>rpmdb: PANIC: fatal region error detected; run recovery</div><div class='result'>erreur: erreur db4(-30975) de dbenv->open: DB_RUNRECOVERY: Fatal error, run database recovery</div><div class='result'>erreur: ne peut ouvrir l'index Packages en utilisant db3 -  (-30975)</div><div class='result'>&nbsp;</div><div class='co0'># ou encore ce message là :</div><div class='command'><span class='prompt'>root#</span>urpmi tagazok</div><div class='result'>rpmdb: Page 2: item 74 hashes incorrectly</div><div class='result'>rpmdb: /var/lib/rpm/Requirename: DB_VERIFY_BAD: Database verification failed</div><div class='result'>erreur: erreur db4(-30973) de db->verify: DB_VERIFY_BAD: Database verification failed</div><div class='result'>&nbsp;</div><div class='co0'># La solution est de regénérer la base</div><div class='command'><span class='prompt'>root#</span>rm -f /var/lib/rpm/__db*</div><div class='command'><span class='prompt'>root#</span>db_verify /var/lib/rpm/Packages</div><div class='command'><span class='prompt'>root#</span>rpm --rebuilddb</div><div class='result'>&nbsp;</div><div class='co0'># et hop, fin de l'alerte...</div><div class='command'><span class='prompt'>root#</span>urpmi tagazok</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>

 

	<a name='chapter_8'></a>
  <h2>Fabriquer un dépôt</h2>
	
<p>
  Dans certain cas particulier il peut être intéressant de fabriquer ses propres medias compatibles avec URPMI. Pour cela il faut créer un dossier, mettre des rpm dedans, et, dans ce dossier, exécuter les commandes suivantes :
 
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span>mkdir mon_depot</div><div class='command'><span class='prompt'>gaston$</span>cd mon_depot</div><div class='result'>&nbsp;</div><div class='co0'># recopie des rpm</div><div class='command'><span class='prompt'>gaston$</span>cp /quelquepart/*.rpm .</div><div class='result'>&nbsp;</div><div class='co0'># génération de l'indexation des rpm</div><div class='command'><span class='prompt'>gaston$</span>genhdlist2 .</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
   Voilà, le nouveau média est près à être ajouté. 
</p>
 
 

	<a name='chapter_9'></a>
  <h2>Décompresser un RPM</h2>
	
<p>
  Il est parfois bien utile de décompresser un fichier .rpm sans pour autant l'installer. Malheureusement les rpm utilisent un format un peu obscure et nécessite de passer par la commande <kbd>rpm2cpio</kbd> pour obtenir les contenus :

  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='co0'># pour éviter de mettre le zouzou dans le dossier courrant</div><div class='command'><span class='prompt'>gaston$</span>mkdir tmp_rpm</div><div class='command'><span class='prompt'>gaston$</span>cd tmp_rpm</div><div class='result'>&nbsp;</div><div class='co0'># extraction...</div><div class='command'><span class='prompt'>gaston$</span>rpm2cpio http://ftp.proxad.net/pub/Distributions_Linux/Mandrake/official/2008.0/i586/media/non-free/release/atunes-1.7.2-2mdv2008.0.noarch.rpm | cpio -idmv</div><div class='result'>./usr/bin/atunes</div><div class='result'>./usr/share/applications/mandriva-atunes.desktop</div><div class='result'>./usr/share/atunes</div><div class='command'><span class='prompt'>gaston$</span>ls usr/bin/</div><div class='result'>atunes*</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>


	<a name='chapter_10'></a>
  <h2>Equivalence avec le monde Debian</h2>
	
<p>
  Le système de paquets <kbd>.deb</kbd> est utilisé avec l'utilitaire de gestion locale <kbd>dpkg</kbd> et de dépendances <kbd>apt</kbd>. Merci à <a class='external' target='_blank' href='http://artisan.karma-lab.net/node/1648#comment-3346' >Dab</a> pour ces informations !
</p>


<h3>Dépôts</h3>
<table style="margin-left:15px">
  <tr><th>Sujet</th><th>RPM</th><th>DEB</tH></tr>
  <tr><th>Wizzard</th><td><a class='external' target='_blank' href='http://easyurpmi.zarb.org/' >easyurpmi.zarb.org</a></td><td>?</td></tr>
  <tr><th>Dépôts</th><td>main/contrib/nonfree/plf</td><td>main,contrib,non-free</td></tr>
  <tr><th>sous-dépots</th><td>release,update,testing,backport</td><td>stable,unstable,testing,backport</td></tr>
  <tr><th>Ajout</th><td>urpmi.addmedia</td><td>?</td></tr>
  <tr><th>Suppression</th><td>urpmi.removemedia</td><td>prpmq --dump-config : vi /etc/apt/source.list</td></tr>
</table>

<h3>Recherche</h3>
<table style="margin-left:15px">
  <tr><th>Sujet</th><th>RPM</th><th>DEB</tH></tr>
  <tr><th>Simple</th><td>urpmq -Y openoffice</td><td>apt-cache search openoffice</td></tr>
  <tr><th>Avec infos</th><td>urpmq -Yi openoffice</td><td>apt-cache show openoffice</td></tr>
  <tr><th>Avec changements</th><td>urpmq --changelog openoffice.org</td><td>apt-listchanges --apt openoffice.org</td></tr>
  <tr><th>Par fichier</th><td>urpmf /usr/bin/oowriter</td><td>dpkg -S /usr/bin/oowriter<br>sinon il y a aussi apt-file</td></tr>
</table>  

<h3>Installation</h3>
<table style="margin-left:15px">
  <tr><th>Sujet</th><th>RPM</th><th>DEB</tH></tr>
  <tr><th>Ajout</th><td>urpmi openoffice.org</td><td>apt-get install openoffice.org</td></tr>
  <tr><th>Mise à jour</th><td>urpmi --auto-update</td><td>apt-get upgrade</td></tr>
  <tr><th>Remplacement</th><td>urpmi --replacepkg enchant</td><td>apt-get --reinstall install enchant</td></tr>
</table>

<h3>Base locale</h3>
<table style="margin-left:15px">
  <tr><th>Sujet</th><th>RPM</th><th>DEB</tH></tr>
  <tr><th>Recherche</th><td>rpm -qa | grep -i xorg</td><td>dpkg -l | grep xorg</td></tr>
  <tr><th>Liste</th><td>rpm -ql gzip-1.3.12-3mdv2009.0</td><td>dpkg -L gzip</td></tr>
  <tr><th>Informations</th><td>rpm -qi gzip-1.3.12-3mdv2009.0</td><td>?</td></tr>
  <tr><th>Fichier</th><td>rpm -qf /usr/bin/ls</td><td>?</td></tr>
  <tr><th>Dépendances</th><td>rpm -qR pm-utils-1.2.0-3mdv2009.0</td><td>apt-cache show pm-utils | grep Depends</td></tr>
  <tr><th>Vérification</th><td>rpm -Va</td><td>dpkg -C</td></tr>
</table>  

<h3>Désinstallation</h3>
<table style="margin-left:15px">
  <tr><th>RPM</th><th>DEB</tH></tr>
  <tr><td>urpme openoffice.org</td><td>apt-get remove openoffice.org</td></tr>
  <tr><td>rpm -e --nodeps $(rpm -qa | grep -i xorg)</td><td>dpkg --force-depends remove xorg</td></tr>
  <tr><td>urpme --auto-orphans</td><td>deborphan | xargs dpkg -P</td></tr>
</table>  
<h3>Divers</h3>
<table style="margin-left:15px">
  <tr><th>Tâche</th><th>DEB</tH></tr>
  <tr><td>Reconstruction de base</td><td>ca n'arrive jamais parait-il <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/></td></tr>
  <tr><td>Fabrication de dépôt</td><td>Un tutoriel <a class='external' target='_blank' href='http://www.debian.org/doc/manuals/repository-howto/repository-howto.fr.html' >ici</a></td></tr>
  <tr><td>Décompresser un paquet</td><td>ar -x package.deb</td></tr>
</table> 

<div class='inline-box note'>
Voir aussi apt-key (gestion des clés d'authentification des packages), apt-howto-fr (guide apt), apt-spy (création du source.list fonction de la meilleure bande passante), apt-proxy (création serveur dépot en local) ....
</div>

	<a name='chapter_11'></a>
  <h2>Conclusion</h2>
	
<p>
  La grande querelle a toujours été de savoir qui de .deb ou .rpm est le meilleur des systèmes de paquets. Fondamentalement ils <a class='external' target='_blank' href='http://www.debian.org/doc/manuals/debian-faq/ch-pkgtools.fr.html#s-pkgprogs' >font la même chose</a> à une granularité près. L'important reste l'existence même d'un tel système qui simplifie considérablement la maintenance d'un système ou, d'un point de vue utilisateur, l'expérience même des logiciels libres. 
</p>
    ]]></content>
  </entry>
</feed>
