Wajig
Pour administrer votre distribution Debian, vous utilisez probablement plusieurs outils, par exemple dpkg, apt-get, apt-cache, auto-apt, aptitude, apt-file. Et parfois, vous vous mélangez les pinceaux, pas vrai ?
Ce serait tellement plus simple si vous pouviez avoir un seul programme qui ferait tout ce que font ces outils, et peut être même plus ? Alors wajig est fait pour vous !
Quand L'admin rencontre wajig
Installation du minimum ... et plus si affinité
Tout d'abord, qu'est-ce que wajig ? quelle(s) fonction(s) remplit-il ?
C'est simple, wajig est un outil dont le but est de centraliser les tâches nécessaires à l'administration d'une Debian, il est en partie un “wrapper” pour apt-[get|cache], dpkg, les initscripts, mais il introduit également d'autres fonctions que nous verrons plus loin. Il facilite grandement les tâches de l'administrateur, en effet, plus besoin de se rappeler des options des 42 commandes que vous utilisez.
Wajig étant codé en python, pour l'installer il vous faudra donc l'interpréteur python, ainsi que le module python-apt. Mais si les dépendances sont minimales, je ne peux que vous conseiller d'installer une partie des packages du champ Suggests. En effet, wajig utilise de nombreux packages, et sans eux, vous perdez une partie des fonctionnalités (dont certaines valent le détour). Voyons de plus près :
freddec@fred$ apt-cache show wajig Package: wajig Priority: optional Section: admin Installed-Size: 436 Maintainer: Graham Williams <[email protected]> Architecture: all Version: 2.0.37 Depends: python, python-central (>= 0.5.8), apt, python-apt, dselect Suggests: wget, fping, debconf, reportbug, apt-move, dpkg-repack, alien, fakeroot, gkdebconf, lynx, python-gtk2, python-glade2, python-gnome2, gnome-terminal, locales,gnome-tasksel, deborphan, vrms, sudo, apt-show-versions Filename: pool/main/w/wajig/wajig_2.0.37_all.deb Size: 9683 MD5sum: 99f5fabd7adbbfe1d9d8d1a6a46d3fb5 SHA1: 313cc7b8217903dde88cbcb0d81f8597857b95cc SHA256: c208b2f812da3b8bfe85386a001b3a5683ba8ab5585524a507d370a5005433f5 Description: simplified Debian package management front end Wajig is a single commandline wrapper around apt, apt-cache, dpkg, /etc/init.d scripts and more, intended to be easy to use and providing extensive documentation for all of its functions. With a suitable sudo(1) configuration, most (if not all) package installation as well as creation tasks can be done from a user shell. Wajig is also suitable for general system administration. A Gnome GUI command 'gjig' is also included in the package. Python-Version: all Tag: admin::package-management, implemented-in::python, interface::commandline, role::program, scope::application, suite::debian, use::configuring, use::searching, works-with::software:package, works-with::software:source
Le mainteneur a donc astucieusement mis en dépendance le strict minimum, laissant à l'administrateur le choix d'installer les packages suggérés. Un point intéressant dans la description est que wajig sait tirer partie de sudo s'il est installé et configuré de façon à laisser à un (groupe d') utilisateur(s) la capacité de se servir de certains outils en tant que root.
Comme on le lit aussi dans la description du package, chaque commande est documentée de façon exhaustive, je ne détaillerai donc pas complètement toutes les fonctions qui seront utilisées dans cet article. Si vous désirez approfondir le sujet, la documentation de wajig vous comblera sûrement.
Mais alors de quoi va traiter cet article ? Tout simplement de la vie quotidienne d'administrateur avec wajig.
Arrivé là, et avant de poursuivre, installons wajig avec la traditionnelle commande
#apt-get install wajig
Bien se protéger avant de commencer
Nous allons avant toute chose configurer sudo pour wajig. Il est possible, mais peu recommandable, de laisser un utilisateur lancer wajig en tant que root par exemple :
admin@machine:~$ sudo wajig install NomDuPaquet
Mais voilà, vous laissez à l'utilisateur admin le droit d'utiliser toutes les fonctions de wajig en tant que root, alors que vous pouvez régler beaucoup plus finement ses droits.
Editons le fichier /etc/sudoers avec la commande visudo:
# Host alias specification # pour que la commande sudo ne puisse être lancée qu'en local Host_Alias PC=localhost, hostname # User alias specification, # Création de groupe d'utilisateurs User_Alias ADMIN = toto # Runas group # Cmnd alias specification # Création de groupe de commandes Cmnd_Alias INITD=/etc/init.d/* Cmnd_Alias WAJIG=/usr/bin/apt-get, /usr/bin/apt-cache, /usr/bin/apt-file, /usr/bin/dpkg,\ /usr/bin/dpkg-reconfigure, /etc/init.d/*, /usr/sbin/update-alternatives, \ /usr/bin/dselect, /usr/sbin/invoke-rc.d, /usr/bin/sudo # User privilege specification # Groupe d'utilsateurs et groupe de commandes qu'ils sont autorisé a lancer root ALL=(ALL) ALL ADMIN PC=INITD, WAJIG
Wajig utilise nativement sudo si celui-ci est configuré correctement, en mettant certaines commandes dans un alias de sudo, vous pouvez donc permettre ou non à un utilisateur d'utiliser une fonctionnalité de wajig.
Une fois le fichier sudoers rempli, c'est wajig qui fait le travail, l'utilisation de sudo est transparente pour l'utilisateur/administrateur. Bien sûr la liste ci-dessus peut être complétée, mais pour l'instant elle est amplement suffisante pour faire connaissance avec cet outil.
En ce qui concerne l'apprentissage de sudo, je vous renvoie à mon article sur sudo de debian-fr.org , ou la page d'Andesi sur sudo.
Parmi les autres packages suggérés que je vous conseille d'installer, il y a sudo bien sûr, mais aussi apt-move, dpkg-repack, ainsi que wget et lynx.
Pour bien commencer
Nous pouvons passer à l'étape suivante, l'apprentissage des commandes de base. Pour les habitués de Debian, il n'y a pas besoin de tout reprendre depuis le début, certaines commandes de wajig sont très proches de celles que vous utilisez déjà. Commençons par les plus utilisées:
Commandes de base
- wajig update se charge de mettre a jour la liste des paquets disponibles (voir ci dessous)
freddec@fred~$ wajig update Réception de : 1 http://www.debian-multimedia.org testing Release.gpg [189B] Atteint http://www.debian-multimedia.org testing Release Réception de : 2 http://www.debian-multimedia.org testing Release [5567B] Atteint http://www.debian-multimedia.org testing/main Packages Réception de : 3 http://ftp.fr.debian.org testing Release.gpg [189B] Atteint http://ftp.fr.debian.org testing Release Atteint http://ftp.fr.debian.org testing/main Packages/DiffIndex Atteint http://ftp.fr.debian.org testing/contrib Packages/DiffIndex Atteint http://ftp.fr.debian.org testing/non-free Packages/DiffIndex 5757o réceptionnés en 7s (765o/s) Lecture des listes de paquets... Fait Fusion des informations disponibles Remplacement de l'information sur les paquets disponibles, en utilisant /var/cache/apt/available. L'information sur 20652 paquet(s) a été mise à jour. This is 10 up on the previous count with 2 new packages. There are 3 new upgrades
Constatez que wajig à la délicatesse de vous informer du nombre de nouveaux paquets et du nombre de paquets ayant fait l'objet d'une mise à jour depuis qu'il a interrogé les miroirs.
- Wajig stock dans le home de l'utilisateur qui l'exécute (~/.wajig/*) les fichiers permettant de faire les comparaisons entre deux update et ainsi d'afficher les quantités de nouveau paquet et newupgrade.
- A ce titre, deux utilisateurs (sur la même machine) n'ont pas forcément les mêmes réponses de wajig.
Le decompte des paquets new et newupgrade dépendant de la date a laquelle chaque utilisateur aura fait le précédent update
- wajig install tartiflette installera le paquet tartiflette
- wajig remove tartiflette désinstallera ce même paquet
- wajig purge tartiflette désinstallera le paquet et ses fichiers de conf
Lister les paquets disposant d'une mise à jour
freddec@fred$ wajig newupgrade Package Available Installed ========================-======================================== bsdutils 1:2.12m-1 1:2.12l-1 debianutils 2.11.1 2.11.0 dialog 1.0-20041219-1 1.0-20041118-1
Lister les nouveaux paquets
freddec@fred$ wajig new Package Description ========================-=========== gimp-help-zh-cn Documentation for the gimp (chinese simplified) u++ Object-oriented concurrent language extensions for c++
Upgrader les paquets installés
freddec@fred$ wajig upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages will be upgraded: Téléchargement des packages Reading package fields... Done Reading package status... Done Retrieving bug reports... Done Installation des packages
Je vous l'avez bien dit, pas de changement, les commandes sont les mêmes, on est en terrain connu. Cependant, pour que vous ne vous ennuyiez pas au début, j'ai rajouté 2 commandes, newupgrade et new.
- newupgrade permet donc de connaître la liste des paquets ayant bénéficié d'une mise à jour depuis le dernier wajig update, on voit les 2 colonnes permettant de comparer la version installée de celle disponible en téléchargement.
- new renvoie la liste des nouveaux packages ajoutés sur les miroirs depuis le dernier wajig update. Cela vous permet de suivre l'évolution de votre distribution, et pourquoi pas de tester de nouveaux logiciels par simple curiosité.
- Cerise sur le gateau, la commande wajig newupgrade install installera dans la foulée les mises à jour disponibles
Nous allons pouvoir passer à la suite, découvrir des fonctions moins connues mais tout aussi intéressantes, ainsi nous pourrons commencer à effectuer de réelles tâches d'administration.
Utilisation avancée pour l'administration
Administrateur cherche package ou fichier pour relation durable
S'Il est un besoin qui revient fréquemment, c'est bien la recherche, que ce soit pour trouver un package, connaitre l'appartenance d'un fichier à un package ou encore avoir le nom du package qui fournit un fichier. Nous allons donc détailler comment wajig répond à ces besoins vitaux.
Voici donc quelques commandes supplémentaires sur le traitement avancé des packages.
A la section précédente nous avons vu new et newupgrade, il existe aussi la commande toupgrade qui vous indiquera les paquets installés sur votre machine et pour lesquels une mise à jours est disponnible.
Trouver le nom d'un paquet
Pour rester dans les packages, si vous ne vous rappelez pas du nom complet d'un package, par exemple pour apache, vous pouvez demander de l'aide à wajig, avec listnames :
freddec@fred$ wajig listnames apache apache apache-common apache-perl apache-ssl .../... apache2 apache2-common apache2-dev apache2-modules .../... mono-apache-server sourceforge-web-apache webmin-apache etc..
Où en suis-je des versions de paquet ?
Dans le même genre, on trouve la commande status qui renseigne sur l'état d'un package, sa version, s'il est installé ou pas sur le système, bref vous avez quelques détails en plus.
freddec@fred:~$ wajig status libxml2 Package Installed Previous Now State ======================================================================== libxml2 2.6.29.dfsg-1 2.6.30.dfsg-2 2.6.30.dfsg-2 install
Mener des recherches sur un paquet
Il se peut que vous ayez besoin de chercher des packages non-officiels, vous avez donc rempli votre sources.list avec lesdits miroirs, mais de temps en temps vous faites un tour sur apt-get.org histoire de voir s'il n'y a pas un backport qui vous intéresserait. Seulement, cela vous prend du temps, vous aimeriez pouvoir mener une recherche sur tous les miroirs de votre sources.list ET sur apt-get.org en même temps ? Pas de problème, wajig est là, grâce à sa commande find-pkg, il exauce tous vos souhaits.
[shaddai@kavado]~/ $ wajig find-pkg xmms Lines suitable for /etc/apt/sources.list deb ftp://ftp.nerim.net/debian-marillat/ stable main deb ftp://ftp.nerim.net/debian-marillat/ testing main deb ftp://ftp.nerim.net/debian-marillat/ unstable main .../... # Il y a 42 autres lignes, mais vous avez compris le principe :-)
Dans quel paquet trouver un fichier ?
Enfin pour terminer sur les recherches, il y a la possibilité de savoir à quel package appartient un fichier, grâce à whichpkg,
freddec@fred~ $ wajig whichpkg pcap.h File Path Package ============================================ >> Debian >> Packages >> Package Contents Search Results [sarge] [sarge-volatile] [sarge-backports] [etch] [etch-m68k] [etch-volatile] [etch-backports] [lenny] [sid] [experimental] Found 15 results. File Packages /usr/include/nessus/pcap.h libnessus-dev /usr/include/pcap.h libpcap0.7-dev,libpcap0.8-dev, /usr/lib/tiger/html/pcap.html tiger /usr/share/doc/libmlpcap-ocaml-dev/html/pcap.html libmlpcap-ocaml-dev /usr/share/doc/libmlpcap-ocaml-dev/html/type_pcap.html libmlpcap-ocaml-dev /usr/share/doc/libpcap-ruby1.8/doc-ja/pcap.html libpcap-ruby1.8 /usr/share/doc/libpcap-ruby1.8/doc/pcap.html libpcap-ruby1.8 ...etc.. Content Copyright © 1997 - 2007 SPI Inc.; See license terms. Debian is a trademark of SPI Inc.
Quels sont les fichiers contenu dans un paquet ?
Pour afficher les fichiers contenus dans un package installé, utilisez listfiles, ce dernier à le même effet qu'un dpkg-L.
freddec@fred:~$ wajig listfiles wajig /. /etc /etc/bash_completion.d /etc/bash_completion.d/wajig /usr /usr/share /usr/share/wajig /usr/share/wajig/gjig.py /usr/share/wajig/glutil.py /usr/share/wajig/const.py /usr/share/wajig/jigsaw-logo.png /usr/share/wajig/documentation.py /usr/share/wajig/changes.py etc..
Parceque la précision s'impose
Je tiens à rajouter que pour tirer pleinement profit des recherches de wajig, wget est indispensable, en effet si l'on regarde le script dans lequel se trouve la fonction whichpkg par exemple, on voit qu'il y a deux commandes exécutées :
# Extrait du fichier commands.py : #------------------------------------------------------------------------ # # WHICHPKG # #------------------------------------------------------------------------ def do_whichpkg(filename): """Search for a particular file or pattern in a Debian package. Search the Debian package archive (local installed packages and from the Debian package archive on packages.debian.org) for any packages containing a file with FILENAME in its name. The results are printed to standard output. Arguments: filename Pattern to find Returns:""" packages_host = "packages.debian.org" ping_host(packages_host) # # Print out a suitable heading # print "%-59s %-17s" % ("File Path", "Package") print "="*59 + "-" + "="*17 sys.stdout.flush() # # # Get the local information first. # # Could ensure that we don't repeat information but for now let's # just get the information out! # # Also need to check for diversions (like when mutt and mutt-utf8 are # both installed. # command = "dpkg -S " + filename + " 2>/dev/null " +\ "| sed 's|: *|:|' " +\ "| grep -v '^diversion by ' " +\ "| awk -F: '{printf(\"%-59s %-17s\\n\", $2, $1)}'" perform.execute(command) # # Now obtain the information from the Debian server # results = tempfile.mktemp() filename = filename.replace('+', '%2B') command = "wget --timeout=60 --output-document=" + results +\ " http://" + packages_host + "/cgi-bin" +\ "/search_contents.pl\?word=" + filename +\ "\&searchmode=searchfilesanddirs" +\ "\&case=insensitive\&version=unstable" +\ "\&arch=i386 2> /dev/null" perform.execute(command)
Pour ceux qui n'auraient pas de connexion à Internet pour cherche sur packages.debian.org, il est possible de faire une recherche de fichier dans les packages installés sur la machine avec la commande find-file.
This is just the aperitif Jenny ! Car il y a encore mieux
Passons maintenant à l'installation. On pourrait penser qu'à part la commande install, il n'y a pas besoin d'autre chose ? Détrompez vous, car il y a plusieurs méthodes disponibles pour installer un package.
Installation de paquets en local
- Vous connaissez déjà la commande install qui appelle apt-get, cette commande accepte aussi qu'on lui donne en argument le chemin (relatif ou absolu) d'un package .deb, ( par exemple ~packages/toto_0.42-1.deb , vous pouvez aussi lui donner une URL.
Installation "élargie" ou comment gagner du temps grâce a wajig
- La commande installrs permet quant à elle d'installer d'un coup d'un seul, le paquet lui même plus ceux recommandés (r) et suggérés (s) par le mainteneur du paquet.
- Dans le même esprit la commande installr installera le paquet et ceux marqués comme recommandés
kavado:~$ wajig installrs zsh Reading Package Lists... Done Building Dependency Tree... Done The following extra packages will be installed: libpam0g passwd Suggested packages: libpam-doc The following NEW packages will be installed: zsh zsh-doc libpam-doc The following packages will be upgraded: libcap1 libpam0g libpcre3 passwd 4 upgraded, 2 newly installed, 0 to remove and 73 not upgraded. Need to get 3367kB of archives. After unpacking 8791kB of additional disk space will be used. Do you want to continue? [Y/n]
Gestion de liste de paquets
Enfin, il est parfois pratique de pouvoir installer un ensemble de packages d'un seul coup, par exemple reprendre la base installée sur une machine .
Certains parmi vous utilisent surement le couple dpkg –[g|s]et-selections et apt-get dselect-upgrade, mais wajig permet faire cette tâche plus facilement (pas de commande difficile à retenir). Ici l'opération se passe en deux temps :
1- Génération de la liste de paquets diponnible sur le machine kavado
[shaddai@kavado]~ $ wajig snapshot > liste_packages
2- Restauration de la liste des paquet sur la machine patator
[shaddai@patator]~ $ wajig restore liste_packages
Dans la même lignée, on trouve les commandes file-download, file-install et file-remove qui vous permettront respectivement de télécharger, installer ou supprimer plusieurs packages dont les noms sont contenus dans un fichier.
On le voit encore une fois ici, avec wajig il n'y a plus de commande ou de suites de commandes difficiles à retenir, tout est fait pour optimiser le temps passé sur chaque tâche d'administration.
A ce point de l'article, j'aimerai rassurer le lecteur. Si wajig compte une très grande quantité de commande (j'en compte 122 sur wajig 2.0.37), elles sont d'une part facilement mémorisable, et, d'autre part il y a fort à parier que dans votre utilisation quotidienne seules quelques unes vous seront utiles, les autres ne vous serviront qu'occasionnellement.
Nous allons enfin passé aux commandes qui vous étaient peut être inconnues jusqu'ici.
C'est le petit plus wajig
Vous êtes tombé amoureux de wajig, mais cela n'est pas suffisant. Irez-vous jusqu'à l'autel avec wajig ? Etes-vous prêt(e) à partager votre vie avec ? Si vous n'avez pas (encore) trouvé la réponse, lisez ce qui suit.
Le café et l'addition s'il vous plaît
Marquage de Paquets
Le système de package de Debian propose un tas d'options qu'on peut qualifier de « sophistiquées », parmi elles on trouve la possibilité de marquer un package hold, dpkg (et les autres outils fournis par Debian) ne gèrent alors plus ledit package. Wajig reprend bien entendu cette possibilité, nous avons un ensemble de 3 commandes :
[shaddai@kavado]~ $ wajig list-commands| grep hold hold Place listed packages on hold so they are not upgraded list-hold List those packages on hold unhold Remove listed packages from hold so they are again upgraded
Rien de nouveau ici, mais encore une fois, l'opération avec wajig évite de retenir des commandes supplémentaires. Pour vous montrer que wajig ne sert que de “front end” dans ce cas, un petit extrait du code :
def do_hold(packages): """Place packages on hold (they will not be upgraded). Arguments: packages List of packages. Returns:""" for p in packages: # The dpkg needs sudo but not the echo. # Do all of it as root then! command = "echo \"" + p + " hold\" | dpkg --set-selections" perform.execute(command, root=1) print "The following packages are on hold:" perform.execute("dpkg --get-selections | egrep 'hold$' | cut -f1") # le code pour list-hold : elif command == "listhold": if requires_no_args(command, args): perform.execute("dpkg --get-selections | egrep 'hold$' | cut -f1")
Comment devenir un « Power user » :
Construction/Reconstruction de paquets
Peu d'utilisateurs exploitent les outils Debian à 100%, j'entends par là que peu de personnes font leur propres packages, que ce soit en utilisant des outils comme sbuild, pbuilder ou encore apt-build. Nous allons donc voir ici les aspects de (re)packaging proposés par wajig.
Commençons par le plus simple, build et build-depend qui permettent de construire un package à partir des sources disponibles sur un miroir Debian. Encore une fois, jetons un coup d'oeil au code :
[shaddai@kavado]~ $ wajig build-depend zsh Reading package lists... Done Building dependency tree... Done The following NEW packages will be installed: libcap-dev libpcre3-dev texi2html texinfo .../... #L'installation se passe sans problèmes, c'est un bête apt-get install des packages qui nous manquent pour l'étape suivante.
… On peut passer à la suite
[shaddai@kavado]~ $ wajig build zsh Reading package lists... Done Building dependency tree... Done 0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded. Reading package lists... Done Building dependency tree... Done Need to get 2955kB of source archives. .../... # On passe par différents programmes : dpkg-source, dpkg-buildpackage, le # script configure est lancé puis la commande make. Enfin, on récupère nos # packages dans le répertoire courant
[shaddai@kavado]~ $ ls zsh-doc_4.2.5-10_all.deb zsh-static_4.2.5-10_i386.deb zsh_4.2.5-10_i386.deb
Vous savez maintenant comment faire pour construire un package binaire à partir des sources disponibles sur les miroirs Debian.
Une autre possibilité est de reconstruire une archive .deb à l'aide d'un package déjà installé (on peut penser au cas où vous devez installer un package sur une autre machine, et que pour une raison quelconque vous ne pouvez plus accéder à l'archive d'origine, vous devez alors reconstruire ladite archive à partir d'une déjà installée).
La commande repackage ou package permet d'effectuer cette opération, il vous faudra aussi le package dpkg-repack, il est dans les packages suggérés de wajig, vous comprenez maintenant l'avantage des suggestions par rapport à tout un tas de dépendances dont certaines ne serviraient pas.
L'utilisation est très simple : mettons que vous vouliez reconstruire le package bash :
[shaddai@kavado]~ $ wajig package bash dpkg-deb: building package `bash' in `./bash_3.0-15_i386.deb'.
Bien entendu vous aurez pris soin de rajouter dpkg-repack dans la ligne Cmnd_Alias de votre fichiers sudoers pour utiliser cette commande en tant que simple utilisateur.
Pour terminer sur la partie construction/gestion avancée des packages, on notera que wajig permet d'utiliser alien afin d'installer ou convertir un package rpm en package deb. Ce système devient de moins en moins utilisé car peu de logiciels sont packagés uniquement en rpm de nos jours.
Gestion des Services
Last but not least, je vais vous parler d'une fonctionnalités qui intéressera surtout les administrateurs.
Votre Debian est un System V, en conséquence vous avez des runlevels et des scripts pour démarrer/arrêter les différents services installés sur votre machine. Ces scripts sont dans le répertoire etc/init.d, ils sont appelés de la façon suivante :
root:~ # /etc/init.d/script [start|stop|restart|something_else]
Avec wajig, il vous sera possible d'appeler directement ces scripts. La syntaxe change par rapport à un appel au script, mais ce n'est rien de bien méchant, simplement une inversion. Prenons un exemple :
[shaddai@kavado]~ $ wajig restart apache
On peut bien sur remplacer restart par stop, start ou autre , le deuxième argument est le nom du script dans /etc/init.d/
Conclusion
Vous l'aurez compris, la tâche de wajig est de simplifier les opérations d'administration d'une Debian, et il y parvient dans la mesure où les commandes sont faciles à mémoriser et ne sont pas seulement une reprise de dpkg ou apt. Si vous n'utilisez pas encore de gestionnaires comme synaptic ou aptitude, alors il se peut bien que wajig vous rende de grands services.