26/02/16
Deux méthodes pour installer un logiciel :
à partir des sources (*.tar.gz, *.tgz, *.tar.bz2, etc.)
à partir d’un paquet (*.deb, *.rpm, etc.)
Les sources d’un logiciel sont généralement accompagnées des fichiers ‘configure’ et ‘Makefile.in’. Ces fichiers permettent de faciliter la compilation du logiciel. Les étapes à suivre sont alors les suivantes :
Décompresser l’archive avec les outils
tar et
gzip/bzip2 (par exemple : ‘tar xzf
Vérifier les dépendances et adapter le programme à l’environnement local (commande : ‘./configure’).
Compiler les sources (commande : ‘make’).
Copier les fichiers binaires dans leurs emplacements définitifs (commande : ‘make install’).
Dans certains cas il est possible que vous vous retrouviez avec une source donc les outils Makefile et/ou configure ne soit pas présent.
Comme vue dans les précédent TP et cours nous allons nous appuyer sur une source en .c car c’est le langage le plus proche de linux et unix.
/* commmentaire : bonjour isen source */
#include<stdio.h>
main()
{
printf("Bonjour l'isen");
}
Pour compiler ce dernier nous avons besoin d’un compilateur pour trasnformer le code source en fichier binnaire compréhensible par la machine
Le compilateur sous linux pour des sources en .c est : gcc
Le compilateur sous linux pour des sources en .cpp est : g++
gcc -Wall -o [NomDuFichierBinaire] -c [NomFichierSource.c]
L’option Wall permet d’afficher les message de type préventif
Avantages
Permet d’installer un logiciel qui n’est pas dans la distribution
Permet d’avoir un binaire optimisé pour votre architecture
Inconvénients
La compilation peut être très longue
Les dépendances difficiles à résoudre
Ressources associé et documentation MakeFile [TP associé][2]
Un paquet (package) est une archive générée avec ‘ar’ qui contient au minimum :
les fichiers qui seront installés sur le disque (binaire(s) précompilé(s) et fichier(s) de configuration).
des scripts exécuté à l’installation ou la désinstallation du paquet.
des informations de contrôle (intégrité, description, dépendances, etc.).
L’extension pour les paquets Debian est *.deb.
Chaque distribution a son système de “paquet” (par exemple RedHat et Suse utilisent RPM).
Debian utilise une convention de nommage pour les fichiers de paquet :
nompaquet_version-révisionDebian_plateforme.deb
* nompaquet : nom du paquet.
* version : version originale du logiciel du paquet.
* révisionDebian : numéro de révision du paquet.
Ce numéro est donné par le mainteneur du paquet.
* plateforme : la plateforme cible du paquet
(i386, amd64, alpha, etc).
* Si le paquet n'est pas dépendant d'une plateforme,
il est noté all.
Le programme de base pour manipuler un paquetage est ‘dpkg’ :
dpkg [option] [fichier.deb ...]
-i : installe les fichiers contenus dans le paquet
-r : désinstalle le paquet sans supprimer les
fichiers de conf
--purge : désinstalle le paquet et les fichiers de conf
-l : liste de tous les paquets installés
-L : affiche les fichiers contenus dans le paquet
-S : affiche le nom du paquet contenant le fichier
Avantages
Gain de temps, les binaires sont déjà compilés !
C’est le seul moyen d’installer un paquet qui n’est pas présent dans la distribution.
Inconvénients
Le système APT (Advanced Package Tool) permet une gestion intelligente des paquets (sources, versions, dépendances et conflits).
On définit les sources des paquets dans un fichier de configuration et ‘aptitude’ s’occupe d’aller chercher les paquets sur un CD ou un DVD, ou sur une source réseau.
# cat /etc/apt/sources.list
deb http://mirror.ovh.net/debian/ wheezy main contrib non-free
deb-src http://mirror.ovh.net/debian/ wheezy main contrib non-free
[...]
deb http://security.debian.org/ wheezy/updates main contrib non-free
Pour plus d’informations : ‘man sources.list’.
‘aptitude update’ : Met à jour la liste des paquets disponibles.
‘aptitude install p1 p2’ : Installe les paquets p1 et p2 et tous les paquets dont ils dépendent.
‘aptitude remove p1’ : Désinstalle le paquet paquet1 sans effacer ses fichiers de configuration.
‘aptitude purge p2’ : Idem mais en effaçant ses fichiers de configuration.
‘aptitude clean’ : Efface du disque dur les paquets téléchargés.
‘aptitude search str’ : Recherche un paquet dont le nom ou la description contient la chaîne “str”.
‘aptitude show p3’ : Affiche les caractéristiques et la description du paquet p3.
Fichiers .deb (paquets binaires)
Moyen puissant et pratique pour distribuer des logiciels aux utilisateurs
Un des deux formats de paquets les plus courants avec RPM
Universel :
* 30 000 paquets binaires dans Debian
* la plupart des logiciels libres sont empaquetés dans Debian !
* 12 portages (architectures), dont 2 non Linux (Hurd et kFreeBSD)
* Utilisé aussi par 120 distributions dérivées de Debian
$ ar tv wget_1 .12 -2.1 _i386 . deb
rw -r --r -- 0/0 4 Sep 5 15:43 2010 debian - binary
rw -r --r -- 0/0 2403 Sep 5 15:43 2010 control . tar . gz
rw -r --r -- 0/0 751613 Sep 5 15:43 2010 data . tar . gz
Un paquet Debian est constitué de deux parties notables : un dossier contenant le nom du paquet, ses dépendances, etc. d’un côté, et les fichiers du programme de l’autre. L’arborescence d’un paquet Debian se présente sous cette forme :
dossier_du_paquet/
DEBIAN/
control
preinst
postinst
prerm
postrm
usr/
bin/
votre_programme
Le fichier contôle contient les informations nécessaires à son installation. Il doit comporter les indications ci-dessous :
Package : le nom de votre paquet. (utilisé par apt)
Version : 1.0 (ex)
Section : Quel est le type de paquet (admin,mail,contrib,devel,X11 … )
Priority : l’importance de votre paquet pour le système
Architecture : all,x86,amd64,sparc …
Depends : les nom des paquets nécessaire au bon fonctionnement
Maintainer : le nom et l’email de celui qui s’occupe de la création du .deb.
Description : la description de votre paquet.
Homepage : l’adresse du site internet
Ex :
Package: mtnisen
Version: 1.0_alpha
Section: admin
Priority: optional
Architecture: all
Depends: bash,figlet
Maintainer: Doc Brown
Description: Ne sert à rien a part à faire jolie
Homepage: http://isen.gastier.net
Vous pouvez, si c’est nécessaire (c’est facultatif), ajouter des scripts qui seront exécutés avant/après l’installation/la suppression du paquet. Ils auront pour nom :
preinst : exécuté avant l’installation
postinst : exécuté après l’installation
prerm : exécuté avant la suppression
postrm : exécuté après la suppression
N’oubliez pas les droits 755 sur les fichiers
Une fois l’arborescance terminée il suffit de construie le paquet avec l’outil dpkg-deb :
sudo dpkg-deb --build nom_du_paquet
Une fois la construction terminée vous avez un paquet du nom de votre répertoire et pour l’installer il faut utiliser :
sudo dpkg -i nom_du_paquet.deb
Linux étant un système multitâche, plusieurs programmes peuvent tourner en même temps.
Lorsque un programme est lancé, un processus est créé. Il s’agit d’une entité active qui possède des caractéristiques (priorité, registres, compteur ordinal, mémoire, etc.). Certaines caractéristiques varient dans le temps.
Le système identifie les processus à l’aide d’un identifiant (PID, Process Identification).
La gestion des processus sous Linux est dite hiérarchisée. Un processus peut lui même créer un autre processus (fork + exec). Il devient donc le processus parent (PPID, Parent Process ID)
$ ps -ef
UID PID PPID C STIME TTY TIME COMMAND
root 1 0 0 Dec 6 ? 1:02 init
jean 319 300 0 10:30:30 ? 0:02 vim
olivier 321 319 0 10:30:34 ttyp1 0:02 csh
olivier 324 321 0 10:32:12 ttyp1 0:00 ps
Autres commandes: ‘pstree’, ‘top’, etc.
Les commandes nice et renice permettent de positionner ou de modifier la priorité d’un processus. L’intervalle des valeurs possibles va de -20 (priorité la plus favorable) à 19 (la moins favorable).
# nice -n -20 find / -type f -name "*.sh"
$ renice 20 7643
La commande kill permet d’envoyer un signal à un processus. kill, killall, pgrep/pkill, xkill
kill 456
kill -9 -1
pkill firefox
Les processus interactifs sont lancés et gérés à partir du terminal de l’utilisateur. Ils peuvent fonctionner en deux modes :
Mode foreground (le processus monopolise le terminal jusqu’à sa terminaison)
Mode background (le processus travaille en parallèle avec le terminal)
Mode foreground:
$ sleep 10
[...]
Mode background:
$ sleep 10 &
[1] 3384
$
La séquence de touches “ctrl-z” et les commandes jobs, bg, fg, permettent de faire passer un processus d’un mode à l’autre.