Formation administration Linux

Transcription

Formation administration Linux
Formation administration Linux

Marc-Olivier Buob
Linux : aperçu


Qu'est ce que GNU/Linux ?

Quelques distributions classiques

Pourquoi tant de distributions ?
A quoi ça ressemble ?

Le boot loader

Le chargement

Le mode texte

L'environnement graphique

Structure de GNU/Linux

Rôle du gestionnaire de paquets
Qu'est ce que GNU/Linux ?

Noyau + Système d'exploitation (OS)

Basé sur un noyau linux (1991 Linus Torvalds)

Projet GNU : système inspiré d'Unix (1986 Stallman)

Développé par des milliers d'informaticiens sur Internet

Inclue des milliers de logiciel dont ceux du projet GNU



emacs, gcc
Libre

D'exécuter le logiciel pour n'importe quel usage

D'étudier le fonctionnement d'un programme et de l'adapter (open source)

De redistribuer des copies

D'améliorer le programme et d'en faire profiter la communauté linux
Communautés (linux-fr, lea-linux...)
Quelques distributions classiques
Knoppix
Fedora
Pourquoi tant de distributions ?!

Plusieurs dizaines de distributions



Il y a quand même une base commune !
Choix techniques différents

Gestionnaire de paquets

Manière dont sont gérés les services (serveurs...)

Manière dont est configuré le système (réseau...)
Choix philosophiques différents

Paquets installés par défaut : libre vs non libre (licences)

Public différent : familiers de linux (debian) ou grand public (ubuntu)

Serveur (debian), PC bureautique (ubuntu), restauration (knoppix)
1) Le boot loader : grub / lilo
Les différents
noyaux linux
disponibles
Les autres
systèmes
(windows...)
2) Le chargement
3) Le mode texte (console)
Le prompt :
login@hostname:path$
~: home directory
Commande shell
pwd : le répertoire
courant
Le résultat
4) L'environnement graphique
Structure de GNU/Linux (1/2)


Un noyau qui prend en charge

Les périphériques (disque dur, clavier, carte réseau...)

Les systèmes de fichiers (ext4, fat32, ntfs...)

Les protocoles réseaux (TCP, UDP...)

… éventuellement étoffé par des modules chargés au boot
… sur lequel s'appuie le système

Système de base

Shell (ligne de commandes) : sh, bash, tcsh, ksh, zsh...

Librairies

Logiciels « en mode texte » : gcc, gdb, vim, aptitude, pwd, client/serveur ssh

Serveur graphique (serveur X)

Environnement graphique : KDE, gnome

Applications graphiques : konsole, kdevelop
Structure de GNU/Linux (2/2)

Chaque couche à un rôle bien défini et s'appuie sur les autres
Windows
pilotes
logiciels
GNU/Linux
Boot loader
Grub
Lilo
noyau1
noyau2
...
modules
Système
de
base
pwd
hal
udev
Serveur
graphiqu
e
Env.
graphiqu
e
App.
Graphique
s
Xorg
Gnome
KDE
kdevelop
konsole
adept
Librairies
QT, libstdc++, boost
Progr. mode texte
Shell, compilateurs,
gest. de paquets...
Le gestionnaire de paquets


Chaque logiciel / librairie / … est stocké dans un paquet

Contient les fichiers à installer

Précise de quels paquets il dépend

Décrit le contenu du paquet
Le gestionnaire de paquets

Installe, met à jour, ou supprime des paquets (et ses dépendances)

Corrige les fichiers de configurations

Garantit que les dépendances sont présentes, à jour et en un exemplaire

Diffère d'une distribution à l'autre

debian/ubuntu... : aptitude, apt-get, dpkg …

redhat/mandriva... : urpmi, yum, rpm...
Linux un peu plus dans le détail

Ce qui se passe-t'il au démarrage ?

L'arborescence linux (FHS)

Les devices

Les systèmes de fichiers, les partitions

Les TP (enfin !)
Que se passe-t'il au démarrage ?

On choisit quel kernel on lance et avec quelles options

éventuellement le runlevel peut être précisé

Le kernel est chargé

Les différents médias sont montés (/etc/fstab)


en particulier la partition sur lequel le système GNU/Linux est installé (/)

la swap
Le système démarre au runlevel par défaut (/etc/inittab)

A chaque runlevel, on lance des services spécifiques

0 arrêt

1 mode mono utilisateur

2-5 mode multi utilisateur (réseau, mode graphique etc...)

6 reboot
FHS (File Hierarchy Standard)

/ (root)

/boot : kernels, initrd...

/bin : binaires essentiels (mv, cp...)

/dev : devices (/dev/mouse, /dev/sda1...)

/etc : fichiers de configuration et scripts de démarrage

/etc/X11 : fichiers de configuration du serveur X

/home : home directories (répertoires utilisateurs)

/lib : librairies essentielles

/media : périphériques montés (CD, clé USB)

…

/root : home directory de root

/sbin : binaires systèmes essentiel (route, mount, …)

/tmp : fichiers temporaires

/usr : /usr/bin, /usr/sbin, /usr/include, /usr/lib

/var : variable files (/var/apt/cache/archives, /var/dpkg/lock...)
Les devices

Chaque périphérique est associé à un device dans /dev

/dev/sda (/dev/sdb, …) ; /dev/sda1 ; /dev/sda2

/dev/hda

/dev/mouse, /dev/dsp

/dev/cdrom /dev/cdrom0

/dev/null, /dev/stdin, /dev/stdout, /dev/stderr
Le partitionnement


Windows

1 partition pour le système (NTFS en général)

Éventuellement 1 partition de données (NTFS en général)
GNU/Linux

1 partition pour le système / (compter 10Gio en ext4 en général)

1 partition de swap (1 Gio en swap)

Éventuellement 1 partition de données séparée de /, /home, en général en ext4
Les systèmes de fichiers
NTFS / ntfs-3g
FAT32 / vfat
ext4
Windows
Lit
Écrit
Lit
Écrit
-
Linux
Lit
Lit
Lit
Écrit
Remarques
Fragmente
Droits
Journalisation
d'erreurs
Pas de droits
Fragmente très peu
Pas de lien symbolique Droits
Taille limite
Liens symboliques
Journalisation d'erreurs
Écrit
Écrit
Les partitions : sudo fdisk -l
Disk /dev/hda: 40.0 GB, 40020664320 bytes
255 heads, 63 sectors/track, 4865 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x802b81ca
Device Boot
/dev/hda1
*
/dev/hda2
/dev/hda3
swap / Solaris
Start
1
1276
4741
End
1275
4740
4865
Blocks
10241406
27832612+
1004062+
Id
7
83
82
System
HPFS/NTFS
Linux
Linux
Id
b
System
W95 FAT32
Disk /dev/hdb: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x4707841a
Device Boot
/dev/hdb1
*
/dev/hda1
Start
1
/dev/hda2
End
10011
Blocks
80413326
/dev/hda3
/dev/hdb1
Travaux pratiques

TP1 : installation

TP2 : prise en main

TP3 : visite guidée

TP4 : les droits

TP5 : les paquets sous Debian (et distributions dérivées)

TP6 : shell (bases)

TP7 : réseau

(TP8 : la programmation C/C++ sous linux)

(TP9 : STL)

TP10 : shell (algo)

TP11 : LVM

TP12 : apache
TP1 : installation

Télécharger l'iso d'ubuntu ou de kubuntu

http://www.ubuntu-fr.org/telechargement

Vérifier la somme md5

Graver le CD

(Réduire les partitions windows)

Installer ubuntu

Lancer ubuntu !
TP2 : prise en main
Windows
Gnome
KDE3
KDE4
firefox / IE
firefox / epiphany
firefox / konqueror
idem
thunderbird / outlook
thunderbird /
evolution
thunderbird / kmail
idem
pidgin, msn...
pidgin / empathy
kopete
idem
Lecteur multimédia /
vlc
rythmbox, totem, vlc
amarok, kaffeine, vlc, amarok2, gwenview
kmplayer
Commande MS DOS gterm
konsole
konsole
Explorateur
nautilus
konqueror / dolphin
konqueror / dolphin
Bloc notes
gedit
kwrite / kate
idem
Suite MS office /
openoffice
openoffice
koffice / openoffice
idem
Live update
synaptic
adept
idem
Adobe reader / fox it
reader
evince
kpdf
okular
La philosophie sous GNU/Linux

L'intelligence est le moins possible dans l'interface graphique



L'interface se base le plus possible sur des programmes en ligne
de commande

Scripter un programme

Rôle de l'UI (User Interface) : convivialité et ergonomie
La ligne de commande permet souvent d'aller plus loin et plus vite
que l'interface graphique


Exemple : kdevelop se base sur g++ et gdb
Voir TP shell
Voyons à présent le décor et l'envers du décor

UI vs ligne de commande
Où trouver l'information ?



La documentation embarquée

Les pages de man, apropos, l'autocomplétion

L'aide KDE / gnome

L'option --help
La documentation en ligne

http://doc.ubuntu-fr.org/

man + mot clé (commandes linux, fonctions C...)

Sites dédiés. Par exemple pour la STL : http://www.sgi.com/tech/stl/
Avec un moteur de recherche !

Listes, bug reports

Forum de la distribution, forums spécialisés
Les pages de man
NOM
Conventions linux :
echo - Afficher une ligne de texte.
SYNOPSIS
Commande en minuscules, [-p] : optionnel
--pouet : option longue
-p : option courte (chaînable)
echo [-neE] [message ...]
echo {--help,--version}
DESCRIPTION
Cette page de manuel documente la version GNU de echo.
La plupart des shells ont une commande intégrée ayant le même nom et
les mêmes fonctionnalités.
echo écrit chaque message sur la sortie standard, avec une espace
entre chacun d'eux, et un saut de ligne après le dernier.

Sections de man : man 1 write, man 2 write...

Le man indique le rôle d'une fonction et de ses options

Il précise les commandes ou fonctions connexes
TP3a : manipuler des fichiers



Le terminal, les tty

cd, ls, pwd, cp, mv, mkdir, rm, rmdir,ln

touch, file, cat
Chemins particuliers

Absolus : ~ /

Relatifs : . ..
Exercice

Créer /tmp/a/b/c, puis /tmp/a/b/c/d.txt, puis /tmp/a/b/c2/

Copier d.txt dans /tmp/a/b/c2/

Supprimer /tmp/a/b/c

Créer un lien vers /tmp/a/b/c2 dans le home directory

Créer e.txt dans /tmp/a/b/c2/. Que ce passe-t'il dans le home ?
TP3b : manipuler des périphériques

Regarder /etc/fstab




Expliquer pourquoi les devices ne sont pas référencés sous la forme /dev/sd*
Parenthèse

udev : peut renommer un device au moment ou celui-ci est branché

hal : notifie l'utilisateur qu'un périphérique est branché

usbdev, applet de périphérique KDE4, gvfs...
Commandes de base

df, du

dmesg

fdisk, cfdisk, mkfs, lspci, lsusb, dmidecode, hdparm

mount, umount

reboot, halt
Monter une clé dans /media/usb. La formater en fat32.
TP4 : les droits


La notion de droits sous GNU/Linux est fondamentale

Distribution des rôles : seul root peut administrer la machine

Sécurisation : programmes malveillants

Confidentialité : accès restreint à un répertoire ou à un device (ex: /dev/dsp)
rwxrwxrwx

Propriétaire, groupe, tout le monde

Read Write eXecute

root, sudo, su

Les profils et les groupes


/etc/passwd, /etc/shadow, /etc/group

groups, whoami, passwd, (yppasswd, ypcat)

addgroup/groupadd, adduser/useradd, userdel, usermod, sg

chown, chgrp
Les droits dans /etc/fstab
Le gestionnaire de paquet apt



Récupère la liste des mises à jours (update)

Interroge les dépôts configurés dans /etc/apt/sources.list

/var/lib/dpkg/lock

Corrige l'arbre de dépendance

http://packages.ubuntu.com
Télécharge les paquets

fichiers .deb

/var/cache/apt/archives
Déploie la mise à jour


dpkg -i, dpkg --purge
(Re)configure le paquet

dpkg-reconfigure, dpkg --configure -a
TP5 : installons des paquets

Avec adept ou synaptic : installer apt-file

Avec aptitude ou apt-get : installer nmap

aptitude en mode interactif

rose : supprimer; cyan : mettre à jour, vert : installer

update (u), upgrade (U), go (g), quitter (q)

installer (+) désinstaller (-) purger (_)

trouver (/), suivant (n), précédent (p)

deborphan, vider le cache

apt-file, apt-cache

Parenthèse : tar, ./configure, make && make install
Un peu de shell

Les flux

>, >> écrire dans un fichier

2>, 2>>, 2>>&1 rediriger stderr

< lire un fichier



cat < pouet.txt
Les pipes | : chaîne les commandes

wc -l pouet.txt

cat pouet.txt | wc -l
sort, cut, grep, xargs, uniq, wc
TP6 : shell

Compter dans /etc tous les fichiers finissant par « .conf »


Chercher dans /etc les fichiers dans lesquels figure la chaîne
/dev/sda


grep wc
Écrire l'équivalent de dpkg --get-selections en utilisant juste :


grep, (uniq, cut)
Compter dans /etc/fstab le nombre de ligne contenant /dev/sd*


find, (grep, wc)
dpkg -l, grep, cut
Supprimer les paquets fanés ; supprimer les paquets « rc »

deborphan xargs dpkg grep cut
Le réseau sous GNU/Linux

Administration


Commandes de base

/sbin/ifconfig, /sbin/iwconfig, /sbin/iwlist

dhclient

/sbin/route

ping

host, nslookup, /etc/resolv.conf, /etc/hosts

nmap
Configuration


/etc/network/interfaces, network manager
Transfert

lftp

ssh, scp, fish
TP7 : réseau

Vérifier le fingerprint du serveur ssh :
–
ssh-keygen -lf /etc/ssh/ssh_host_dsa_key.pub

Configurer un utilisateur mando (useradd, passwd)

Configurer une clé ssh :


http://prendreuncafe.com/blog/post/2005/08/29/262-installer-sa-cle-ssh-sur-un-serveur-distant

ssh-add
Écrire le script shell suivant

Lister les fichiers dans /home/mando situé sur la machine d'un stagiaire et
stocker le résultat dans un fichier à l'aide de ssh

Transférer ce fichier avec scp

Supprimer le fichier créé sur la machine distante
Les services


Les processus, les PID et les démons

ps

top

kill, killall
Visite dans /etc/init.d

/etc/init.d/ssh : le serveur ssh

/etc/init.d/gdm ou /etc/init.d/kdm : le gestionnaire de connexion graphique

Comment réparer son serveur X (tty, dpkg-reconfigure)

/etc/init.d/apache2

/etc/init.d/proftpd

/etc/init.d/mon_service [start|restart|stop...]

service mon_service [start|restart|stop...]
TP8a : Développer sous GNU/Linux

Sous debian les paquets de développement sont postfixés -dev

Installer gcc et g++

Installer make, vim

Installer gdb, valgrind

Installer une librairie (par exemple boost)

Installer un IDE (kdevelop, anjuta)

Quelques librairies célèbres

libstdc++, boost

QT, gtk, SDL

openGL

pcre
TP8b : Développer sous GNU/Linux




Écrire un tic tac toe

Le compiler à la main et l'exécuter

gcc -W -Wall -c module.c

gcc -W -Wall main.c module1.o module2.o main.c -o binaire
Écrire un makefile

Makefile automatique

parenthèse sur automake et autoconf
gdb

Erreur de segmentation : r binaire, bt

Débogage pas à pas : b n s p
valgrind
Les templates


Les templates

L'opérateur ::

typename
La STL

std::vector<T>

std::list<T>

std::set<T>

std::map<K,T>

Les flux : std::ifstream, std::ofstream, ...

Callback vs visiteurs, foncteurs

g++, gSTLfilt
TP9 : STL


Exercice 1

Lire un fichier tabulé nom prénom

Afficher tous les contacts

Rechercher les contacts dont le nom de famille et Durand

Afficher le nombre de contacts
Exercice 2


Lire dans un répertoire des fichiers de contact au format :
−
NOM
−
PRENOM
−
AGE
Écrire une interface en mode texte permettant de retrouver les personnes pour
un âge, un prénom, ou un nom donné
TP10 : shell (algo)

Créer un script shell qui demande le prénom et qui répond bonjour.
Exemple :
prénom ? Marc
Bonjour Marc !

Créer un script shell qui prend un paramètre un entier positif n. Écrire
un carré de n caractères sur n caractères. Exemple :
****
****
****
****
LVM (Logical Volume Manager)

Permet de s'abstraire des
partitions physiques




une donnée peut être stockée
à cheval sur plusieurs disques
/ partitions.
Physical volume
/dev/sda1
redimensionnement aisé
pas de limites sur le nombre
de partitions
/dev/sdb2
/dev/mda1
groupe de volume vg0
lvol1
lvol2
lvol3
toto
Terminologie

pv : physical volume

vg : volume group

lv : logical volume
Logical volume
Au final, on manipule /dev/vg0/toto (ou /dev/mapper/vg0-toto)
RAID logiciel
RAID1 établi sur
deux disques
RAID5 établi sur
quatre disques
A0
A1
A0
A0
A0
B0
C0
P0
A2
A3
A1
A1
A1
B1
P1
D1
A4
A5
A2
A2
A2
P2
C2
D2
A6
A7
A3
A3
P3
B3
C3
D3
RAID0 : volume agrégé par bandes
Pas de redondance :
- Pas de perte d'espace
- Très performant en lecture/écriture
- La perte d'un disque est fatale
RAID1 : disque en miroir
Redondance :
- Perte d'espace ((n-1)/n %)
- Supporte la perte de n-1 disques
RAID5 : volume agrégé par bandes
à parité répartie
Bits de parité :
- Performances en lecture
équivalentes au RAID0
- Performances dégradées en écriture
- Surcoût en place minimal (1/(n-1) %)
- Requiert au moins 3 disques
- Reconstruction longue
Exemple LVM + RAID
/dev/sda1
500Mo
/dev/sda2
500Mo
/dev/sda3
79Go
Disque a
80Go
/dev/sdb1
500Mo
/dev/sdb2
500Mo
/dev/sdb3
79Go
Disque b
80Go
/dev/sdc1
500Mo
/dev/sdc2
500Mo
/dev/sdc3
79Go
Disque c
80Go
swap
RAID1
/dev/md0
(1*500Mo)
RAID5
/dev/md1
(2*79Go)
LVM vg0
/dev/sd*1
Swap
1.5Go
/dev/md0
/boot
500Mo
ext3
/dev/vg0/racine
/
10Go
ext3
/dev/vg0/home
/home
148Go
ext3
Ce que
l'on
manipule
dans
/etc/fstab
TP11 LVM RAID

Faire une installation calquée sur cet exemple :


LVM



http://doc.ubuntu-fr.org/tutoriel/installation_raid_lvm
Physical volume : pvcreate, pvscan, pvdisplay
Volume group : vgcreate, vgremove, vgreduce, vgextend, vgrename, vgdisplay,
vgmknodes, vgchange

Logical volume : lvcreate, lvremove, lvreduce, lvextend, lvrename, lvdisplay...

ext2/3/4 : e2fsck, resize2fs
RAID

mdadm, mdstat

/etc/mdadm.conf
Apache2

Serveur http/https. Qui dit serveur dit service !

Apache2 : 2 multi processing module (mpm) :


prefork : permet d'utiliser des librairies non thread safe

worker : gestion des threads (recommandé).
Décomposé en modules apache :


pam, php5, perl, python, bw... : a2enmod, a2dismod
Configuration : relancer apache2 en cas de modification

essentiellement via /etc/apache2/apache2.conf

via des liens symboliques (voir /etc/apache2/[mods|sites]-[available|enabled])
−
Un serveur apache, plusieurs sites (les vhosts) : a2dissite, a2ensite
−
A priori rangés dans /var/www/htdocs/...
TP12 : apache


Installation d'apache et de ses modules

http://doc.ubuntu-fr.org/apache2#installation1

lancer apache, utiliser nmap etc...

visite des fichiers de configuration
Installer et configurer php5



créer une page /var/www/htdocs/mon_site/index.php qui écrit l'heure quand on
s'y connecte
créer une page admin.php dans /var/www/htdocs/mon_site/admin
Restreindre l'accès via htaccess au répertoire admin

http://www.infres.enst.fr/~danzart/frames/htaccess.html