Gestion des servis lunix

Configuration de Linux Loader (LILO)

Préliminaires

Attention! Lilo est un fichier sensible!
En cas d'erreur de manipulation, vous risquez de rendre votre configuration inutilisable. Pensez à avoir toujours une disquette de démarage sous la main au cas où un problème surviendrai. Vous pouvez également faire une copie de votre secteur de démarrage sur une disquette avec la commande:

dd if=/dev/hda of=/fd/MBR/ bs=512 count=1

Au travers des quelques lignes qui suivent, nous décrivons brièvement l'utilité et le fonctionnement de lilo. Nous espérons néanmoins qu'elles permettront au lecteur de découvrir les bases de cet outil.

Qu'est-ce que lilo ?

Lilo (LInux LOader) est un petit programme destiné à permettre un système d'amorce multiple. Grâce à lui, on peut choisir le système que l'on souhaite utiliser: Linux, FreeBSD, Windows, OS/2,..., lors du lancement de votre machine. Pour cela, lilo est placé dans le secteur de boot de votre disque dur.

Modifier la configuration de lilo

Pour modifier la configuration de lilo, il suffit de modifier son fichier de configuration, lequel est généralement /etc/lilo.conf. Normalement, on doit se connecter en root pour effectuer cette opération.
Nous utiliserons l'exemple suivant pour illustrer notre propos :

boot=/dev/hda
# disque ou partition où est installé lilo
map=/boot/map
# transmet à lilo les blocs d'adresse des noyaux
install=/boot/boot.b
# copie le boot record de lilo depuis le fichier suivant vers le MBR
prompt
# mode interactif
timeout=50
# Délai d'attente en dixième de secondes
default=oldlinux
# boot par défaut
vga=normal
# mode graphiquede démarrage
image=/boot/vmlinuz-2.2.5-22
# le noyau qui sera chargé
label=linux
# le nom à transmettre à lilo
root=/dev/hda1
# Emplacement de la partition racine
initrd=/boot/initrd-2.2.5-22.img

read-only

image=/boot/vmlinuz-2.2.5-15

label=oldlinux

root=/dev/hda1

initrd=/boot/initrd-2.2.5-15.img

read-only

other=/dev/hda2
# Un autre système d'exploitation (windows98)
label=dos

table=/dev/hda
# le disque où se trouve la table de partition courante
other=/dev/hda3

label=bsd


Dans cette exemple, le premier disque dur dispose de trois systèmes d'exploitation: une version de Linux (sur /dev/hda1), Windows (/dev/hda2) et FreeBSD (/dev/hda3).
Les systèmes de type Linux sont référencés par les entrées commençant par image=; les autres, par other=.

Description des options

Toutes les options ne sont pas reprises. Pour plus d'informations, consulter le HOWTO de lilo.
Les options suivantes en gras sont des paramètres génériques, indépendes du type d'O.S..

boot: : disque sur lequel est placé le fichier lilo (plus exactement, le device qui contient le secteur de boot);

label : texte à taper au lancement pour sélectionner l'O.S.;

install : spécifie le fichier utilisé comme nouveau secteur de démarrage. Si install est omis, /boot/boot.b est utilisé par défaut;

map : spécifie l'emplacement du fichier map. Si cette option est omise, un fichier /boot/map (crée par l'exécution de /sbin/lilo) est utilisé;

timeout : permet de préciser la durée (en dixièmes de secondes) pour l'entrée au clavier. Si aucune touche n'est enfoncée pendant le temps prescrit, la première image est automatiquement chargée. Par défaut, timeout est infini;

default : spécifie quel entrée sera chargée par défaut, au bout du temps défini par timeout; si cette ligne est absente, l'entrée par défaut est la première du fichier lilo.conf.

Entrée image :
La première chose à écrire après image= est le nom du noyau à utiliser, avec son chemin. Ainsi, le kernel x.x.x-xx correspond au fichier /boot/vmlinuz-x.x.x-xx situé sur la première partition du premier disque dur. L'option root indique le répertoire racine.

Entrée other
Après other= doit se trouver la partition abritant l'O.S. (différent de Linux). L'option table permet d'indiquer le disque.

Remarques :
Vous aurez sans doute remarqué la présence de deux noyaux Linux sur la première partition. Il est souvent conseillé de laisser l' ancien noyau lors de l'installation d'un plus récent, surtout s'il s'agit d'une version de développement. Ainsi, en cas de problèmes, on pourra toujours se rabattre sur l' ancien noyau.
Pourquoi indiquer read-only ? Lorsque Linux est amorcé, ce dernier vérifie la cohérence des partitions Linux. Pour réaliser cette opération, il est indispensable que la partition soit en lecture seule. En effet, vérifier un disque en cours d'utilisation pourrait tout détruire. Cette vérification n'a toutefois pas lieu à chaque lancement, si vous éteignez correctement votre ordinateur.

Installer la nouvelle configuration

Pour que la configuration soit prise en compte, il suffit d'exécuter /sbin/lilo/. Si des erreurs de syntaxe sont rencontrées, un message d'erreur vous en avertira.
Il est possible de configurer et de modifier le fichier de configuration par l'intermédiaire d'une interface graphique. Linux possède une section dans l'application d'administration ' gnome-linuxconf ' : grâce à linuxconf, on peut configurer Lilo pour pouvoir booter sur différents noyaux ou sous différents systèmes d'exploitation.

Utilisation de lilo

Lorsque vous voyez le prompt Lilo, vous pouvez taper sur la touche pour voir les différents choix possibles. Si Lilo n'est pas configuré pour être interactif, gardez la touche ou pressée avant que le message 'LILO' n'apparaisse. Puis entrez le nom du système que vous voulez démarrer, et ensuite appuyez sur Entrée pour valider.

En cas de problèmes

Si vous avez installé lilo sur votre disque dur et que la machine plante, il est possible de restaurer les paramètres de boot du DOS en relançant l'ordinateur avec une disquette MS-DOS et en tapant fdisk /mbr. Lilo sera enlevé par la même occasion. Il suffira de relancer lilo en ayant rebooté sous Linux avec une disquette de démarrage.
La désinstallation n'est cependant généralement pas nécessaire. Relancer votre ordinateur avec une disquette de démarrage Linux puis exécuter /sbin/lilo en ayant éventuellement rétabli l'ancienne configuration.
Si vous avez fait une copie du MBR (Master Boot Record) comme indiqué précédemment, vous pouvez également le restaurez via la commande:

$ dd if=/fd/MBR of=/dev/hda bs=446 count=1

Windows vs Lilo

Si vous avez installé Linux, et que vous désirez (ré)installer Windows, vous risquez de découvrir avec effroi que votre Lilo a disparu. Le programme d'installation de Windows réécrit en effet le secteur où est normalement abrité Lilo.
Une solution est de relancer l'ordinateur avec une disquette de démarrage Linux, laquelle peut être créée lors de l'installation de Linux. A présent, il ne reste plus qu'à entrer la commande : $ /sbin/lilo en tant qu'utilisateur root. Magie! Lilo est réinstallé. Vous devriez à présent pouvoir redémarrer l'ordinateur et retrouver le prompt lilo conventionnel.

Gestion des comptes et groupes d'utilisateurs sur Linux

Généralités - notion d'utilisateurs

Même si on est la seule personne à utiliser son système Linux, la compréhension et la gestion des comptes utilisateurs constituent un sujet très important pour l'administration du système. Et encore plus si la machine héberge plusieurs comptes de plusieurs personnes.

Les comptes utilisateur servent à beaucoup de choses sur les systèmes UNIX et Linux :

- Ils permettent de distinguer les différents utilisateurs qui ont accès au système, pour des raisons de sécurité. Chacun d'eux possède un compte personnel, auquel il accède par un identifiant et un mot de passe secret.
- Ces utilisateurs peuvent définir des permissions d'accès à leurs données, afin d'en autoriser ou d'en interdire l'exploitation par les autres.
- Les comptes permettent l'authentification de chaque utilisateur accédant au système, ce qui permet bien d'autres actes de gestion tels que gérer les courriers électroniques des utilisateurs par exemple ou savoir qui a fait une bêtise en examinant les fichiers de trace du système.

En dehors des comptes personnels, il existe des utilisateurs qui ne sont pas forcément des personnes physiques. Ces utilisateurs remplissent des fonctions administratives. C'est le cas du compte root utilisé par l'administrateur pour effectuer la maintenance par exemple. C'est aussi le cas des comptes en général destinés à des démons qui doivent avoir accès à certains fichiers sous une identification spécifique ('le compte news par exemple permet de recevoir les news Usenet en provenance d'un autre site.

Gestion des comptes d'utilisateurs


Création d'un compte d'utilisateur

La création d'un compte demande plusieurs opérations : l'ajout d'une entrée dans le fichier /etc/passwd, la création du répertoire personnel de l'utilisateur, et la mise en place de la configuration par défaut dans le répertoire de cet utilisateur.

L'ensemble de ces opérations est pris en charge par la commande adduser.ou useradd dont la syntaxe se présente comme suit :

adduser [-c commentaires] [-d rep_personnel]
[-e date_expiration] [-f tps_inactivité]
[-g groupe_initial] [-G groupe[,...]
[-m [-k squelette_rep | -M] [-p motdepasse]
[-s shell] [-u uid [-o]] [-n] [-r] utilisateur

Utilisée sans aucun argument, cette commande demande de manière interactive toutes les informations nécessaires pour identifier l'utilisateur en cours de création.

Utilisée sans option (donc uniquement avec l'argument nom d'utilisateur, cette commande applique un ensemble de valeurs par défaut qui sont consignées dans le fichier : /etc/default/useradd 

Voici un exemple de ce fichier, auquel de brefs commentaires sont rajoutés.
GROUP=100 identifiant du groupe primaire
HOME=/homeracine des rép. Personnels
INACTIVE=-1 (nb de jours avant destruction du compte
EXPIRE= nb de jours avant expiration du mot de passe
SHELL=/bin/bash shell de connexion attribué au compte
SKEL=/etc/skel fichiers recopiés par défaut dans chaque rép. personnel

Le tableau ci-dessous synthétise les options les plus utilisées

Option
Résumé
-c commentaires
Nom complet de l'utilisateur et des commentaires divers
-d rep_personnel
Par défaut dans le répertoire /home
-e date_expiration
Fixe la date d'expiration du compte (format MM/JJ/AA)
-f tps_inactivité
Nombre de jours entre l'expiration et la désactivation permanente du compte
-g groupe_initial
Groupe d'affectation du compte. Doit exister avant la création du compte.
-G liste
Fixe l'appartenance de l'utilisateur à une liste de groupes secondaires (séparateur , sans espace)
-m
Le répertoire personnel sera créé s'il n'existe pas. L'option -k n'est valide qu'en conjonction avec l'option -m
-k squelette_rep
Recopie le contenu du répertoire squelette_rep dans le rép. Personnel ; par défaut /etc/skel
-p motdepasse
Mot de passe crypté. Par défaut le compte est désactivé
-s shell
Par défaut, attribution du shell par défaut bash
-u uid
Pour fixer l'identifiant uid à l'utilisateur
-n
Un groupe ayant le même nom que le compte en cours de création sera crée sur le système par défaut. Cette option désactivera ce comportement spécifique à Linux Mandriva

Suppression d'un compte d'utilisateur :
Pour supprimer le compte d'un utilisateur (non connecté), on utilise la commande userdel

userdel [-r] utilisateur

L'option -r supprime aussi le répertoire. personnel et les fichiers de l'utilisateur.
La commande supprime toute trace de l'utilisateur dans le fichier de configuration : /etc/passwd y compris dans les groupes d'utiliseurs.

Modification d'un compte d'utilisateur :
Pour modifier le compte d'un utilisateur, on utilise la commande usermod comme suit :

usermod [options] utilisateur

Les options sont les mêmes que adduserusermod -G stagiaire,prof stagex ajoute stagex dans les 2 groupes stagiaire et profs (qui doivent exister au préalable)
Pour lui attribuer le nouveau mot de passe stgx : passwd stagex
La saisie du nouveau mot de passe sera demandée deux fois.

Remarques :
- Si root souhaite redéfinir son propre mot de passe, il doit passer la commande passwd !
- Un utilisateur quelconque ne peut pas créer de compte, même s'il a le privilège de faire partie du groupe root.! Par contre, il peut modifier lui-même son mot de passe.
- Pour avoir plus d'informations sur les options, ne pas hésiter à faire recours aux pages man de la commande adduser ou utiliser la commande : useradd -h
- Pour une gestion sous interface graphique, Il existe divers outils qui seront présentés dans ce même dossierfont size='2'>
Attention ! Le compte créé permet à l'utilisateur d'accéder au système de fichier Linux (avec des droits que nous verrons).
- Pour pouvoir se connecter au réseau SAMBA, à partir d'une station distante Windows, il faut créer un compte Samba avec l'utilitaire smbpasswd

Gestion des groupes d'utilisateurs


Un groupe sous Linux est un ensemble d'utilisateurs qui partagent les mêmes fichers et répertoires. Nous verrons que les fichiers accordent des droits d'accès réglables à ces groupes.

Chaque utilisateur doit faire partie au moins d'un groupe, son groupe initial ou primaire. Celui-ci est défini au moment de la création du compte, et par défaut sous Linux Mandriva, l'utilisateur appartient à un nouveau groupe créé, portant son nom.
Ainsi, dans /etc/passwd chaque utilisateur possède un groupe par défaut, précisé par son identifiant gid dans ce fichier.

L'appartenance au groupe primaire n'étant pas exclusive, tout utilisateur peut faire partie de plusieurs autres groupes, appelés ses groupes secondaires.

Mais le rôle joué par le groupe primaire demeure prépondérant, comme nous le verrons dans le système des permissions des fichiers.

Pour lister tous les groupes (primaire et secondaires) d'un utilisateur : groups utilisateur

Pour créer un nouveau groupe : groupadd groupe

Supprimer le groupe .stagiaires : groupdel stagiaires (Le groupe est alors supprimé du fichier /etc/group).

Pour ajouter un utilisateur à un groupe, le plus simple est d'éditer le fichier /etc/group et d'ajouter une liste d'utilisateurs (séparés par des virgules) sur la ligne du groupe (ou utiliser Linuxconf).

Structures des fichiers /etc/passwd et /etc/group


Tout ce qui concerne la gestion et l'authentification des utilisateurs est inscrit dans un seul fichier /etc/passwd 
La gestion des groupes est assurée par 
/etc/group
Les mots de passe cryptés sont souvent placés dans /etc/shadow, par sécurité lisible seulement par root.

Structure de /etc/passwd
Ce fichier comprend 7 champs, séparés par le symbole « : »
  1. nom de connexion (encore appelé nom d'utilisateur ou login)
  2. ancienne place du mot de passe crypté
  3. numéro d'utilisateur uid, sa valeur est le véritable identifiant pour le système Linux; l'uid de root est 0, le système attribue conventionnellement un uid à partir de 500 aux comptes créés.
  4. numéro de groupe gid, dans lequel se touve l'utilisateur par défaut; le gid de root est 0, les groupes d'utilisateurs au delà de 500
  5. nom complet, il peut être suivi d'une liste de renseignements personnels (cf chfn)
  6. rép. personnel (c'est également le rép. de connexion)
  7. shell, interprétateur de commandes (par défaut /bin/bash)
Structure de /etc/group
Ce fichier comprend 4 champs, séparés par le symbole « : »
  1. nom du groupe
  2. x pour remplacer un mot de passe non attribué maintenant
  3. numéro de groupe, c-à-d l'identifiant gid
  4. la liste des membres du groupe
Pour Connaitre l'uid et le gid de l'utilisateur courant, on utilise la commande id dont le résultat ressemble à ce qui suit :

uid=501(stage1) gid=501(stage1) groups=501(stage1), 504(stagiaire)

Pour décrire un utilisateur on utilise la commande : chfn
Cette commande permet d'indiquer dans le champ numéro 5 du fichier /etc/passwd différentes informations sur un utilisateur, son nom complet, son bureau, ses numeros de téléphone (séparées par des virgules).

Outils opérationnels en mode texte


La commande passwd
Elle est chargée du cryptage du mot de passe dans /etc/shadow
Syntaxe : passwd [option] nom-login

Options :
--stdin, la commande abandonne son caractère interactif habituel et examine son entrée standard pour s'en servir comme mot de passe.
Très utile dans un script : echo mot | passwd --stdin (attention tout caractère est significatif, y compris les ' ')
-d , pour supprimer le mot de passe, l'utilisateur pourra se connecter sans !
-l , pour verrouiller le compte et empêcher sa connexion.
-u , pour déverrouiller.

Cryptage des mots de passe
Pour des questions de sécurité, les mots de passe cryptés ne sont pas stockés dans /etc/passwd qui doit etre accessible en lecture par tous.

La commande /usr/sbin/pwconv est chargée de transférer les mots de passes cryptés, dans /etc/shadow. Pour plus de détails , consulter man pwconv

Pour interdire l'utilisation, il suffit de remplacer le mot de passe chiffré par une étoile : '*'.
Les accès à un compte peuvent éventuellement être ouverts en laissant le champ mot_de_passe vide. Toute personne voulant se connecter avec ce compte pourra alors le faire.

Récapitulatif des principales commandes 

useradd, usermod, userdel
gestion des comptes utilisateur
groupadd, groupmod, groupdel
gestion des groupes
pwck, grpck
vérification des fichiers
passwd
changer le mot de passe d'un utilisateur
chfn, id, groups, finger
utilitaires divers

Outils graphiques de gestion des comptes et groupes


Les trois outils que nous présentons brièvement nécessitent tous une connexion au système en tant que root.

Linuxconf
Linuxconf est un véritable couteau suisse d'aministration Linux dont l'utilisation nécessite de se connecter au système en tant que root. En général il se lance en ligne de commande (on peut utiliser linuxconf sous X-KDE sur les systèmes Redhat Section Comptes utilisateurs)

Kuser
Kuser est une petite application graphique intégrée à l'interface graphique KDE. Pour le lancer sous Linux Mandriva, il faut exécuter la commande Lanceur d'application/Configuration/Other/User Manager ou tout simplement la commande Kuser dans une fenêtre console.

Userdrake
Userdrakeest une utilitaire graphique dévéloppé par l'éditeur Mandrakesoft. Pour le lancer sous Linux Mandriva, il faut exécuter la commande Lanceur d'application /Configuration/Other/Userdrake ou tout simplement la commande userdrake dans une fenêtre console.

La personnalisation du shell


Il est possible à partir du Shell de modifier l'interpréteur de commandes.
Pour ce faire, il faut utiliser la commande chsh ou alors passwd -s. Linux cherche alors dans le fichier/etc/shells le programme que vous avez spécifié. Seules les commandes présentes dans ce fichier seront acceptées et remplaceront la valeur actuelle du champ programme_de_demarrage. Ces restrictions ne s'appliquent pas au compte du superutilisateur.

Assurez-vous que les droits d'accès du fichier /etc/shells sont les mêmes que pour le fichier /etc/passwd.

Le superutilisateur ne se nomme pas obligatoirement root. Pour le changer, il suffit de remplacer le nom du compte root par celui désiré. Un compte privilégié est un compte dont l'identifiant (UID, User ID) vaut zéro.

Le fichier /etc/profile permet de configurer le Shell. Il concerne tous les utilisateurs.
On y trouve tout d'abord les variables du Shell telles que OPENWINHOME, PATH, ..le type de terminal et la variable TERM. Une partie est consacrée au prompt du Shell, enfin une dernière permet la définition des couleurs de la commande ls..
Au démarrage de Linux, il est agréable d'avoir le pavé numérique allumé, ce qui n'est pas le cas par défaut. Il suffit de rajouter au fichier /etc/profile les lignes qui suivent :

INITTY=/dev/tty[1-7]
for tty in ;
do setleds -D +num <
done

L'administrateur configure un prompt identique pour tous les utilisateurs du système en modifiant la variable PS1 dans le fichier /etc/profile.
S'il veut un prompt du genre 'Bonjour#', il lui faut d'éditer le fichier. Toutes les lignes concernant la variable PS1 doivent alors être précédées d'un dièze: #. Il suffit alors d'ajouter la ligne PS1='Bonjour#'.

L'utilisateur a le loisir de reconfigurer son prompt en éditant le fichier ~/.bash_profile (donc un fichier caché de son répertoire personnel) et en positionnant à sa guise la même variable.

Il est vivement conseillé de laisser un blanc après le prompt pour une meilleure lisibilité. Il est également possible d'utiliser des variables dans le prompt (pour afficher par exemple l'heure ou le nom de la machine...) :

- d pour ajouter la date (format anglais)
- pour ajouter l'heure (HH:MM:SS)
- u pour ajouter le nom de l'utilisateur
- pour un retour à la ligne
- w pour ajouter le chemin complet du répertoire courant
- W pour ajouter le répertoire courant
- h pour ajouter le nom de la machine

La couleur peut également être changée. Pour ceci, il faut utiliser la variable PS1 comme ceci:

PS1='[�33[num_couleurm]prompt_voulu�33[0m]'

Le numéro de la couleur sera pris dans la liste suivante:
Noir
0;30
Rouge
0;31
Vert
0;32
Brun
0;33
Bleu
0;34
Violet
0;35
Cyan
0;36
Gris Clair
0;37
Gris
1;30
Rose
1;31
Vert Clair
1;32
Brun Clair
1;33
Bleu Clair
1;34
Violet Clair
1;35
Cyan Clair
1;36
Blanc
1;37





Voici un exemple qui indique l'heure suivie du nom de l'utilisateur en rouge:
PS1=' [�33[0;31m]u�33[0m]'

Gestion des packages et applications sous Linux (Rpm, Urpmi et Rpmdrake)


RPM : RedHat Package Manager

Introduction


Le format RPM (RedHat Package Manager), a été, comme son nom l'indique, créé à l'origine pour la distribution RedHat. Depuis, de nombreuses distributions l'ont adopté et l'utilisent ; on peut citer par exemple Mandriva ou SuSe. D'autres formats de packages dans le monde Linux sont DEB (pour Debian) et TGZ (pour Slackware).

Il existe de nombreux utilitaires tels que Kpackage, GnoRPM, Midnight Commander etc.. qui permettent d'installer et de gérer les packages RPM. L'installation depuis la ligne de commande reste toutefois la solution la plus rapide et la plus efficace pour ce travail.
Hormis le format TGZ, tous les autres formats élaborés (RPM, DEB, etc...) permettent une installation/désinstallation facile et propre.
La plus grande partie des commandes décrites peuvent être exécutée par un utilisateur lambda. Toutefois les commandes qui installent, mettent à jour ou suppriment des paquetages nécessitent des droits d'administrateur (root).
Les noms de paquetages sont très longs et donc très pénibles à orthographier correctement. Linux offre toutefois des aides à la frappe :
  • lorsque vous installez un RPM, ou travaillez sur un RPM non encore installé, utilisez la complétion de ligne de commande en tapant les premières lettres du nom du fichier RPM puis la touche TAB. Si la correspondance reste équivoque, Linux vous donnera les possibilités trouvées, retapera votre ligne et vous laissera ajouter quelques lettres pour lever l'indétermination.
  • lorsque vous travaillez sur un RPM qui est déjà installé, la commande rpm s'adresse à la base de données des paquetages installés, qui consigne les noms courts en plus des noms de fichiers complets. L'indication du numéro de version n'est donc en général pas nécessaire (sauf si le même package est installé 2 fois avec 2 versions différentes).

//

Les commandes usuelles


Pour installer un nouveau paquetage :

[bcassoc@misfu bcassoc]$ rpm -ivh mon_package.rpm
Attention, si vous installez un paquetage par cette méthode et qu'il existe déjà sur votre système dans une version inférieure, vous risquez d'avoir des problèmes pour le désinstaller (voir plus bas).

Les options h et v ne sont pas obligatoires, -i est suffisant pour faire une installation. L'option h provoque l'affichage d'une barre de progression (ça fait très pro sur l'écran !) et v rend l'installation verbeuse (affiche beaucoup d'informations), ce qui fournit des messages plus explicites en cas d'erreur.

Pour procéder à la mise à jour d'un paquetage :

[bcassoc@ramses bcassoc]$ rpm -Uvh mon_package.rpm
Avec un 'U' comme 'Upgrade' (mise à jour en anglais).
Attention, ceci ne s'applique pas pour mettre à jour un noyau.

Pour supprimer un paquetage :

[bcassoc@ramses bcassoc]# rpm -e mon_package [bcassoc@ramses bcassoc]# rpm -e mon_package-version
Le 'e' correspond à 'erase' (effacer en anglais).
La syntaxe complète (avec numéro de version) permet de distinguer deux versions d'un même paquetage qui auraient été installées ensemble.

Pour faire des requêtes sur les paquetages :

[bcassoc@ramses bcassoc]# rpm -qa
Affiche la liste de tous les paquetages déjà installés.
L'option « q » signifie « query » et l'option« a » signifie 'all'.


[bcassoc@ramses bcassoc]# rpm -qa | grep mon_package
Ainsi par exemple rpm -qa | grep 'util' vous donne la liste de tous les RPM installés tels que util-linux, nautilus, bind_utils etc.. Attention la syntaxe est sensible à la distinction majuscules / minuscules !
Note : Les dernières versions du programme rpm (versions postérieures à 4.0.2) permettent une syntaxe du genre :

# rpm -qa ker*

pour avoir l'affichage de tous les packages commençant par « ker ».

Trouver la liste des fichiers contenus dans un paquetage mon_package qui est déjà installé.

[bcassoc@ramses bcassoc]# rpm -ql mon_package
L'option 'l' signifie 'list'.

Obtenir des informations relatives à un paquetage

[bcassoc@ramses bcassoc]# rpm -qi mon_package
L'option 'i' signifie 'information'.

Cette commande donne les informations relatives à ce paquetage, une brève description de ce que fait le paquetage, des dépendances qui doivent être satisfaites, etc.

[bcassoc@ramses bcassoc]# rpm -qpi mon_package
L'option 'p' signifie 'package'.

L'objectif poursuivi est le même que ci-dessus mais cette fois la commande s'applique à un RPM qui n'est pas encore installé.

Nota : l'option p s'applique aussi à d'autres syntaxes, par exemple rpm -qpl mon_package pour avoir la liste des fichiers d'un paquetage non encore installé.

Retrouver le paquetage d'origine d'un fichier

[bcassoc@ramses bcassoc]$ rpm -qf chemin_absolu/mon_fichier
Il peut se produire que vous vous trouviez en face d'un fichier dont vous vous demandez quel est le paquetage qui a bien pu installer ce fichier. Pas de panique ! Là aussi la commande RPM peut vous être d'une aide précieuse. Ici le 'f' signifie 'file' ou fichier en anglais.

[bcassoc@ramses bcassoc]$ rpm -i --test mon_package
Effectue simplement une vérification sans installer le paquetage mon_package. Permet essentiellement de vérifier si l'installation pourrait se dérouler sans encombre ou alors si des dépendances non satisfaites risquent de faire avorter l'installation.

Si rpm ne veut pas désinstaller le paquetage mon_package, faire :

[bcassoc@ramses bcassoc]$ rpm -qa | grep mon_package
Affiche la liste des paquetages donc le nom contient mon_package, par exemple :

mon_package-1.1 mon_package-1.2 [bcassoc@ramses bcassoc]# rpm -e mon_package-1.1
Désinstalle le paquetage désigné par son nom et son numéro de version.

Utilisation de urpmi


Présentation
urpmi est un utilitaire Mandriva de gestion de package, situé au-dessus de rpm. C'est un script perl qui permet d'aller chercher un package sur un média (CDROM, zip mais aussi site ftp, http) et de l'installer.

Son intérêt principal : il gère les dépendances (qui n'a jamais eu le fameux message d'erreur 'package xyz needs libmachintruc', avec évidemment aucun package libmachintruc en vue), ainsi que la localisation des packages. Le programme rpmdrake est une sur-couche graphique de urpmi.

Cet outil fonctionne à partir d'un ensemble de source de packages, dénommés médias, dont il indexe le contenu lui-même pour les médias locaux, ou à partir d'index pré-générés pour les médias distants. 
Une base de donneés est utilisée par urpmi pour savoir quels packages sont sur quel média. Typiquement, après une installation standard (à partir des CD), chacun des CD utilisés est alors enregistré, et quand vous faites un urpmi nom_paquet (soit directement, soit via rpmdrake), on vous demande bien gentillement d'insérer le CD x, et le fameux package est automatiquement installé.

Mais si vous n'avez pas le CD sous la main ? Et si vous voulez profiter d'autres packages, provenant des contributions, de cooker, ou de tout autre source ? Et bien, il suffit de configurer urpmi pour utiliser le miroir local linux.univ-reunion.fr.
Naturellement, pour installer quoi que se soit, il est nécessaire d'avoir le média s'il s'agit d'un CD ou une connexion internet s'il s'agit d'un miroir ftp ou http.


Utilisation de urpmi
Examinons un cas 'typique': en essayant d'installer une nouvelle application, il manque des packages nécessaires à son bon fonctionnement (et donc à son installation !). Comment s'en sortir si par malheur nous n'avons plus nos CDs de Mandriva ? Même si nous avons nos CDs, allons nous fouiller dans ceux-ci pour trouver le(s) package(s) manquant ?
Heureusement, non ! Pour cela, la solution est l'utilitaire urpmi, avec la syntaxe suivante :

$ urpmi mon_package

S'il est disponible dans un des médias alors il va être copié sur votre disque dur puis installé (il faudra insérer le média dans le lecteur s'il s'agit d'un CD). Si plusieurs packages dans différents médias ont la chaîne 'mon_package' alors une liste vous est proposée (par exemple 'mon_package-0.2.1.rpm' et 'libmon_package-0.2.1.rpm' 'mon_package-0.2.1-devel.rpm' ...

À vous de relancer urpmi avec le nom complet (sans ambiguité) du package que vous souhaitez installer. S'il manque des packages (problème de dépendances) alors ils seront aussi récupérés puis installés.

Il existe d'autres fonctions tout aussi utiles. Souvent un fichier va manquer (la fameuse 'libfoobar-1.2.0') qui ne correspond pas directement à un nom de package. Notons tout de même que la politique de nomenclature des librairies initiée depuis la Mandriva permet d'éviter ce genre de casse-tête et aussi d'avoir plusieurs versions différentes d'une même librairie.

Il est possible de lancer une requète dans la base de donnée de urpmi pour retrouver ce fichier :

$ urpmf mon_beau_fichier

S'il est disponible alors le nom du package qui le contient sera donné.

Il est possible de donner une sous-chaine (par exemple 'mon') et on obtiendra (par exemple !):

$ urpmi mon
...
xgammon:/usr/share/icons/xgammon.xpm
rocksndiamonds:/usr/share/games/rocksndiamonds/levels/Contributions/rnd_pavel_machek/003.level.

Le mot avant les deux points correspond au nom du package. Ensuite, on trouve le chemin complet du fichier qui contient la chaine recherchée.
À vous de sélectionner ce qui vous intéresse réellement puis de lancer urpmi avec le nom complet.

Attention : Lorsque l'on veut utiliser urpmi pour installer un package se trouvant sur un cdrom, il faut tenir compte de deux points importants :

- le cdrom devra être monté au préalable. En général supermount s'en charge pour vous dès qu'une tentative d'accès est faite alors qu'il y a un cdrom dans le lecteur. Si supermount n'est pas installé sur la machine ou s'il ne marche, il faudra monter explicitement le cdrom par la commande mount.

- Il est vivement recommandé de ne pas changer de répertoire pour se positionner dans l'un des sous-répertoires du cdrom sinon la commande échouera si elle a besoin d'un autre cdrom pour mener à bien l'installation demandée. En effet tant que l'on se trouve sur l'un des sous-répertoires du cdrom, le média est considéré comme occupé et le système refuse d'éjecter le cdrom.

Comment tenir son système à jour : en admettant que vous avez plein de sources (y compris des sources pour les update) ? En tapant la commande :

# urpmi --auto-select

Va parcourir TOUTES les sources à la recherche des packages plus récents et les installer ainsi que leur dépendances.

Configuration de urpmi


D'abord, on va ré-initialiser urpmi, de façon à éviter des conflits :
  • éliminer ou (mieux) commenter les entrées du fichier de configuration /etc/urpmi/urpmi.cfg
  • effacer la base de donnée actuelles, formées des fichiers contenus dans /var/lib/urpmi
Ensuite, on va ajouter les nouveaux médias et régénérer la base. Ceci se fait via la commande urpmi.addmedia . Le nom est strictement informatif, mais l'URL dépend du type de média utilisé.
Dans le cas du mirroir, on peut configurer un accès par FTP ou NFS.
Le premier est censé être plus efficace en terme de transfert, mais ne peut être indexé par urpmi, ce qui n'autorise que les répertoires possédant un index pré-généré (mandriva et cooker seulement). Les deux méthodes sont décrites successivement.
Accès FTP
La commande à utiliser est de la forme urpmi.addmedia ftp://www.votre site.com/....>
Accès NFS
Il faut d'abord monter la partition NFS, et si possible automatiquement au boot de façon à ce qu'elle soit toujours disponible. Une bonne façon de faire est de créer un répertoire /mnt/nfs/linux, et d'insérer la ligne suivante dans /etc/fstab :
linux:/var/ftp/pub/linux /mnt/nfs/linux nfs defaults 0 0

Il faut également activer le service netfs au démarrage, car les systèmes de fichiers indiqués dans ce fichier sont montés normalement avant l'activation du réseau, et les systèmes distants ne sont alors pas disponibles :chkconfig --add netfs.
Une fois ceci fait, on peut utiliser urpmi.addmedia avec une syntaxe de la forme urpmi.addmedia http://www.votresite.com/...
  • # urpmi.addmedia mandrake http://www.misfu.com/modules/upload/upload/CODE>
  • # urpmi.addmedia contribs http://www.misfu.com/modules/upload/upload/CODE>

Cas d'un cdrom


Pour scanner les RPMs d'un cdrom pour insérer son contenu dans la base de données de urpmi, on utilise la syntaxe suivante :

# urpmi.addmedia removable://

où est un nom que l'utilisateur choisit d'attribuer à son cdrom pour le distinguer des autres cdroms qu'il pourrait avoir besoin de gérer aussi par la même commande. Il est recommandé de prendre un mot du genre «mdkxxcd_inst1»
est la localisation du répertoire rpm sur votre machine lorsque votre média est monté.

Exemple : # urpmi.addmedia mdkxxcd_inst1 removable://mnt/cdrom/Mandriva/RPMS

Attention : urpmi.addmedia est une commande qui peut prendre des dizaines de minutes à s'exécuter.

Administration


Dans le cas de média dont le contenu change fréquemment, et si par exemple urpmi essaie d'installer le package nom_paquet et ne trouve pas le package nom_paquet1mdk auquel il s'attendait, il suffit de mettre à jour le média correspondant : urpmi.update nom_du_média.
Dans le cas de gulus, cela donnera :

# urpmi.update gulus

Introduction à rpmdrake


- Tout d'abord rpmdrake (se lance via drakconf ou à la main rpmdrake &) gère simultanément des RPMS de différentes sources (répertoire, CDrom, site FTP).

Si l'on veut installer un RPM, il propose automatiquement (comme Dselect) d'installer les RPMs qui manquent, si du moins ils sont dans sa base de donnée. Si on préfère, on peut aussi utiliser la commande en ligne urpmi pour faire cela.

- rpmdrake dispose de fonctions recherche pour rechercher les packages contenant tel ou tel fichier qui sont dans sa base de données, ou meme une simple chaîne de caractères.

- Au préalable, il faut enregistrer dans la base de donnée toutes lesources de RPMs. Pour les CDs utilisés à l'installation, cela est fait automatiquement. Pour d'autres sources de RPMs, on peut faire cela en utilisant rmpdrake directement ou alors en revenant à la ligne de commande grâce à urpmi.addmedia. Exemple: on scanne les RPMS d'un CD en tapant:

urpmi.addmedia NomduCD removable_cdrom_2:///mnt/cdrom/Mandriva/RPMS

ou, dans le menu configuration de rpmdrake, ajouter un emplacement de paquetagesEnsuite on utilise la commande rechercher. Les deux flèches permettent de basculer de la liste des paquetages installés à la liste de tous les RPMs disponibles.

- Enfin, urpmi peut être utilisé pour donner l'autorisation à d'autres utilisateurs que root d'installer des RPMs. Extension à manier avec précaution car cela affaiblit la sécurité du système.

Gestion des services et des daemons sous Linux

Gestion des services


Dans le répertoire /etc/rc.d/init.d on trouve des scripts permettant de lancer des services. Ce sont les daemons. Dans chaque script il y a une petite description de ce que le daemon (ou service) est sensé faire. On peut activer ou désactiver ou redémarrer ou voir l'état d'un service de la façon suivante :

/etc/rc.d/init.d/ start
/etc/rc.d/init.d/ stop
/etc/rc.d/init.d/ restart
/etc/rc.d/init.d/ status

ou plus simplement en tapant :

service start ou stop...

Cela convient pour un service que l'on active ou désactive occasionnellement de façon manuelle ; dans ce cas on peut avoir besoin de le contrôler pour voir si le service donné tourne bien (son statut).

On peut charger également les services automatiquement à chaque démarrage et ce de deux façons :
- Soit en créant des liens dans le répertoire du runlevel correspondant
- Soit en utilisant la commande chkconfig.

Notion de runlevel ou niveau d'exécution


Dans chaque distribution linux on trouve dans /etc/inittab les différents niveaux d'exécution (runlevel en anglais) et leurs utilités.

Par exemple sous une mandriva (c'est la même chose pour une redhat) on a, en regardant dans le fichier /etc/inittab :
...
# 0 - halt
# 1 - Single user mode
# 2 - Multiuser, without NFS
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot
...
Sous une slackware on trouve ceci:
...
# 0 - halt
# 1 - Single user mode
# 2 - Multiuser, without NFS
# 3 - Full multiuser mode
# 4 - X11
# 5 - unused
# 6 - reboot
...

Bref pour chaque distribution on trouve son système de runlevels.

En observant bien ces différents runlevels on peut dire que chaque runlevel correspond à un état de la machine. Pour la mandriva le runlevel 0 sert à arrêter la machine, le runlevel 1 est le mode de maintenance où seul le root peut se logger et un minimum de service tourne (attention à la sécurité), le runlevel 3 est destiné à une utilisation multi-utilisateur mais en mode texte, le runlevel 5 est la même chose que le runlevel 3 mais en mode graphique, le 6 pour rebooter la machine.

Ici les niveaux les plus utilisés sont le runlevel 3 et 5. En général il n'est pas intéressant de lancer des services aux runlevels 6 ou 0.

Dans le répertoire /etc/ se trouve les répertoires rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d. Ils correspondent chacun à un runlevel.

En listant le répertoires rc3.d : avec la commande ls on obtient :

K10webmin@
S10network@
S56xinetd@
S71sound@
S80postfix@
S92crond@
S99local@
S11portmap@
S55sshd@
S65dhcpd@
S75keytable@
S85numlock@
S91smb@

Cela représente les différents services lancés au runlevel 3. On peut remarquer qu'ils commencent tous par une lettre, elle détermine si le service ou daemon) est activé (S pour Start) ou non (K pour Kill). Le chiffre précise le niveau d'ordre d'exécution (ici par exemple le service network et activé avant portmap). À la fin de chaque service on remarque la présence de @ qui veut dire que c'est un lien qui pointe vers un autre fichier, dans notre cas le service pointe vers le script qui active le démon dans le répertoire /etc/rc.d/init.d

Pour mieux comprendre on peut taper ls -l et là on voit vers quoi pointent nos liens :

...
lrwxrwxrwx 1 root root 17 oct 3 21:58 S10network -> /etc/rc.d/init.d/network*
...

Dans le répertoire /etc/rc3.d/ (ou dans n'importe quel autre répertoire de runlevel) on peut créer de nouveaux services à lancer de la façon suivante : on se place dans le répertoire /etc/rc3.d puis on tape :

ln -s /etc/rc.d/init.d/ S##

Attention, on écrit le nom du service sans les crochets<>
Ici ## représente l'ordre d'exécution.
Pour au contraire désactiver un service on remplace S par K.

Utilisation de chkconfig


Si on utilise la méthode précédente pour activer un démon nouvellement installé, il faudra passer par tous les runlevels utilisés et à chaque fois tout taper. C'est assez fastidieux.
Heureusement il y a la commande chckonfig qui s'utilise de la manière suivante :

chkconfig --add

Cela aura pour effet de rajouter le démon du service dans tous les runlevels.
On peut procéder de façon plus fine, on utilisant :

chkconfig --level 123456 on/off

Exemple : Nous voulons activer le démon samba (smb) au runlevel 3 et 5, dans les autres runlevels nous voulons qu'il soit désactivé. On tape :

# chkconfig --level 35 smb on

# chkconfig --level 01246 smb off


Dans le cas où on n'est plus très sûr de ce que l'on a fait on tape :

# chkconfig --list

Avec cette option la commande chkconfig liste tous les services avec leurs statuts à tous les runlevels.

Mais si on ne veut lister qu'un seul démon on tape :

# chkconfig --list

Pour plus d'info: man initman chkconfig

Il va sans dire que la commande chkconfig facilite beaucoup la tâche. Cependant si on doit se taper tout ça à la main pour l'ensemble des services, on n'est pas sorti de l'ornière. Miracle ! Linux a pensé à nous, et pour se simplifier la tâche, on a plusieurs outils: Linuxconf via Panneau de configuration/gestion des services (qui stop ou arrete un deamon pour tous les runlevels), Runleveleditor (qui permet de choisir pour chaque runlevel les deamons à activer ou non), ntsysv, Ksys, etc...Bref on a l'embaras du choix ;-)

Un exemple de daemon : /etc/rc.d/init.d/crond


#! /bin/bash
#
# crond Start/Stop the cron clock daemon.
#
# chkconfig: 2345 90 60
# description: cron is a standard UNIX program that runs user-specified
# programs at periodic scheduled times. vixie cron adds a
# number of features to the basic UNIX cron, including better
# security and more powerful configuration options.
# processname: crond
# config: /etc/crontab
# pidfile: /var/run/crond.pid

# Source function library.
. /etc/init.d/functions

RETVAL=0

# See how we were called.
prog='crond'

start() {
gprintf 'Starting %s: ' ''
daemon crond
RETVAL=$?
echo
[ -eq 0 ] && touch /var/lock/subsys/crond
return
}

stop() {
gprintf 'Stopping %s: ' ''
killproc crond
RETVAL=$?
echo
[ -eq 0 ] && rm -f /var/lock/subsys/crond
return
}

rhstatus() {
status crond
}

restart() {
stop
start
}

reload() {
gprintf 'Reloading cron daemon configuration: '
killproc crond -HUP
retval=$?
echo
return
}

case '$1' in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
reload)
reload
;;
status)
rhstatus
;;
condrestart)
[ -f /var/lock/subsys/crond ] && restart || :
;;
*)
gprintf 'Usage: %s {start|stop|status|reload|restart|condrestart} ' '$0'
exit 1
esac

exit $?


Faire du ménage


A titre informatif, voici une liste (non exhaustive) de quelques daemons et de leurs fonctions.

Nom du service
Commentaires
apmd
Nécessaire uniquement pour les ordinateurs portables
xntpd
Network time protocol
portmap
Nécessaire si vous utilisez un service rpc, comme NIS ou NFS
sound
Configuration des sons (la carte peut fonctionne r très bien sans si le fichier /etc/modules.conf est bien conçu
netfs
C'est le client nfs, utilisé pour mounter des filesystems depuis un serveur nfs
rstatd , rusersd, rwhod, rwalld
Ne pas exécuter tous les services car ils fournissent trop d'informations aux utilisateurs à distance
bootparamd
Utilisé par les clients sans lecteur de disquette (vulnérable)
squid
Serveur proxy
yppasswdd
Nécessaire si vous êtes un serveur NIS (extrêmement vulnérable)
ypserv
Nécessaire si vous êtes un serveur NIS (extrêmement vulnérable)
dhcpd
Démarre le daemon du serveur dhcp
atd
Utilisé pour le service at, similaire à cron, mais n'est pas nécessaire
pcmcia
Parle de lui-même
snmpd
Daemon SNMP, peut donner à des utilisateurs distants des informations détaillées sur votre système
named
Serveur DNS
routed
RIP, n'exécutez cela que si vous en avez vraiment besoin
lpd
Services d'impression
mars-nwe
Fichier Netware et serveur d'impression
nfs
Utilisé pour le serveur NFS, lancez le que si vous en avez absolument besoin
amd
Daemon AutoMount, sert à mounter les filesystems distants
gated
Sert à lancer d'autres protocoles de routage comme OSPF
sendmail
Vous pourrez toujours envoyer/recevoir des emails par Netscape (ou autre) sans lui.
httpd
Serveur web Apache
ypbind
Nécessaire si vous êtes un client NIS
xfs
Xfont server (indispensable si vous êtes sous X).
innd
Serveur de news
arpwatch
Off par défaut. Rapport d'activité de datagrammes IP via mail
kudzu
Détection des periphériques. A réactiver à l'occasion
anacron
Reprise de jobs de la crontab après un crash
crond
Si vous ne savez pas ce qu'est une crontab, désactivez-le.
rawdevices
Partitions spécifique sous ORACLE ou autre SGBD
random
Améliore la génération aléatoire de nombres (peut être utile pour les joueurs)
rhnd
Redhat network
linuxconf
On peut utiliser linuxconf sans ce daemon (peut être est-ce utile pour l'administration à distance ?)
nfslock
Si vous n'êtes pas serveur NFS, désactivez-le
usb
Parle de lui-même
gpm
Fournit des fonctions pour le support de la souris en mode texte (utile pour midnight commander)


Bibliographie


1 - Site Esprit-Libre - Les Runlevels sous Linux et utilisation de Chkconfig - Par Salim - http://www.esprit-libre.net/configuration/level.php3

2 - Site Linux Electronique Aide - Gestion des daemons - Par Philippe - http://www.lea-linux.org