URPM ET (BA)SH



Niveau: débutants Linux (Mandrake, de préférence, non obligatoire pour comprendre ;-)) Connaissances requises: "Introduction au scripting bash", par fafounet, dans l'EspioZine 1 Contenu: rappels sur les RPMs et URPM, script shell commenté, détails sur quelques commandes. une partie de cet article est tirée de l'excellent site Lea-Linux.org

        INTRODUCTION

Le but de cet article est de se placer dans la continuité du tutorial de fafounet dans le génial EspioZine #1. On y verra ce que sont les RPM, l'utilitaire URPM de Mandrake et, bien sur, un code source commenté de de script shell réalisé par votre humble serviteur...

        QUE SONT LES RPMs (REDHAT PACKAGE MANAGER) ?

Ils s'agit de paquetages, à l'origine crées pour la distribution RedHat. Ce sont un peu comme les ".msi" de Windows: il s'agit d'un ensemble d'informations, programmes et fichiers divers qui permettent l'installation d'un logiciel. Ils existent pour diverses distributions comme Mandrake, RedHat, Slackware... Il existe une variante: les paquetages sources. Ils s'agit des "sources du paquetage", à partir desquelles on peut refaire le paquetage ou installer le logiciel en lui-même.

        PRINCIPALES COMMANDES RPM:

- Installer/mettre à jour un paquetage

# rpm -Uvh mon_paquetage.rpm

               l'option -U indique "Upgrade": si le paquetage n'est pas installé, on l'installe. Sinon on le met à jour (si la version est plus récente)
               L’option -v signifie "verbose": messages explicites en cas d'erreurs
               L’option -h permet d'afficher un barre de progression (classieux ;-)


- Désinstaller un paquetage

# rpm -e mon_logiciel
# rpm -e mon_logiciel-version


- Obtenir la liste des paquetages déjà installés

$ rpm -qa
       je pense que "qa" doit signifier "query all"


- Obtenir la liste des fichiers d'un paquetage installé

$ rpm -ql nom_logiciel


- Obtenir des infos complémentaires sur un paquetage installé

$ rpm -qi nom_logiciel


- Obtenir des infos complémentaires sur un paquetage pas encore installé

$ rpm -qip nom_paquetage.rpm


- Obtenir le paquetage installé correspondant à un fichier

$ rpm -qf /usr/bin/fichier.txt


- Reconstruire un paquetage à partir d'un paquetage source

# rpm --recompile mon_paquetage.src.rpm


- Installer un logiciel d'un paquetage source sans retrouver le rpm d'origine

# rpm --rebuild mon_paquetage.src.rpm


- Plus d'infos sur les commandes rpm:

$ man rpm


        URPM SOUS MANDRAKE:

URPM est un outils de Mandrake qui permet une gestion plus aisée des RPM. Elle permet l'accès à une base de données où sont répertoriés les RPM disponibles. Par défaut, les seules sources disponibles sont les CD d'instalation de Mandrake. On peut y ajouter une source (un "média"), la consulter, la supprimer...


        QUELQUES COMMANDES URPM:


- Installer un paquetage disponible dans la base de données:

# urpmi nom_logiciel
cette commande installera la version la plus récente disponible


- Installer un paquetage qui contient des librairies:

# urpmi -p nom_ensemble_librairies


- Désinstaller un paquetage:

# urpme nom_logiciel


- Ajouter une source de paquetages (un média) dans la base de données:

# urpmi.addmedia nom_media adresse
vous décidez du nom du média l'adresse peut être :

  • un chemin sur le disque dur (file://),

  • une disquette/un CD (removeable://),

  • une adresse ftp (ftp://) ou http (http://)

ex:

# urpmi.addmedia mes_rpm_a_moi file://home/moimeme/downloads/rpms
# urpmi.addmedia plf ftp://ftp.easynet.fr/plf/mandrake/9.1 with hdlist.cz


(le média du Penguin Liberation Front, il est excellent !!)
le "with hdlist.cz" est obligatoire pour les adresses ftp et http.
il sert à récupérer les liste des rpm (avec les infos les concernant) sans avoir à télécharger tous les rpm (ce qui prendrait un peu de temps)


- Supprimer une source de paquetages:

# urpmi.removemedia nom_media


ex:

#urpmi.removemedia mes_rpm_a_moi


- Mettre à jour une source de paquetages (a faire de temps en temps ;-)):

# urpmi.update nom_media


- Afficher la liste des médias disponibles:

$ urpmq --list-media


- Afficher la liste des rpm disponibles (on va s'en servir) (faut faire gaffe, la liste est longue en général !!):


$ urpmq --list


        LE SCRIPT SHELL


Voici la source commentée du sript shell réalisé par ma modeste personne.
Il permet de rechercher un rpm parmi la liste de ceux disponibles dans la base de données. Pour pouvoir l'utiliser dans la ligne de commande, il faut se placer en root, le copier dans /usr/bin et donner le droit d'exécution à tous les utilisateurs. Par exemple les droits 755 devraient faire l'affaire (rwxr-xr-x). Je l'avais fait en anglais parce que je trouvais ca plus "pro" :-P
Il s'agit d'un script shell mais il est normalement compatible bash. Je m'excuse par avance des éventuelles erreurs, je n'ai moi-même Linux que depuis 3 semaines donc voila...


====================== DEBUT LISTING: srpm ====================
#!/bin/sh

# message de bienvenue
clear
echo "SearchRPM v. 0.1b for Mandrake Linux >= 8.0"
echo " by Streetpc for www.espionet.com"
echo

# on affiche l'usage et on quitte si aucun arg n'est spécifié
# ou si le premier argument est --help
if [[ -z $1 || $1 = "--help" ]]
then
echo "usage srpm [--help | --and | [--or]] word1 [word2 [...]]"
echo " search (using urpmq) the rpm whose name contains word1 or word2..."
echo " --or option is implicit (useless)"
echo " --help option displays this help"
echo " --and option is only used when several words are given"
echo " it makes the search pattern use grep word1 | grep word 2 [...]"
echo " i.e. looks after the rpm that contains ALL the words"
echo " => Do not use several options at the same time,"
echo " otherwise you could get odd results ;-)"
echo
exit
fi

# sinon on commence le traitement

# on va ser servir des fichiers "temp_srpm_res" et "temp_srpm_res2",
# donc on vérifie s'ils n'existent pas
if [[ -e temp_srpm_res || -e temp_srpm_res2 ]]
then
echo "One of the following files already exist and will be overwritten:"
echo "temp_srpm_res temp_srpm_res2"
echo "Press enter to continue, Ctrl+C to exit."

# attente de la frappe de la touche entrée
read >/dev/null
fi

########################deux cas:########################


############ 1er cas ############ # on applique les filtres successifs

if [[ $1 = "--and" ]]
then
# la commande d'après peut prendre un peu de tepms, donc...
# l'option -n permet d'éviter le retour à la ligne
# pour afficher le "OK" sur la même ligne
echo -n "Searching..."
urpmq --list >temp_srpm_res
# on vire le 1° argument (--and).
# donc $1=word1, $2=word2, etc.
shift
# on applique le filtre pour chaque argument
for N in $*
do
# on affiche le contenu du fichier temp avec filtre
# (voir le détail sur les instructions cat et grep à la fin)
# et on stocke le tout dans le meme fichier temp
grep -i ${N} temp_srpm_res | cat >temp_srpm_res
done
# la recherche est terminée
echo "OK"
# il ne reste plsu qu'à afficher les résultats
echo -n "Resluts :"
# wc -l compte le nombre de ligne, donc de résultats
# (voir les précisions à la fin)
cat temp_srpm_res | wc -l
echo ""
cat temp_srpm_res
echo ""
# ptit message sympa
echo "I hope you've found what you were looking after."
echo ""
# on supprime le fichier temp
rm temp_srpm_res
# et on quitte
exit
fi

1er cas # on affiche les résultats avec chaque filtre un par un
#si l'option inutile --or a été spécifiéé, on la vire
if [[ $1 = "--or" ]]
then
shift
fi

#ensuite on commence pareil
echo -n "Searching..."
urpmq --list >temp_srpm_res
echo "OK"
echo ""

for N in $*
do
cat temp_srpm_res | grep -i ${N} >temp_srpm_res2
# cette fois, on affiche pour chaque nom le
# nombre de résultats et les résultats
echo -n "Resluts for ${N} :"
cat temp_srpm_res2 | wc -l
cat temp_srpm_res2
echo ""
done
echo "I hope you've found what you were looking after."
echo ""

# on supprime les fichiers temp et on quitte
rm temp_srpm_res
rm temp_srpm_res2
exit

====================== FIN LISTING: srpm ====================


        PRECISIONS SUR 3 COMMANDES UTILISÉES DANS LE SCRIPT:


GREP:

=> usage principal:
$ grep -i mot [fichier]
ou
$ commande | grep -i résultat
=> description:
n'affiche que les lignes du fichier ou de l'entrée standard contenant "mot"
l'option -i permet d'ignorer la casse
le deuxième usage permet de filtrer la 1° commande (la sortie de "commande" est renvoyée vers l'instruction grep qui la filtre, ne laissant que les lignes recherchées); il est par exemple souvent utilisé pour la commande
dmesg.
=> autres options utiles:
--help comme très souvent, affiche l'aide (moins complet que "man grep")
-x le filtre est un mot entier
-z le filtre est une lign entière


CAT:

=> usage principal:
$ cat fichier
=> description:
affiche le fichier à l'écran
=> autre usage:
$cat >mon_fichier
cela permet de remplir le fichier "mon_fichier" avec les lignes que vous entrerez après. Pour ne pas l'écraser et ajouter à la fin, utiliser >>mon_fichier. Taper Ctrl+D pour finir.


WC:

=> usage principal:
$wc [fichier]
=> description:
donne le nombre d'octets, de mots et de lignes dans le fichier ou l'entrée standard
=> options utiles:
-l ne donne que le nombre de lignes
-w ne donne que le nombre de mots
-c ou -m ne donne que le nombre d'octets (de caractères)
-L donne la longueur de la ligne la plus longue



----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------

Informations
Cet article a été écrit par streetpc
Email:streetpc@free.fr