book2p(3)

152
Administration de systèmes UNIX Formation ARS 2011 – 2012 Partie 4 Thierry Besançon Formation Permanente de l’Université Pierre et Marie Curie c T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 1 / 277

Transcript of book2p(3)

Page 1: book2p(3)

Administration de systèmes UNIXFormation ARS 2011 – 2012

Partie 4Thierry Besançon

Formation Permanente de l’UniversitéPierre et Marie Curie

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 1 / 277

Page 2: book2p(3)

Chapitre 1

Courrier électronique

Explications sur le pourquoi de ce chapitreVoir aussi le cours de Lionel DAVID.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 2 / 277

1 Courrier électronique 1.1 Composantes du système du courrier électroniqueChapitre 1 • Courrier électronique§1.1 • Composantes du système du courrier électronique

C’est un système complexe dont la complexité croît sans cesse.

Il a de fortes interactions avec Internet, avec les Intranets.

De nombreuses implémentations sont disponibles (X400, SMTP, MicrosoftExchange, etc.).

Le système est modulaire, son bon fonctionnement reposant sur desdescriptions publiquement disponibles des détails des différents protocoles.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 3 / 277

Page 3: book2p(3)

1 Courrier électronique 1.1 Composantes du système du courrier électronique

Réseau

MTA

MDA

MUA

Boîteaux lettres

Courriers à destinationd’un utilisateur localDestinataire du

courrier non local

Transmission au facteur local

Distribution personnalisée

Emission d’un courrier

Consultation des courriers

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 4 / 277

1 Courrier électronique 1.1 Composantes du système du courrier électronique

Terminologie :

MTA (Mail Transfer Agent — agent de routage)En fonction de l’adresse de destination, il passe le message à uncertain agent de transport.Plusieurs MTA existent : Sendmail, Postfix

MDA (Mail Delivery Agent — agent de transport)Il reçoit un message, une destination et se charge de l’acheminement.Il est spécialisé dans un type d’acheminement.(synonyme mailer)

MUA (Mail User Agent — agent utilisateur)Il sert à la composition des messages qu’il envoie à l’agent de routage.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 5 / 277

Page 4: book2p(3)

1 Courrier électronique 1.1 Composantes du système du courrier électronique

• Normes utilisées :

RFC 822, description du format des messagesRFC 821, description du protocole SMTP (Simple Mail TransferProtocol)RFC 974, description de l’interaction d’un MTA avec le DNSRFC 1035RFC 1123

Attention : documents techniques hermétiques à la lecture compliquéeCf « ftp://ftp.lip6.fr/pub/rfc/rfc/ »

• Les problèmes de mail sont à adresser à « postmaster ».Les MTA font l’hypothèse que cette adresse existe.Cette adresse doit être lue par un humain.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 6 / 277

1 Courrier électronique 1.2 SendmailChapitre 1 • Courrier électronique§1.2 • Sendmail

SENDMAIL :Conçu en 1982, par Eric Allman (<[email protected]>)Site officiel « http://www.sendmail.org/ »Principal logiciel pour router les courriers des systèmes UNIX répandusSouple, puissantSait s’adapter aux nouveaux standards (aspects multimedia)Syntaxe difficileOutils annexes simplifiant la configuration : par exemple kit jussieu« ftp://ftp.jussieu.fr/jussieu/sendmail/kit/kit-5.3.4.tar.Z »« ftp://ftp.jussieu.fr/jussieu/sendmail/kit/doc-kit-5.3.4.ps.Z »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 7 / 277

Page 5: book2p(3)

1 Courrier électronique 1.3 Sendmail plugins : MILTERChapitre 1 • Courrier électronique§1.3 • Sendmail plugins : MILTER

SENDMAIL s’occupe de router les mails.Donc :

hors de question de compliquer le code par un antivirushors de question de compliquer le code par un antispamhors de question de compliquer le code par. . .

Bref, hors de question de compliquer le code par n’importe quoi qui n’apas de rapport avec le routage de mails.

Par contre, possibilité d’interfacer SENDMAIL à des fonctionnalitésexternalisées grâce à l’API « MILTER » fourni par les développeurs deSENDMAIL.

Cf « http://www.milter.org/ » pour de la documentation ou desplugins.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 8 / 277

1 Courrier électronique 1.3 Sendmail plugins : MILTER

MILTER = communication entre SENDMAIL et des programmes externesvia des sockets UNIX.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 9 / 277

Page 6: book2p(3)

1 Courrier électronique 1.4 PostfixChapitre 1 • Courrier électronique§1.4 • Postfix

« http://www.postfix.org »Futur successeur de SENDMAIL certainement dans quelques années.Une réflexion sur SENDMAIL a conduit à écrire postfix sous une formenon monolithique. Plusieurs démons vont s’occuper chacun d’une tâchebien précise et n’utilisent pour cela que le minimum de privilèges systèmelimitant le risque de piratage :

local "sendmail" maildrop

Internet

RBL

pickup

smtpd

access

cleanup

rewrite

canonical virtual

incoming active

deferred

qmgr

resolve

transport

relocated

smtp

pipe

local

aliases .forward

mailbox

Internet

UUCP, etc.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 10 / 277

1 Courrier électronique 1.4 Postfix

Le fichier de configuration est une succession d’affectation de valeurs à desvariables.

Approche radicalement différente de celle de SENDMAIL plus proched’une programmation de la configuration.Approche de postfix identique à celle du kit jussieu pour SENDMAIL (ouvice versa).

Possibilité de modifier on the fly le comportement de postfix.Par exemple à l’établissement d’une connexion PPP ou lors de sa cloture,on peut depuis le script PPP dire à postfix d’échanger les mailsmaintenant avec l’extérieur.

Avec SENDMAIL, il faudrait arrêter SENDMAIL, mettre en place unenouvelle configuration « sendmail.cf », relancer SENDMAIL, ensemblede manœuvres lourdes.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 11 / 277

Page 7: book2p(3)

1 Courrier électronique 1.5 Postfix pluginsChapitre 1 • Courrier électronique§1.5 • Postfix plugins

Il existe un mécanisme MILTER dans POSTFIX.

Utilisation de sockets UNIX aussi.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 12 / 277

1 Courrier électronique 1.6 Boites aux lettres : foldersChapitre 1 • Courrier électronique§1.6 • Boites aux lettres : folders

Deux formats classiques de folders sous UNIX :

folder MBOX folder MAILDIR

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 13 / 277

Page 8: book2p(3)

1 Courrier électronique 1.7 Boites aux lettres : folder MBOXChapitre 1 • Courrier électronique§1.7 • Boites aux lettres : folder MBOX

Un fichier stocke tous les mails reçus du MDA et manipulés par les MUA :

Classiquement « /var/mail/$USERNAME ».

⇒ Problèmes de verrouillage du fichier lors des lectures/écritures, demanipulation de grosses boites aux lettres, etc.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 14 / 277

1 Courrier électronique 1.7 Boites aux lettres : folder MBOX

Structure d’un mail :

From [email protected] Mon Nov 19 21:27:41 2001Return-Path: <[email protected]>

Received: from localhost (localhost [127.0.0.1])

by apollinaire.paris4.sorbonne.fr (8.11.6/8.11.6) with ESMTP id fAJKRfY03543

for <Thierry.Besancon@localhost>; Mon, 19 Nov 2001 21:27:41 +0100 (MET)

Received: from sorbon.sorbonne.fr [195.220.107.3]

by localhost with POP3 (fetchmail-5.9.4)

for Thierry.Besancon@localhost (single-drop); Mon, 19 Nov 2001 21:27:41+0100 (MET)

Received: from neodata.com ([206.27.153.2])

by sorbon.sorbonne.fr (8.11.0/jtpda-5.3.3) with ESMTP id fAJKQnO06486

for <[email protected]>; Mon, 19 Nov 2001 21:26:50+0100 (MET)

Received: from bennett (bennett.neo.comm.eds.com [192.85.230.134])

by neodata.com (8.10.2+Sun/8.9.1) with ESMTP id fAJKRBK17328;

Mon, 19 Nov 2001 13:27:11 -0700 (MST)

Received: by bennett (8.8.8+Sun/SMI-SVR4)

id NAA14733; Mon, 19 Nov 2001 13:26:57 -0700 (MST)

Date: Mon, 19 Nov 2001 13:26:57 -0700 (MST)

From: [email protected]

X-Gnus-Mail-Source: directory:~/Mail/incoming/

Message-Id: <200111192026.NAA14733@bennett>

To: [email protected]

Subject: NEW ORDER

Suite sur transparent suivant

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 15 / 277

Page 9: book2p(3)

1 Courrier électronique 1.7 Boites aux lettres : folder MBOX

Structure d’un mail (suite) :

X-AntiVirus: scanned for viruses by AMaViS 0.2.1 (http://amavis.org/)

X-UIDL: Tjg!!<n*"!6i+"!J@O!!

Status: RO

X-Content-Length: 299

SYS ADMIN appreciates your inquiry and welcomes the opportunity to serve

your needs.

En résumé :une ligne commencant par « From » (attention à l’espace suivant leFrom)autres entêtesune ligne blanche marquant la fin des entêtes et le début du corps dumailcorps du mailune ligne blanche après le corps du mail

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 16 / 277

1 Courrier électronique 1.7 Boites aux lettres : folder MBOX

Structure d’un mail (suite) :

Attention : si le corps du message contient une ligne commencant par« From », la ligne est transformée en « >From ». Pourquoi ?

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 17 / 277

Page 10: book2p(3)

1 Courrier électronique 1.7 Boites aux lettres : folder MBOX

Le format folder MBOX est manipulable par plusieurs MUA.Le MUA le plus simple pour cela est la commande « Mail » (ou « mail »ou « mailx »).% Mail"/var/mail/besancon": 4 messages 4 new

>N 1 [email protected] Thu Aug 24 01:45 32/1175 Output from "cron" comman

N 2 [email protected] Fri Aug 25 01:45 32/1175 Output from "cron" comman

N 3 [email protected] Sat Aug 26 01:45 32/1175 Output from "cron" comman

N 4 [email protected] Mon Aug 28 00:27 44/1624 Account details for besan

---> 4

From [email protected] Mon Aug 28 00:27:00 2006

Date: Mon, 28 Aug 2006 00:24:59 +0200 (MEST)

To: [email protected]

Subject: Account details for besancon at drupal

MIME-Version: 1.0

Content-transfer-encoding: 8Bit

From: [email protected]

besancon,

Thank you for registering at drupal. You may now log in to http://drupal.imj.local/informatique/?q=user using the following username and password:

username: besancon

password: urM87U9eFic©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 18 / 277

1 Courrier électronique 1.8 Boites aux lettres : folder MAILDIRChapitre 1 • Courrier électronique§1.8 • Boites aux lettres : folder MAILDIR

Un fichier stocke un seul mail.

⇒ Plus de problème de verrouillage du fichier lors des lectures/écritures.

« http://www.courier-mta.org/mbox-vs-maildir/ »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 19 / 277

Page 11: book2p(3)

1 Courrier électronique 1.8 Boites aux lettres : folder MAILDIR

En résumé :une ligne commencant par « From » (attention à l’espace suivant leFrom)autres entêtesune ligne blanche marquant la fin des entêtes et le début du corps dumailcorps du mail

Attention :si le corps du message contient une ligne commencant par « From »,la ligne n’est pas transformée. Pourquoi ?pas de ligne blanche après le corps du mail. Pourquoi ?

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 20 / 277

1 Courrier électronique 1.8 Boites aux lettres : folder MAILDIR

Comment stocker les mails au format MAILDIR ?

⇒ La structure d’un folder MAILDIR appelé « FOLDER » impliqueplusieurs répertoires :

« FOLDER/new »« FOLDER/cur » (cur pour current)« FOLDER/tmp »

Le MDA place un nouveau mail d’abord par le répertoire « FOLDER/tmp »temporairement le temps de calculer un nom de fichier unique.

Le nouveau mail est ensuite placé dans le répertoire « FOLDER/new » parle MDA.

La lecture d’un mail entraine son déplacement de « FOLDER/new » vers« FOLDER/cur » avec ajout d’un suffixe indiquant les opérations faites parle MUA sur le mail.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 21 / 277

Page 12: book2p(3)

1 Courrier électronique 1.8 Boites aux lettres : folder MAILDIR

Le nom du fichier stockant un mail doit être unique et en général a leformat « time.pid.host ». Voir :

« http://www.qmail.org/man/man5/maildir.html »« http://cr.yp.to/proto/maildir.html »

Par exemple :1185708514.M707068P58898V0700FF01I06974E18_1.mail..example.com,S=989 :2,S avec :

1185708514 = temps depuis l’origine en secondes ;ctime(1185708514) = Sun Jul 29 13:28:34 2007

M707068 = compteur en microsecondes de « gettimeofday() »P58898 = process ID du MDAV0700FF01 = UNIX device numberI06974E18 = UNIX inode numbermail.example.com = nom de la machine UNIX du MDAS=989 = taille du mail en octets

1185188613.000035.mbox:2,RS ; ici c’est le résultat d’uneconversion par le programme MB2MD

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 22 / 277

1 Courrier électronique 1.8 Boites aux lettres : folder MAILDIR

Après manipulation par le MUA, on ajoute un suffixe « :2,flags » avecflag :

flag « P » (Passed) = mail resent/forwarded/bouncedflag « R » (Replied) = mail réponduflag « S » (Seen) = mail luflag « T » (Trashed) = mail mis à la poubelleflag « D » (Draft) = mail brouillonflag « F » (Flagged) = mail taggé pour usage ultérieur

Par exemple :1185708514.M707068P58898V0700FF01I06974E18_1.mail.

example.com,S=989 :2,S

1185188613.000035.mbox :2,RS

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 23 / 277

Page 13: book2p(3)

1 Courrier électronique 1.8 Boites aux lettres : folder MAILDIR

Possibilité de folders MAILDIR imbriqués. Par exemple :

ce qui donnera sous UNIX lesrépertoires« .system.sa-blacklist/ »,« .system.sa-false-negative/ »,« .system.sa-false-positive/ »,« .system.sa-whitelist/ »(avec les classiques sous-répertoires« cur », « new » et « tmp »)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 24 / 277

1 Courrier électronique 1.8 Boites aux lettres : folder MAILDIR

On peut convertir un folder MBOX vers un folder MAILDIR :« http://batleth.sapeinti-sat.org/projects/mb2md.html »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 25 / 277

Page 14: book2p(3)

1 Courrier électronique 1.9 Protocole de consultation : POPChapitre 1 • Courrier électronique§1.9 • Protocole de consultation : POP

Serveur de

mails

POP

ClientPOP

Mail folders

SMTP

download des mails

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 26 / 277

1 Courrier électronique 1.9 Protocole de consultation : POP

POP ≡ Post Office Protocol ; RFC 1939

Port POP : 110

Port POP + SSL : 995

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 27 / 277

Page 15: book2p(3)

1 Courrier électronique 1.10 Protocole de consultation : IMAPChapitre 1 • Courrier électronique§1.10 • Protocole de consultation : IMAP

Serveur de

mails

IMAP

ClientIMAP

Mail folders

SMTP

download des entetes des mails

download des corps des mails sur demande

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 28 / 277

1 Courrier électronique 1.10 Protocole de consultation : IMAP

RFC 2060 (protocole IMAP4rev1), RFC 2086 (ACL, extension de IMAP4),RFC 2087 (quota, extension de IMAP4)

Port IMAP : 143

Port IMAP + SSL : 993

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 29 / 277

Page 16: book2p(3)

1 Courrier électronique 1.11 Comparaison de session POP et IMAP xxxChapitre 1 • Courrier électronique§1.11 • Comparaison de session POP et IMAP xxx

Comparatif de session POP et IMAP : (extrait de« http://cri.univ-lyon2.fr/doc/ImapMaisCEstTresSimple.html »)

% telnet pop.example.com 110+OK POP3 server ready

USER pdupont

+OK Name is a valid mailbox

PASS XXXXXXXX

+OK Maildrop locked and ready

LIST

+OK scan listing follows

1 169

2 811

3 813

% telnet imap.example.com 143

* OK IMAP4 server ready

. LOGIN pdupont XXXXXXXX

. OK User logged in

. SELECT INBOX

* FLAGS (Answered Flagged Draft Deleted Seen)

* OK [PERMANENTFLAGS (Answered Flagged Draft Deleted Seen *)]

* 3 EXISTS

* 3 RECENT

* OK [UNSEEN 1]

* OK [UIDVALIDITY 901006906]

. OK [READ-WRITE] Completed

. UID FETCH 1:* RFC822.SIZE

* 1 FETCH (UID 1425 RFC822.SIZE 169)

* 2 FETCH (UID 1426 RFC822.SIZE 811)

* 3 FETCH (UID 1427 RFC822.SIZE 813)

. OK Completed

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 30 / 277

1 Courrier électronique 1.11 Comparaison de session POP et IMAP xxx

RETR 1

+OK Message follows

Return-Path: <[email protected]>

From: [email protected]

To: [email protected]

Subject: essai chien chapeau

essai chien chapeau

.

DELE 1

+OK message deleted

QUIT

+OK

Connection closed by foreign host.

. UID FETCH 1425 BODY[]

* 1 FETCH (FLAGS (Recent Seen) UID 1425 BODY[] 169

Return-Path: <[email protected]>

From: [email protected]

To: [email protected]

Subject: essai chien chapeau

essai chien chapeau

. OK Completed

. UID STORE 1425 +FLAGS (Deleted)

* 1 FETCH (FLAGS (Recent Deleted Seen) UID 1425)

. OK Completed

. EXPUNGE

* 1 EXPUNGE

* 2 EXISTS

* 2 RECENT

. OK Completed

. LOGOUT

* BYE LOGOUT received

. OK Completed

Connection closed by foreign host.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 31 / 277

Page 17: book2p(3)

1 Courrier électronique 1.12 AntivirusChapitre 1 • Courrier électronique§1.12 • Antivirus

Plusieurs antivirus sont disponibles sous UNIX :

CLAMAV (gratuit) ; « http://www.clamav.org »SOPHOS (commercial) ; « http://www.sophos.com »nombreux autres logiciels commerciaux

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 32 / 277

1 Courrier électronique 1.13 AntispamChapitre 1 • Courrier électronique§1.13 • Antispam

Plusieurs antispam sont disponibles sous UNIX :

BOGOFILTER (gratuit) ;« http://bogofilter.sourceforge.net »DSPAM (gratuit) ; « http://dspam.nuclearelephant.com »SPAMASSASSIN (gratuit) ; « http://www.spamassassin.org »AMAVIS (gratuit) ; « http://www.amavis.org »nombreux autres logiciels commerciaux

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 33 / 277

Page 18: book2p(3)

1 Courrier électronique 1.13 Antispam

� Humour :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 34 / 277

1 Courrier électronique 1.14 Annexe 1Chapitre 1 • Courrier électronique§1.14 • Annexe 1

Ci joint dans la version imprimée de ce cours, un document sur laconception d’une messagerie.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 35 / 277

Page 19: book2p(3)

The following paper was originally published in theProceedings of the USENIX Symposium on Internet Technologies and Systems

Monterey, California, December 1997

For more information about USENIX Association contact:

1. Phone: 510 528-86492. FAX: 510 548-57383. Email: [email protected]. WWW URL: http://www.usenix.org/

A Highly Scalable Electronic Mail Service Using Open Systems

Nick Christenson, Tim Bosserman, David BeckemeyerEarthLink Network, Inc.

Page 20: book2p(3)

A Highly Scalable Electronic Mail Service Using Open Systems

Nick Christenson, Tim Bosserman, David Beckemeyer

EarthLink Network, Inc.

Information Technology

Pasadena, CA 91107

[email protected], [email protected], [email protected]

Abstract

Email is one of the most important of the Inter-

net services. As a very large, fast growing, Internet

Service Provider, EarthLink requires a robust and

powerful email architecture that will support rapid

expansion. This paper describes such an architec-

ture, its motivations, its future, and the di�culties

in implementing a service on this scale.

1 Introduction

Electronic mail has a special standing in the ranksof Internet services. Of the direct services an ISPprovides to its subscribers, email is certainly one ofthe most important. As a consequence, it requiresspecial attention to keep email running as well asexpected. Additionally, there are several issues thatare far more problematic for email than for otherservices. Email typically requires more resourcesthan any other service. This is because the stor-age needs, the processing power, and the bandwidthrequirements are extreme. Furthermore, there areproblems regarding authentication and provisioningthat are often not required for other services.Despite its criticality, little work has been made

available publicly on robust, large scale electronicmail systems. The few references we have found,such as [Grubb96], have neither addressed what weconsider to be the key problems, nor have they beenable to scale to the capacity that we require. Thisisn't too surprising. Providing email service for hun-dreds of thousands or millions of users is a problemnobody had to solve before the advent of the na-tional or international Internet or on line serviceprovider. Until now, none of these organizationshave chosen to come forward and publish their ser-vice architecture.Additionally, the architecting of very high per-

formance truly distributed services is still in its in-fancy. The issues of distributed storage and load

balancing have few, if any, available solutions thatare both robust enough and perform satisfactorilyfor our purposes.

The astute reader will certainly notice that thearchitecture we describe here bears a great dealof similarity to what we have already described asour news service architecture [Christ97a]. This, ofcourse, is no accident. We've found a general set ofprinciples which we have adapted to meet the needsof both services, and many of the important issuesdiscussed in that article are equally applicable here.

In the design of any of our service architectures,we have several requirements that must be met be-fore we would consider deployment. For email, the�rst of these is message integrity. It is absolutelyessential that messages, once they are accepted byour system, be delivered to their proper destinationintact. Second, the system must be robust. That is,in as much as is possible, the system should survive

component outages gracefully. Additionally, the en-tire system design should minimize the number ofsingle points of failure. Third, the system must bescalable. When EarthLink began deployment of thecurrent architecture, in January of 1996, we hadabout 25; 000 subscribers. In September of 1997,EarthLink provided email service for over 350; 000subscribers with a 99.9+% service uptime record. Infact, we expect the current system to scale to wellover 1; 000; 000 users without signi�cant alterationof the architecture as presented here. Moreover, oneshould be able to accomplish the scaling of any ser-vice with a minimum of outage time, preferably withnone. In all cases the performance of the servicemust be at least adequate, and the service must bemaintainable. Problems must be easily recogniz-able, and it should be obvious, whenever possible,what is the cause of the outage. Further, its solu-tion should be easy to implement and, in the mean-time, the impact of the outage should be small andlocally con�ned. Finally, we would like the servicearchitecture to be cost{e�ective, not just in terms of

Page 21: book2p(3)

equipment acquisition, but, more critically, in termsof maintenance.

2 Architecture Description

There are several logically distinct componentswhich make up the operation of EarthLink's emailservice. The �rst, which we call the \front end" ofour email system (front de�ned as the portion whichreceives data from the Internet) are the systems thatreceive mail for \[email protected]". Thesemachines are also called the SMTP machines. Thesecond component is the POP service, the serversto which subscribers connect to retrieve their mail.These same computers also send the mail originat-ing from our subscribers to the Internet. (At thetime of this writing, EarthLink has not deployedan IMAP service.) The third component is the �leservers, which do nothing except store the mail-boxes, mail queues, and auxiliary �les associatedwith the email service. The fourth component isthe authentication database which holds the user-name/password information, information on wheremailboxes are stored, and data on auxiliary emailservices to which that account may have subscribed.This architecture is demonstrated graphically inFigure 1 included at the end of this paper. All theservers we use in this architecture, except for the�le servers, are running some avor of Unix.

With the exception of our �le servers and the au-thentication database servers, our architecture callsfor all of the servers involved in our email service (aswell as all our other services) to be dataless. That is,each server should store on local disk its own oper-ating system, service software, swap space, tempo-rary �le storage for nonessential data|and nothingelse. This allows us to add or subtract servers fromservice with which the Internet or our subscribersinteract without a�ecting the data stored.

2.1 Front End

Mail Exchange (MX) DNS records for earth-link.net and mail.earthlink.net point, with highpreference, to a series of servers in Round Robin.These servers all run a recent version of the freelydistributable stock sendmail [Allman86] as theirSMTP MTA (Simple Mail Transfer Protocol, MailTransfer Agent; see [Postel82] for details). Writingand maintaining an SMTP MTA is a di�cult andexpensive task. Therefore, we have geared our ar-chitecture to allow us to use sendmail without anysource modi�cation. Since sendmail typically un-

dergoes several signi�cant revisions during each cal-endar year, it's important that we be able to usesendmail in a form as close to the stock distributionas possible, since updating a modi�ed sendmail ev-ery few months to re ect local modi�cations wouldbe about as time consuming as maintaining our ownMTA.

An electronic mail message to be delivered to\[email protected]" follows the DNS MXrecords for earthlink.net. We maintain severalmachines with high precedence MX records usingRound Robin DNS to distribute the load. If any ofthese machines become overloaded or otherwise un-available, we maintain a single machine with a lowerprecedence MX record to act as a spillway. Thisserver does not deliver email directly, but it doeshold it for forwarding to the �rst available front endserver. Our backup MX machine could easily becon�gured to deliver email itself, but we have cho-sen not to do this to protect against the possibilityof transient errors in the mailbox locking process.This way, if the locking scheme becomes overloaded,we have a server that can still accept mail on behalfof the \earthlink.net" domain. It is our intention tominimize at all times the amount of email queuedaround the Internet for delivery to EarthLink.

The key to using the stock sendmail in our ar-chitecture is to insure that the sendmail programitself attempts to do no authentication or lookup ofuser names. This is actually quite simple to do. Onemerely must remove the \w" ag in the entry for thelocal delivery agent in the sendmail.cf �le. Evenif one runs a standard authentication scheme, we'vefound that this modi�cation provides a considerableperformance boost if one has a large, unhashed (i.e.linear lookup) passwd �le, and the service is notcompletely inundated with email intended for non{existent users.

The portion of the mail reception service thatwe did modify heavily was the mail delivery agent.This is the program that receives the mail from theMTA and actually appends it to the user's mail-box. On most systems, this program is /bin/mail.The sendmail distribution provides a delivery agentcalled mail.local which we have rewritten to useour authentication methods and understand how westore mailboxes. This is a small program whichhasn't changed substantially in years, so it is easy tomaintain; hence, it is a better place to add knowl-edge about our email architecture than a movingtarget like sendmail.

In addition to authentication and mailbox loca-tion, the mail delivery agent also knows about mail-box quotas which we impose on our subscribers. If

Page 22: book2p(3)

the current mailbox size is over the quota for thatuser, the default being 10 MB, then the message isbounced back to the MTA with reason, \User npc,mailbox full." In addition to preventing resourceabuse on the part of subscribers, this also helps mit-igate possible damaging e�ects of mail bombing bymalicious people on the Internet. We believe that a10 MB quota is quite generous, especially consider-ing over a 28.8 modem using very high quality linespeeds and no network bottlenecks, one could ex-pect to take over an hour to download the contentsof a 10 MB mailbox.

2.2 POP Daemon

What we call the \back end" of our architectureis a set of machines using Round Robin DNS whichact as the POP servers. They are the targets of theA records, but not the MX records, for earthlink.netand mail.earthlink.net. These are the servers towhich the subscribers connect to retrieve and sendemail. If these machines receive email bound [email protected] (from our subscribers, Internetmachines compliant with the SMTP protocol mustfollow the MX records and send this message to afront end machine), these messages are redirectedto our SMTP machines at the front end. The POPservers do no local delivery. They do, however, de-liver directly to the Internet. We've debated thenotion of having the POP servers forward mail onto yet another set of servers for Internet delivery,but have thus far elected against it. The bene�tto doing this would be further compartmentaliza-tion of physical server function by logical operation,which we consider to be inherently good. We'd alsoreduce the likelihood of POP session slowdowns inthe case that a subscriber oods the server with aninordinate amount of mail to be delivered. If thePOP and Internet delivery functions were separate,the POP server would expend very few resources tohand this mail o� to the delivery servers, whereasit would otherwise be required to try to send andpossibly queue this mail itself. On the other hand,we don't observe this being a signi�cant problem.Additionally, if we had a separate Internet deliveryservice within our mail architecture, we'd have todeploy an additional machine to maintain our com-plete N+1 redundancy to every component, at ad-ditional cost. Someday, we probably will make sucha separation, but it does not seem to be justi�ed forthe present volume.

Like the delivery agent, the POP daemon mustalso know about both our modi�ed authenticationsystem and mailbox locations. The base implemen-

tation we started with was Qualcomm's POP dae-mon version 2.2, although like mail.local, we havemodi�ed it substantially. In the near future, we planto completely rewrite the POP daemon tuned for ef-�ciency in our environment implementing many ofthe lessons learned from developments in Web serversoftware.

2.3 Mailbox Storage

On a conventional Unix platform, mailboxes aretypically stored in /var/mail or /var/spool/mail.The passwd �le, used to store valid user namesfor incoming mail and to authenticate POP con-nections, is usually located in /etc, and mailwhich cannot be delivered immediately is stored in/var/spool/mqueue. This is where our mail archi-tecture started out as well, but we made some sig-ni�cant changes as we went along.

As with Usenet news, we use the Network Appli-ance [Hitz95] family of servers as our network �lestorage for essentially the same reasons: Very goodperformance, high reliability of the systems, easymaintenance, and the advantages provided by theWAFL �lesystem [Hitz94].

Due to performance considerations, the spool issplit across several �le servers and each is mountedon the SMTP and POP servers as /var/mail#,where # is the number of the mount point, in singledigits as of this writing.

Currently, we're using version 2 of the NFS pro-tocol. While version 3 does give some signi�cantperformance bene�ts, we give it all back because ofthe implementation of the READDIRPLUS proce-dure [Callag95] which prefetches attribute informa-tion on all �les in that directory, whether we needthem or not. Since we store a large number of �lesin the same directory and are only interested in op-erating on one of them at a time, this is signi�cantoverhead that we don't need. On balance, for ouremail system, the performance di�erence betweenversions 2 and 3 of the NFS protocol is so small asto defy precise measurement. We typically changeit whenever we suspect the current version mightbe responsible for some strange behavior we notice.The NFS version has never turned out to be theproblem, so we usually leave that version in placeuntil we feel the need to change it again in order toeliminate it as a factor in some other problem weface.

Even though the Network Appliance's WAFL�lesystem provides excellent protection against theperformance penalties one normally encounterswhen there are very large numbers of �les in a single

Page 23: book2p(3)

directory using most other �le systems, there arestill signi�cant advantages to breaking them up fur-ther. Since we have more �les and require morestorage and throughput than we can realize withany one �le server, we need to split the spool up andprovide some mechanism to locate mailboxes withinthis tree. So, we create a balanced hash for eachmailbox over 319 possible subdirectories (the primebase of the hash) and divide these directories overthe number of �le servers that compose the spool.Thus, a path to a mailbox may look something like/var/mail2/00118/npc. The POP daemon and thelocal delivery agent are the only parts of the mailsystem that need to know about these locations.

Once we have this mechanism for multiple loca-tions of mailboxes in place, we are able to extendthis to allow us to dynamically balance the mail-boxes or expand capacity. In addition to the no-tion of the \proper" location of each mailbox, bothmail.local and popper (the POP daemon) un-derstand the notion of the \old" mailbox location.If the system receives email for a given mailbox,mail.local checks the \proper" location for themailbox, and if it �nds it there, appends the messagein the normal manner. If the mailbox isn't there, itchecks the \old" location for the mailbox. If it isfound there, mail.local locks the mailbox in bothlocations, moves it to the new location and appendsthe message in the normal manner. If the mailboxexists in neither place, it creates a new mailbox inthe \proper" location. The POP daemon also knowsthis information. It looks in the \proper" location�rst, and if it is not there, it consults the \old" lo-cation. In either case, it operates on the mailboxentirely in the place where it was found.

Only mail.local actually moves the mailbox.We felt that it would be better to con�ne the mail-box moving logic in the simpler of the two programs.Because the mailbox can only be in one of the twoplaces and the delivery agent and POP daemon usea common locking system (described below), there'sno danger of confusion as to the mailbox location.

The data on what constitutes the \old" and\proper" mailbox locations are kept in the authen-tication database (explained below), and this infor-mation is returned to the client process when au-thentication information is accessed.

This feature has a major bene�t for our mail sys-tem. This allows us to move large numbers of mail-boxes around without interrupting service. For ex-ample, if we have three �le servers containing mail-boxes and they are either getting to be full or run-ning out of bandwidth capacity, we can create a newmount point, /var/mail4 for instance, mount a new

�le server on the mail servers, create the hash valuesubdirectories that will reside there, and then slide anew mail.local and popper in place (POP daemon�rst!) that know which of the subdirectories fromeach of the �rst three �le servers will now be housedon the fourth. Then, as mailboxes receive new mail,they are moved onto the new �le server. After a fewhours, days, or weeks (depending on how much ofa hurry we're in), we can start a second process ofindividually locking and moving mailboxes indepen-dent of any other activity on the systems. Thus, wehave now expanded our email system without anydowntime.

2.4 Authentication

One thing we quickly realized is that the stan-dard Unix authentication systems were wholly in-adequate for a service of this magnitude. The �rstproblem one runs into is that depending on the spe-ci�c operating system, one is typically con�ned tobetween 30; 000 and 65; 535 distinct user identities.Fortunately, since none of these users have shell ac-cess to these servers (or any access other than POPaccess), we can have a single UID own every one ofthese mailboxes as long as the POP daemon is care-ful not to grant access to other mailboxes withoutre{authenticating.

While this postpones several problems, it isn'tsu�cient by itself to scale as far as we'd like.First, several Unix operating systems behave quitestrangely, not to mention inappropriately, when thepasswd �le exceeds 60; 000 lines. This isn't com-pletely unexpected|after all how many OS ven-dor test suites are likely to include these cases|but some of these problems manifest themselves agreat distance from the passwd �le and, thus, canbe di�cult to track. Just as important, when thepasswd �le gets this large, the linear lookups ofindividual user names become expensive and timeconsuming. Therefore, the �rst thing we did wasmake a hashed passwd{like �le using the BerkeleyNEWDB scheme [Seltze91] that both popper andmail.local would consult for authentication. Thiseliminated the need to carry a large passwd �le andgreatly increased performance of the system. A sep-arate machine working in a tight loop continuallyrebuilt the hashed passwd �le as the text �le wascontinually being modi�ed by the the new accountprovisioning system.

The next logical extension of this was to storethe passwd �le in a SQL database and replacegetpwnam() calls with SQL equivalents. This pro-vides another quantum improvement. First, this

Page 24: book2p(3)

eliminates the necessity of continually rebuilding thehash �le from the at �le, with savings in proces-sor and delay times for user account modi�cation.Second, this database may be used by other appli-cations including RADIUS [Rigney97], Usenet news,etc.... Third, it's a logical place to store additionalimportant information about that account. For ex-ample, when a username lookup by mail.local

or a username/password pair is authenticated forpopper, the \old" and \proper" mailbox locationsare returned to the application rather than havingto be stored in at �les on the system or hardcodedinto the respective binary. We also intend to usethis database as a repository for a great deal moreinformation, for example storing variable mailboxquotas and lists of domains from whom to refusemail on a user by user basis, etc....

Obviously, this database is critical to not onlythe operation of our electronic mail system, but toother components of our overall service architectureas well. If the authentication service isn't operating,electronic mail comes to a halt. Because of this, wehave taken special pains to make certain that thisapplication is always on line by using a clusteredsystem with failover using a dual attached storageunit for the database to meet our high availabil-ity requirements. If it becomes necessary, we canstill fail over to the old common hashed passwd �lewith only a marginal loss of functionality and per-formance.

2.5 File Locking

In any distributed system, concurrency issues areof paramount importance. In our email system,these manifest themselves in terms of �le locking.It is so important, we have given the topic its ownsection in this paper to discuss the issues which theimplementor faces.

Yesterday

For data stored on local disk, flock() su�ces toward against two processes attempting to processthe same message or modify the same mailbox atthe same time. Since all of our persistent data isaccessed over NFS, this presents some signi�cantproblems for us.

When using flock() on an NFS mounted �lesystem, these calls get translated to requests viarpc.lockd. Now, lockd isn't the most robust �lelocking mechanism ever devised. It isn't advisableto bank on lockd working entirely as advertised. Inaddition to this, many systems have lockd tables too

small for our purposes. We can routinely requirethousands of outstanding lock requests on a givenNFS mounted �lesystem at any one time, and fewcommercial solutions have lock tables large enoughand/or lock table lookup algorithms fast enough tomeet our needs.

Today

Therefore, wherever possible, we use the �le sys-tem to perform locking. This consists of requestingan open() system call to create a new (lock) �lewith the O EXCL ag of a �le of a predeterminedname, typically mailboxname.lock, in a given loca-tion, which would typically be the mail spool. Inour case, in order to keep the spool directory sizesdown as much as possible and performance as highas possible, we store these �les on their own shared�le system.

This may set o� alarms in the heads of those fa-miliar with NFS. One might well ask, \How can yoube certain that this is atomic on an NFS system?How do other clients know that one has locked agiven �le?" Recent implementations of NFS clientsoftware ignores the attribute cache on open() callswhich attempt to exclusively create a new �le. Note,however, that other open() calls do not ignore theattribute cache. This means that if a process's ex-clusive open() on the lock �le succeeds, that processhas successfully locked that �le. This allows us touse �le locking on the mailboxes, as long as we aremortally certain that all NFS clients operate in ex-

actly the same way. One can �nd both NFS v2 andv3 implementations that behave this way. It cannotbe overstated how important it is to be certain thatall NFS clients behave in this manner.

It is always possible that the process which cre-ates the lock will die without having the opportunityto remove it. For this reason, all processes creatinglocks must touch the lock �les to update their at-tributes periodically so that if these processes die,after a certain amount of time other processes willknow that an existing lock is no longer valid and canbe eliminated. Therefore, we need a function that,again, will bypass the cache and be guaranteed toimmediately update the attributes on the lock �le.

Let us suppose that one process on one NFS clienthas created a lock on the mailbox \npc". Let us alsosuppose that a process on a di�erent NFS client thentried to lock that mailbox immediately afterwardsand discovered the existing lock, as it must. It'salways possible that the �rst process has somehowdied, so it's important to understand how long thesecond process must wait before it can assume that

Page 25: book2p(3)

the �rst process no longer exists, at which time itcan delete the lock �le, lock the �le itself, and per-form operations on that mailbox. Again, let us sup-pose that all the NFS clients are set to refresh theirmailbox lock every �ve minutes, and that the NFSattribute cache is set on each client to be three min-utes.

One scenario is for a process on client1 to suc-cessfully lock the mailbox and then have client2 im-mediately attempt to lock the same mailbox andfail. At this point, the information on the lockedmailbox is saved for three minutes, the durationof the attribute cache, after which client2 gets thesame attribute information as before, because �veminutes has not elapsed, therefore client1 has notyet refreshed the lock. At the �ve minute mark,client1 refreshes the lock �le using utime(), sinceit also bypasses the NFS cache and operates syn-chronously on the lock �le, but client2 has not no-ticed because it will be looking at the attributes inits cache until the six minute mark, when its cacheexpires, and it can now gets the updated informa-tion. This is represented graphically in Figure 2.

minutes0 1 2 3 4 5 6

client2 gets same lock infoclient1 refreshes lockclient 2 notices new lock

client1 locks mboxclient2 attempts to get lockAttribute cache on client2 expires

Figure 2

The worst case scenario is presented in Figure 3.Here we have client1 creating a lock on a mailboxand then immediately dying. Just before the lockis scheduled to be updated, client2 attempts to lockthe mailbox and fails. Client2 cannot learn that thelock hasn't been updated until just before the eightminute mark, at which point it has license to removethe lock �le and proceed with its actions.

Unfortunately, this potentially gives us a windowof eight minutes in which real users may not be ableto access their mailboxes under pathological condi-tions. For example, if the subscriber interrupts aPOP session at the wrong moment, the POP dae-mon on the mail server may exit without cleaningup its lock �le. Further, we explain below why wemust delay even longer than this to allow for other

concerns.

If the �le servers ever get saturated with requests,the server can seem to \disappear" to client pro-cesses for many seconds or even minutes. This canhappen as part of normal subscriber growth if onedoes not upgrade the capacity to handle load be-fore it is needed. In these circumstances, problemsusually manifest themselves as a sudden change inperformance response from acceptable to unaccept-able over a very small change in load. The math-ematicians would call this a catastrophic response,where \...gradually changing forces produce suddene�ects." [Zeeman77] If a �le server's load is near,but not at the critical point, it can be pushed overthe edge by a sudden change in the pro�le of nor-mal email use or by a small number of malicious ornegligent individuals.

0 1 2 3 4 5 6 7 8

client2 attempts to get locklock expiresclient2 learns that lock expires

client1 creates lock

Figure 3minutes

client1 dies

It is self{evident that one wants to provide enoughsurplus performance to prevent small changes frombreaking the performance envelope, and certainlywe strive for this, yet it is not always possible. Asan example, consider a two week period in August1996 where the total volume of email EarthLink wascalled upon to handle doubled for reasons that arestill not fully understood. While not routine, theseevents are not uncommon in the ISP business and,because the subscriber has a much greater ability toimpact service, represent a fundamental di�erencebetween providing Internet services and, for exam-ple, providing electric power or dial tone service.

In any case, when one enters into one of thesecatastrophic regimes, one often encounters patho-logic behavior on the part of any or all of the com-ponents of the service. Client requests can cometoo fast for the server(s) to handle; consequentlythe RPC packets can get dropped before they areprocessed. This can result in retransmissions bymultiple clients, and on top of an already saturatedsystem, the problem is compounded.

Page 26: book2p(3)

Let us suppose that we have a saturated sys-tem where the client base demand is 105% of theserver's capacity to deliver it over a given periodof time, not counting the load put on the serverbecause of retransmissions. Each of these clientswill now retransmit their requests after a numberof tenths of seconds speci�ed by the timeo valuein the /etc/vfstab or equivalent �le. If this re-quest does not receive a response, the client waitsfor twice timeo and retransmits again. This pro-cess is repeated until the value of the retry vari-able is reached. If retry is exceeded, then the clientprints a message, typically \NFS server raid not re-sponding, still trying," and continues to retry atthe maximum retry value. This maximum value willnever exceed 30 seconds [Stern91]. Under these con-ditions, we cannot achieve a \steady state" condi-tion, the amount of tra�c grows, quite dramatically,without bound until something breaks.

If this condition were to persist for 30 minutes, atthis time as much as 25% of the requests sent to theservers may be over 5 minutes old. Note that thisrepresents a true pathological condition, it's highlyunlikely that a client machine would either be ableto maintain this load given the lack of responsive-ness of the server, or that the client load would beconstant, but we haven't yet developed our math-ematical models su�ciently to account for all theknown variables, so we're being conservative. Giventhese assumptions, if we are adding 2; 000; 000 newemail messages to our spool in a day, a half an hourof operation at this level of saturation with a locktimeout of only 5 minutes, we must expect thereto be on the order of a thousand mailbox corrup-tions due to multiple processes proceeding to mod-ify mailboxes on the assumption that they have ex-clusive access to it. This is because they have en-countered expired lock �les which are actually valid,the owning process just hasn't been able to get theserver to ack it's update of the lock �le. The math-ematics behind this analysis and an in depth ex-amination of the rami�cations of this will be fullyexplored in [Christ97b]. Therefore, it is importantthat our locking mechanism allow for the possibilitythat a client process may not be able to get theirrequest through to the server for several minutes af-ter the normal locking timeout window has closed.We use a lock timeout value of 15 minutes to allowfor this possibility.

With regard to locking, one area of concern wehave is with sendmail. Current versions want to useflock() to lock �les in mail queues. On our emailsystem, the depth of these queues is extreme andthe number of processes that can concurrently be

trying to drain them can be as high as several hun-dred per machine, requiring a large number of out-standing lock requests at any one time, often toomany for either the client lock daemon or the �leserver to accommodate. Because of this, we havetwo choices. Either we can put the mail queueson locally attached disk, violating our stateless ar-chitecture principle and losing the bene�ts of theWAFL �le system in handling directories with largenumbers of �les, or we can modify sendmail to usea di�erent locking mechanism, thus violating ourintention to use an unmodi�ed SMTP MTA. For-tunately, the current sendmail implementation hasvery modular locking code which can be easily re-placed without fundamentally altering the distribu-tion. However, we'd like any folks working on send-mail to consider allowing a preference for variouslocking mechanisms to be #de�ne'd in the sourcecode.

Tomorrow

While the mailbox locking mechanism we've justdescribed has worked satisfactorily, it is not with-out its drawbacks. One drawback is the fact thatlocks may be orphaned, and other clients must waitup to 15 minutes before being able to assume theyare no longer valid. Another drawback is that thesynchronous NFS operations we employ greatly in-crease the load placed on the NFS servers whichhold the lock �les.

Therefore, we are in the process of designing and

building our next generation lock management sys-tem. In accordance with our design parameters,what we really want is a distributed lock systemwith no single points of failure. It has to maintainstate in the case of a crash or hardware failure, andit must be able to handle at least several hundredtransactions per second.

We tried using a SQL database for this purpose,but we were not satis�ed with the performance.A program like a large commercial database suchas this requires too much overhead to be e�cientin this manner. However, we can learn from thedatabase style locking mechanisms and, essentially,strip away those portions of the database systemwhich we don't need to create our own lean andmean network lock server.

We plan to deploy two machines clustered to-gether around a shared RAID system to act as ourlock service. If the primary machine were to su�ersome form of failure, the other would take over witha target transition time of less than �ve seconds. Weintend to deploy the same hardware con�guration

Page 27: book2p(3)

that we use for our authentication database. Allthe lock requests get written to the �le system us-ing unbu�ered writes before they are acknowledgedso that in case of machine failure there is no loss ofstate.

The clients open up a socket to the lock daemonon the lock server and request a lock for a givenmailbox, which the daemon either accepts or denies.If it is denied, the client waits for some pseudo{random time and tries again. We project that thissystem will scale well into the millions of mailboxesfor a single set of lock managers. To get this schemeto scale inde�nitely, it's a simple matter of havingthe clients query di�erent lock servers for di�erentranges of mailbox names.

3 Operation

One of our primary design goals was to deploya system that would be cost{e�ective to maintain.This service accomplishes those goals in severalways.

First, by centralizing authentication in a singlesystem, we reduce the problems associated withboth maintaining multiple parallel authenticationsystems and insuring that they are synchronized.This is a considerable overhead savings.

Second, one of the key criteria in selecting theNetwork Appliance as our storage system was itsease of maintenance. Because its operating systemhas been stripped down, eliminating functionalitynot necessary to its operation as a �le server, theserver is less likely to fail and, if it does fail, it iseasier to discover and remedy the problem due tothe greatly reduced number of degrees of freedompresented by the operating system.

Third, because the POP servers themselves aredataless, they require much less maintenance thantheir stateful equivalents. The only �les which dif-fer between these computers are those that containtheir host names and/or IP addresses. This meansthat new servers can be brought online in a veryshort time via cloning an active server. Just as sig-ni�cant, it means that since these machines containno important persistent data (aside from the operat-ing system), there are few reasons for system admin-istration to log on to the system and make changes.This helps eliminate one of the arch{nemeses of dis-tributed computing|\state drift," the tendency forsystems intended to be identical or nearly identicalto become more and more di�erent over time.

At EarthLink, one of the things we do most of-ten is to grow an existing service to accommodate

more subscribers. The e�orts we have made to al-low this to happen easily and with a minimum ofinterruption contribute greatly to lowering the costof operation. We've already explained how we usethe concept of \old" and \proper" mailbox locationsto scale both �le system storage and bandwidth byadding additional �le servers easily and with nodowntime. The network implementation we're us-ing at this time is switched FDDI, which also scaleswell. As we've already mentioned the POP serversare dataless and, therefore, should lack of these re-sources present a problem, in very little time, andagain, with a minimum of e�ort, we can clone anddeploy a new system. This results in our email ser-vice being extremely scalable on short notice.

We attempt to maintain N +1 redundancy in ev-ery possible component of the system. Our datastorage systems use RAID to protect against sin-gle disk failure. We keep extra data storage serversnear{line in case of failure for rapid exchange withthe downed system. We keep extra FDDI cards inthe switch and an extra switch chassis nearby incase these components fail. We also keep one moreSMTP and POP server online than loading metricsindicate is necessary. Thus, if one fails, we can pullit out of Round Robin DNS without impacting ser-vice, aside from the problems caused by the initialcomponent failure. Additionally, we get the bene�tof not having to repair the failed server immediately.Instead, we can take time to ensure that everythingelse is in proper running order, and then we can di-agnose and repair the failed server at our leisure.On top of all this, we use a monitoring system that ags problems with each component of the servicein our Network Operations Center, which is sta�ed24x7x365 and contacts appropriate on{site person-nel.

4 Shortcomings

We consider the architecture presented above tohave considerable merit as one of the better solu-tions available for satisfying high volume mail ser-vice. It is, of course, not without its limitations,some of which we mention here. One of the �rstproblems is with sendmail as an MTA. When EricAllman developed the original sendmail, it was notenvisioned that it would still be in service over �f-teen years later and be pushed, rewritten, and ex-tended to the extent that it has. It is a testament tothe skill of its creator and maintainer that it has per-formed as well as it has for this long. Nonetheless,if one were to code an SMTP MTA today, we doubt

Page 28: book2p(3)

anyone would want it to take the form of sendmail.Despite this, we don't see an MTA that would pro-vide enough signi�cant advantages that we wouldwant to migrate to it in the immediate future. Ofcourse, these statements about sendmail could havebeen uttered �ve years ago without alteration. Thebottom line is that we would prefer to run an SMTPMTA that is tighter, more e�cient, and has fewerpotential places for security bugs to creep in, butthere isn't one available that meets our needs atthis time.

Probably the biggest problem with our architec-ture is that due to the nature of NFS, when we addadditional �le servers to address our performanceand storage needs, we end up adding multiple singlepoints of failure. Despite the fact that the NetworkAppliance �le servers have been quite stable and re-cover quickly from problems, we feel that this is noteasily scalable forever. Therefore, it is our opinionthat at some point we need to abandon NFS as ourdistributed systems protocol for something better.

Our ideal protocol would be very high perfor-mance; be completely distributed and, thus, highlyscalable, local failures would cause local, not globaloutages, and would allow for redundant storage thateliminates local single points of failure. Unfortu-nately, given the current state of distributed com-puting, it's hard enough to �nd a system that ad-equately addresses one of these points, and noth-ing seems close to providing good solutions for allof them. Consequently, we are currently in theprocess of designing our own distributed system toaccommodate our next generation architecture re-quirements.

5 Current Data

Today, the system described here is in opera-tion as EarthLink's core electronic mail system.At the time of this writing, this system supportsabout 460,000 mailboxes for over 350,000 users.The system processes, incoming and outgoing, over13,000,000 email messages each week. This meanswe average about 20 incoming messages each sec-ond. We average about 20 new POP connec-tions/second and hold open about 600 concurrentactive POP daemons at peak time, with spikes toover 1000 concurrent outstanding POP connectionsat any one time.

6 Conclusion

In conclusion, we believe we have architecteda mechanism to extend a standard, freely dis-tributable, open systems email system to handlefrom hundreds of thousands to millions of distinctemail accounts with a minimum of modi�cation tothe underlying components. We also believe thatthis system meets, to the best of our ability to de-liver, the required criteria we set out in the Intro-duction.

7 Acknowledgments

The authors of this paper are by no means theonly folks who have put a lot of e�ort into the de-velopment and operation of this system. We wish toespecially thank Jay Cai and Max Chern who did asigni�cant portion of the software development onthis system. Thanks to Steve Dougherty and MarkWagnon, who provided helpful comments, and toJim Larson, who provided valuable input on the pre-cise mathematics of packet retransmissions. Also, agreat deal of thanks go to Trent Baker and his sys-tem administration team who maintain all our ser-vices: Gianni Carlo Contardo, Jason Savoy, MartyGreer, Alwin Sun, Horst Simon, Jewel Clark, TomHsieh, Lori Bar�eld, David Van Sandt, Larry Wang,Hong Zhang, and Kenny Chen. We also wish to ex-tend a special thank{you to Scott Holstad who mademany excellent editorial improvements to early ver-sions of this paper.

References

[Albitz97] P. Albitz, C Liu, DNS and BIND,

2nd Ed., O'Reilly & Associates, Inc., Se-bastopol, CA, 1997, p. 212.

[Allman86] E. Allman, Sendmail: An InternetworkMail Router, BSD UNIX Documentation Set,University of California, Berkeley, CA, 1986.

[Callag95] B. Callaghan, B. Pawlowski, P. Stau{bach, RFC 1813, NFS Version 3 Protocol Spec-

i�cation, June 1995.

[Christ97a] N. Christenson, D. Beckemeyer,T. Baker, A Scalable News Architecture ona Single Spool, ;login: vol. 22 (1997), no. 3,pp. 41{45.

[Christ97b] N. Christenson, J. Larson, Work inprogress.

Page 29: book2p(3)

[Grubb96] M. Grubb, How to Get There FromHere: Scaling the Enterprise{Wide MailInfrastructure, Proceedings of the Tenth

USENIX Systems Administration Conference

(LISA '96), Chicago, IL, 1996, pp. 131{138.

[Hitz94] D. Hitz, J. Lau, M. Malcom, File Sys-tem Design for an NFS File Server Appliance,Proceedings of the 1994 Winter USENIX, SanFrancisco, CA, 1994, pp. 235{246.

[Hitz95] D. Hitz, An NFS File Server Appli-ance, http://www.netapp.com/technology/

level3/3001.html.

[Postel82] J. Postel, RFC 821, Simple Mail Trans-

fer Protocol, August 1982.

[Rigney97] C. Rigney, A. Rubens, W. Simpson,S. Willens, RFC 2058, Remote Authentication

Dial In User Service (RADIUS), January 1997.

[Seltze91] M. Seltzer, O. Yigit, A New HashingPackage for UNIX, Proceedings of the 1991

Winter USENIX, Dallas, TX, 1991.

[Stern91] H. Stern, Managing NFS and NIS,O'Reilly & Associates, Inc., Sebastopol, CA,1991, chapter 12.

[Zeeman77] E. Zeeman, Catastrophe Theory, Se-

lected Papers 1972-1977, Addison{Wesley Pub-lishing Company, Inc., Reading, MA, 1977,p. ix.

Page 30: book2p(3)

Auth

FileServers

FileServers

Figure 1

INTERNET

SUBSCRIBERS

SMTP

POP & SMTP

NFS

NFSSMTP

SMTP Servers

POP Servers

ServiceAuthentication

Auth

Page 31: book2p(3)

Chapitre 2

SAMBA

Explications sur le pourquoi de ce chapitre

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 36 / 277

2 SAMBA 2.1 IntroductionChapitre 2 • SAMBA§2.1 • Introduction

Voir cours de Franck RUPIN.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 37 / 277

Page 32: book2p(3)

Chapitre 3

Systèmes d’impression

Explications sur le pourquoi de ce chapitreL’impression est un sujet difficile :

Configurations d’impression innombrables.Les gens s’énervent facilement lorsque cela imprime mal.

On n’abordera que des notions et les tendances.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 38 / 277

3 Systèmes d’impression 3.1 Langage d’impression PostscriptChapitre 3 • Systèmes d’impression§3.1 • Langage d’impression Postscript

Langage créé par la société Adobe (« http://www.adobe.com »)

Dessin vectoriel.

Le nom d’un fichier Postscript se finit en général par le suffixe « .ps » ou« .eps ».

Système de coordonnées au sein d’une page PostscriptFormat américain (dit letter) : 612 x 795Format européen (dit a4) : 595 x 842

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 39 / 277

Page 33: book2p(3)

3 Systèmes d’impression 3.1 Langage d’impression Postscript

Langage de description de page, fonctionnant avec une stack (pile).

Par exemple 1 + 6− 5 peut se coder :forme 1 6 5 sub add

forme 1 6 add 5 sub

forme 1 6 5 neg add add

etc.ce qui donne avec la première forme :

1

6

5

1

2

sub

1

add

Un document à imprimer = un programme à exécuter

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 40 / 277

3 Systèmes d’impression 3.1 Langage d’impression Postscript

Le contenu d’un fichier Postscript commence par les 2 premiers caractères« %! ».

Les fichiers Postscript destinés à être inclus dans d’autres documents sontdits Encapsulated Postscript (ou EPSF) et commencent par une ligne dugenre :

%!PS-Adobe-2.0 EPSF-1.2

suivie d’autres lignes de commentaires actifs :%%Creator:Adobe Illustrator(TM) 1.0b2-

%%Title:golfer art+

%%CreationDate:1/6/87 9:32 AM

%%DocumentFonts:Helvetica-Bold

%%BoundingBox:7 31 577 726

dont « %%BoundingBox: » qui détermine les dimensions du dessin.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 41 / 277

Page 34: book2p(3)

3 Systèmes d’impression 3.1 Langage d’impression Postscript

Par exemple, le code suivant :

%!

/Times-Roman findfont 40 scalefont setfont

60 500 moveto

(TEST DE L’IMPRIMANTE) show

175 300 moveto

(T.BESANCON) show

showpage

donne, une fois imprimé, la pagesuivante :

TEST DE L’IMPRIMANTE

T.BESANCON

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 42 / 277

3 Systèmes d’impression 3.1 Langage d’impression Postscript

Les dessins en Postscript peuvent être complexes :

Poids de ce dessin vectoriel (par tête) : 78606 octets, ce qui est faible parrapport à du bitmap

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 43 / 277

Page 35: book2p(3)

3 Systèmes d’impression 3.1 Langage d’impression Postscript

Un document à imprimer = un programme à exécuter

La partie logicielle qui exécute le fichier Postscript est un interpréteurPostscript.

L’interpréteur Postscript le plus connu est ghostscript.

Cf « http://www.ghostscript.com »

Initialement disponible sur UNIX, il est maintenant disponible sur Windowset sur Macintosh sous une forme avec interface graphique :

« ftp://ftp.lip6.fr/pub/gnu/ghostview/ » (GUI UNIX)« http://wwwthep.physik.uni-mainz.de/~plass/gv/ » (GUIpour UNIX)« http://www.cs.wisc.edu/~ghost/gsview/ » (GUI pourWindows)« http://www.cs.wisc.edu/~ghost/macos/ » (GUI pourMacintosh)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 44 / 277

3 Systèmes d’impression 3.1 Langage d’impression Postscript

L’intérêt de ghostscript est :visualiser des fichiers Postscript comme les documentationsconvertir des fichiers Postscript en d’autres formats :

FAXPDFPCL pour imprimante PCetc.

Mais la principale utilisation de ghostscript doit être certainementmaintenant sur Linux où il sert à convertir du Postscript en langage PCLqui est compris par les imprimantes PC.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 45 / 277

Page 36: book2p(3)

3 Systèmes d’impression 3.1 Langage d’impression Postscript

Quelques utilisations intéressantes :

calculer la BoundingBox d’une figure Postscript :gs -sDEVICE=bbox fichier.ps

afficher au format A4 :gs -sPAPERSIZE=a4 fichier.ps

convertir du Postscript en PDF au format A4 :ps2pdf13 -sPAPERSIZE=a4 fichier.ps

(ps2pdf13 est un shell script construit autour de gs avec les bonnesoptions)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 46 / 277

3 Systèmes d’impression 3.1 Langage d’impression Postscript

Comment imprimer un fichier texte sur une imprimante Postscript ?

Réponse : après l’avoir converti en Postscript

Quelques outils :outil a2ps, cf « http://www.gnu.org/software/a2ps/ »outil gnu enscript, cf« http://www.gnu.org/software/enscript/ »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 47 / 277

Page 37: book2p(3)

3 Systèmes d’impression 3.1 Langage d’impression Postscript

Comment imprimer plusieurs pages côte à côte (format dit N up) ?

Réponse : convertir en fichier Postscript « normal » le fichier original puisregrouper les pages sur la même page via un autre code Postscript

Quelques outils :outil a2ps, cf « http://www.gnu.org/software/a2ps/ »outil mpage, cf « http://www.mesa.nl/pub/mpage/ »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 48 / 277

3 Systèmes d’impression 3.2 Langage d’impression PCLChapitre 3 • Systèmes d’impression§3.2 • Langage d’impression PCL

PCL ≡ Printer Command Language

Langage de description de la page à imprimer.

Développé par HP pour ses imprimantes.

6 versions de PCL : PCL 1 (années 1980), PCL 2 (années 1980), PCL 3(1984), PCL 4 (1985), PCL 5 (HP Laserjet III), PCL 6 (HP Lasetjet 4000)

Les commandes PCL sont des séquences d’escape. Par exemple EcE&l3A

(passe en papier letter).

Pour convertir du Postscript en PCL, faire :

gs -q -sSAFER -sDEVICE=deskjet -sOoutputFile=fichier.pcl -dNOPAUSE fichier.ps

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 49 / 277

Page 38: book2p(3)

3 Systèmes d’impression 3.3 Langage d’impression PJLChapitre 3 • Systèmes d’impression§3.3 • Langage d’impression PJL

PJL ≡ Printer Job Language

Language de contrôle de l’impression des jobs.

Par exemple :sélection du bac d’entrée ou de sortie de papierimpression recto versotaille du papierfichier PCL ou fichier Postscriptetc.

Exemple de commande : ESC%-12345X@PJL DEFAULTS DENSITY=5

Le logiciel ifhp associé à LPRng sait tirer pleinement parti du langagePJL.Cf « http://www.lprng.org »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 50 / 277

3 Systèmes d’impression 3.4 L’imprimante vintageChapitre 3 • Systèmes d’impression§3.4 • L’imprimante vintage

L’imprimante « vintage » :imprimante matricielle etc. avec ruban à encrepapier listing avec bande d’entrainement sectionnableconnexion par voie série à 9600 bauds, gestion du flux XON/XOFF

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 51 / 277

Page 39: book2p(3)

3 Systèmes d’impression 3.4 L’imprimante vintage

caractères normaux .’’.’ ’. . ’’ ".’.:I:.’.. ’. .’.:.:....:II: .’.’.. . .’:.’::.:I:.:II:’.’.’.’..’. .’.’.’.’::.:.:.:I:’.’.’.’. . ’ ..’.’.’.:.:I::.:II:.’..’.’.. . ..’.’’:.:.::.:.::II::.’.’.’.’.. . ..’.’.’.:.::. .:::II:.:’.’.’.’.’. . .’:.’’.’:’.’.’.:.:I.’.’.’.’.’.. ’.. .. ’:. ’.’:’. ..:.::.::.:.’..’ ’:.’.’.. .. .:.:.’:’. .:’:I:.:.. .’.’. ’: .’.. ’ .. ’..:.:’. .:.II:.:.. . .:.’. ’.. ’. . .. .. :.:.’. .:.:I:.:. . . ..:..:. :..’:. . ’. .:. :.:. .:.:I:.:. . . ..:I::. :: :: .. .. .. :’.’.:. .:.:I:’. ..:.:I:. :: ::. . ’. ’..:. .:.. .:II:’ ..:IIIM. ::. ’:. . .:.::’.:::..:.AII:. .::’.. :I .::.:’:. . :..:’.:II:.:I: ..:’ . .::PBI’X:: ..:.. ’:. . . .. :’:III:. :.:A’PPF:. . .P.IP::’:: :I:..’::. . .. . .:.:II: A.’.’:.PB:’ . . ..’..’ .:.:.::. ’:... . .. . .: .:IIIM:. ’ ’.’ . ... . .:. :.:.. :... . . .I.::I:IIA. .. ... ..::.’.’.’.: .. . . .:II.’.’:IA:. .. ..:. . .:.: .’’.’ .. . . ..::I:.’.’::A:. . .:’−. .−.:.. .:.::AA..:..:.’ .. . ’:II:I:. ’:A:. ..:’ :. . : ..:::AMI: ..:..’.’. .’:III.::I ’II:.:...::::::::−. .:::AMV:: .::’’ .. ..":IIMI::. . −I:..’::....::−. . .:AII:: :.:’ . . . . IIMMI:..’.’.’V::. −::::− ...:AIIV:’.:.’ .. . . . :IIMI:. .:.:.V:. ’ ’ . ...:MI:’ .:: :. . ..’ . . ’:IMII:: ::.IA.. .. .A ...:::’ .:. . :. ...’I:I:.: ..AMMA. . .’..AMIV::’ . . : .. :. ’.::::II:.I:.MIMMIMMMMMIMMIMV:’..:: .I.’:. .. ’. . . .. ’’:::I:’.::IMMMMMMMMMMMMIMI. ’.’.:IMI.. ’ ’ ’. ’:... . ’’" .::’.MMMI:MMMMMMMIMI. :IIMMII:. I I I . :.:.. . ..::.’ .IV".:I:IIIMIMMIM. .:IMI::’.’: ’.. . . . .:.:: .. ::’.’ ’..’:.::I:I:IMMMIA.’.II.:...:’ .’ ... . ’.. ’..::::’ ...::’.IIMII:: .:.:..:..:III:.’::’ .’ . .. . . ’::.:’ .’’ .. :IIMI:.:.. ..: . .:I:"’ ...:.:. .. .. .. .:.:::I:. . . . .IMII:.:’ .. ..".::.:II:.:. .: ... . .. .. . .::.:......−::II:.:’ . ...... . .. .:II:.:: ... .. .. ..:.::.I . . . .. .:. .... ...:.. . . ..:.::. :.. . .. .’.::I:. . .. ..:.... . ..... .. . ..::. .. .I:. ..’ . .’’:.: I. . .. ..:.. . . .. ..... .:. .:.. .:I.’.’’.. . .:::I:. . . .. .:. . .. .. . ... .:.’.’I’ . ... . .:::I:. . . .. .:. . .. .. . ... .:.:.:. ’’.’’ ’.’::’I. . .. ....:. . .. . .. ..’ .’.:..:.. ’ :. . . .. .. .:.... . . .... ... . .:.:.:.. ’. :. . . . .. .:.... . . ........ .:.:.::. . . :. . . . . . .. .::..: . ..:.. . ::.:.:.. . . :.. . . . . . .. ..:.: .. .. .: .. ’:::.::.:. . . ’:.. . . . . .. .. ...::’ .. .. . .:. . V:I:::::.. . .. ’::. . . .. .. ... .:.:: .. . . .. .. . VI:I:::::.. .:. :.. . . .. ..:.. ..I:... . . . .. ... . VII:I:I:::. . :::, ’:.. . . . .. ..:..:.:I:.:. . . .. . .:. . VMIII:I::..’ :::’ ::.. . . .. ..:..:.MI:. . . . .... . :MMIMIII:I:: :: ’:. . . .. .. ..:.:.:MI:. . . .. ..... . MMMMIMII’I: . :.. . . . .. .:.:.:.MI:. . . .. ... . IMMMMIMMIMI. :.. . . . .. ..:..IM:. . . .. .. ... . ’MMMMMMMMMI ’:.. . . .. ..:.:.:MI.. . . .. . :::::. MIM:"""’ :. . . . .. ..::.:.VII. . . .. .:::’::. MIM :.. . . .. .:.:.:.VI. . . . ...::I"A:. MMV :. . . . .. ..:.:.VI. . . ....::I::’.MV: :. . . . . .. .:..II:. . . . ....’:::’ AV.’ :.. . . .. ... .:..VI:. . . .. .:. ..: .AV’. ’:.. . . .. ..:.:.:MAI:.:...:.:.:.:.AII:. I:. . .. ... .:.:.VMMII:..:.:..:A:’.:.. IA.. . . .. ..:.:.:VMMMMIMIMMIMI:’.::. ’MAI. . . .. ..:.:.:MMMIMIMMMIMI:..:. MIA: . . . .. ...:.VMMMIMIIMI::.:... MIMI:. . .. ... .::.MMMIIMIIMI:::.. MII:.:. . .. ... .::VMMIMI:I::.:.. AI:..:.. . . .. ..:.VMIII:I::.:. . AI:. ..:.. . . .. ..’ VMIII:I:... . AI:. . .:.. . . . ... VMIII::... . .A:. . :.. . . .. .:.. VMII::.. . A:. . . ::. .. .. . .:.. "VMI::.. . .:.. . . :.. .:..... .::.. VMI:.. ... . . . . . :.:. ..:. . .::.. VI:.. . .. .. . . . . ...:... . .. . .:::. V:.. . ’.. .. . . .. ..:::.... .:. . ..::.. V.. . . . .. . . . . .. ..:::A. ..:. . . .::.. :.. . .. .. .. . . . ... ..::IA.. .. . . ..::. :.. . .. .. ... . . .. .... .:.::IA. . .. . ..:.::. :. . . . . .. . . . .. ..:..:.::IIA. . . .. .:.::. :. . .. . . . . . .. ... ..:.::I:OMA. . . . ..:.::. . . .: .. . . . . ... .:.. .:I:IIMMA. . . .. .::I:. . .::. . . . .. ..:. .::.:IIMIIMMMA. . .. ..:I:. . . A::.. . . ...:..:.::I:IMIMIMMMMA. . . ..::I:. . :MI:.. . . .. .:.:.::I:IMIMIIMIMMMA. . .. .::I:. .. AI:.. .. . . .. .:.:.::II:IMIIIMIMIMMMA. . . ..::I:. .. :MI:.. . . . . .. .::.:I:IMIMIIIMIMIIMMMA.. . .. .::I:. .. AI:.:.. . . . ... .::.::I:IMIIMIMIMIMIMIMMA. . . ..::I:. . MI:. .. . . . . .. .:..::IIMIMIMIIIIMMIIMMMMA. . . .:::I:. . . MI:.. . . . . .. ..:.::I:IIMMIIMIMIMIMMMMV" .. . ..:::II: . . MI::.. . . . .. .:..:::IIMIMIIMIMIIMMMM" . .. . ..::III: . . II::.:.. . . . .. ......:..IMMMIMMMMMM2.. . . . . ’... .:.:IMI:.. II:I::.. . . . . .....::.:IMMMMMMMM:.. . . . . .:..:::IIMII.. MI::.:. . . . . . ...:.::.::.MMMMM::.:.... . . .. . :.. ..:IMMI:: MII::.:.. . . . .. .:..:.’. ’MMMI::.::.:.. . . . .. ’:...:II:III III::.:... . . . ...:.:... . MII:I::.:.. . . .. . . :.:::...:: VII::.:.. . . . .. ...:.... VMI:I::.:.. . . ... .. .::.:..:.: VII::.:.. . . ..:.::.. : :MMII:I::.:.. . . .. .. .’::’:... III:I::.. .. . . .. .:.:.. . :VNIMI:I::.:... . . .. .. .’:. ..

Lundi 25 Juin 2007 00:42:23 woman1.txt Page 1

caractères gras par réécriture d’un caractèreune seconde fois sur lui-même :A = « A backspace A »

= « A^HA »idem pour caractères soulignés

A = « A backspace underscore »= « A^H_ »

peu ou pas de polices de caractèrespeu ou pas de possibilités de tailles variéesde caractèresdocuments au format texte uniquementpas de graphiques ou de dessin (sauf ASCII art)etc.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 52 / 277

3 Systèmes d’impression 3.4 L’imprimante vintage

Résumé des caractéristiques des impressions sur ce type d’imprimantes :

connexion non réseau par voie série (plus tard par voie parallèle)

⇒ imprimer = « cat rapport.txt > /dev/tty0a »

Dans cette logique, un logiciel d’impression est avant tout capable de gérerdes voies séries.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 53 / 277

Page 40: book2p(3)

3 Systèmes d’impression 3.5 L’imprimante moderneChapitre 3 • Systèmes d’impression§3.5 • L’imprimante moderne

L’imprimante moderne : photocopieur, imprimante réseau, scanner, fax

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 54 / 277

3 Systèmes d’impression 3.5 L’imprimante moderne

Caractéristiques :

Photocopieur :codes d’accèsquotas de photocopiesrelevé des compteursserveur web intégré : protection des accès, certificats HTTPS, etc.

Imprimante réseau :configuration réseau minimale (adresse IP, netmask, routeur, . . .)configuration réseau avancée : ACL pour contrôler les accèsd’impression, d’email, de partage de fichiersdisque dur local (pour stocker des polices supplémentaires, des logos,des documents fréquemment imprimés, etc.)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 55 / 277

Page 41: book2p(3)

3 Systèmes d’impression 3.5 L’imprimante moderne

Caractéristiques (suite) :

Scanner (vers formats TIFF ou PDF) avec envoi des fichiersnumérisés par email ou récupération par FTP des fichiers numérisés :

logiciels spécifiques sur le poste de travail de l’utilisateur, driversTWAIN, etc.attention aux logiciels ne travaillant que sur un seul subnet ethernet !configuration des paramètres de messagerie électroniqueconfiguration d’un annuaire LDAP d’entreprise ou des contacts del’entrepriseconfiguration de partages réseau pour accéder aux fichiers scannésstockés sur le photocopieur, configuration des ACL réseau pour FTP,. . .

Système d’exploitationbugs (exemple gestion LDAP sur photocopieur CANON couleur)disque dur + problèmes de disques durslicences logicielles (codes d’activation, dongles, etc.)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 56 / 277

3 Systèmes d’impression 3.5 L’imprimante moderne

Résumé des caractéristiques des impressions sur ce type d’imprimantes :

connexion réseau par TCP/IPprotocoles réseau implémentés dans l’imprimante

⇒ imprimer = « dialogue selon des protocoles avec un hôte TCP/IPqui prend en charge un fichier au jargon spécifique à imprimerphysiquement »

Dans cette logique, un logiciel d’impression est avant tout capable dedialoguer en réseau selon des protocoles spéciaux.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 57 / 277

Page 42: book2p(3)

3 Systèmes d’impression 3.6 Scenarios d’impressions possiblesChapitre 3 • Systèmes d’impression§3.6 • Scenarios d’impressions possibles

Pleins de scenarios sont possibles dans le monde de l’impression :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 58 / 277

3 Systèmes d’impression 3.6 Scenarios d’impressions possibles

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 59 / 277

Page 43: book2p(3)

3 Systèmes d’impression 3.6 Scenarios d’impressions possibles

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 60 / 277

3 Systèmes d’impression 3.6 Scenarios d’impressions possibles

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 61 / 277

Page 44: book2p(3)

3 Systèmes d’impression 3.6 Scenarios d’impressions possibles

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 62 / 277

3 Systèmes d’impression 3.7 Mécanismes et protocoles d’impressionChapitre 3 • Systèmes d’impression§3.7 • Mécanismes et protocoles d’impression

Dans un environnement réel, les mécanismes d’impression permettent auxutilisateurs de s’affranchir :

de la connaissance des noms techniques des périphériques ;du risque d’impressions mélangées lorsque deux utilisateurs essayentd’imprimer en même temps ;des détails matériels tels que l’absence momentanée de papier ;de la nécessité d’attendre que l’impression en cours se termine ;etc.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 63 / 277

Page 45: book2p(3)

3 Systèmes d’impression 3.7 Mécanismes et protocoles d’impression

Pour résoudre tous ces problèmes, il a été conçu des spouleurs (spoolers).Le principe en est simple :

Les utilisateurs déposent leurs fichiers dans un répertoire convenu, àl’aide de la « commande d’impression ». C’est la requête d’impression.Un démon système surveille ce répertoire (file d’attente), en extraitun fichier, l’imprime, puis extrait le suivant, l’imprime, etc.Des commandes permettent aux utilisateurs de savoir ce qu’il y a dansla file d’attente et éventuellement de détruire une de leurs requêtes.Des commandes permettent à l’administrateur de gérer cemécanisme :

création d’une nouvelle file d’attente pour une nouvelle imprimante ;autorisation ou interdiction des dépôts dans des files d’attente ;autorisation ou interdiction des impressions ;redirection des travaux d’impression d’une imprimante à une autreimprimante ;etc.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 64 / 277

3 Systèmes d’impression 3.8 Situation logicielle en 2012Chapitre 3 • Systèmes d’impression§3.8 • Situation logicielle en 2012

Plusieurs logiciels :mécanisme LP (SOLARIS)→ obsolètemécanisme LPR→ obsolètemécanisme LPRng (LINUX, UNIX)« http://www.lprng.com »→ a tendance à devenir obsolètemécanisme CUPS (LINUX, UNIX, Windows 2000/XP/2003,MacOSX)basé sur IPP (Internet Printing Protocol)« http://www.cups.org »→ a la côte

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 65 / 277

Page 46: book2p(3)

3 Systèmes d’impression 3.8 Situation logicielle en 2012

Principes globaux de tous ces mécanismes :machines clientes d’un serveur d’impression

le serveur d’impression a des queues d’impression pour les diversesimprimantes

fonctionalités de gestion des queues plus ou moins élaborées selon leprotocole :

LP < LPR < LPRng < CUPS

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 66 / 277

Page 47: book2p(3)

Chapitre 4

Système de multifenêtrage : X

Explications sur le pourquoi de ce chapitre

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 67 / 277

4 Système de multifenêtrage : X 4.1 Introduction : système de multi fenêtrageChapitre 4 • Système de multifenêtrage : X§4.1 • Introduction : système de multi fenêtrage

Système de multifenêtrage (Window System) :ensemble de programmes, de bibliothèques de programmation réalisant uneinterface homme / machine bâtie sur l’utilisation de divers équipements :

claviersourisécran graphiqueautres périphériques (spaceball, plaquette graphique, . . .)

L’écran tente de réaliser un modèle de bureau.

L’idée vient des travaux de Xerox, repris par Apple, repris par le projetAthena du MIT.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 68 / 277

Page 48: book2p(3)

4 Système de multifenêtrage : X 4.2 Système de multifenêtrage : XChapitre 4 • Système de multifenêtrage : X§4.2 • Système de multifenêtrage : X

Pour Unix, le système de multi fenêtrage est un système appelé :Xou X Window Systemou X11Ce n’est pas « X Windows » !

Historiquement :X11 sur « UNIX »XFree86 spécifiquement pour LINUXXorg suite à querelles sur XFree86 = retour à l’équipe de X11

http://www.x.org

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 69 / 277

4 Système de multifenêtrage : X 4.2 Système de multifenêtrage : X

Consortium de vendeurs d’UNIX pour mettre au point X.

Historique des versions :X10X11R3X11R4X11R5X11R6X11R7

SUN a sa propre implémentation de X dérivée des X11R[3-7] : SUNOPENWINDOWS

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 70 / 277

Page 49: book2p(3)

4 Système de multifenêtrage : X 4.2 Système de multifenêtrage : X

Le système graphique X est construit sur un modèle client – serveur et està la base un protocole de communication :

Evenement (clavier, clic souris, etc.)

Reponse (OK, NOT OK, etc.)

Erreur

AffichageServeur XApplication X

Message (dessine un cercle, etc.)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 71 / 277

4 Système de multifenêtrage : X 4.2 Système de multifenêtrage : X

Serveur X :optimisé pour ses performances graphiquesrépond aux requêtes du client Xenvoie au client X des informations événementielles (« clic du boutondroit de la souris », « appui sur la touche A avec Shift en mêmetemps », etc.)

Client X :effectue les calculsmanipule les fichiersenvoie des requêtes au serveur X (« trace un cercle », « affiche dutexte », « quelles sont les possibilités couleurs de l’écran ? », etc.)

Souvent serveur X = client X = même machine.

Parfois serveur X != client X ⇒ deux machines en réseau. Parfois !

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 72 / 277

Page 50: book2p(3)

4 Système de multifenêtrage : X 4.2 Système de multifenêtrage : X

Parfois serveur X != client X ⇒ deux machines en réseau. Parfois !C’est donc un peu plus qu’un système de multifenêtrage : il est réparti.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 73 / 277

4 Système de multifenêtrage : X 4.3 Serveur XChapitre 4 • Système de multifenêtrage : X§4.3 • Serveur X

Serveur X :Au sens large : un serveur graphiqueLe serveur X gére les périphériques :

écrans monochromes, niveaux de gris, couleurs, un ou plusieurs écranssouris, écran tactile, stylet, palette graphiqueclaviersboutons, mollettes

La configuration matérielle du serveur X peut varier considérablement(même si effet d’unification suite à la mode du PC) ⇒ le client Xdoit en tenir compte et doit s’avoir s’adapter.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 74 / 277

Page 51: book2p(3)

4 Système de multifenêtrage : X 4.3 Serveur X

A noter qu’il existe des serveurs X sur Windows et sur MacOS X.

Sur Windows, utiliser CYGWIN (« http://www.cygwin.com ») :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 75 / 277

4 Système de multifenêtrage : X 4.4 Client XChapitre 4 • Système de multifenêtrage : X§4.4 • Client X

Client X :Client X == applicationL’application doit être configurable :

Environnement multi plateformes UNIXEnvironnement multi serveurs XEnvironnement multi utilisateurs

L’application ne doit jamais rien supposer du serveur X. Elle doit tenircompte de tous les cas envisageables et être paramétrée en conséquence.

⇒ Nécessité que les applications soient configurables !

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 76 / 277

Page 52: book2p(3)

4 Système de multifenêtrage : X 4.5 Chemins d’accèsChapitre 4 • Système de multifenêtrage : X§4.5 • Chemins d’accès

On rencontre :Standard X11R4 et X11R5 :

« /use/bin/X11/ »« /use/lib/X11/ »« /use/include/X11/ »

Standard X11R6 et X11R7 :« /use/X11R6/bin/ »« /use/X11R6/lib/ »« /use/X11R6/include/ »

Standard SUN OPENWINDOWS« /use/openwin/bin/ »« /use/openwin/lib/ »« /use/openwin/include/ »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 77 / 277

4 Système de multifenêtrage : X 4.6 Variable d’environnement DISPLAYChapitre 4 • Système de multifenêtrage : X§4.6 • Variable d’environnement DISPLAY

La variable « DISPLAY » définit le serveur X qui sera utilisé.

Formes possibles de la variable :« nom-machine.domaine:numéro-serveur.numéro-écran »« adresse-ip:numéro-serveur.numéro-écran »« :0.0 » (anciennement « unix:0.0 ») ; sens spécial de cetteforme : communication locale rapide via IPC et non pas via le réseauTCP/IP plus lent dans ce cas

On notera « numéro-serveur » : une même machine peut faire tournerplusieurs serveurs X d’où la nécessité de les numéroter. Cas général : unseul serveur X ⇒ numéro = 0.

On notera « numéro-écran » : une même machine peut avoir plusieursécrans d’où la nécessité de les numéroter. Cas général : un seul écran ⇒numéro = 0.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 78 / 277

Page 53: book2p(3)

4 Système de multifenêtrage : X 4.6 Variable d’environnement DISPLAY

Exemples :« cerise.example.com:0.0 »« localhost:11.0 »« :0.0 »« 192.168.0.1:0.0 »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 79 / 277

4 Système de multifenêtrage : X 4.7 ClavierChapitre 4 • Système de multifenêtrage : X§4.7 • Clavier

La gestion du clavier est quelque chose de compliqué. . .Tous les types de claviers doivent pouvoir être supportés (FR, EN, RU,etc.).

Par exemple des claviers braille :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 80 / 277

Page 54: book2p(3)

4 Système de multifenêtrage : X 4.7 Clavier

Par exemple des boites à boutons ou à molettes (marque SILICONGRAPHICS) :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 81 / 277

4 Système de multifenêtrage : X 4.7 Clavier

Code clavier

1ere conversion

2eme conversion

Keycode

Keysym

Keycode + Keysym + Status

Shift

Alt Graph

SERVEUR X

CLIENT X

Alt, Num Lock, Alt Graph, Meta, Ctrl, Caps Lock, Shift

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 82 / 277

Page 55: book2p(3)

4 Système de multifenêtrage : X 4.7 Clavier

� Keycode

X définit une association entre le code généré par la touche du clavier etun code de la touche au niveau du serveur X : c’est le keycode.

Il existe un keycode et un seul par touche du clavier.

On ne peut pas modifier l’association entre le code du clavier et le keycode(sauf à recompiler le serveur X).

On peut obtenir le keycode par l’utilitaire « xev ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 83 / 277

4 Système de multifenêtrage : X 4.7 Clavier

Exemple de XEV : appui sur la touche « p » :

% xev...

KeyPress event, serial 20, synthetic NO, window 0xc00001,

root 0x2f, subw 0x0, time 2631657543, (103,101),

root:(927,454), state 0x2, keycode 26 (keysym 0x70, p),same_screen YES, XLookupString gives 1 characters: "p"

KeyRelease event, serial 22, synthetic NO, window 0xc00001,

root 0x2f, subw 0x0, time 2631657607, (103,101),

root:(927,454), state 0x2, keycode 26 (keysym 0x70, p),same_screen YES, XLookupString gives 1 characters: "p"

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 84 / 277

Page 56: book2p(3)

4 Système de multifenêtrage : X 4.7 Clavier

Exemple de XEV : appui sur la touche « p » avec SHIFT en même temps :

% xev...

KeyPress event, serial 22, synthetic NO, window 0xc00001,

root 0x2f, subw 0x0, time 2631671991, (103,101), root:(927,454),

state 0x2, keycode 232 (keysym 0xffe1, Shift_L), same_screen YES,

XLookupString gives 0 characters: ""

KeyPress event, serial 22, synthetic NO, window 0xc00001,

root 0x2f, subw 0x0, time 2631672071, (103,101), root:(927,454),

state 0x3, keycode 26 (keysym 0x50, P), same_screen YES,

XLookupString gives 1 characters: "P"

KeyRelease event, serial 22, synthetic NO, window 0xc00001,

root 0x2f, subw 0x0, time 2631672127, (103,101), root:(927,454),

state 0x3, keycode 26 (keysym 0x50, P), same_screen YES,

XLookupString gives 1 characters: "P"

KeyRelease event, serial 22, synthetic NO, window 0xc00001,

root 0x2f, subw 0x0, time 2631672215, (103,101), root:(927,454),

state 0x3, keycode 232 (keysym 0xffe1, Shift_L), same_screen YES,

XLookupString gives 0 characters: ""

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 85 / 277

4 Système de multifenêtrage : X 4.7 Clavier

� Keysym

X définit un nom symbolique pour chaque caractère utilisable. On parle dekeysym. Le fichier « <X11/keysymdef.h> » définit les valeursnumériques de ces noms symboliques.

...

#define XK_dollar 0x024

#define XK_percent 0x025

#define XK_ampersand 0x026

#define XK_apostrophe 0x027

#define XK_parenleft 0x028

#define XK_parenright 0x029

#define XK_asterisk 0x02a

#define XK_plus 0x02b

#define XK_comma 0x02c

#define XK_minus 0x02d

#define XK_period 0x02e

#define XK_slash 0x02f

#define XK_0 0x030

#define XK_1 0x031

#define XK_2 0x032

#define XK_3 0x033

#define XK_4 0x034

#define XK_5 0x035

#define XK_6 0x036

#define XK_7 0x037

#define XK_8 0x038

#define XK_9 0x039

#define XK_colon 0x03a

#define XK_semicolon 0x03b

#define XK_less 0x03c

#define XK_equal 0x03d

#define XK_greater 0x03e

#define XK_question 0x03f

#define XK_at 0x040

#define XK_A 0x041

#define XK_B 0x042

#define XK_C 0x043

#define XK_D 0x044

#define XK_E 0x045

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 86 / 277

Page 57: book2p(3)

4 Système de multifenêtrage : X 4.7 Clavier

Au démarrage du serveur X, il y a mise en place de correspondances entrekeycode et keysyms.

On peut modifier les correspondances via la commande « xmodmap ».

X accepte au maximum 5 keysyms pour un keycode via le jeu desmodificateurs comme Shift, Ctrl, etc..Exemple des modificateurs d’une machine SOLARIS

% xmodmap -pmxmodmap: up to 2 keys per modifier, (keycodes in parentheses):

shift Shift_L (0xe8), Shift_R (0xec)

lock Control_L (0x40)

control Control_L (0xe7), Control_R (0xeb)

mod1 Meta_L (0xea), Meta_R (0xee)

mod2 Mode_switch (0xed)

mod3 Num_Lock (0x5a)

mod4 Alt_L (0xe9)

mod5

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 87 / 277

4 Système de multifenêtrage : X 4.7 Clavier

Liste des keycodes et de leurs keysyms associés (exemple pris sur unemachine SUN avec un clavier QWERTY) :

% xmodmap -pkThere are 5 KeySyms per KeyCode; KeyCodes range from 8 to 254.

KeyCode Keysym (Keysym) ...

Value Value (Name) ...

...

32 0x0056 (V)

33 0x0057 (W)

34 0x0058 (X)

35 0x0059 (Y)

36 0x005a (Z)

37 0x0031 (1) 0x0021 (exclam)

38 0x0032 (2) 0x0040 (at)

39 0x0033 (3) 0x0023 (numbersign)

40 0x0034 (4) 0x0024 (dollar) 0x20ac (EuroSign)

41 0x0035 (5) 0x0025 (percent) 0x20ac (EuroSign)

42 0x0036 (6) 0x005e (asciicircum)

43 0x0037 (7) 0x0026 (ampersand)

44 0x0038 (8) 0x002a (asterisk)

45 0x0039 (9) 0x0028 (parenleft)

46 0x0030 (0) 0x0029 (parenright)

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 88 / 277

Page 58: book2p(3)

4 Système de multifenêtrage : X 4.7 Clavier

Liste des keycodes et de leurs keysyms associés avec affichage sous uneforme compatible avec la syntaxe de XMODMAP pour les modifications(exemple pris sur une machine SUN avec un clavier QWERTY) :

% xmodmap -pke...

keycode 32 = V

keycode 33 = W

keycode 34 = X

keycode 35 = Y

keycode 36 = Z

keycode 37 = 1 exclam

keycode 38 = 2 at

keycode 39 = 3 numbersign

keycode 40 = 4 dollar EuroSign

keycode 41 = 5 percent EuroSign

keycode 42 = 6 asciicircum

keycode 43 = 7 ampersand

keycode 44 = 8 asterisk

keycode 45 = 9 parenleft

keycode 46 = 0 parenright

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 89 / 277

4 Système de multifenêtrage : X 4.7 Clavier

Pour modifier le fonctionnement du clavier , deux syntaxes :« xmodmap -e ’keysym symbole = valeur’ »« xmodmap -e ’keycode code = valeur’ »

Par exemple : on veut associer « é » à la touche « F2 » (clavier SUNQWERTY) :

Le keycode de « F2 » est 66.Le keysym d’origine associé à la touche est 0xffbf.Le keysym associé à « é » est d’après « <X11/keysymdef.h> »0x0e9 (« XK_eacute »).

⇒ « xmodmap -e ’keycode 66 = 0x0e9’ »

A noter sur SOLARIS le script « /usr/openwin/bin/xmakemap » quirenvoie l’image de la configuration actuelle du clavier.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 90 / 277

Page 59: book2p(3)

4 Système de multifenêtrage : X 4.8 SourisChapitre 4 • Système de multifenêtrage : X§4.8 • Souris

Tous les types de souris doivent pouvoir être supportés. . .

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 91 / 277

4 Système de multifenêtrage : X 4.8 Souris

Plus classiquement :

C’est un outil de désignation ayant de 1 à 3 boutons.La position est suivie à l’écran par un curseur.Le curseur est toujours affiché au premier plan.

Pour permuter les boutons de la souris :« xmodmap -e ’pointer = 3 2 1’ »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 92 / 277

Page 60: book2p(3)

4 Système de multifenêtrage : X 4.9 EcranChapitre 4 • Système de multifenêtrage : X§4.9 • Ecran

x

y

Il est de type bitmap (affichage point).

L’image est obtenue par balayage d’une mémoire d’écran (frame buffer)contenant une valeur par point à l’écran (pixel).

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 93 / 277

4 Système de multifenêtrage : X 4.10 Fenêtre / icôneChapitre 4 • Système de multifenêtrage : X§4.10 • Fenêtre / icône

x

y

h

w

Une fenêtre est un rectangle à l’écran caractérisé par un emplacement, unebordure, ses dimensions.

Une icône est la trace visible à l’écran d’une fenêtre temporairement nonaffichée.

Les fenêtres sont organisées en arbre au niveau interne dans le serveur X.La racine de l’arbre est la root window créée à l’initialisation du serveuret couvrant tout l’écran. Vulgairement, c’est le fond d’écran.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 94 / 277

Page 61: book2p(3)

4 Système de multifenêtrage : X 4.11 Copier / collerChapitre 4 • Système de multifenêtrage : X§4.11 • Copier / coller

Pour copier, on sélectionne avec le bouton gauche de la souris.Pour coller, on clique avec le bouton du milieu de la souris.

This is the text to select. All text around it is unselected.

All text around it is unselected.This is the text to select.

Modifiable.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 95 / 277

4 Système de multifenêtrage : X 4.12 Principe de personnalisation des clientsChapitre 4 • Système de multifenêtrage : X§4.12 • Principe de personnalisation des clients

Personnalisation via des ressourcesou des arguments de la ligne decommande :

$XFILESEARCHPATH

/usr/X11R6/lib/X11/app-defaults

Arguments de la ligne de commande

$HOME

$XUSERFILESEARCHPATH

$XAPPLRESDIR

$HOME/.Xdefaults

propriete RESOURCE_MANAGER (xrdb)

$XENVIRONMENT

$HOME/.Xdefaults-nom-hostou

ou

ou

ou

ou

ORDRE

DE

RECHERCHE

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 96 / 277

Page 62: book2p(3)

4 Système de multifenêtrage : X 4.13 Options de la ligne de commandeChapitre 4 • Système de multifenêtrage : X§4.13 • Options de la ligne de commande

Il y a des options standard pour la plupart des clients car leurprogrammation s’appuye sur une bibliothèque appelée « Xt ».

Exemples :

display :« -display cerise.example.com:0.0 »couleur des caractères :« -fg couleur »couleur de fond des fenêtres :« -bg couleur »caractères :« -fn font »dimensions et emplacement de la fenêtre :« -geometry WIDTH×HEIGHT±XOFF±YOFF »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 97 / 277

4 Système de multifenêtrage : X 4.13 Options de la ligne de commande

Retour sur l’option « -geometry WIDTH×HEIGHT±XOFF±YOFF » :+0+0 -0+0

-0-0+0-0

X

-450-200

X

Y Y

Y

XX

Y

+100+100 +600+100

+600-100+100-100

-450+150 -200+150

-200-200

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 98 / 277

Page 63: book2p(3)

4 Système de multifenêtrage : X 4.14 RessourcesChapitre 4 • Système de multifenêtrage : X§4.14 • Ressources

Une ressource = variable configuréedans un fichier ASCII (analogie :base de registres de Windows ouressources Macintosh)

4 niveaux de ressources :ressources définies par lesystèmeressources définies par le clientXressources définies par leserveur Xressources définies parl’utilisateur

$XFILESEARCHPATH

/usr/X11R6/lib/X11/app-defaults

Arguments de la ligne de commande

$HOME

$XUSERFILESEARCHPATH

$XAPPLRESDIR

$HOME/.Xdefaults

propriete RESOURCE_MANAGER (xrdb)

$XENVIRONMENT

$HOME/.Xdefaults-nom-hostou

ou

ou

ou

ou

ORDRE

DE

RECHERCHE

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 99 / 277

4 Système de multifenêtrage : X 4.14 Ressources

� Ressources définies par le système$XFILESEARCHPATH

/usr/X11R6/lib/X11/app-defaults

Arguments de la ligne de commande

$HOME

$XUSERFILESEARCHPATH

$XAPPLRESDIR

$HOME/.Xdefaults

propriete RESOURCE_MANAGER (xrdb)

$XENVIRONMENT

$HOME/.Xdefaults-nom-hostou

ou

ou

ou

ou

ORDRE

DE

RECHERCHE

Traditionnellement « /usr/X11R6/lib/X11/app-defaults/ ».

Ce répertoire regroupe les fichiers correspondants aux classes desapplications. Par exemple « XTerm » pour l’application X « xterm »,« Bitmap » pour l’application X « bitmap », etc.

Ces ressources sont lues par les clients X qui tournent sur la machine de cerépertoire.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 100 / 277

Page 64: book2p(3)

4 Système de multifenêtrage : X 4.14 Ressources

� Ressources définies par le client X$XFILESEARCHPATH

/usr/X11R6/lib/X11/app-defaults

Arguments de la ligne de commande

$HOME

$XUSERFILESEARCHPATH

$XAPPLRESDIR

$HOME/.Xdefaults

propriete RESOURCE_MANAGER (xrdb)

$XENVIRONMENT

$HOME/.Xdefaults-nom-hostou

ou

ou

ou

ou

ORDRE

DE

RECHERCHE

Traditionnellement « $HOME ».

Ce mécanisme s’applique aux applications X développées avec la librairie« Xt ». Le fichier de ressources porte le nom de l’application. Par exemple« XTerm » pour l’application X « xterm », « Bitmap » pour l’applicationX « bitmap », etc.

Ces ressources sont lues par les clients X qui tournent sur la machine de cerépertoire.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 101 / 277

4 Système de multifenêtrage : X 4.14 Ressources

� Ressources définies par le serveur X$XFILESEARCHPATH

/usr/X11R6/lib/X11/app-defaults

Arguments de la ligne de commande

$HOME

$XUSERFILESEARCHPATH

$XAPPLRESDIR

$HOME/.Xdefaults

propriete RESOURCE_MANAGER (xrdb)

$XENVIRONMENT

$HOME/.Xdefaults-nom-hostou

ou

ou

ou

ou

ORDRE

DE

RECHERCHE

Des ressources peuvent être placées dans une base de données dans lamémoire du serveur X.

Ces ressources sont donc communes à tous les clients de ce serveur X. Lesclients les lisent lors de leur démarrage, plus après.

La commande « xrdb » sert à manipuler cette base de données enmémoire dans le serveur X.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 102 / 277

Page 65: book2p(3)

4 Système de multifenêtrage : X 4.14 Ressources

� Ressources définies par l’utilisateur$XFILESEARCHPATH

/usr/X11R6/lib/X11/app-defaults

Arguments de la ligne de commande

$HOME

$XUSERFILESEARCHPATH

$XAPPLRESDIR

$HOME/.Xdefaults

propriete RESOURCE_MANAGER (xrdb)

$XENVIRONMENT

$HOME/.Xdefaults-nom-hostou

ou

ou

ou

ou

ORDRE

DE

RECHERCHE

Ce mécanisme permet d’avoir un fichier propre à plusieurs systèmes mêmesi le homedir est partagé (via NFS) entre ces systèmes.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 103 / 277

4 Système de multifenêtrage : X 4.14 Ressources

� Syntaxes des ressources

Syntaxes :« nom-application.attribut: valeur »« classe.nom.sous-nom...attribut: valeur »

Par exemple :

xterm.background: black

xterm.foreground: yellow

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 104 / 277

Page 66: book2p(3)

4 Système de multifenêtrage : X 4.14 Ressources

Un client X est construit autourd’un arbre de « widgets » (boutons,dropdown menus, etc.) fournis parles bibliothèques de programmation.

⇒ On a en fait une arborescence deressources.

Programme « editres » pour lesmanipuler.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 105 / 277

4 Système de multifenêtrage : X 4.14 Ressources

La syntaxe utilise des caractères « joker » :

caractère « . » : séparateur des éléments dans la définition de laressourcecaractère « * » : permet de remplacer un ou plusieurs éléments dansla définition de la ressourcecaractère « ? » : permet de remplacer un et un seul élément dans ladéfinition de la ressource

Par exemple :

xterm.background: black

xterm.foreground: yellow

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 106 / 277

Page 67: book2p(3)

4 Système de multifenêtrage : X 4.14 Ressources

Notion de :classeapplication de la classefenêtre d’une application

C’est la ressource la plus précise qui est prise en compte.

Par exemple :« mon-application.sous-fenêtre.side.background: yellow »prime sur « mon-application.sous-fenêtre.background: blue »qui prime sur « mon-application.background: red »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 107 / 277

4 Système de multifenêtrage : X 4.14 Ressources

� xrdb

Rappel :$XFILESEARCHPATH

/usr/X11R6/lib/X11/app-defaults

Arguments de la ligne de commande

$HOME

$XUSERFILESEARCHPATH

$XAPPLRESDIR

$HOME/.Xdefaults

propriete RESOURCE_MANAGER (xrdb)

$XENVIRONMENT

$HOME/.Xdefaults-nom-hostou

ou

ou

ou

ou

ORDRE

DE

RECHERCHE

Des ressources peuvent être placées dans une base de données dans lamémoire du serveur X.

La commande « xrdb » sert à manipuler cette base de données enmémoire dans le serveur X.

xrdb = X server Resource DataBase utility

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 108 / 277

Page 68: book2p(3)

4 Système de multifenêtrage : X 4.14 Ressources

Syntaxes :« xrdb -query » : liste les ressources actuelles du serveur X« xrdb -merge fichier » : fusionne un fichier de ressources avecles ressources du serveur X« xrdb -load fichier » : écrase les ressources du serveur X parcelles du fichier indiqué« xrdb -remove » : efface les ressources du serveur X« xrdb -symbols » : affiche la liste des symboles prédéfinis (voirci-dessus pour la partie CPP)

« xrdb » utilise « cpp » du langage C. Donc le fichier de ressources àcharger peut contenir les directives classiques de CPP :

« #include »« #ifdef »etc.

Intérêt : un seul fichier mais pouvant traiter plusieurs cas de figures.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 109 / 277

4 Système de multifenêtrage : X 4.14 Ressources

Par exemple :

#ifndef COLOR

XTerm*cursorColor: black

XTerm*pointerColor: black

#else /* COLOR is DEFINED :-) */

XTerm*cursorColor: red

XTerm*pointerColor: red

#endif

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 110 / 277

Page 69: book2p(3)

4 Système de multifenêtrage : X 4.15 CouleursChapitre 4 • Système de multifenêtrage : X§4.15 • Couleurs

On peut désigner une couleur sous un nom symbolique :« /usr/X11R6/lib/X11/rgb.txt » définit ainsi 738 couleurs (les nomsne sont pas forcément parlants). Par exemple : « Pink »

On peut aussi donner une couleur via ses composantes Rouge Vert Bleu(RGB en anglais) sous la forme « rgb:red/green/blue ». Ainsi « Pink »équivaut à « rgb:255/192/203 ».

Ancienne syntaxe supportée pour compatibilité :

#RGB (4 bits each)

#RRGGBB (8 bits each)

#RRRGGGBBB (12 bits each)

#RRRRGGGGBBBB (16 bits each)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 111 / 277

4 Système de multifenêtrage : X 4.15 Couleurs

A partir de X11R5, adoption de la gestion des couleurs via X ColorManagement System (XCMS). Le fichier« /usr/X11R6/lib/X11/Xcms.txt » décrit des couleurs.Par exemple :

XCMS_COLORDB_START 0.1

red CIEXYZ:0.3811/0.2073/0.0213

green CIEXYZ:0.3203/0.6805/0.1430

blue CIEXYZ:0.2483/0.1122/1.2417

aquamarine CIEXYZ:0.5512/0.7909/0.9759

cadet blue CIEXYZ:0.2218/0.2815/0.4708

cornflower blue CIEXYZ:0.3400/0.3109/1.1067

navy blue CIEXYZ:0.0478/0.0216/0.2392

navy CIEXYZ:0.0478/0.0216/0.2392

brown CIEXYZ:0.1333/0.0772/0.0217

gray0 TekHVC:0.0/0.0/0.0

gray10 TekHVC:0.0/10.0/0.0

gray20 TekHVC:0.0/20.0/0.0

...

gray80 TekHVC:0.0/80.0/0.0

gray90 TekHVC:0.0/90.0/0.0

gray100 TekHVC:0.0/100.0/0.0

XCMS_COLORDB_END

Commande associée : « xcmsdb »c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 112 / 277

Page 70: book2p(3)

4 Système de multifenêtrage : X 4.16 Polices de caractèresChapitre 4 • Système de multifenêtrage : X§4.16 • Polices de caractères

Les fontes ont des noms très détaillés. Par exemple :

-adobe-courier-medium-r-normal--10-100-75-75-m-60-iso8859-1

« adobe » : concepteur de la police« courier » : famille de la police« medium » : graisse (bold, medium, extra bold, light, etc.)« r » : angle (roman, italic, etc.)« normal » : largeur (normal, narrow, etc.)vide : style complémentaire« 10 » : hauteur en pixels« 100 » : hauteur en points (un point = 1/72e de pouce)« 75 » : résolution horizontale de conception de la police« 75 » : résolution verticale de conception de la police« m » : espacement (p = proportionnel, m = monospace, etc.)« 60 » : largeur moyenne en 1/10e de pixel« iso8859-1 » : jeu de caractères

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 113 / 277

4 Système de multifenêtrage : X 4.16 Polices de caractères

Plusieurs formats sont possibles. Liste non exhaustive :BDF (Bitmap Distribution Format),SNF (Server Natural Font),PCF (Portable Compiled Font),Type1 PostScript depuis X11R6,True Type (http://www.freetype.org/),PEX,Speedo

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 114 / 277

Page 71: book2p(3)

4 Système de multifenêtrage : X 4.16 Polices de caractères

On peut utiliser la commande « xlsfonts » pour avoir la liste des fontesutilisables sur son poste X.

Les polices sont utilisables via les ressources. Par exemple :

XTerm*Font: 7x13bold

Emacs*paneFont: -adobe-times-medium-r-normal--14-140-75-75-p-74-iso8859-1

Les polices sont utilisables via la ligne de commande. Par exemple :

% xfd -fn 9x15bold

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 115 / 277

4 Système de multifenêtrage : X 4.16 Polices de caractères

Les fontes sont stockées dans l’arborescence« /usr/X11R6/lib/X11/fonts/ » contenant plusieurs sous répertoiresdont :

« 75dpi/ » : polices de résolution de 75 dpi« 100dpi/ » : polices de résolution de 100 dpi« misc/ » : polices diverses

Notion de font path.

Configuration du font path via la commande « xset » :« xset -q »« xset +fp /chemin/vers/répertoire/de/fontes/ »« xset fp+ /chemin/vers/répertoire/de/fontes/ »« xset -fp /chemin/vers/répertoire/de/fontes/ »« xset fp rehash »

L’ordre des répertoires est significatif.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 116 / 277

Page 72: book2p(3)

4 Système de multifenêtrage : X 4.17 Répertoires de polices de caractèresChapitre 4 • Système de multifenêtrage : X§4.17 • Répertoires de polices de caractères

Un répertoire de polices de caractères a une structure précise :

% ls /usr/X11R6/lib/X11/fonts/misc10x20.pcf.Z Screen6.pcf.Z clR8x10.pcf.Z

12x24.pcf.Z Screen7.pcf.Z clR8x12.pcf.Z

12x24rk.pcf.Z Serif10.pcf.Z clR8x13.pcf.Z

5x7.pcf.Z Serif11.pcf.Z clR8x14.pcf.Z

5x8.pcf.Z Serif12.pcf.Z clR8x16.pcf.Z

6x10.pcf.Z Serif14.pcf.Z clR8x8.pcf.Z

6x12.pcf.Z Serif16.pcf.Z clR9x15.pcf.Z

6x13.pcf.Z clB6x10.pcf.Z cursor.pcf.Z

6x13B.pcf.Z clB6x12.pcf.Z deccurs.pcf.Z

6x9.pcf.Z clB8x10.pcf.Z decsess.pcf.Z

7x13.pcf.Z clB8x12.pcf.Z fonts.alias7x13B.pcf.Z clB8x13.pcf.Z fonts.dir...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 117 / 277

4 Système de multifenêtrage : X 4.17 Répertoires de polices de caractères

Fichier « fonts.dir » : ce fichier contient la liste des polices durépertoire ; plus exactement des lignes au format :« fichier-de-la-police nom-X-de-la-police ». Par exemple :

...

6x13.pcf.Z -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1

...

Fichier « fonts.alias » : ce fichier contient des alias plus parlant que lesnoms complets des polices X. Par exemple :

...

fixed "-misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1"

...

L’ajout d’une fonte ne se résume pas à copier le fichier de la fonte dans lerépertoire !

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 118 / 277

Page 73: book2p(3)

4 Système de multifenêtrage : X 4.17 Répertoires de polices de caractères

Pour ajouter une police, il faudra faire appel à la commande« mkfontdir » :

1 créer le répertoire des polices si nécessaire : « mkdir /tmp/fonts »2 copier la police dans le répertoire : « cp toto.pcf /tmp/fonts »3 créer le fichier « fonts.dir » : « mkfontdir »4 créer éventuellement des alias : « vi /tmp/fonts/fonts.alias »5 ajouter le nouveau répertoire à son font path :

« xset +fp /tmp/fonts/ » ; Attention : il faut le slash final« /tmp/fonts/ »

6 reconstituer la liste à jour des polices X : « xset fp rehash »7 vérification des polices disponibles : « xlsfonts » ou « xset -q »8 utilisation des nouvelles polices :

« application-X.exe -fn nouvelle-fonte »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 119 / 277

4 Système de multifenêtrage : X 4.18 Serveur de polices de caractèresChapitre 4 • Système de multifenêtrage : X§4.18 • Serveur de polices de caractères

L’ajout de polices X sur un parc de machines est une opération pénible(voir transparent précédent).

⇒ Apparition d’un mécanisme de serveur de fontes X.

Administration simplifiée car centralisation des polices.

En X11R5 : programme « fs ».

En X11R6 et après : programme « xfs ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 120 / 277

Page 74: book2p(3)

4 Système de multifenêtrage : X 4.18 Serveur de polices de caractères

Syntaxe : « xfs [-config fichier-config] [-port n] »

Par défaut le fichier de configuration est « /etc/X11/fs/config ».

Par défaut le port TCP utilisé est 7100 (voir « /etc/services »).

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 121 / 277

4 Système de multifenêtrage : X 4.18 Serveur de polices de caractères

Exemple de fichier de configuration :

# allow a max of 10 clients to connect to this font server

client-limit = 10

catalogue = /chemin/vers/fonts/ibm,

/chemin/vers/fonts/ooffice,

/chemin/vers/fonts/cmps,

/chemin/vers/fonts/mathematica,

/chemin/vers/fonts/msttcorefonts,

/usr/X11R6/lib/X11/fonts/korean,

/usr/X11R6/lib/X11/fonts/misc:unscaled,

/usr/X11R6/lib/X11/fonts/75dpi:unscaled,

/usr/X11R6/lib/X11/fonts/100dpi:unscaled,

/usr/X11R6/lib/X11/fonts/Type1,

/usr/X11R6/lib/X11/fonts/cyrillic,

...

# how to log errors

use-syslog = on

# don’t listen to TCP ports by default for security reasons

# no-listen = tcp

port = 7100

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 122 / 277

Page 75: book2p(3)

4 Système de multifenêtrage : X 4.18 Serveur de polices de caractères

Utilisation d’un serveur de fontes par :« xset +fp tcp/xfs.example.com:7100 »

Liste des polices d’un serveur de fontes par :« fslsfonts -server tcp/xfs.example.com:7100 »

Test du serveur serveur de fontes par :« fsinfo -server tcp/xfs.example.com:7100 »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 123 / 277

4 Système de multifenêtrage : X 4.19 Gestionnaire de fenêtres, window managerChapitre 4 • Système de multifenêtrage : X§4.19 • Gestionnaire de fenêtres, window manager

Gestionnaire de fenêtres ≡ Window Manager ≡ client X au même titreque les autres. Il permet de réaliser les choses suivantes :

déplacer ou redimensionner une fenêtreiconifier ou non une fenêtrefaire passer au premier ou au dernier plan une fenêtredécorer les fenêtrescréer ou détruire les fenêtreslancer ou terminer des applications

L’emploi d’un gestionnaire de fenêtres n’a rien d’obligatoire mais ce seraitse priver de beaucoup de fonctionnalités.

Il ne faut pas confondre le gestionnaire de fenêtres avec le serveur X.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 124 / 277

Page 76: book2p(3)

4 Système de multifenêtrage : X 4.19 Gestionnaire de fenêtres, window manager

Quelques exemples de fenêtres décorées par des window managers :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 125 / 277

4 Système de multifenêtrage : X 4.20 Configuration de la session X, $HOME/.xsession, FAILSAFEChapitre 4 • Système de multifenêtrage : X§4.20 • Configuration de la session X, $HOME/.xsession, FAILSAFE

Sur une station avec une mire d’accueil graphique, le script« $HOME/.xsession » est lancé lors de la connexion et il configurel’environnement graphique de l’utilisateur :

applications X à lancer automatiquement au démarrage (par exempledes terminaux)réglages du clavierréglages de la sourisetc.

La durée de vie de la session sous X est celle du script« $HOME/.xsession ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 126 / 277

Page 77: book2p(3)

4 Système de multifenêtrage : X 4.20 Configuration de la session X, $HOME/.xsession, FAILSAFE

Forme générale du script « $HOME/.xsession » :

#!/bin/sh

client-X-1 &client-X-2 &...

appliX <--- pas de &

Le dernier client X n’est pas lancé en tâche de fond (sinon le script s’arrêtetout de suite et la session se ferme brutalement).

En général, le dernier client est le window manager.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 127 / 277

4 Système de multifenêtrage : X 4.20 Configuration de la session X, $HOME/.xsession, FAILSAFE

S’il y a des erreurs, les messages de celles-ci sont écrits dans le fichier« $HOME/.xsession-errors ».

En cas d’erreur grave dans « $HOME/.xsession » empêchant ledémarrage de la session X, utiliser le mode FailSafe :

disponible via les menus de la fenêtre d’accueil de KDEdisponible via les menus de la fenêtre d’accueil de GNOMEdans l’environnement de base X :

1 entrer le nom de login2 valider par la touche Retour3 entrer le mot de passe4 valider par la touche F1 et non pas par la touche Retour

Il apparait alors un simple xterm sans window manager. L’utiliser pourcorriger les erreurs indiquées dans le fichier« $HOME/.xsession-errors ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 128 / 277

Page 78: book2p(3)

4 Système de multifenêtrage : X 4.20 Configuration de la session X, $HOME/.xsession, FAILSAFE

Version KDE du FAILSAFE : via un menu :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 129 / 277

4 Système de multifenêtrage : X 4.20 Configuration de la session X, $HOME/.xsession, FAILSAFE

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 130 / 277

Page 79: book2p(3)

4 Système de multifenêtrage : X 4.20 Configuration de la session X, $HOME/.xsession, FAILSAFE

Pour lancer KDE, mettre au minimum dans son fichier« $HOME/.xsession »

#!/bin/sh

PATH=/usr/X11R6/bin:/usr/local/bin:$PATH

export PATH

startkde

Pour lancer GNOME, mettre au minimum dans son fichier« $HOME/.xsession »

#!/bin/sh

PATH=/usr/X11R6/bin:/usr/local/bin:$PATH

export PATH

enlightment &gnome-session

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 131 / 277

4 Système de multifenêtrage : X 4.21 Environnements CDE, KDE, GNOMEChapitre 4 • Système de multifenêtrage : X§4.21 • Environnements CDE, KDE, GNOME

Objectif avoué : fournir aux utilisateurs un environnement comparable aubureau de Windows, pratique, configurable à souhait

Plusieurs environnements «sympatiques» :CDE : cf « http://www.cde.com »KDE : cf « http://www.kde.org »GNOME : cf « http://www.gnome.org »

CDE quasi mort.

Guerre entre KDE et GNOME.

SUN a adopté GNOME.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 132 / 277

Page 80: book2p(3)

4 Système de multifenêtrage : X 4.21 Environnements CDE, KDE, GNOME

� CDE :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 133 / 277

4 Système de multifenêtrage : X 4.21 Environnements CDE, KDE, GNOME

� KDE :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 134 / 277

Page 81: book2p(3)

4 Système de multifenêtrage : X 4.21 Environnements CDE, KDE, GNOME

� GNOME :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 135 / 277

4 Système de multifenêtrage : X 4.21 Environnements CDE, KDE, GNOME

Revers de la médaille : complexité de l’environnement par rapport à ce quel’on faisait avant.

⇒ Impossible de configurer manuellement l’environnement.

Par exemple l’environnement graphique GNOME utilise une arborescencecomplexe de fichiers utilisateur :

% du $HOME/.gnome*22 .gnome/accels

18 .gnome/panel.d/default/launchers

38 .gnome/panel.d/default

40 .gnome/panel.d

2 .gnome/apps

2 .gnome/application-info

132 .gnome

14 .gnome-desktop

6 .gnome_private/panel.d/default

8 .gnome_private/panel.d

10 .gnome_private

2 .gnomerc-errors

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 136 / 277

Page 82: book2p(3)

4 Système de multifenêtrage : X 4.21 Environnements CDE, KDE, GNOME

Par exemple l’environnement graphique GNOME lance de nombreuxprocess lors d’une session X :% ps -axPID TT STAT TIME COMMAND

...

203 ?? R 53:03.26 X :0 -nolisten tcp (XFree86)

214 ?? Ss 0:00.85 gnome-smproxy --sm-config-prefix /.gnome-smproxy-kumf226 ?? Ss 0:05.55 /usr/X11R6/bin/sawfish --sm-client-id default2 --sm-p228 ?? S 0:03.47 xscreensaver -nosplash275 ?? Ss 0:18.31 panel --sm-config-prefix /panel.d/default-tZvCrQ/ --s277 ?? Ss 0:18.97 nautilus --sm-config-prefix /nautilus-DXsk2u/ --sm-cl280 ?? Is 0:00.02 gnome-name-service282 ?? I 0:00.28 /usr/X11R6/bin/gconfd-1 12285 ?? Is 0:00.85 oafd --ac-activate --ior-output-fd=16290 ?? Ss 0:01.16 tasklist_applet --activate-goad-server tasklist_apple292 ?? Ss 0:01.24 deskguide_applet --activate-goad-server deskguide_app300 ?? Is 0:00.01 /bin/sh -c gnome-terminal --use-factory --start-facto301 ?? R 0:13.20 gnome-terminal --use-factory --start-factory-server303 ?? I 0:00.01 gnome-pty-helper1047 ?? Is 0:00.22 oafd --ac-activate --ior-output-fd=22191 v0 I+ 0:00.00 /bin/sh /usr/X11R6/bin/startx

202 v0 I+ 0:00.00 xinit /users/sri/besancon/.xinitrc -- -nolisten tcp

208 v0 I 0:00.00 /bin/sh /users/sri/besancon/.xinitrc

209 v0 I 0:00.40 gnome-session...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 137 / 277

4 Système de multifenêtrage : X 4.21 Environnements CDE, KDE, GNOME

Le recours à un Control Center est indispensable :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 138 / 277

Page 83: book2p(3)

4 Système de multifenêtrage : X 4.22 Réinitialisation des environnements KDE / GnomeChapitre 4 • Système de multifenêtrage : X§4.22 • Réinitialisation des environnements KDE / Gnome

Que faire si votre environnement KDE ou GNOME ne fonctionne plus ?

Lancez la commande suivante spécifique à la Formation Permanente :

% ~besancon/resetX

et suivez les instructions.

Attention : cela effacera toute configuration personnalisée de KDEou de GNOME !

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 139 / 277

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, sshChapitre 4 • Système de multifenêtrage : X§4.23 • Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

Rappel : principe client / serveur :

On veut pouvoir contrôler quels clients X peuvent se connecter auserveur X.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 140 / 277

Page 84: book2p(3)

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

� Contrôle d’accès par machine

La commande « xhost » permet de gérer de façon basique les accès auserveur X :

% xhostaccess control enabled, only authorized clients can connect

% xhost + machine2.example.commachine2.example.com being added to access control list

% xhostaccess control enabled, only authorized clients can connect

INET:machine2.example.com

% xhost - machine2.example.commachine2.example.com being removed from access control list

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 141 / 277

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

En pratique :

% echo $DISPLAYmachine1.example.com:0.0

% xhost + machine2.example.com

% rlogin machine2.example.com

$ DISPLAY=machine1.example.com:0.0

$ export DISPLAY

$ clientX <- affichage des fenêtres du client X distant

...

$ exit

% xhost - machine1.example.com

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 142 / 277

Page 85: book2p(3)

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

Défauts de la commande « xhost » :

Le principal défaut de la commande xhost est d’autoriser unemachine et donc tout utilisateur y étant connecté.Si l’utilisateur fait « xhost + » sans comprendre ⇒ tout client Xpeut se connecter ! Dangereux !

Exemples :lecture / espionnage du clavier ≡ spywarePar exemple récupération de mots de passe lors de «su root»Cf « ftp://ftp.giga.or.at/pub/hacker/unix/xscan.tar.gz »destruction de fenêtres par l’utilisation de « xkill » par exemplecapture d’écran par l’utilisation de « xwd -root »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 143 / 277

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

� Contrôle d’accès par utilisateur : MAGIC-COOKIE, xauth

Solution au problème de l’autorisation XHOST : emploi d’un cookie,pseudo secret connu du serveur à rappeler lors d’une demande deconnexion au serveur X.

Serveur X

réseau

xdm

transmission du cookie au démarrage

démarrage du terminal X : lancement de X −direct$HOME/.Xauthority

copie du cookie2 2bis

1

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 144 / 277

Page 86: book2p(3)

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

Qui peut connaître le cookie ?Celui qui peut accèder au contenu du fichier « $HOME/.Xauthority »

Serveur X

magic cookie A

réseau

~alice/.XauthorityTransmission magic cookie A

Transmission magic cookie B~bob/.Xauthority

CLIENT X 1

CLIENT X 2

ACCEPTÉ

REFUSÉ

⇒ La sécurité de X repose dans ce cas sur la sécurité du filesystem. D’où :

% ls -l $HOME/.Xauthority-rw------- 1 besancon software 1510 Dec 17 19:12 $HOME/.Xauthority

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 145 / 277

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

Que faire si « $HOME/.Xauthority » n’est pas disponible sur la machinedistante ?

⇒ Utiliser la commande « xauth » pour les opérations suivantes :1 extraction du MAGIC-COOKIE du DISPLAY de la machine locale

(login local = « besancon »)2 copie sur la machine distante du MAGIC-COOKIE

(le login distant peut être différent = « tbesancon »)3 fusion sur la machine distante du MAGIC-COOKIE au fichier

« $HOME/.Xauthority » distantce qui se traduit par l’une de ces commandes :

% xauth extract - $DISPLAY | rsh host2.example.com -l tbesancon xauthmerge -

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 146 / 277

Page 87: book2p(3)

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

Défauts du mécanisme du MAGIC-COOKIE : le cookie transite en clair surle réseau et peut donc être récupéré par un mouchard.

⇒ Pas de réponse simple à ce problème en dehors du protocoleSUN-DES-1 mais très peu répandu (chiffrement des données d’autorisationpar DES et transfert par Secure RPC ce qui implique NIS = compliqué)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 147 / 277

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

� SSH et MAGIC-COOKIE

Défaut de la commande « xauth » : syntaxe lourde lorsque le fichier« $HOME/.Xauthority » n’est pas disponible sur la machine distante ;rappel :

% xauth extract - $DISPLAY | rsh host2.example.com -l tbesancon xauthmerge -

Solution : SSH (voir « http://www.openssh.org »)

SSH incorpore de base un mécanisme de transmission automatique duDISPLAY et du cookie associé avec sécurisation de la liaison parchiffrement de la communication.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 148 / 277

Page 88: book2p(3)

4 Système de multifenêtrage : X 4.23 Sécurité : xhost, MAGIC-COOKIE, xauth, ssh

$DISPLAY = stationA:0.0

client X

ChiffrementDechiffrement

ChiffrementDechiffrement

PSEUDO SERVEUR X

PSEUDO $DISPLAY

= stationB:11.0

client X

SSH

PSEUDO CLIENT X

SSH

réseau

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 149 / 277

4 Système de multifenêtrage : X 4.24 X Display Manager ProtocolChapitre 4 • Système de multifenêtrage : X§4.24 • X Display Manager Protocol

XDMCP : X Display Management Control ProtocolX Display Manager (processus « xdm ») est un client qui contrôle laconnexion de l’utilisateur et lance sa session.Visuellement, c’est une fenêtre d’authentification :

cerise.example.com

Login:

Password:

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 150 / 277

Page 89: book2p(3)

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

On a plusieurs programmes XDM disponibles :« xdm » : programme de base historique« kdm » : version KDE améliorée de XDM« gdm » : version GNOME améliorée de XDM

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 151 / 277

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

Programmes plus ou moins complexes, riches, personnalisables :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 152 / 277

Page 90: book2p(3)

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

Plusieurs fichiers et shell-scripts de configuration de XDM :

TakeConsole

Xsetup_0

Xservers

Xaccess

Xresources

GiveConsole

Xsession

xdm-config

.xsession

.Xresources

/usr/X11R6/lib/X11/xdm $HOME

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 153 / 277

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

� fichier « xdm-config »

C’est un fichier de ressources pour le programme « xdm ».

Il indique les autres fichiers de configuration ou des shell scripts.

� fichier « Xservers »

A l’origine indique la liste des serveurs X à gérer ; à partir de X11R4, leprotocole XDMCP permet à un DISPLAY de contacter XDM et de se fairegérer

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 154 / 277

Page 91: book2p(3)

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

� fichier « Xaccess »

Il définit la liste des serveurs X autorisés à se connecter à XDM ; unserveur X émet une requête de gestion d’un de ces types :

requête « direct »requête « indirect »requête « broadcast »

Syntaxe utilisant des metacharacters :« *.example.com », « !cerise.example.com », etc.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 155 / 277

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

Accès direct :

X

Login:

Requete XDMCP directe

xdm

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 156 / 277

Page 92: book2p(3)

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

Accès indirect :

X

Login:

Requete XDMCP indirecte

xdm1 xdm2

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 157 / 277

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

Accès broadcast :

X

Login:

Requete XDMCP broadcast

xdm3

xdm2

xdm1

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 158 / 277

Page 93: book2p(3)

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

Possibilité d’avoir un chooser (sélection de hôtes UNIX) :liste explicite d’hôtes :« ncd.example.com CHOOSER unix1.example.com unix2.example.com »

liste par broadcast d’hôtes :« ncd.example.com CHOOSER BROADCAST »

X

Liste predefinieou broadcast

X

chooser

Requete XDMCP indirecte

xdm

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 159 / 277

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

� fichier « Xresources »

Définit les ressources utilisés par la fenêtre de connexion.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 160 / 277

Page 94: book2p(3)

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

� fichiers « GiveConsole », « TakeConsole »

Ce sont des shells scripts.

Ils définissent les opérations système à faire à la connexion et à ladéconnexion de l’utilisateur. Par exemple :

rendre l’utilisateur propriétaire de « /dev/console »rendre l’utilisateur propriétaire de « /dev/fb »rendre l’utilisateur propriétaire du périphérique de la carte son

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 161 / 277

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

� fichier « Xsession »

Définit la session de l’utilisateur après sa connexion.

En général, c’est un shell script qui appelle le script « $HOME/.xsession »de l’utilisateur, qui charge les ressources de l’utilisateur, etc.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 162 / 277

Page 95: book2p(3)

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

Par exemple sur SUN SOLARIS :

#!/bin/sh

# redirect errors to a file in user’s home directory if we can

for errfile in "$HOME/.xsession-errors" "${TMPDIR-/tmp}/xses-$USER" "/tmp/xses-$USER"

do

if ( cp /dev/null "$errfile" 2> /dev/null )

then

chmod 600 "$errfile"

exec > "$errfile" 2>&1

break

fi

done

case $# in

1)

case $1 in

failsafe)

exec xterm -geometry 80x24-0-0

;;

esac

esac

Suite sur le transparent suivant. . .c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 163 / 277

4 Système de multifenêtrage : X 4.24 X Display Manager Protocol

Suite. . .

startup=$HOME/.xsession

resources=$HOME/.Xresources

if [ -f "$startup" ]; then

exec "$startup"

else

if [ -f "$resources" ]; then

xrdb -load "$resources"

fi

twm &

exec xterm -geometry 80x24+10+10 -ls

fi

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 164 / 277

Page 96: book2p(3)

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminauxChapitre 4 • Système de multifenêtrage : X§4.25 • Terminaux X / Clients légers X / Autres terminaux

� Terminaux X

Un terminal X est un poste de travail graphique :offrant le système graphique Xsans système d’exploitation complexe à gérer et à maintenirsimple à configurer

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 165 / 277

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Fonctionnement :

boot du terminalrequête DHCP ou BOOTP qui retourne l’adresse IP et l’adresseTFTP du serveur X à télécharger :host droopy.example.com {

hardware ethernet 00:80:96:04:71:63;

fixed-address 192.168.1.69;

filename "/hds/netOS/tX/prom/common/X.hds";

}

téléchargement par TFTP du serveur X du terminal et de saconfigurationlancement du serveur X qui accroche le XDM d’un serveur précisé parla configuration téléchargée

Parfois, NFS est utilisable à la place des téléchargements TFTP.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 166 / 277

Page 97: book2p(3)

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Après 2000, on constate :

coût élevé d’un terminal X ; parfois plus cher qu’un poste PCWindows multimédiadésaffection des constructeurs (HDS, NCD ont fermé boutique)manque de périphériques supportés ; pas de floppy, pas de son, pas deUSB. . .

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 167 / 277

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

� Terminaux légers

Un «vrai» terminal X est maintenant trop cher.Un «vrai» terminal X est maintenant trop limitatif : pas de multimédia

Solution : le client léger

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 168 / 277

Page 98: book2p(3)

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Le client léger : ni un PC, ni un terminal X :

succédané d’architecture de PC x86faible consommation électrique ⇒ pas de ventilateur ⇒ silencieuxmémoire flash (pas de disque dur local)système d’exploitation de type LINUX minimaliste ou Windows CE ⇒support des périphériques récents (USB, wake-on-lan, . . .)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 169 / 277

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

� Autres terminaux : Sunray

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 170 / 277

Page 99: book2p(3)

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 171 / 277

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Caractéristiques du SUNRAY :

Pas de disque durPas d’applications localesPas de configurationPas de système d’exploitationPas de barrette mémoirePas de ventilateurPas de paramétrage particulierIl est 10 fois plus léger qu’un PC et 12 fois moins volumineuxIl peut même s’intégrer dans un écran cathodique 17 pouces ou unécran plat de 15 pouces...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 172 / 277

Page 100: book2p(3)

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Avantages :

Instantané, constant et simpleGestion centraliséeJamais besoin de mise à jourSilencieux16 millions de couleurs (24 bits)Pas de setupDonc, pas de dé-setupPas de modifications de vos applicationsAUCUN tranfert de fichier au boot

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 173 / 277

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Caractéristiques hardware :

CPU Sparc1280 x 1024 @ 76 Hzframe buffer 24 bits10/100Mb EthernetAccès a Solaris , X11, Java , ICAfonctionnalités multimédiaLecteur de carte à puceE/S audio qualité CDEntrée vidéo NTSC/PALSupport USB ( 4 ports ) mais limité en pratique. . .

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 174 / 277

Page 101: book2p(3)

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Architecture réseau :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 175 / 277

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Architecture logicielle :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 176 / 277

Page 102: book2p(3)

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Architecture logicielle (2) :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 177 / 277

4 Système de multifenêtrage : X 4.25 Terminaux X / Clients légers X / Autres terminaux

Cohabitation avec Windows possible :

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 178 / 277

Page 103: book2p(3)

Chapitre 5

Langage SQL

Explications sur le pourquoi de ce chapitre

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 179 / 277

5 Langage SQL 5.1 IntroductionChapitre 5 • Langage SQL§5.1 • Introduction

SQL ≡ Structured Query Language

SQL permet :la définition et la modification du schéma de la base de donnéesla manipulation des donnéesl’interrogation des donnéesle contrôle des accès à la base

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 180 / 277

Page 104: book2p(3)

5 Langage SQL 5.2 Définition des exemplesChapitre 5 • Langage SQL§5.2 • Définition des exemples

Voici les relations qui seront utilisées dans ce cours :

Table AVIONNumav Capacite Type Entrepot

14 25 A400 Garches345 75 B200 Maubeuge

Table PILOTEMatricule Nom Ville Age Salaire

1 Figue Cannes 45 280042 Lavande Touquet 24 11758

Table PASSAGERNumtab Nomab

1 Nifance2 Tearice

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 181 / 277

5 Langage SQL 5.2 Définition des exemples

Table VOLNumvol Heure_depart Heure_arrivee Ville_depart Ville_arrivee

AL12 08-18 09-12 Paris LillesAF8 11-20 23-54 Vaux Rio

Table DEPARTNumvol Date_dep Numav Matricule

AL12 31-DEC-95 14 1AL12 19-DEC-95 342 2

Table RESERVATIONNumab Numvol Date_sep

1 AL12 31-DEC-952 AL12 31-DEC-95

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 182 / 277

Page 105: book2p(3)

5 Langage SQL 5.3 Description des donnéesChapitre 5 • Langage SQL§5.3 • Description des données

� Création d’une relation

CREATE TABLE Pilote (

pl# Number(4),

plnom char(20),

adresse char(30)

) ;

� Création d’une relation avec contraintes d’intégrité

CREATE TABLE Pilote (

pl# Number(4) not null,

plnom char(20),

adresse char(30)

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 183 / 277

5 Langage SQL 5.3 Description des données

� Création d’index

CREATE UNIQUE INDEX IPL#

ON Pilote(pl#);

� Suppression d’une relation

DROP TABLE Pilote ;

� Modification du schéma d’une relation

ALTER TABLE Pilote ADD ( age number(2) );

ALTER TABLE Pilote MODIFY ( adresse char(50) );

ALTER TABLE Pilote MODIFY ( pl# not null );

� Création d’une vue

CREATE VIEW VoldeParis AS (

SELECT vol#, va, hd, ha

FROM Vol

WHERE vd=’Paris’

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 184 / 277

Page 106: book2p(3)

5 Langage SQL 5.4 Manipulation des donnéesChapitre 5 • Langage SQL§5.4 • Manipulation des données

� Insertion des données

INSERT INTO Pilote values (1, ’Antoine’, ’Annecy’) ;

INSERT INTO Pilote values (2, ’Arthur’, ’Adge’) ;

INSERT INTO Pilote values (3, ’Jean’, null) ;

� Suppression des données

DELETE FROM Pilote WHERE pl# = 1 ;

� Modification des données

UPDATE Pilote

SET adresse = ’Aurillac’

WHERE pl#=2 ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 185 / 277

5 Langage SQL 5.5 Contrôle des accèsChapitre 5 • Langage SQL§5.5 • Contrôle des accès

� Fin normale (validation) d’une transaction

COMMIT ;

L’instruction commit rend effectifs les changements effectués sur la base.Ils deviennent visibles aux autres utilisateurs.

� Annulation d’une transaction

ROLLBACK ;

L’instruction rollback défait toutes les modifications effectuées sur la basedepuis le début de la transaction.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 186 / 277

Page 107: book2p(3)

5 Langage SQL 5.6 Projection, RestrictionChapitre 5 • Langage SQL§5.6 • Projection, Restriction

� Principe

SELECT AVION.numav

FROM AVION

WHERE AVION.capacite > 200 ;

Projection seule :

SELECT AVION.numav

FROM AVION ;

Restriction seule :

SELECT AVION.*FROM AVION

WHERE AVION.capacite > 200 ;

Exercice 1 : Quel est l’âge du pilote de matricule 15 ?Exercice 2 : Quels sont les pilotes de cette compagnie aérienne ? (leurmatricule, leur nom, leur ville, leur âge et leur salaire)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 187 / 277

5 Langage SQL 5.6 Projection, Restriction

� Tri

Tri croissant : ORDER BY... ASC

Tri décroissant : ORDER BY... DESC

SELECT AVION.numav

FROM AVION

WHERE AVION.capacite > 200

ORDER BY AVION.numav DESC ;

� Suppression des doubles

SELECT DISTINCT AVION.numav

FROM AVION

WHERE AVION.capacite > 200 ;

� Omission du préfixe

SELECT numav

FROM AVION

WHERE capacite > 200 ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 188 / 277

Page 108: book2p(3)

5 Langage SQL 5.6 Projection, Restriction

� Emploi de variables

SELECT A.numav

FROM AVION A

WHERE A.capacite > 200 ;

Exercice 3 : Quels sont les types d’avions entreposés à Tarascon, avec leurcapacité, par ordre de capacités croissantes ?

� Prédicats dans le critère de sélection

Les prédicats disponibles :=, !=, >, <, >=, <=OR, AND, LIKE, NOT NULL, IN, NOT, BETWEEN X AND Y

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 189 / 277

5 Langage SQL 5.6 Projection, Restriction

SELECT numav

FROM AVION

WHERE capacite > 200

AND ( (ENTREPOT = ’Saint nom la Breteche’)

OR (ENTREPOT = ’Mantes la jolie’)

)

AND numav != 300 ;

SELECT numav

FROM AVION

WHERE entrepot in (’Saint nom la Breteche’, ’Mantes la jolie’)

AND capacite BETWEEN 200 AND 210

AND TYPE LIKE ’B_EING%’;

Exercice 4 : Quelles sont les villes ayant un nom commencant par ’L’ et oùun pilote de moins de 20 ans gagne plus de 20000 F ?Exercice 5 : Quels sont les numéros d’avions, avec leut entrepôt, nerésidant pas à Marolles-en-Hurepoix, ayant une capacité supérieure à 200 ?(donnés par ordre de numéros décroissants)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 190 / 277

Page 109: book2p(3)

5 Langage SQL 5.6 Projection, Restriction

� Les fonctions

Quelques fonctions disponibles :

fonction lower(a)

fonction soundex(a)

fonction abs(a)

fonction sqrt(a)

fonction length(a)

etc.

SELECT numav

FROM AVION

WHERE LOWER(ENTREPOT) = ’le vesiney’;

SELECT MATRICULE, NOM

FROM PILOTE

WHERE SOUNDEX(NOM) = SOUNDEX(’SINTEXUPERI’) ;

SELECT UPPER(NOM)

FROM PILOTE

WHERE ADRESSE = ’Cordillère des Andes’ ;

Exercice 6 : Quelles sont les villes d’où part un vol pour Ajaccio ? (donnerles résultats en majuscule)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 191 / 277

5 Langage SQL 5.6 Projection, Restriction

� Les agrégats

Quelques agrégats disponibles :

agrégat avg()agrégat count()agrégat max()agrégat min()

agrégat sum()agrégat stddev()agrégat variance()etc.

Exemple : Quel est le nombre d’avions ayant une capacité supérieure à200 ?

SELECT COUNT(NUMAV)

FROM AVION

WHERE CAPACITE > 200 ;

SELECT COUNT(DISTINCT NUMAV)

FROM AVION

WHERE CAPACITE > 200 ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 192 / 277

Page 110: book2p(3)

5 Langage SQL 5.6 Projection, Restriction

Exercice 7 : Quel est le nombre d’avions en service (ie dans la relationDEPART), le 19 décembre 1995 ?Exercice 8 : Quelle est la capacité moyenne des avions entreposés à PogoTogo ?

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 193 / 277

5 Langage SQL 5.7 Les requêtes imbriquéesChapitre 5 • Langage SQL§5.7 • Les requêtes imbriquées

� Prédicat d’existence

SELECT

FROM

WHERE EXISTS ( SELECT

FROM

WHERE

) ;

Exemple : Quels sont les pilotes qui habitent dans une ville où n’est baséaucun avion ?

SELECT PILOTE.NOM

FROM PILOTE

WHERE NOT EXISTS ( SELECT AVION.*FROM AVION

WHERE AVION.ENTREPOT = PILOTE.VILLE

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 194 / 277

Page 111: book2p(3)

5 Langage SQL 5.7 Les requêtes imbriquées

� Requête à l’intérieur du IN

Exemple : Quels sont les noms des pilotes qui habitent dans une ville oùsont localisés des avions de capacité supérieure à 250 ?

SELECT PILOTE.NOM

FROM PILOTE

WHERE VILLE IN ( SELECT ENTREPOT

FROM AVION

WHERE CAPACITE > 250

) ;

Exercice 9 : Exprimer la requête suivante avec un EXISTS : Quels sont lesnoms des pilotes qui habitent dans une ville où sont localisés des avions decapacité supérieure à 250 ?Exercice 10 : Exprimer la requête suivante avec un IN : Quels sont lesnoms des passagers ayant réservé pour le 1er avril 1996 ?

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 195 / 277

5 Langage SQL 5.8 La jointureChapitre 5 • Langage SQL§5.8 • La jointure

2 méthodes principales :prédicativerequêtes imbriquées

Exemple : Quels sont les noms des pilotes qui assurent un vol le vendredi13 octobre 1996 ?Prédicative :SELECT PILOTE.NOM

FROM PILOTE, DEPART

WHERE PILOTE.MATRICULE = DEPART.MATRICULE

AND DEPART.DAPE_SEP = ’13-10-95’;

Imbrication :SELECT NOM

FROM PILOTE

WHERE MATRICULE IN ( SELECT DEPART.MATRICULE

FROM MATRICULE

WHERE DATE_SEP = ’13-10-95’

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 196 / 277

Page 112: book2p(3)

5 Langage SQL 5.8 La jointure

Il y a de nombreuses autres façons d’exprimer une jointure.Par exemple :

SELECT PILOTE.NOM

FROM PILOTE

WHERE EXISTS ( SELECT *FROM DEPART

WHERE

PILOTE.MATRICULE = DEPART.MATRICULE

AND DEPART.DATE_DEP = ’13-10-95’

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 197 / 277

5 Langage SQL 5.8 La jointure

Exercice 11 : Quels sont les noms des pilotes qui assurent un vol levendredi 13 octobre 1995, sur un avion de capacité supérieure à 250 ?

de manière prédicativeà l’aide de requêtes imbriquées

Exercice 12 : Quelles sont les paires de pilotes (matricules) habitant dansla même ville ?Exercice 13 : Quels sont les noms des pilotes qui conduisent l’avion denuméro 666 ?Exercice 14 : Quels sont les noms des pilotes qui habitent dans la ville oùest entreposé l’avion 666 ?

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 198 / 277

Page 113: book2p(3)

5 Langage SQL 5.9 L’unionChapitre 5 • Langage SQL§5.9 • L’union

Quels sont les pilotes qui conduisent l’avion de numéro 666 OU quihabitent dans la ville où est entreposé l’avion 666 ?

SELECT NOM

FROM PILOTE, DEPART

WHERE PILOTE.MATRICULE = DEPART.MATRICULE

AND DEPART.NUMAV = 666

UNION

SELECT NOM

FROM PILOTE, AVION

WHERE PILOTE.VILLE = AVION.ENTREPOT

AND AVION.NUMAV = 666 ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 199 / 277

5 Langage SQL 5.10 L’intersectionChapitre 5 • Langage SQL§5.10 • L’intersection

Quels sont les pilotes qui conduisent l’avion de numéro 666 ET quihabitent dans la ville où est entreposé l’avion 666 ?

SELECT NOM

FROM PILOTE, DEPART

WHERE PILOTE.MATRICULE = DEPART.MATRICULE

AND DEPART.NUMAV = 666

INTERSECT

SELECT NOM

FROM PILOTE, AVION

WHERE PILOTE.VILLE = AVION.ENTREPOT

AND AVION.NUMAV = 666 ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 200 / 277

Page 114: book2p(3)

5 Langage SQL 5.11 La différenceChapitre 5 • Langage SQL§5.11 • La différence

Quels sont les pilotes qui conduisent l’avion de numéro 666 SAUF ceux quihabitent dans la ville où est entreposé l’avion 666 ?

SELECT NOM

FROM PILOTE, DEPART

WHERE PILOTE.MATRICULE = DEPART.MATRICULE

AND DEPART.NUMAV = 666

MINUS

SELECT NOM

FROM PILOTE, AVION

WHERE PILOTE.VILLE = AVION.ENTREPOT

AND AVION.NUMAV = 666 ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 201 / 277

5 Langage SQL 5.12 La divisionChapitre 5 • Langage SQL§5.12 • La division

Quels sont les pilotes qui conduisent tous les avions ?≡ Quels sont les pilotes tels que, quel que soit l’avion, ils le conduisent ?≡ Quels sont les pilotes tels que, quel que soit l’avion, il existe un départassuré par ce pilote sur cet avion ?≡ Quels sont les pilotes tels qu’il n’existe pas d’avion tel qu’il n’existe pasdépart de ce pilote sur cet avion ?

SELECT MATRICULE

FROM PILOTE

WHERE NOT EXISTS ( SELECT *FROM AVION

WHERE NOT EXISTS ( SELECT *FROM DEPART

WHERE DEPART.MATRICULE = PILOTE.MATRICULE

AND DEPART.NUMAV = AVION.NUMAV

)

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 202 / 277

Page 115: book2p(3)

5 Langage SQL 5.12 La division

Exercice 15 : Quels sont les passagers qui ont réservé sur tous les vols ?Exercice 16 : Quel est le nombre de pilotes qui conduisent des avions enservice ? (ie dans la relation DEPART)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 203 / 277

5 Langage SQL 5.13 Group byChapitre 5 • Langage SQL§5.13 • Group by

L’opérateur GROUP BY partitionne la table.Exemple : Quel est le nombre de pilotes qui conduisent des avions enservice, par avion ?

SELECT NUMAV, COUNT(DISTINCT DEPART.MATRICULE)

FROM DEPART

GROUP BY NUMAV ;

Exercice 17 : Quelle est la capacité moyenne des avions, par entrepôt etpart type ?

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 204 / 277

Page 116: book2p(3)

5 Langage SQL 5.14 Group by . . . HAVINGChapitre 5 • Langage SQL§5.14 • Group by . . . HAVING

L’opérateur HAVING permet d’introduire une qualification sur lessous-tables issues du GROUP BY.Le HAVING est au GROUP BY ce que le WHERE est au FROM.Exemple : quels sont les avions qui assurent plus de 3 départ ?

SELECT DEPART.NUMAV

FROM DEPART

GROUP BY NUMAV

HAVING COUNT(*) > 3 ;

Exercice 18 : Quelles sont les villes où sont entreposés plus de 2 avions detype ICBM ?

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 205 / 277

5 Langage SQL 5.15 ConclusionChapitre 5 • Langage SQL§5.15 • Conclusion

SQL est un langage d’interrogation très lisible, par tous les utilisateurs.SQL est un langage dans lequel il est relativement facile d’écrire, pour unprogrammeur, à condition de bien visualiser l’ordre d’application desinstructions :

1 From2 Where3 Group By4 Having5 Select6 Order By

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 206 / 277

Page 117: book2p(3)

5 Langage SQL 5.16 Correction des exercicesChapitre 5 • Langage SQL§5.16 • Correction des exercices

� Exercice 1

Quel est l’âge du pilote de matricule 15 ?

SELECT PILOTE.AGE

FROM PILOTE

WHERE MATRICULE = 15 ;

� Exercice 2

Quels sont les pilotes de cette compagnie aérienne (leur matricule, leurnom leur ville, leur âge et leur salaire)

SELECT *FROM PILOTE ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 207 / 277

5 Langage SQL 5.16 Correction des exercices

� Exercice 3

Quels sont les types d’avions entreposés à Tarascon, avec leur capacité,par ordre de capacité croissantes ?

SELECT DISTINCT TYPE, CAPACITE

FROM AVION

WHERE ENTREPOT = ’Tarascon’

ORDER BY CAPACITE ASC ;

� Exercice 4

Quelles sont les villes ayant un nom commençant par L et où un pilote demoins de 20 ans gagne plus de 200000 F ?

SELECT VILLE

FROM PILOTE

WHERE AGE < 20

AND SALAIRE > 200000

AND VILLE LIKE ’L%’;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 208 / 277

Page 118: book2p(3)

5 Langage SQL 5.16 Correction des exercices

� Exercice 5

Quels sont les numéros d’avions, avec leur entrepôt, ne résidant pas àMarolles-en-Hurepoix, ayant une capacité supérieure à 200 ? (donnés parordre de numéros décroissants)

SELECT NUMAV, ENTREPOT

FROM AVION

WHERE ENTREPOT != ’Marolles-en-Hurepoix’

AND CAPACITE > 200

ORDER BY NUMAV DESC ;

� Exercice 6

Quelles sont les villes d’où part un vol pour Ajaccio ? (donner les résultatsen majuscules)

SELECT UPPER(VILLE_DEPART)

FROM VOL

WHERE VILLE_ARRIVEE = ’Ajaccio’;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 209 / 277

5 Langage SQL 5.16 Correction des exercices

� Exercice 7

Quel est le nombre d’avions en service (ie dans la relation DEPART), le 19décembre 1995 ?

SELECT COUNT(DISTINCT NUMAV)

FROM DEPART

WHERE DATE_DEP = ’19-12-95’ ;

� Exercice 8

Quelle est la capacité moyenne des avions entreposés à Pogo Togo ?

SELECT AVG(ALL CAPACITE)

FROM AVION

WHERE AVION.ENTREPOT = ’Pogo Togo’;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 210 / 277

Page 119: book2p(3)

5 Langage SQL 5.16 Correction des exercices

� Exercice 9

Exprimer la requête suivante avec un EXISTS :Quels sont les noms des pilotes qui habitent dans une ville où sontlocalisés des avions de capacité supérieure à 250 ?

SELECT PILOTE.NOM

FROM PILOTE

WHERE EXISTS ( SELECT *FROM AVION

WHERE CAPACITE > 250

AND AVION.ENTREPOT = PILOTE.VILLE

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 211 / 277

5 Langage SQL 5.16 Correction des exercices

� Exercice 10

Quels sont les noms des passagers ayant réservé pour le 1er avril 1996 ?(avec un IN)

SELECT PASSAGER.NOMAB

FROM PASSAGER

WHERE NUMAB IN ( SELECT RESERVATION.NUMAB

FROM RESERVATION

WHERE RESERVATION.DATE_DEP = ’01-04-96’

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 212 / 277

Page 120: book2p(3)

5 Langage SQL 5.16 Correction des exercices

� Exercice 11 a

Quels sont les noms des pilotes qui assurent un vol le vendredi 13 octobre1995, sur un avion de capacité supérieure à 250 ?De manière prédicative :

SELECT PILOTE.NOM

FROM PILOTE, DEPART, AVION

WHERE PILOTE.MATRICULE = DEPART.MATRICULE

AND DEPART.DATE_DEP = ’13-10-95’

AND DEPART.NUMAV = AVION.NUMAV

AND AVION.CAPACITE > 250 ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 213 / 277

5 Langage SQL 5.16 Correction des exercices

� Exercice 11 b

Quels sont les noms des pilotes qui assurent un vol le vendredi 13 octobre1995, sur un avion de capacité supérieure à 250 ?A l’aide de requêtes imbriquées :

SELECT NOM

FROM PILOTE

WHERE MATRICULE IN ( SELECT DEPART.MATRICULE

FROM DEPART

WHERE DATE_DEP = ’13-10-95’

AND NUMAV IN ( SELECT AVION.NUMAV

FROM AVION

WHERE CAPACITE > 250

)

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 214 / 277

Page 121: book2p(3)

5 Langage SQL 5.16 Correction des exercices

� Exercice 12

Quelles sont les paires de pilotes (matricules) habitant dans la même ville ?

SELECT P1.MATRICULE, P2.MATRICULE

FROM PILOTE P1, PILOTE P2

WHERE P1.VILLE = P2.VILLE

AND P1.MATRICULE > P2.MATRICULE ;

(il s’agit d’une auto jointure)

� Exercice 13

Quels sont les noms des pilotes qui conduisent l’avion de numéro 666 ?

SELECT NOM

FROM PILOTE, DEPART

WHERE PILOTE.MATRICULE = DEPART.MATRICULE

AND DEPART.NUMAV = ’666’ ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 215 / 277

5 Langage SQL 5.16 Correction des exercices

� Exercice 14

Quels sont les noms des pilotes qui habitent dans la ville où est entreposél’avion 666 ?

SELECT NOM

FROM PILOTE, AVION

WHERE PILOTE.VILLE = AVION.ENTREPOT

AND AVION.NUMAV = ’666’;

� Exercice 15

Quels sont les passagers qui ont réservé sur tous les vols ?

SELECT NUMAB

FROM PASSAGER

WHERE NOT EXISTS ( SELECT *FROM VOL

WHERE NOT EXISTS ( SELECT *FROM RESERVATION

WHERE RESERVATION.NUMAB = PASSAGER.NUMAB

AND RESERVATION.NUMVOL = VOL.NUMVOL

)

) ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 216 / 277

Page 122: book2p(3)

5 Langage SQL 5.16 Correction des exercices

� Exercice 16

Quel est le nombre de pilotes qui conduisent des avions en service ? (iedans la relation DEPART)

SELECT COUNT(DISTINCT DEPART.MATRICULE)

FROM DEPART ;

� Exercice 17

Quelle est la capacité moyenne des avions, par entrepôt et par type ?

SELECT ENTREPOT, TYPE, AVG(CAPACITE)

FROM AVION

GROUP BY ENTREPOT, TYPE ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 217 / 277

5 Langage SQL 5.16 Correction des exercices

� Exercice 18

Quelles sont les villes où sont entreposés plus de 2 avions de type ICBM ?

SELECT ENTREPOT

FROM AVION

WHERE TYPE = ’ICBM’

GROUP BY ENTREPOT

HAVING COUNT(*) > 2 ;

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 218 / 277

Page 123: book2p(3)

Chapitre 6

Base de données ORACLE

Explications sur le pourquoi de ce chapitre

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 219 / 277

6 Base de données ORACLE 6.1 IntroductionChapitre 6 • Base de données ORACLE§6.1 • Introduction

Plusieurs moteurs de bases de données disponibles :OracleMicrosoft SQL ServerMicrosoft MSDE (version light et gratuite de SQL Server)IBM DB2SybaseMYSQLPOSTGRESQL

ORACLE est la référence en bases de données.

Version de ORACLE disponible au moment de l’écriture de ce document :10gSite officiel : http://www.oracle.com

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 220 / 277

Page 124: book2p(3)

6 Base de données ORACLE 6.1 Introduction

A noter qu’Oracle diffuse maintenant des versions gratuites 100%fonctionnelles pour LINUX, pour SOLARIS, pour WINDOWS.

A noter le livre « Oracle 9i sous Linux » par Gilles Briard, éditeur Eyrolles,prix 50 euros, livré avec la distribution Oracle 9i complète pour Linux. (jen’ai pas lu le livre)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 221 / 277

6 Base de données ORACLE 6.2 Outil TOADChapitre 6 • Base de données ORACLE§6.2 • Outil TOAD

Outil de mise au point des requêtes SQL : TOAD

Voir « http://www.toadsoft.com »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 222 / 277

Page 125: book2p(3)

Chapitre 7

Base de données MYSQL

Explications sur le pourquoi de ce chapitre

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 223 / 277

7 Base de données MYSQL 7.1 IntroductionChapitre 7 • Base de données MYSQL§7.1 • Introduction

Plusieurs moteurs de bases de données disponibles :OracleMicrosoft SQL ServerMicrosoft MSDE (version light et gratuite de SQL Server)IBM DB2SybaseMYSQLPOSTGRESQL

Version de MYSQL disponible au moment de l’écriture de ce document :5.0.22 (2006-08-03)Site officiel : http://www.mysql.comChangement de la licence de MYSQL dans la version 4. Mal reçu par lacommunauté des développeurs ⇒ Par exemple dans PHP 5, il n’y a plusde support d’origine pour MYSQL.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 224 / 277

Page 126: book2p(3)

7 Base de données MYSQL 7.2 Utilisateur UNIX dédié à MYSQL : mysqlChapitre 7 • Base de données MYSQL§7.2 • Utilisateur UNIX dédié à MYSQL : mysql

Etape préliminaire à l’installation mais indispensable.

Le bon fonctionnement de MYSQL nécessite la définition d’un utilisateurau sens UNIX qui s’appelle « mysql ».

On créera aussi un groupe UNIX « mysql ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 225 / 277

7 Base de données MYSQL 7.3 Arborescence MYSQLChapitre 7 • Base de données MYSQL§7.3 • Arborescence MYSQL

Par défaut, les sources de MYSQL s’installeront dans« /usr/local/mysql ».On trouvera alors dans « /usr/local/mysql » :

sous-répertoire « bin » : binaires de l’applicationsous-répertoire « include/mysql » : headers de programmation Csous-répertoire « info » : fichiers de documentationsous-répertoire « lib/mysql » : librairies partagéessous-répertoire « libexec » : binaires « système » de l’applicationsous-répertoire « share/mysql » : fichiers des textes des erreurssous-répertoire « sql-bench » : fichiers de testssous-répertoire « var » : fichiers de données et de log

A noter le fichier « var/my.cnf » qui définit la configuration de MYSQL.L’installation de MYSQL doit se compléter de la création des basesinitiales de MYSQL.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 226 / 277

Page 127: book2p(3)

7 Base de données MYSQL 7.4 Création des bases initiales MYSQL : mysql_install_dbChapitre 7 • Base de données MYSQL§7.4 • Création des bases initiales MYSQL : mysql_install_db

(en anglais MYSQL install databases)Syntaxe : mysql_install_db

Par défaut, c’est le répertoire « var » dans l’arborescence MYSQL (pardéfaut donc « /usr/local/mysql/var »).

La création des bases initiales se fera sous l’identité de l’utilisateur« mysql ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 227 / 277

7 Base de données MYSQL 7.4 Création des bases initiales MYSQL : mysql_install_db

% iduid=6000(mysql) gid=6000(mysql)

% mysql_install_dbInstalling all prepared tables

Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server

to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:

/usr/local/mysql/bin/mysqladmin -u root password ’new-password’

/usr/local/mysql/bin/mysqladmin -u root -h linux.example.com password ’new-password’

See the manual for more instructions.

You can start the MySQL daemon with:

cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the ’sql-bench’ directory:

cd sql-bench ; perl run-all-tests

Please report any problems with the /usr/local/mysql/bin/mysqlbug script!

The latest information about MySQL is available on the web at

http://www.mysql.com

Support MySQL by buying support/licenses at https://order.mysql.comc©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 228 / 277

Page 128: book2p(3)

7 Base de données MYSQL 7.4 Création des bases initiales MYSQL : mysql_install_db

ATTENTION : Finaliser l’installation par la mise en place d’un mot depasse pour le compte SQL de nom « root » :

% /usr/local/mysql/bin/mysqladmin -u root password ’XXXXXXXX’

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 229 / 277

7 Base de données MYSQL 7.5 lancement/arrêt de MYSQLChapitre 7 • Base de données MYSQL§7.5 • lancement/arrêt de MYSQL

Lancer sous l’identité de mysql le programme « bin/mysqld_safe » sousl’identité UNIX « mysql ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 230 / 277

Page 129: book2p(3)

7 Base de données MYSQL 7.6 Création de bases MYSQL (1) : mysqladminChapitre 7 • Base de données MYSQL§7.6 • Création de bases MYSQL (1) : mysqladmin

La création de bases normales MYSQL se fait par la commande« mysqladmin ».Syntaxe : mysqladmin [options] create base

� Exemple 1 : création d’une base

% mysqladmin -u root -p create arsEnter password: XXXXXXX

� Exemple 2 : suppression d’une base

% mysqladmin -u root -p drop arsEnter password: XXXXXXX

Dropping the database is potentially a very bad thing to do.

Any data stored in the database will be destroyed.

Do you really want to drop the ’base’ database [y/N] y

Database "base" dropped

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 231 / 277

7 Base de données MYSQL 7.7 Création de bases MYSQL (2) : commandes SQLChapitre 7 • Base de données MYSQL§7.7 • Création de bases MYSQL (2) : commandes SQL

% mysql -u root -pXXXXXXXXmysql> create database ars ; mysql> drop database ars ;Query OK, 1 row affected (0.01 sec) Query OK, 0 rows affected (0.02 sec)

mysql> show databases ; mysql> show databases ;

+----------+ +----------+

| Database | | Database |

+----------+ +----------+

| ars | | mysql |

| mysql | | test |

| test | +----------+

+----------+ 2 rows in set (0.01 sec)

3 rows in set (0.01 sec)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 232 / 277

Page 130: book2p(3)

7 Base de données MYSQL 7.8 Dialogue interactif avec MYSQL en mode CLI : mysqlChapitre 7 • Base de données MYSQL§7.8 • Dialogue interactif avec MYSQL en mode CLI : mysql

La commande « mysql » permet d’interagir avec MYSQL et de luidemander d’exécuter des commandes SQL. Cela se présente comme unshell spécialisé en SQL.Syntaxe : mysql [options] base

De nombreuses commandes sont ensuite disponibles.

� Exemple 1 : connexion et déconnexion

% mysql -u root -pXXXXXXXX ars...

mysql> quit ;

Bye

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 233 / 277

7 Base de données MYSQL 7.8 Dialogue interactif avec MYSQL en mode CLI : mysql

� Exemple 2 : liste des bases

% mysql -u root -pXXXXXXXX...

mysql> show databases ;

+----------+

| Database |

+----------+

| ars |

| mysql |

| test |

+----------+

3 rows in set (0.01 sec)

mysql> quit ;

Bye

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 234 / 277

Page 131: book2p(3)

7 Base de données MYSQL 7.8 Dialogue interactif avec MYSQL en mode CLI : mysql

� Exemple 3 : liste des tables systèmes

% mysql -u root -pXXXXXXXX mysql...

mysql> show tables ;

+---------------------------+

| Tables_in_mysql |

+---------------------------+

| columns_priv |

| db |

| func |

| help_category |

| help_keyword |

| help_relation |

| help_topic |

| host |

| tables_priv |

| time_zone |

| time_zone_leap_second |

| time_zone_name |

| time_zone_transition |

| time_zone_transition_type |

| user |

+---------------------------+

15 rows in set (0.00 sec)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 235 / 277

7 Base de données MYSQL 7.8 Dialogue interactif avec MYSQL en mode CLI : mysql

� Exemple 4 : liste des utilisateurs

% mysql -u root -pXXXXXXXX mysql...

mysql> select User from user order by User asc ;

+------+

| User |

+------+

| |

| |

| root |

| root |

+------+

4 rows in set (0.03 sec)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 236 / 277

Page 132: book2p(3)

7 Base de données MYSQL 7.9 Notion d’utilisateurs MYSQLChapitre 7 • Base de données MYSQL§7.9 • Notion d’utilisateurs MYSQL

Une requête SQL est émise au nom d’un utilisateur fictif interne à la baseSQL.Un utilisateur SQL n’est pas nécessairement un vrai utilisateur UNIX.

La notion d’utilisateurs SQL est utilisée dans le contrôle des requêtes SQL :

GRANT privilège[,privilège...]

ON table | * | *.* | base.*TO utilisateur [IDENTIFIED BY [PASSWORD] ’PASSWORD’]

[, utilisateur [IDENTIFIED BY [PASSWORD] ’PASSWORD’]] ...

où :les privilèges sont parmi les mots clef « SELECT », « INSERT »,« UPDATE », « DELETE », « RULE », « ALL »utilisateur désignera un utilisateur bien précis qui obtient lesprivilèges indiqués

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 237 / 277

7 Base de données MYSQL 7.9 Notion d’utilisateurs MYSQL

� Exemple : ajout de droits pour un utilisateur

% mysql -u root -pXXXXXXXX mysql...

mysql> grant all on ars.* to besancon@localhost identified by ’XXXXXXXX’ ;

Query OK, 0 rows affected (0.02 sec)

� Exemple : révocation de droits pour un utilisateur

% mysql -u root -pXXXXXXXX mysql...

mysql> revoke all privileges on ars.* from besancon@localhost ;

Query OK, 0 rows affected (0.02 sec)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 238 / 277

Page 133: book2p(3)

7 Base de données MYSQL 7.10 Fichier de configuration : my.cnfChapitre 7 • Base de données MYSQL§7.10 • Fichier de configuration : my.cnf

A completer...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 239 / 277

7 Base de données MYSQL 7.11 Sauvegarde : mysqldumpChapitre 7 • Base de données MYSQL§7.11 • Sauvegarde : mysqldump

MYSQL fournit un outil pour sauvegarder au format SQL sous forme decommandes SQL une ou plusieurs bases.

Pour sauver une base, utiliser la commande « mysqldump ».Syntaxe : mysqldump -u root -p [options] base

Pour sauver toutes les bases, utiliser la commande« mysqldump --all-databases ».

Syntaxe : mysqldumpall -u root -p [options]

Attention : joindre à la sauvegarde le fichier my.cnf qui n’est passauvegardé par l’outil SQL mysqldump.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 240 / 277

Page 134: book2p(3)

7 Base de données MYSQL 7.11 Sauvegarde : mysqldump

� Exemple 1 : sauvegarde d’une seule base

% mysqldump -u root -pXXXXXXXX base > /tmp/base.sql

% ls -l /tmp/base.sql-rw-r--r-- 1 besancon adm 15054229 Oct 23 12:12 /tmp/base.sql

% head /tmp/base.sql-- MySQL dump 10.8

--

-- Host: localhost Database: ars

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

-- Server version 4.1.7-log

...

DROP TABLE IF EXISTS ‘t1‘;

CREATE TABLE ‘t1‘ (

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 241 / 277

7 Base de données MYSQL 7.11 Sauvegarde : mysqldump

� Exemple 2 : sauvegarde de toutes les bases

% mysqldump -u root -pXXXXXXXX --all-databases > /tmp/bases.sql

% ls -l /tmp/bases.sql-rw-r--r-- 1 besancon adm 15064263 Oct 23 12:18 /tmp/bases.sql

% head /tmp/base.sql-- MySQL dump 10.8

--

-- Host: localhost Database:

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

-- Server version 4.1.7-log

...

CREATE DATABASE /*!32312 IF NOT EXISTS*/ ‘ars‘;

USE ‘ars‘;

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 242 / 277

Page 135: book2p(3)

7 Base de données MYSQL 7.12 Rechargement d’une sauvegardeChapitre 7 • Base de données MYSQL§7.12 • Rechargement d’une sauvegarde

S’il s’agit de recharger la sauvegarde d’une base, faire sous l’identité del’utilisateur « mysql » :

% mysql -u root -pXXXXXXXX < /tmp/base.sql

S’il s’agit de recharger la sauvegarde de la totalité des bases, faire sousl’identité de l’utilisateur « mysql » :

% mysql -u root -pXXXXXXXX < /tmp/bases.sql

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 243 / 277

7 Base de données MYSQL 7.13 Interface de gestion de MYSQL : phpmyadminChapitre 7 • Base de données MYSQL§7.13 • Interface de gestion de MYSQL : phpmyadmin

A noter un interface WWW de configuration et d’administration :phpmyadmin

Cf http://www.phpmyadmin.net/

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 244 / 277

Page 136: book2p(3)

7 Base de données MYSQL 7.14 Outil TOADChapitre 7 • Base de données MYSQL§7.14 • Outil TOAD

Outil de mise au point des requêtes SQL : TOAD

Voir « http://www.toadsoft.com »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 245 / 277

Page 137: book2p(3)

Chapitre 8

Base de données POSTGRESQL

Explications sur le pourquoi de ce chapitre

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 246 / 277

8 Base de données POSTGRESQL 8.1 IntroductionChapitre 8 • Base de données POSTGRESQL§8.1 • Introduction

(On rencontre souvent le mot PGSQL pour POSTGRESQL)

Plusieurs moteurs de bases de données disponibles :OracleMicrosoft SQL ServerMicrosoft MSDE (version light et gratuite de SQL Server)IBM DB2SybaseMYSQLPOSTGRESQL

Version de PGSQL disponible au moment de l’écriture de ce document :8.1.4 (2006-08-03)Site officiel : http://www.postgresql.org

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 247 / 277

Page 138: book2p(3)

8 Base de données POSTGRESQL 8.1 Introduction

Système de réplication possible mais cela semble un produit jeune.

A completer...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 248 / 277

8 Base de données POSTGRESQL 8.2 Utilisateur UNIX dédié à PGSQL : pgsqlChapitre 8 • Base de données POSTGRESQL§8.2 • Utilisateur UNIX dédié à PGSQL : pgsql

Etape préliminaire à l’installation mais indispensable.

Le bon fonctionnement de PGSQL nécessite la définition d’un utilisateurau sens UNIX qui s’appelle « pgsql ».

On créera aussi un groupe UNIX « pgsql ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 249 / 277

Page 139: book2p(3)

8 Base de données POSTGRESQL 8.3 Arborescence PGSQLChapitre 8 • Base de données POSTGRESQL§8.3 • Arborescence PGSQL

Par défaut, les sources de PGSQL s’installeront dans /usr/local/pgsql.On trouvera alors dans /usr/local/pgsql :

sous-répertoire bin : répertoire des binaires de l’applicationsous-répertoire data : répertoire des fichiers de configuration aupremier niveau ; ce répertoire devra être la propriété de l’utilisateur« pgsql ».sous-répertoire data/base : répertoire des fichiers de stockage de labase de donnéessous-répertoire doc : répertoire de documentation (format HTML)sous-répertoire include : répertoire des headers de programmation Csous-répertoire lib : répertoire des librairies partagées des binairesPGSQLsous-répertoire man : répertoire des pages de manuelsous-répertoire share : répertoire de fichiers d’exemples

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 250 / 277

8 Base de données POSTGRESQL 8.3 Arborescence PGSQL

A noter le fichier « data/pga_hba.conf » qui définit les accès autorisés.

L’installation de PGSQL doit se compléter de la création des basesinitiales de PGSQL.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 251 / 277

Page 140: book2p(3)

8 Base de données POSTGRESQL 8.4 Création des bases initiales PGSQL : initdbChapitre 8 • Base de données POSTGRESQL§8.4 • Création des bases initiales PGSQL : initdb

(en anglais initialize database)

Syntaxe : initdb -D répertoire-de-données

Par défaut, on prend le répertoire « data » dans l’arborescence PGSQL(par défaut donc « /usr/local/pgsql/data »).

La création des bases initiales se fera sous l’identité de l’utilisateur« pgsql ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 252 / 277

8 Base de données POSTGRESQL 8.5 Lancement/arrêt de PGSQL : pg_ctlChapitre 8 • Base de données POSTGRESQL§8.5 • Lancement/arrêt de PGSQL : pg_ctl

Deux processus sont en jeu :postmaster : accepte les requêtes de connexionpostgres : exécute les requêtes SQL et renvoie les résultats

Attention : les processus doivent être lancés au nom de l’utilisateur« pgsql ».

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 253 / 277

Page 141: book2p(3)

8 Base de données POSTGRESQL 8.5 Lancement/arrêt de PGSQL : pg_ctl

Un script de lancement et d’arrêt est fourni avec PGSQL : pg_ctl

Syntaxes :démarrage de PGSQL : « pg_ctl start » :# su pgsql -c "pg_ctl -D /chemin/vers/pgsql/data start"

postmaster successfully started

arrêt de PGSQL : « pg_ctl stop » :# su pgsql -c "pg_ctl -D /chemin/vers/pgsql/data stop"

waiting for postmaster to shut down......done

postmaster successfully shut down

redémarrage de PGSQL : « pg_ctl restart »

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 254 / 277

8 Base de données POSTGRESQL 8.6 Création de bases PGSQL : createdbChapitre 8 • Base de données POSTGRESQL§8.6 • Création de bases PGSQL : createdb

La création de bases normales PGSQL se fait par la commande« createdb ».Syntaxe : createdb [options] base

La création de toute nouvelle base se fait par duplication de la base initialede nom « template1 ».

� Exemple

% createdb -e testCREATE DATABASE base; <-- commande interne lancée

CREATE DATABASE <-- affichage du résultat de cette commande

L’option « -e » sert à afficher les commandes internes SQL en faitréalisées par le programme.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 255 / 277

Page 142: book2p(3)

8 Base de données POSTGRESQL 8.7 Destruction de bases PGSQL : dropdbChapitre 8 • Base de données POSTGRESQL§8.7 • Destruction de bases PGSQL : dropdb

La destruction de bases normales PGSQL se fait par la commande« dropdb ».Syntaxe : dropdb [options] base

� Exemple

% dropdb -e testDROP DATABASE base; <-- commande interne lancée

DROP DATABASE <-- affichage du résultat de cette commande

L’option « -e » sert à afficher les commandes internes SQL en faitréalisées par le programme.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 256 / 277

8 Base de données POSTGRESQL 8.8 Dialogue interactif avec PGSQL en mode CLI : psqlChapitre 8 • Base de données POSTGRESQL§8.8 • Dialogue interactif avec PGSQL en mode CLI : psql

La commande « psql » permet d’interagir avec PGSQL et de luidemander d’exécuter des commandes SQL. Cela se présente comme unshell spécialisé en SQL.Syntaxe : psql base

De nombreuses commandes sont ensuite disponibles.

� Exemple 1 : connexion et déconnexion

% psql template1

Welcome to psql 7.4.2, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms

\h for help with SQL commands

\? for help on internal slash commands

\g or terminate with semicolon to execute query

\q to quit

template1=# \q

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 257 / 277

Page 143: book2p(3)

8 Base de données POSTGRESQL 8.8 Dialogue interactif avec PGSQL en mode CLI : psql

� Exemple 2 : liste des bases

% psql template1

...

template1=# \l

List of databases

Name | Owner | Encoding

-----------+----------+-----------

template0 | pgsql | SQL_ASCII

template1 | pgsql | SQL_ASCII

(2 rows)

template1=# select * from pg_database ;

datname | datdba | encoding | datistemplate | datallowconn | datlastsysoid | datvacuumxid | datfrozenxid | datpath | datconfig | datacl

-----------+--------+----------+---------------+--------------+---------------+--------------+--------------+---------+-----------+--------------------

template1 | 1 | 0 | t | t | 17140 | 464 | 464 | | | {pgsql=C*T*/pgsql}

template0 | 1 | 0 | t | f | 17140 | 464 | 464 | | | {pgsql=C*T*/pgsql}

(2 rows)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 258 / 277

8 Base de données POSTGRESQL 8.8 Dialogue interactif avec PGSQL en mode CLI : psql

� Exemple 3 : liste des tables systèmes

% psql template1

...

template1=# \dS

List of relations

Schema | Name | Type | Owner

------------+--------------------------+---------+-------

...

pg_catalog | pg_database | table | pgsql

...

pg_catalog | pg_user | view | pgsql

...

(54 rows)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 259 / 277

Page 144: book2p(3)

8 Base de données POSTGRESQL 8.8 Dialogue interactif avec PGSQL en mode CLI : psql

� Exemple 4 : liste des utilisateurs

% psql template1

...

template1=# select * from pg_user ;

usename | usesysid | usecreatedb | usesuper | usecatupd | passwd | valuntil | useconfig

----------+----------+-------------+----------+-----------+----------+----------+-----------

pgsql | 1 | t | t | t | ******** | |

apache | 1002 | f | f | f | ******** | |

besancon | 1003 | t | t | t | ******** | |

(3 rows)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 260 / 277

8 Base de données POSTGRESQL 8.9 Création de bases PGSQL : commandes SQLChapitre 8 • Base de données POSTGRESQL§8.9 • Création de bases PGSQL : commandes SQL

% psql template1

Welcome to psql 7.4.2, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms

\h for help with SQL commands

\? for help on internal slash commands

\g or terminate with semicolon to execute query

\q to quit

template1=# create database exemple ;

CREATE DATABASE

template1=# \l

List of databases

Name | Owner | Encoding

-----------+----------+-----------

exemple | besancon | SQL_ASCII

template0 | pgsql | SQL_ASCII

template1 | pgsql | SQL_ASCII

(3 rows)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 261 / 277

Page 145: book2p(3)

8 Base de données POSTGRESQL 8.10 Destruction de bases PGSQL : commandes SQLChapitre 8 • Base de données POSTGRESQL§8.10 • Destruction de bases PGSQL : commandes SQL

% psql template1

Welcome to psql 7.4.2, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms

\h for help with SQL commands

\? for help on internal slash commands

\g or terminate with semicolon to execute query

\q to quit

template1=# drop database exemple ;

DROP DATABASE

template1=# \l

List of databases

Name | Owner | Encoding

-----------+----------+-----------

template0 | pgsql | SQL_ASCII

template1 | pgsql | SQL_ASCII

(2 rows)

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 262 / 277

8 Base de données POSTGRESQL 8.11 Notion d’utilisateurs PGSQLChapitre 8 • Base de données POSTGRESQL§8.11 • Notion d’utilisateurs PGSQL

Une requête SQL est émise au nom d’un utilisateur fictif interne à la baseSQL.Un utilisateur SQL n’est pas nécessairement un vrai utilisateur UNIX.

La notion d’utilisateurs SQL est utilisée dans le contrôle des requêtes SQL :

GRANT privilège[,...] ON objet[,...] TO {PUBLIC | utilisateur} ;

où :les privilèges sont parmi les mots clef « SELECT », « INSERT »,« UPDATE », « DELETE », « RULE », « ALL »un objet désigne une table, une vue ou une séquencePUBLIC indiquera que tous les utilisateurs SQL peuvent obtenir lesprivilèges indiquésutilisateur désignera un utilisateur bien précis qui obtient lesprivilèges indiqués

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 263 / 277

Page 146: book2p(3)

8 Base de données POSTGRESQL 8.11 Notion d’utilisateurs PGSQL

� Exemple% psql base

...

base=# \d

List of relations

Schema | Name | Type | Owner

--------+---------+-------+----------

public | exemple | table | besancon

(1 row)

t=# \z

Access privileges for database "base"

Schema | Table | Access privileges

--------+---------+-------------------

public | exemple |

(1 row)

t=# grant all on exemple to public ;

GRANT

t=# \z

Access privileges for database "base"

Schema | Table | Access privileges

--------+---------+------------------------------------------------------

public | exemple | {besancon=a*r*w*d*R*x*t*/besancon,=arwdRxt/besancon}

(1 row)

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 264 / 277

8 Base de données POSTGRESQL 8.12 Gestion d’utilisateurs PGSQL (1) : createuserChapitre 8 • Base de données POSTGRESQL§8.12 • Gestion d’utilisateurs PGSQL (1) : createuser

Pour créer un utilisateur SQL, employer la commande « createuser » etrépondre aux diverses questions posées.

Syntaxe : createuser [options] [utilisateur-SQL]

-a -A Création de nouveaux utilisateurs ou pas-d -D Création de nouvelles databases ou pas

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 265 / 277

Page 147: book2p(3)

8 Base de données POSTGRESQL 8.12 Gestion d’utilisateurs PGSQL (1) : createuser

� Exemple 1 : création toute interactive

# createuser

Enter name of user to add: ars

Shall the new user be allowed to create databases? (y/n) n

Shall the new user be allowed to create more new users? (y/n) n

CREATE USER

� Exemple 2 : création non interactive

# createuser -D -A ars

CREATE USER

� Exemple 3 : création non interactive et avec affichage des instructionsSQL internes

# createuser -D -A -e ars

createuser -D -A -e ars

SET autocommit TO ’on’;CREATE USER "ars" NOCREATEDB NOCREATEUSER

CREATE USER

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 266 / 277

8 Base de données POSTGRESQL 8.13 Gestion d’utilisateurs PGSQL (2) : dropuserChapitre 8 • Base de données POSTGRESQL§8.13 • Gestion d’utilisateurs PGSQL (2) : dropuser

Pour supprimer un utilisateur SQL, employer la commande « dropuser »et répondre aux diverses questions posées.

Syntaxe : dropuser [options] [utilisateur-SQL]

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 267 / 277

Page 148: book2p(3)

8 Base de données POSTGRESQL 8.13 Gestion d’utilisateurs PGSQL (2) : dropuser

� Exemple 1 : suppression toute interactive

# dropuser

Enter name of user to drop: ars

DROP USER

� Exemple 2 : suppression non interactive

# dropuser ars

DROP USER

� Exemple 3 : suppression interactive avec garde fou et avec affichage desinstructions SQL internes

# dropuser -e -i ars

User "ars" will be permanently removed.

Are you sure? (y/n) y

DROP USER ars;

DROP USER

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 268 / 277

8 Base de données POSTGRESQL 8.14 Fichier de configuration : postgresql.confChapitre 8 • Base de données POSTGRESQL§8.14 • Fichier de configuration : postgresql.conf

Le fichier « data/postgresql.conf » est créé après la phase du« initdb ».

Il contiendra les paramètres de gestion mémoire pour PGSQL.

Le paramètre tcpip_socket indiquera si PGSQL accepte lesconnexions réseau.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 269 / 277

Page 149: book2p(3)

8 Base de données POSTGRESQL 8.15 Fichier de configuration : pg_hba.confChapitre 8 • Base de données POSTGRESQL§8.15 • Fichier de configuration : pg_hba.conf

Le fichier « data/pg_hba.conf » est créé après la phase du « initdb ».

Ce fichier sert à régler les contrôles d’accès.

Syntaxe :

local DATABASE USER METHOD [OPTION]

host DATABASE USER IP-ADDRESS IP-MASK METHOD [OPTION]

hostssl DATABASE USER IP-ADDRESS IP-MASK METHOD [OPTION]

hostnossl DATABASE USER IP-ADDRESS IP-MASK METHOD [OPTION]

host DATABASE USER IP-ADDRESS/CIDR-MASK METHOD [OPTION]

hostssl DATABASE USER IP-ADDRESS/CIDR-MASK METHOD [OPTION]

hostnossl DATABASE USER IP-ADDRESS/CIDR-MASK METHOD [OPTION]

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 270 / 277

8 Base de données POSTGRESQL 8.15 Fichier de configuration : pg_hba.conf

Syntaxe plus précise :

The first field is the connection type : "local" is a Unix-domain socket,"host" is either a plain or SSL-encrypted TCP/IP socket, "hostssl" isan SSL-encrypted TCP/IP socket, and "hostnossl" is a plain TCP/IPsocket.

DATABASE can be "all", "sameuser", "samegroup", a database name(or a comma-separated list thereof), or a file name prefixed with "@".

USER can be "all", an actual user name or a group name prefixed with"+" or a list containing either.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 271 / 277

Page 150: book2p(3)

8 Base de données POSTGRESQL 8.15 Fichier de configuration : pg_hba.conf

IP-ADDRESS and IP-MASK specify the set of hosts the record matches.CIDR-MASK is an integer between 0 and 32 (IPv6) or 128(IPv6) inclusive,that specifies the number of significant bits in the mask, so an IPv4CIDR-MASK of 8 is equivalent to an IP-MASK of 255.0.0.0, and anIPv6 CIDR-MASK of 64 is equivalent to an IP-MASK offfff:ffff:ffff:ffff::.

METHOD can be "trust", "reject", "md5", "crypt", "password","krb4", "krb5", "ident", or "pam". Note that "password" usesclear-text passwords ; "md5" is preferred for encrypted passwords.

OPTION is the ident map or the name of the PAM service.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 272 / 277

8 Base de données POSTGRESQL 8.16 Sauvegarde : pg_dump, pg_dumpallChapitre 8 • Base de données POSTGRESQL§8.16 • Sauvegarde : pg_dump, pg_dumpall

PGSQL fournit un outil pour sauvegarder au format SQL sous forme decommandes SQL une ou plusieurs bases.

Pour sauver une base, utiliser la commande « pg_dump » sous l’identité del’utilisateur « pgsql ».Syntaxe : pg_dump [options] base

Pour sauver toutes les bases, utiliser la commande « pg_dumpall » sousl’identité de l’utilisateur « pgsql ».Syntaxe : pg_dumpall [options]

Attention : joindre à la sauvegarde le fichier pg_hba.conf quicontrôle les accès et qui n’est pas sauvegardé par les 2 outil SQLpg_dump et pg_dumpall.

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 273 / 277

Page 151: book2p(3)

8 Base de données POSTGRESQL 8.16 Sauvegarde : pg_dump, pg_dumpall

� Exemple 1 : sauvegarde d’une seule base

% pg_dump base > /tmp/base.sql

% ls -l /tmp/base.sql

-rw-r--r-- 1 besancon adm 15054229 Oct 23 12:12 /tmp/base.sql

% head /tmp/base.sql

--

-- PostgreSQL database dump

--

SET client_encoding = ’SQL_ASCII’;

SET check_function_bodies = false;

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 274 / 277

8 Base de données POSTGRESQL 8.16 Sauvegarde : pg_dump, pg_dumpall

� Exemple 2 : sauvegarde de toutes les bases

% pg_dumpall > /tmp/bases.sql

% ls -l /tmp/bases.sql

-rw-r--r-- 1 besancon adm 15064263 Oct 23 12:18 /tmp/bases.sql

% head /tmp/base.sql

--

-- PostgreSQL database cluster dump

--

\connect "template1"

--

-- Users

--

DELETE FROM pg_shadow WHERE usesysid <> (SELECT datdba FROM pg_database WHERE datname = ’template0’);

CREATE USER apache WITH SYSID 1002 NOCREATEDB NOCREATEUSER;

CREATE USER besancon WITH SYSID 1003 CREATEDB CREATEUSER;

...

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 275 / 277

Page 152: book2p(3)

8 Base de données POSTGRESQL 8.17 Rechargement d’une sauvegardeChapitre 8 • Base de données POSTGRESQL§8.17 • Rechargement d’une sauvegarde

S’il s’agit de recharger la sauvegarde d’une base, faire sous l’identité del’utilisateur « pgsql » :

% dropdb base% psql < /tmp/base.sql

S’il s’agit de recharger la sauvegarde de la totalité des bases, faire sousl’identité de l’utilisateur « pgsql » :

% initdb -D /chemin/vers/pgsql/data/base% psql < /tmp/bases.sql

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 276 / 277

8 Base de données POSTGRESQL 8.18 Interface de gestion de PGSQL : phppgadminChapitre 8 • Base de données POSTGRESQL§8.18 • Interface de gestion de PGSQL : phppgadmin

A noter un interface WWW de configuration et d’administration :phppgadmin

Cf http://sourceforge.net/projects/phppgadmin/

c©T.Besançon (v14.0.631) Administration UNIX ARS 2011 – 2012 Partie 4 277 / 277