Gestion des comptes utilisateurs by ouadie

VIEWS: 455 PAGES: 104

More Info
									Gestion des comptes utilisateurs

Chapitre 1 : Gestion des comptes utilisateurs

Un compte utilisateur : – définition d’un environnement utilisateur – définition de son identification pour le système

Opérations possibles : – création – modifications – destruction

La gestion des comptes est une des opérations d’administration les plus simples. Elle est relativement bien automatisable.
Formation permanente – ARS /1

Gestion des comptes utilisateurs

Le fichier /etc/passwd

§ 1.1 Le fichier /etc/passwd
Il contient les informations sur les identifications des utilisateurs. Exemple :

root:U/oeCQo.cmnyc:0:1:Operator:/root:/bin/csh toor:d\znzI5LoWUms:1:1:Operator:/toor:/bin/csh nobody:*:65534:65534::/: daemon:*:1:1::/: sys:*:2:2::/:/bin/csh bin:*:3:3::/bin: besancon:vSHntkfqz8MEk:4332:1000::/users/adm/besancon:/bin/bash

Formation permanente – ARS

/2

Gestion des comptes utilisateurs

Format du fichier /etc/passwd

§ 1.2 Format du fichier /etc/passwd
Le format est composé de 7 champs séparés par le caractére : :

login : mot de passe : UID : GID : gecos : homedir : shell Pour la définition exacte sur sa machine, se reporter à <pwd.h>.
Par exemple sur Linux :
/* The passwd structure. struct passwd { char *pw_name; char *pw_passwd; __uid_t pw_uid; __gid_t pw_gid; char *pw_gecos; char *pw_dir; char *pw_shell; };
Formation permanente – ARS

*/

/* /* /* /* /* /* /*

Username. */ Password. */ User ID. */ Group ID. */ Real name. */ Home directory. */ Shell program. */

/3

Gestion des comptes utilisateurs

Format du fichier /etc/passwd

champ 1 : login
   

Nom sous lequel un ordinateur connait un individu. 8 caractères au plus. Pas de majuscules. Eviter les caractères accentués.

champ 2 : mot de passe Mot de passe de l’utilisateur stocké sous forme chiffrée non déchiffrable. Au login :

strcmp("saeLydiaFuF5o", crypt("sa", "********"))
Nécessité d’éduquer les utilisateurs pour choisir un bon mot de passe. Les logiciels de crack de mots de passe ne déchiffrent pas les mots de passe : ils font des essais à base de dictionnaires.

crack : ftp://ftp.lip6.fr/pub4/unix/security/crack5.0.tar.gz john : ftp://ftp.false.com/pub/security/john/john-1.6.tar.gz
Formation permanente – ARS /4

Gestion des comptes utilisateurs

Format du fichier /etc/passwd

champ 3 : UID
         

Identificateur numérique compris entre 0 et 32767 (short int a priori). Cette valeur doit être unique au sein des utilisateurs.

champ 4 : GID Identificateur numérique compris entre 0 et 32767 (short int a priori). Cette valeur doit être unique au sein des groupes.

% ls -ln -rw-r--r--rw-r--r-% ls -l -rw-r--r--rw-r--r--

1 4332 1 4332

1000 1000

5544 Sep 15 22:47 cours.dvi 940 Sep 15 22:27 cours.tex

1 besancon software 1 besancon software

5928 Sep 15 22:49 cours.dvi 940 Sep 15 22:27 cours.tex

Formation permanente – ARS

/5

Gestion des comptes utilisateurs

Format du fichier /etc/passwd

champ 5 : gecos Identité en clair de l’utilisateur. Les systèmes BSD y ont stockés d’autres informations comme le numéro de téléphone, le numéro de bureau etc. La commande chfn (change finger) permet de modifier ce champs.

champ 6 : homedir Répertoire par défaut.

champ 7 : shell Shell par défaut. Si le champ est vide, on prend

/bin/sh par défaut.

Le shell déterminera les fichiers de configuration à installer chez l’utilisateur. La commande chsh (change shell) permet de choisir parmi les shells mentionnés dans /etc/shells.

Formation permanente – ARS

/6

Gestion des comptes utilisateurs

Format du fichier /etc/passwd

Quelques conseils : Il faut toujours trier les lignes de /etc/passwd selon l’ordre numérique des
 

UID :

# sort -t : +2n -3 /etc/passwd
Il ne faut jamais laisser de comptes sans mot de passe.
 

Formation permanente – ARS

/7

Gestion des comptes utilisateurs

Cohérence du fichier /etc/passwd

§ 1.3 Cohérence du fichier /etc/passwd
La cohérence du fichier /etc/passwd est primordiale. Parfois est disponible une commande pour garantir cette cohérence. A voir selon le système. Par exemple /usr/sbin/vipw sur Linux. Rien sur Solaris. Par exemple sur SunOS 4.1.4, il existe la commande vipw pour éditer

/etc/passwd au lieu de vi :
–

vipw empêche deux accès simultanés en écriture au fichier ce que ne permet pas vi. L’accès exclusif est réalisé en créant un fichier /etc/ptmp. vipw réalise des vérifications sur le contenu du fichier avant de le sauver :
– lignes trop longues – bon nombre de champs – bon uid pour root – UID et GID dans les bons intervales – shell valide pour root

–

Formation permanente – ARS

/8

Gestion des comptes utilisateurs

Shadow Passwords

§ 1.4 Shadow Passwords
L’idée part de la constatation que, si beaucoup de programmes accèdent au contenu de /etc/passwd pour les informations concernant UID, homedir, shell, peu en revanche l’accèdent pour le mot de passe.

On supprime donc le mot de passe chiffré du fichier pour le stocker dans un fichier à accès plus restreints.

-rw-r--r--rw-------

root wheel 10557 Sep 15 22:51 /etc/passwd root wheel 13318 Sep 15 22:50 /etc/master.passwd

L’ancien mot de passe chiffré est remplacé par exemple par un caractère comme * ou x :

besancon:x:4332:1000::/users/adm/besancon:/bin/bash
Formation permanente – ARS /9

Gestion des comptes utilisateurs

Shadow Passwords

Plusieurs formats de fichiers shadow sont utilisés par les constructeurs qui ne se sont pas mis d’accord. Linux
 

Fichiers /etc/passwd et /etc/shadow

# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: ... # cat /etc/shadow root:fUQZjKzpwayTc:11237:0:99999:7:-1:-1:134540316 bin:*:11237:0:99999:7::: daemon:*:11237:0:99999:7::: adm:*:11237:0:99999:7::: ...
Formation permanente – ARS / 10

Gestion des comptes utilisateurs

Shadow Passwords

Solaris Fichiers /etc/passwd et /etc/shadow
 

# cat /etc/passwd root:x:0:1:Super-User:/:/sbin/sh daemon:x:1:1::/: bin:x:2:2::/usr/bin: ... boumaiza:x:1001:1000:Lyazid Boumaiza:/net/serveur/home/ars/boumaiza:/bin/ corsini:x:1002:1000:Franck Corsini:/net/serveur/home/ars/corsini:/bin/tcs ... # cat /etc/shadow root:y8fPbbq414TBU:6445:::::: daemon:NP:6445:::::: bin:NP:6445:::::: ... boumaiza:aalJCbuvX/xEM:11255:::::: corsini:5Ag56r/M.KD9A:10912:::::: ...
Formation permanente – ARS / 11

Gestion des comptes utilisateurs

Changement de mots de passe

§ 1.5 Changement de mots de passe

La commande pour changer de mot de passe d’un utilisateur dans

/etc/passwd est "passwd" :

# passwd besancon Changing password for besancon on MACHINE New password: XXXXXXXX Retype new password: XXXXXXXX

Root n’a jamais besoin de connaître le mot de passe d’un utilisateur pour en changer le mot de passe.

Formation permanente – ARS

/ 12

Gestion des comptes utilisateurs

Changement de mots de passe

En cas d’emploi de NIS, la commande pour changer le mot de passe est yppasswd car il faut modifier la base de données centrale et non pas le fichier

/etc/passwd local qui est d’ailleurs certainement incomplet.
Sur un client NIS Linux :
% yppasswd Changing NIS account information for besancon on serveur. Please enter old password: ******** Changing NIS password for besancon on serveur. Please enter new password: ******** Please retype new password: ******** The NIS password has been changed on serveur.

Sur le serveur NIS Solaris :
% yppasswd Enter login(NIS) password: ******** New password: ******** Re-enter new password: ******** NIS passwd/attributes changed on serveur
Formation permanente – ARS / 13

Gestion des comptes utilisateurs

Le fichier /etc/group

§ 1.6 Le fichier /etc/group
Le format est composé de 4 champs séparés par le caractére : :

group : mot de passe : GID : membres

Pour la définition exacte sur sa machine, se reporter à <grp.h>. Par exemple, sur une machine Linux :
/* The group structure. struct group { char *gr_name; char *gr_passwd; __gid_t gr_gid; char **gr_mem; };
Formation permanente – ARS

*/

/* /* /* /*

Group name. Password. Group ID. Member list.

*/ */ */ */

/ 14

Gestion des comptes utilisateurs

Le fichier /etc/group

champ 1 : group
       

Nom du groupe apparaissant par ls champ 2 : mot de passe Mot de passe du groupe. champ 3 : GID

-lg.

Identificateur numérique compris entre 0 et 32767. Cette valeur doit être unique au sein des groupes. champ 4 : membres Liste de noms de login séparés par des virgules.

Formation permanente – ARS

/ 15

Gestion des comptes utilisateurs

Création d’un nouveau compte

§ 1.7 Création d’un nouveau compte

Action mécanique automatisable.

Selon le système, elle est déjà automatisée sous la forme d’une commande d’administration : Système AIX HP-UX Solaris FreeBSD etc. Program

smit sam admintool adduser

Formation permanente – ARS

/ 16

Gestion des comptes utilisateurs

Création d’un nouveau compte

Problème : comment créer 3000 comptes en une après-midi avec cette interface ?

Problème : impossible de customiser cette interface.

etc.

Formation permanente – ARS

/ 17

Gestion des comptes utilisateurs

Création d’un nouveau compte

Actions schématiques à accomplir lors de la création d’un compte :

1. choix de l’UID et du GID en fonction du service d’appartenance de la personne 2. choix du homedir (en fonction du service ?) 3. choix du nom de login selon la politique locale 4. choix du shell de login 5. incorporation de ces informations dans la base de données desm ots de passe (/etc/passwd ou NIS selon la politique du service) ; * comme mot de passe par défaut

Formation permanente – ARS

/ 18

Gestion des comptes utilisateurs

Création d’un nouveau compte

6. ajout de l’utilisateur dans /etc/group 7. création du homedir 8. copie des fichiers de configuration de l’environnement (.profile, .cshrc,

.xsession etc.)
9. attribuer le homedir créé à l’utilisateur par chown + chgrp 10. initialisation du mot de passe si l’utilisateur est présent

L’étape délicate dans une automatisation de création de compte est bien sûr l’incorporation d’une nouvelle ligne dans la base de données.

Formation permanente – ARS

/ 19

Gestion des comptes utilisateurs

Compte root

§ 1.8 Compte root
Sa particularité vient de son UID == 0. Quelques règles : 1. L’utilisateur

root n’a pas . dans son PATH (précédence de la commande root a 022 pour umask (accessibilité indispensable de certains

locale par rapport à la commande système). 2. L’utilisateur

fichiers par les utilisateurs normaux). 3. Eviter d’avoir / comme homedir pour root (pollution de / par les fichiers de configuration en .foorc ).
¡  

Formation permanente – ARS

/ 20

Gestion des comptes utilisateurs

Comptes fictifs

§ 1.9 Comptes fictifs
Exemple de Linux :
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin: daemon:x:2:2:daemon:/sbin: adm:x:3:4:adm:/var/adm: lp:x:4:7:lp:/var/spool/lpd: sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail: news:x:9:13:news:/var/spool/news: uucp:x:10:14:uucp:/var/spool/uucp: operator:x:11:0:operator:/root: games:x:12:100:games:/usr/games: gopher:x:13:30:gopher:/usr/lib/gopher-data: ftp:x:14:50:FTP User:/home/ftp: nobody:x:99:99:Nobody:/: xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false ... Formation permanente – ARS

/ 21

Gestion des comptes utilisateurs

Comptes fictifs

Ces utilisateurs fictifs sont essentiellement des propriétaires de fichiers.

Par exemple bin est le propriétaire de la plupart des exécutables :

-rwxr-xr-x -rws--x--x -rwxr-xr-x

1 bin 1 root 1 bin

bin bin bin
 

40960 Aug 24576 Aug 24576 Aug

9 9 9

1994 stty* 1994 su* 1994 sum*

A noter l’emploi du bit s sur la commande propriétaire du fichier, ici root.

su.

son exécution se fait au nom du

Formation permanente – ARS

/ 22

Gestion des comptes utilisateurs

Commande su

§ 1.10 Commande su

La commande

su permet de changer d’identité :

su [-] utilisateur2

Vérification par demande du mot de passe de l’utilisateur destination.

Pour hériter complètement de l’identité, utiliser l’option "-" de la commande "su".

Formation permanente – ARS

/ 23

Gestion des comptes utilisateurs

Commande su

Quand on se trompe sur le mot de passe :
   

% id uid=4332(besancon) gid=1000(software) groups=1000(software) % su besancon Password: Sorry
Quand on donne le bon mot de passe :

% id uid=4332(besancon) gid=1000(software) groups=1000(software) % su beurnez Password: % id uid=8520(beurnez) gid=8506(lps-06) groups=8506(lps-06)

A noter la commande id qui permet de connaître son identité. . .
Formation permanente – ARS / 24

Gestion des comptes utilisateurs

Commande su

Pour devenir root, la commande est donc simplement :

% su root
ce qui peut se simplifier encore en :

% su

Formation permanente – ARS

/ 25

Gestion des comptes utilisateurs

Commande su

Pour hériter complètement de l’identité, utiliser l’option "-" de la commande "su". Exemple de transmission de données parasites de la premiére identité à la
 

seconde identité :

% id uid=4332(besancon) gid=1000(software) groups=1000(software) % pwd /users/adm/besancon % su beurnez % id uid=8520(beurnez) gid=8506(lps-06) groups=8506(lps-06) % pwd /users/adm/besancon % printenv ... MAIL=/var/mail/besancon ...
Certaines variables d’environnement font encore référence a1 l’identité de départ !
Formation permanente – ARS / 26

Gestion des comptes utilisateurs

Commande su

Exemple de non transmission de données parasites de la premiére identité à la
 

seconde identité :

% id uid=4332(besancon) gid=1000(software) groups=1000(software) % pwd /users/adm/besancon % su % id uid=8520(beurnez) gid=8506(lps-06) groups=8506(lps-06) % pwd /users/stat/beurnez % printenv ... MAIL=/var/mail/beurnez ...
Les variables d’environnement font référence maintenant au second utilisateur exclusivement.
Formation permanente – ARS / 27

Gestion des comptes utilisateurs

Fichiers de configuration des shells

§ 1.11 Fichiers de configuration des shells
Lors de la création des comptes, il y a des fichiers de configuration à deposer chez l’utilisateur. En voici quelques uns :

$HOME/.cshrc

/bin/csh

Exécuté lors d’une connexion avec csh. Exécuté chaque fois que csh est lancé.

$HOME/.login $HOME/.logout /etc/profile $HOME/.profile

/bin/csh /bin/csh /bin/sh /bin/sh

Exécuté après le fichier lorsque l’on se connecte.

.cshrc

Exécuté lorsqu’on se déconnecte. Fichier global de configuration de sh. Exécuté lors d’une connexion. Fichier exécuté lors d’une

connexion.

Formation permanente – ARS

/ 28

Gestion des comptes utilisateurs

Fichiers de configuration des shells

$HOME/.forward $HOME/.mailrc $HOME/.exrc $HOME/.xsession $HOME/.xinitrc $HOME/.Xresources $HOME/.Xdefaults

courrier électronique

Redirection du courrier si nécessaire.

courrier électronique vi/ed

Configuration d’options, d’alias. . . Configuration des éditeurs de texte vi/ed.

système de multifenêtrage

Formation permanente – ARS

/ 29

Tâches périodiques : cron, at

Chapitre 2 : Tâches périodiques : cron, at

§ 2.1 Utilitaire cron
L’administrateur doit lancer périodiquement des actions (nettoyage de /tmp, remise à l’heure par rapport à une horloge de référence, etc.).

Il existe un système automatisant ces lancement : cron

Ce mécanisme n’est pas restreint à root a priori.

Formation permanente – ARS

/ 30

Tâches périodiques : cron, at

Lancement du démon cron

§ 2.2 Lancement du démon cron
Le démon cron est lancé au moment du boot : Sur Linux :
% ls -l /etc/rc.d/init.d/crond -rwxr-xr-x 1 root root 1031 Feb 3 2000 /etc/rc.d/init.d/crond

Sur Solaris :
% ls -l /etc/init.d/crond -rwxr--r-4 root sys 513 Jul 16 1997 /etc/init.d/cron

Formation permanente – ARS

/ 31

Tâches périodiques : cron, at

Fichiers crontab

§ 2.3 Fichiers crontab
Les actions à lancer périodiquement sont indiquées dans un fichier texte au format :

minutes heures jour-du-mois mois jour-de-semaine commande
champ 1 : minutes, de 00 à 59.
           

champ 2 : heures, de 00 à 23. champ 3 : jour du mois, de 1 à 31. champ 4 : mois, de 1 à 12. champ 5 : jour de la semaine, de 0 (dimanche) à 6 (samedi). champ 6 : commande à exécuter.

Formation permanente – ARS

/ 32

Tâches périodiques : cron, at

Fichiers crontab

Par exemple :

################################################## 15 * * * * /etc.local/cron/scripts/ntpdate ## */2 * * * * /etc.local/cron/scripts/check-fxp0 */2 * * * * /etc.local/cron/scripts/check-devnull ################################################## 00 21 * * 1 /etc.local/cron/scripts/tartare 00 21 * * 3 /etc.local/cron/scripts/tartare 00 21 * * 5 /etc.local/cron/scripts/tartare ##################################################

Formation permanente – ARS

/ 33

Tâches périodiques : cron, at

Fichiers crontab

Pourquoi ne faut-il rien programmer entre 2 h et 3h du matin ?

Formation permanente – ARS

/ 34

Tâches périodiques : cron, at

Fichiers crontab

L’emplacement des fichiers crontab dépend des systèmes : Système AIX HP-UX FreeBSD Linux Solaris etc. Program

/var/spool/cron/crontabs/ /var/spool/cron/crontabs/ /var/cron/tabs/ /var/spool/cron/ /var/spool/cron/crontabs/

Il y a un fichier crontab par utilisateur dans les directories mentionnés ci-dessus.

Formation permanente – ARS

/ 35

Tâches périodiques : cron, at

Exécution des fichiers crontab

§ 2.4 Exécution des fichiers crontab
Attention : Les commandes s’exécutent sans terminal associé. Il n’y a donc pas de stdin ou

stdout associés. Il faut réaliser soi-même les redirections requises.

En fait, tout ce qui est écrit sur stdout ou stderr est envoyé par mail au propriétaire des fichiers crontab.

Formation permanente – ARS

/ 36

Tâches périodiques : cron, at

Exécution des fichiers crontab

% cat stdout #!/bin/sh # equivalent de # printf(stdout, "foo\n"); echo foo exit 0 # crontab -l 37 13 4 12 * /tmp/stdout

# mail From root Sun Dec 5 13:37:01 1999 Received: by excalibur.lps.ens.fr (8.9.3/jtpda-5.3.1) for root; Sun, 5 Dec 1999 13:37:01 +0100 (MET) Date: Sun, 5 Dec 1999 13:37:01 +0100 (MET) From: root (Operator) Message-Id: <199912051237.NAA11842@excalibur.lps.ens.fr> To: root Subject: Output from "cron" command Status: OR Your "cron" job /tmp/stdout produced the following output: foo

Formation permanente – ARS

/ 37

Tâches périodiques : cron, at

Exécution des fichiers crontab

% cat stderr #!/bin/sh # equivalent de # printf(stderr, "foo\n"); echo foo >&2 exit 0 # crontab -l 30 13 4 12 * /tmp/stderr

# mail From root Sun Dec 5 13:30:00 1999 Received: by excalibur.lps.ens.fr (8.9.3/jtpda-5.3.1) for root; Sun, 5 Dec 1999 13:30:00 +0100 (MET) Date: Sun, 5 Dec 1999 13:30:00 +0100 (MET) From: root (Operator) Message-Id: <199912051230.NAA11776@excalibur.lps.ens.fr> To: root Subject: Output from "cron" command Status: OR Your "cron" job /tmp/stderr produced the following output: foo

Formation permanente – ARS

/ 38

Tâches périodiques : cron, at

Edition des fichiers crontab

§ 2.5 Edition des fichiers crontab
Les fichiers crontab ont beau être au format texte, il ne faut pas les éditer manuellement. Il faut passer par l’intermédiaire de la commande crontab. Il y a deux façons de faire selon les versions de la commande : 1.

crontab -e
Cela lance l’éditeur de texte indiqué par la variable d’environnement ou bien vi par défaut.

EDITOR

2.

crontab -l > myfile vi myfile crontab myfile

Formation permanente – ARS

/ 39

Tâches périodiques : cron, at

Autorisation à utiliser cron

§ 2.6 Autorisation à utiliser cron
L’utilisation du mécanisme cron peut être contôlé via deux fichiers cron.allow et cron.deny. L’emplacement de ces fichiers dépend de chaque système : Système Linux Program

/etc/cron.allow /etc/cron.deny

Solaris

/etc/cron.d/cron.allow /etc/cron.d/cron.deny

Ces fichiers ont la même syntaxe : ils doivent contenir des noms de login.

Formation permanente – ARS

/ 40

Tâches périodiques : cron, at

Autorisation à utiliser cron

Fonctionnement du contrôle :

cron.allow Présent Présent – –

cron.deny Présent – Présent –

Utilisateurs autorisés Ceux explicitement dans cron.allow Ceux explicitement dans cron.allow Tous sauf ceux dans cron.deny Uniquement root

Il est conseillé de ne laisser l’accès à cron qu’à l’utilisateur root.

Formation permanente – ARS

/ 41

Tâches périodiques : cron, at

Utilitaire at

§ 2.7 Utilitaire at
Cron est utilisé pour des lancements périodiques. La commande at permet des lancements différés de commande à une certain date et heure.

Syntaxe :

at time [ date ] [ script ]

L’autorisation d’utilisation de at est contrôlée par les fichiers at.allow et

at.deny, analogues à cron.allow et cron.deny.

Formation permanente – ARS

/ 42

Tâches périodiques : cron, at

Utilitaire at

L’emplacement des fichiers varie de système en système. Système HP-UX Solaris Irix 5.3 SunOS 4.1.x FreeBSD Linux Program

/usr/lib/cron/at.allow /usr/lib/cron/at.allow /usr/lib/cron/at.allow /var/spool/cron/at.allow /var/at/at.allow /etc/at.allow /etc/at.deny

etc.

Formation permanente – ARS

/ 43

Horloges Unix

Chapitre 3 : Horloges Unix

Une machine Unix a besoin d’avoir une représentation du temps afin d’exécuter ses principales tâches : – dater les fichiers – lancer des applications à des moments précis voulus, – dater des événements

Les problèmes possibles : – mise à l’heure d’une horloge – consultation d’une horloge – an 2000
Formation permanente – ARS / 44

Horloges Unix

Manipulation de base de la date

§ 3.1 Manipulation de base de la date

La commande de base est date.

% date Thu Oct 22 22:00:51 CEST 1998

Pour les besoins d’administration, on utilisera aussi la forme : "date le format étant une composition de bigrammes ’%’ + lettre. Cf le tableau suivant sur Linux pour un exemple.

+format",

Formation permanente – ARS

/ 45

Horloges Unix

Manipulation de base de la date

%H %I %k %l %M %p %r %s %S %T %y %Y
Formation permanente – ARS

hour (00..23) hour (01..12) hour ( 0..23) hour ( 1..12) minute (00..59) locale’s AM or PM time, 12-hour (hh :mm :ss [AP]M) seconds since 1970-01-01 00 :00 :00 UTC (a nonstandard extension) second (00..61) time, 24-hour (hh :mm :ss) last two digits of year (00..99) year (1970. . . )
/ 46

Horloges Unix

Manipulation de base de la date

Exemples d’utilisation : – Avoir la date sous la forme YYYY/MM/DD :

% date +%Y/%M/%d 1998/02/22
– Avoir le jour de la semaine :

% date +%w 4
– Avoir le numéro de la semaine :

% date +%W 42
Pour des informations mathématiques sur les dates (années bissextiles, calcul du jour de la semaine etc., on pourra se reporter à :

ftp://ftp.lip6.fr/pub/doc/faqs/sci-math-faq/dayWeek.gz

Formation permanente – ARS

/ 47

Horloges Unix

Manipulation de base de la date

Il existe une commande plus sophistiquée : le GNU date d’URL

ftp://ftp.lip6.fr/pub/gnu/sh-utils/sh-utils-2.0.tar.gz
On peut grâce à cette commande calculer des choses impossibles à calculer autrement :
% date Wed Aug

5 11:09:06 MET DST 1998

% date ’+%Y/%m/%d’ 1998/08/05 % date ’+%Y/%m/%d’ 1998/08/15 % date ’+%Y/%m/%d’ 1998/07/26 % date ’+%Y/%m/%d’ 1999/10/08 % date ’+%Y/%m/%d’ 1997/06/02 % date ’+%Y/%m/%d’ 1998/08/19

--date "10 days" --date "-10 days" --date "1 years 2 months 3 days" --date "-1 years -2 months -3 days" --date "1 fortnight"‘

Formation permanente – ARS

/ 48

Horloges Unix

Manipulation de base de la date

La commande date permet de régler l’horloge de la machine :
SYNOPSIS date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]

Par exemple
# date Fri Sep 11 11:40:33 CEST 1998 # date 09110938 Fri Sep 11 09:38:00 CEST 1998 # date Fri Sep 11 09:38:04 CEST 1998

Formation permanente – ARS

/ 49

Horloges Unix

Manipulation de base de la date

Attention au format possible de la date à entrer ; par exemple sur SunOS :
SYNOPSIS date [ -u ] [ -a [ - ] sss.fff ] [ yymmddhhmm [ .ss ] ] [ +format ]

d’où problème après l’an 1999 ; par exemple on ne peut pas préciser l’année 2001 :
# /bin/date 0110222230 Thu Jan 1 00:59:59 MET 1970 # date Thu Jan

1 01:00:55 MET 1970

# /bin/date 9810222233 Thu Oct 22 22:33:00 MET DST 1998

Formation permanente – ARS

/ 50

Horloges Unix

Synchronisation d’horloges

§ 3.2 Synchronisation d’horloges

Il y a une horloge sur chaque machine Unix. La problème : la dérive d’horloge. Par exemple : les horloges des PC sont mauvaises et dérivent de façon non négligeable.

Formation permanente – ARS

/ 51

Horloges Unix

Synchronisation d’horloges

Or de nombreux services d’Unix ont besoin d’une horloge fiable : – NIS, service de distribution d’informations système (/etc/hosts, /etc/passwd) – NFS, système permettant le partage de fichiers entre machines – utilitaires Makefile pour les compilations (on ne recompile des fichiers que si ceux-ci sont plus récents que le dernier binaire généré) – courrier électronique – etc. besoin d’une synchronisation d’horloges
 

Formation permanente – ARS

/ 52

Horloges Unix

Synchronisation d’horloges

Méthodes de synchronisation d’horloges :

1. par rdate Si pas disponible d’origine sur le système, se rabattre sur

ftp://ftp.inria.fr/network/time/rdate.shar.Z
Exemple :

# rdate bigben
Problèmes : – synchronisation sur une seule machine – blocage de la commande en cas de machine HS ?

Formation permanente – ARS

/ 53

Horloges Unix

Synchronisation d’horloges

2. par NTP (Network Time Protocol) Non disponible par défaut. Se reporter à

http://www.eecis.udel.edu/~ntp/ ou à http://www.cru.fr/NTP/
La synchronisation se fait en considérant l’heure de plusieurs machines de références (équipées par exemple d’horloges atomiques) et en tenant compte des délais de transmission via le réseau. Pour une liste de serveurs de temps en France, se reporter à

http://www.cru.fr/NTP/serveurs_francais.html

Formation permanente – ARS

/ 54

Horloges Unix

Synchronisation d’horloges

En pratique : (a) on choisit des serveurs de temps (b) on désigne une machine du labo comme serveur d’heure pour le labo (c) on y installe le package NTP ce qui se traduit par lancer le démon xntpd sur le serveur (d) sur les clients du labo, faire "ntpdate régulier

bigben.labo.fr" à intervalle

Garde fou : on ne met pas la machine à l’heure si la différence d’heure est trop grande :

Sep Sep too Sep

11 02:06:47 tournesol xntpd[93]: system event 4 status c621 11 02:06:47 tournesol xntpd[93]: time error -7390.467777 is way \ large (set clock manually) 11 02:06:47 tournesol xntpd[93]: system event 2 status c634

Formation permanente – ARS

/ 55

Horloges Unix

Synchronisation d’horloges

Il existe des clients NTP pour Mac et PC. Se reporter à

http://www.eecis.udel.edu/~ntp/software.html

Personnellement, j’utilise sur Macintosh

ftp://ftp.lava.net/users/kirill/software/Vremya/

Formation permanente – ARS

/ 56

Horloges Unix

Représentation Unix du temps

§ 3.3 Représentation Unix du temps
Pour Unix, le début du temps est le 1 septembre 1970. La fin du temps : le mardi 19 janvier 2038 à 4 h 14 min 7s (heure GMT).

% adb 0t0=Y 1970 Jan 0t2147483647=Y 2038 Jan 19 04:14:07 0t2147483648=Y 1901 Dec 13 21:45:52
 

1 01:00:00

(2147483647
Formation permanente – ARS

0x7fffffff)
/ 57

Horloges Unix

Représentation Unix du temps

Le problème d’Unix, n’est pas vraiment celui du passage à l’an 2000, c’est plutôt : – l’expiration du temps une fois que les 32 bits d’horloge seront remplis – des mauvaises configuration de temps : – mauvaise gestion des années bissextiles ; par exemple sur DEC OSF1 3.x :
Copy the appropritate version of clock.o into /sys/BINARY after saving the original and rebuild the kernel. This will correct the problem where a day is lost when the time is adjusted and the sytem rebooted during the month of March of a leap year.

– changement d’heure été / heure d’hiver (passage de septembre à octobre en 1997)

Formation permanente – ARS

/ 58

Horloges Unix

Heure d’été – Heure d’hiver

§ 3.4 Heure d’été – Heure d’hiver

La machines Unix connait la plupart des règles de passage à l’heure d’hiver / heure d’été en vigueur dans le monde.

Encore faut-il dire à la machines Unix quelle règle appliquer par vous !

Formation permanente – ARS

/ 59

Horloges Unix

Heure d’été – Heure d’hiver

Cela se règle au niveau du fichier :

AIX DEC FreeBSD HP-UX 10 IRIX Linux SunOS Solaris

/etc/environment /etc/zoneinfo/localtime /etc/localtime /etc/TIMEZONE /etc/TIMEZONE /usr/lib/zoneinfo/localtime /usr/share/lib/zoneinfo/localtime /etc/TIMEZONE

Pour la France on prend MET-1DST (Middle European Time Daylight Saving Time)

Formation permanente – ARS

/ 60

Horloges Unix

Heure d’été – Heure d’hiver

La variable d’environnement TZ permet de changer de règle pour une session shell. La variable d’environnement TZ a priorité sur le fichier précisant l’heure :

% date Thu Oct 22 22:38:54 CEST 1998 % TZ=NST % export TZ % date Thu Oct 22 20:39:28 GMT 1998

Formation permanente – ARS

/ 61

Système de multifenêtrage : X

Chapitre 4 : Système de multifenêtrage : X
Système de multifenêtrage (Window System) : ensemble de programmes, de bibliothèques de programmation réalisant une interface homme / machine bâtie sur l’utilisation de divers équipements : – clavier – souris – écran graphique – autres 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 projet Athena du MIT. Pour Unix, le système de multi fenêtrage est un système appelé X ou X Window System ou X11. Ce n’est pas "X Windows" ! Greuh ! ! !
Formation permanente – ARS / 62

Système de multifenêtrage : X

Sites de distribution gratuite : – – –

ftp://ftp.x.org http://www.x.org ftp://ftp.lip6.fr/pub/X11 (site miroir)

Newsgroups : – – – – – – – –

comp.windows.x comp.windows.x.announce comp.windows.x.apps comp.windows.x.i386unix comp.windows.x.intrinsics comp.windows.x.motif comp.windows.x.openlook comp.windows.x.pex
/ 63

Formation permanente – ARS

Système de multifenêtrage : X

Caractéristiques de X

§ 4.1 Caractéristiques de X

C’est un peu plus qu’un système de multifenêtrage : il est réparti. L’interface homme / machine permet de travailler sur plusieurs systèmes à la fois :

Formation permanente – ARS

/ 64

Système de multifenêtrage : X

Caractéristiques de X

X est indépendant : – des matériels – des systèmes d’exploitation – des protocoles de communication (TCP/IP mis aussi DecNet. . . )

X fournit des mécanismes. X ne définit pas de méthodes.

Formation permanente – ARS

/ 65

Système de multifenêtrage : X

Clavier

§ 4.2 Clavier

Plusieurs modificateurs : – Control – Shift – Meta – CapsLock – ... Tous les types de claviers sont supportés. Au pire, on peut configurer un clavier hors du commun via la commande "xmodmap".
Formation permanente – ARS / 66

Système de multifenêtrage : X

Souris

§ 4.3 Souris

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.
Formation permanente – ARS / 67

Système de multifenêtrage : X

Ecran

§ 4.4 Ecran

y x

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).
Formation permanente – ARS / 68

Système de multifenêtrage : X

Fenêtre

§ 4.5 Fenêtre

y x h w

Rectangle à l’écran caractérisé par un emplacement, une bordure, ses dimensions.

Formation permanente – ARS

/ 69

Système de multifenêtrage : X

Icône

§ 4.6 Icône
C’est une petite fenêtre. C’est la trace visible à l’écran d’une fenêtre temporairement non affichée.

Formation permanente – ARS

/ 70

Système de multifenêtrage : X

DISPLAY

§ 4.7 DISPLAY
C’est un triplet (écran, clavier, souris) C’est une station de travail Unix, un terminal X, un mac avec le bon logiciel (Mac X, eXodus), un PC avec le bon logiciel (cf

ftp://ftp.lip6.fr/pub9/doc/faqs/x-faq/Intel-Unix-X-faq.gz)
Un display a un nom et une adresse. L’adresse est une adresse IP. Son nom est du type "linux7.formation.jussieu.fr:0.0".

0.0 désigne l’écran 0 de la machine. X permet de gérer des machines
multicéphales.

Formation permanente – ARS

/ 71

Système de multifenêtrage : X

Architecture de X

§ 4.8 Architecture de X

X est constitué des parties suivantes : – un serveur C’est un programme gérant du matériel (le display) et du pur logiciel : fenêtres, resources, événements. – des clients Des applications utilisant un serveur X. – un protocole Il fait communiquer les clients et le serveur. – des bibliothèques Elles réalisent le protocole et l’interface des clients

Formation permanente – ARS

/ 72

Système de multifenêtrage : X

Serveur X

§ 4.9 Serveur X
Le serveur X gére le display mais aussi : – le système de communication sous jacent – les particularités du système d’exploitation Il gère un ensemble de fenêtres organisées en arbre dans lequel les propriétés se transmettent par filiation. La racine de l’arbre est la root window créée à l’initialisation du serveur et couvrant tout l’écran.

Formation permanente – ARS

/ 73

Système de multifenêtrage : X

Protocole X

§ 4.10 Protocole X
X utilise un modéle client / serveur.

drivers

Unix

UNIX

TCP/IP

TCP/IP

ddx−os−dix

Xlib

Xlib Client Client Client

Xserver

Window manager

Formation permanente – ARS

/ 74

Système de multifenêtrage : X

Protocole X

Il est basé sur un protocole de transport mais en est indépendant. Les messages sont typés : – requêtes – réponses – événements – erreurs La bibliothèque Xlib est la partie client de la mise en œuvre du protocole. La Xlib bufferise la plupart des requêtes et fusionne certaines requêtes.

Formation permanente – ARS

/ 75

Système de multifenêtrage : X

Protocole X

Types d’événements : – matériels : clavier, souris – logiciels : fenêtres, tables de couleur Principe : le client s’abonne à une liste d’événements :

myevents = ButtonPressMask | KeyPressMask | ExposureMask ; XSelectInput( mydisplay, mywindow, myevents ) ;
Formation permanente – ARS / 76

Système de multifenêtrage : X

RESEAU

Clients X

§ 4.11 Clients X
Ce sont les programmes basés sur les bibliothèques X. Le protocole X est utilisé pour envoyer des requêtes au serveur X qui réalisera leurs fonctions graphiques.

Ce sont les clients qui réalisent l’interface homme / machine de X (contrairement à Windows, à Mac OS où l’interface est intégrée au système d’exploitation).

Formation permanente – ARS

/ 77

Système de multifenêtrage : X

Clients X

Quelques clients essentiels : – émulation graphique d’un terminal : xterm – gestionnaire de fenêtres : twm, tvtwm, fvwm, mwm, olwm, olvwm, . . . – accessoires de bureau : xclock, xbiff, . . .

Formation permanente – ARS

/ 78

Système de multifenêtrage : X

Bibliothèques X

§ 4.12 Bibliothèques X
Elles réalisent le protocole X et l’interface des clients.
ecran

Processus Serveur X L’architecture d’un serveur X
clavier

souris

Protocole X Interface Socket / Tcp

Interface socket / tcp Protocole X Xlib L’architecture d’un client X X-Intrinsics Boite a outils (widgets) Programme d’application

Formation permanente – ARS

/ 79

Système de multifenêtrage : X

Bibliothèques X

On les trouve dans les répertoires suivants selon le système : – – – –

/usr/lib pour les constructeurs /usr/X11R6/lib (Linux, FreeBSD, XFree86, . . . ) /usr/local/X11R6/lib /usr/openwin (Solaris)

– autres. . .

Attention : ne pas confondre une bibliothèque avec X. On n’a pas une machine sous Motif. Non sens. Greuh ! ! !
Formation permanente – ARS / 80

Système de multifenêtrage : X

Bibliothèques X

Constatation : 1. Les bibliothèques sont de plus en plus nombreuses. Cf annexe D. – XForms (langage ?) – QT (langage ?) – GTK (langage ?) – Tk (langage Tcl) – Interviews (langage C++) – Lesstif (langage C), http://lesstif.org, compatible en source avec Motif – Motif (langage C) – OpenLook (langage C) 2. Le link n’en est que plus compliqué :

-lXt -lSM -lICE -lXext -lX11
Formation permanente – ARS / 81

Système de multifenêtrage : X

Gestionnaire de fenêtres

§ 4.13 Gestionnaire de fenêtres
 

Gestionnaire de fenêtres

Window Manager

C’est un client X, au même titre que les autres. Il y en a plein. Cf annexe E. Il permet de réaliser les choses suivantes : – déplacer ou redimensionner une fenêtre – iconifier ou non une fenêtre – faire passer au premier ou au dernier plan une fenêtre – décorer les fenêtres – créer ou détruire les fenêtres – lancer ou terminer des applications L’ICCM (InterClient Communication Manual) définit les règles de cohabitation entre les clients et le gestionnaire de fenêtres.
Formation permanente – ARS / 82

Système de multifenêtrage : X

Gestionnaire de fenêtres

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

L’emploi d’un gestionnaire de fenêtres n’a rien d’obligatoire maisce serait se priver de beaucoup de fonctionnalités.

Formation permanente – ARS

/ 83

Système de multifenêtrage : X

Gestionnaire de fenêtres

Ecran sans gestionnaire de fenêtres :

Formation permanente – ARS

/ 84

Système de multifenêtrage : X

Gestionnaire de fenêtres

Ecran avec un gestionnaire de fenêtres :

Formation permanente – ARS

/ 85

Système de multifenêtrage : X

Spécification des options aux clients X

§ 4.14 Spécification des options aux clients X

Il y a des options standard pour la plupart des clients (tout au moins ceux reposant sur l’emploi de la bibliothèque Xt) : – couleur des caractères : "-fg

couleur" couleur" font"

– couleur de fond des fenêtres : "-bg

– caractères : "-fn

Formation permanente – ARS

/ 86

Système de multifenêtrage : X

Spécification des options aux clients X

– dimensions et emplacement de la fenêtre :
 

"-geometry
+0+0

WIDTH HEIGHT XOFF YOFF"
-0+0 X X +600+100 -450+150 -200+150

+100+100

Y

Y

+100-100 X +0-0

+600-100 X -0-0

Formation permanente – ARS

¡

¡

Y

Y

-450-200

-200-200

/ 87

Système de multifenêtrage : X

Spécification des couleurs aux clients X

§ 4.15 Spécification des couleurs aux clients X
On peut désigner une couleur sous un nom symbolique : cf

/usr/X11R6/lib/X11/rgb.dir /usr/X11R6/lib/X11/rgb.pag /usr/X11R6/lib/X11/rgb.txt
On peut aussi donner une couleur sous la forme de ses composantes Rouge Vert Bleu (RGB en anglais) :

rgb:<red>/<green>/<blue>
Ancienne syntaxe supportée pour compatibilité :
#RGB #RRGGBB #RRRGGGBBB #RRRRGGGGBBBB (4 bits each) (8 bits each) (12 bits each) (16 bits each)

Cf annexe F pour un exemple.
Formation permanente – ARS / 88

Système de multifenêtrage : X

Spécification des couleurs aux clients X

Principal problème avec les couleurs : le flash suite aux changements de colormap.

Raison : une colormap a un nombre limité de cellules.

Si une application a besoin de plus de cellules que disponibles, l’application alloue une colomap privée qui est installée à chaque fois que l’on se trouve dans une de ses fenêtres et desinstallée quand on les quitte. D’où un flash.

L’intérêt d’un écran 24 bits est de permettre de ne pas avoir ce flash de colormap. Son intérêt ne réside pas dans la disponibilité de nombreuses couleurs dont les nuance sont indicernables de l’oeil humain.

Formation permanente – ARS

/ 89

Système de multifenêtrage : X

Spécification des polices de caractères

§ 4.16 Spécification des polices de caractères
Les fontes ont des noms bien précis :

-adobe-courier-medium-r-normal--10-100-75-75-m-60-iso8859-1
(marque, nom, graisse, angle, largeur, style, taille en pixels, taille en 1/10 points, resolution X, resolution Y, approche, taille moyenne, ensemble)

On peut utiliser la commande xlsfonts pour avoir la liste des fontes utilisables sur son poste X.

Formation permanente – ARS

/ 90

Système de multifenêtrage : X

Spécification des polices de caractères

Plusieurs formats sont possibles : – BDF (Bitmap Distribution Format), genre de format source – SNF (Server Natural Font), format compilé à partir d’un source BDF par

bdftosnf
– PCF (Portable Compiled Font), format compilé à partir d’un source BDF par

bdftopcf
– Type1 PostScript depuis X11R6, apparu avec X11R5 – True Type (http://www.freetype.org/) – PEX – Speedo

Formation permanente – ARS

/ 91

Système de multifenêtrage : X

Spécification des polices de caractères

On trouve les fontes dans l’arborescence par exemple sur Linux :

/usr/X11R6/lib/X11/fonts/

% ls /usr/X11R6/lib/X11/fonts/ 100dpi/ 75dpi/ PEX/ Speedo/ Type1/

misc/

A noter : attention aux fontes japonaises installées par défaut et qui prennent beaucoup de place pour rien :
% ls -l ... -r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r--r-...

1 1 1 1 1 1

root root root root root root

staff staff staff staff staff staff

3732 3352 229782 367802 198168 2394

Nov Nov Nov Nov Nov Nov

14 14 14 14 14 14

07:31 07:31 07:31 07:31 07:31 07:31

heb6x13.pcf.gz heb8x13.pcf.gz jiskan16.pcf.gz jiskan24.pcf.gz k14.pcf.gz nil2.pcf.gz

Formation permanente – ARS

/ 92

Système de multifenêtrage : X

Spécification des polices de caractères

Dans chaque directory de fontes, on trouve : – un fichier par fonte :
% ls /usr/X11R6/lib/X11/fonts/misc/ 10x20.pcf.Z 7x13.pcf.Z 12x24.pcf.Z 7x13B.pcf.Z 12x24rk.pcf.Z 7x14.pcf.Z 3270-12.pcf.Z 7x14B.pcf.Z 3270-12b.pcf.Z 7x14rk.pcf.Z ... clR6x12.pcf.Z clR6x13.pcf.Z clR6x6.pcf.Z clR6x8.pcf.Z clR7x10.pcf.Z

On peut compresser un fichier de fonte (compress, gzip). – un fichier spécial fonts.dir : généré automatiquement par la commande mkfontdir, il donne les associations entre les noms de fichiers et les noms de fontes :
... 6x13.pcf.Z -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1 6x10.pcf.Z -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1 7x13.pcf.Z -misc-fixed-medium-r-normal--13-120-75-75-c-70-iso8859-1 ...

Formation permanente – ARS

/ 93

Système de multifenêtrage : X

Spécification des polices de caractères

– un fichier spécial fonts.alias : crée manuellement et spécifiant des alias :
fixed variable 6x10 6x13 ... -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1 -*-helvetica-bold-r-normal-*-*-120-*-*-*-*-iso8859-1 -misc-fixed-medium-r-normal--10-100-75-75-c-60-iso8859-1 -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso8859-1

Formation permanente – ARS

/ 94

Système de multifenêtrage : X

Spécification des polices de caractères

Des applications ont parfois besoin de fontes spéciales. (par exemple Star Office sur Linux). Il faut les installer sur le système : 1. on crée les directories ad-hoc 2. on avertit le serveur de la présence de ces nouvelles fontes

Pour réaliser le point 2, il y a plusieurs cas : cas 1 : les fontes sont ajoutées dans un directory système existant déjà :
 

Root fait "mkfontdir" dans le directory. Chaque utilisateur en cours de session fait "xset

fp rehash".

Formation permanente – ARS

/ 95

Système de multifenêtrage : X

Spécification des polices de caractères

cas 2 : on ajoute les fontes ailleurs que dans les directories existant :
   

On spécifier dans le fichier de configuration du serveur ces nouveaux directories. Par exemple pour XFree86 (Linux and co) :
Section "Files" RgbPath "/usr/X11R6/lib/X11/rgb" FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled" FontPath "/usr/X11R6/lib/X11/fonts/Type1" FontPath "/usr/X11R6/lib/X11/fonts/Speedo" FontPath "/usr/X11R6/lib/X11/fonts/misc" FontPath "/usr/X11R6/lib/X11/fonts/75dpi" FontPath "/usr/X11R6/lib/X11/fonts/100dpi" FontPath "/usr/X11R6/lib/X11/fonts/star-office/75dpi" FontPath "/usr/X11R6/lib/X11/fonts/star-office/type1" EndSection

Ce ne sera actif qu’au prochain démarrage du serveur X.

Formation permanente – ARS

/ 96

Système de multifenêtrage : X

Spécification des polices de caractères

cas 3 : les fontes sont par exemple ajoutées par un utilisateur pour son usage personnel Il fait :

% xset fp+ $HOME/mes-fontes/ % xset fp rehash
Pour connaître le chemin des fontes, utiliser la commande xset :
% xset q ... Font Path: /usr/local/X11R6.3/lib/X11/fonts/100dpi/,\ /usr/local/X11R6.3/lib/X11/fonts/75dpi/,\ /usr/local/X11R6.3/lib/X11/fonts/misc/,\ /users/adm/besancon/CONFIG/X/lib/fonts,\ /usr/local/X11R6.3/lib/X11/fonts/applix/

Formation permanente – ARS

/ 97

Système de multifenêtrage : X

Spécification des polices de caractères

A noter : il existe un mécanisme de serveur de fontes, apparu avec X11R5. On va chercher les fontes via le réseau.

Font Server 1

Font Server 2
.........

bdf

snf

pcf

pcf

bdf

snf

atm ......

X Server 1

X server 2

Autre client

Cf le serveur de fontes xfs.
Formation permanente – ARS / 98

Système de multifenêtrage : X

Spécification des polices de caractères

C’est transparent pour l’utilisateur à la configuration de son chemin de recherche de fontes près.

% xset q ... Font Path: tcp/gibet:7100,/rom/fonts/default/

Formation permanente – ARS

/ 99

Système de multifenêtrage : X

Personnalisation – Ressources X

§ 4.17 Personnalisation – Ressources X
Tous les clients X sont personnalisables au moyen de ressources.X Il y a 2 types de ressources : Ressources standard Héritées de la bibliothèque de programmation Xt Intrinsics très utilisée. Spécification de fontes, géométrie, background, foreground, borderwidth, display, . . . Ressources particulières à l’application Par exemple, dans xterm, la possibilité d’afficher ou pas un ascenceur (ressource "scrollBar") ou de spécifier le nombre de lignes à garder en mémoire à l’affichage (ressource "saveLines"). Cf page de manuel de chaque application.

Formation permanente – ARS

/ 100

Système de multifenêtrage : X

Personnalisation – Ressources X

Où trouver les ressources ?

App-defaults

Les dernieres ressources specifiees sont prioritaires

.Xdefaults

arguments d’appel

Specification en dur du programme

Formation permanente – ARS

/ 101

Système de multifenêtrage : X

Personnalisation – Ressources X

Les ressources par défaut pour les applications sont enregistrées dans des fichiers dans /usr/X11R6/lib/X11/app-defaults/ par exemple sur Linux :
% ls /usr/X11R6/lib/X11/app-defaults/ Beforelight XClock Bitmap XConsole Bitmap-color XFontSel Chooser XLoad Clock-color XLogo Editres XLogo-color Editres-color XPaint Viewres XSm XCalc XTerm XCalc-color XTerm-color XClipboard XbmBrowser

XbmBrowser-color Xditview Xditview-chrtr Xedit Xfd Xgc Xmag Xman Xmessage Xmh Xvidtune

On notera les majuscules !

Formation permanente – ARS

/ 102

Système de multifenêtrage : X

Personnalisation – Ressources X

En ce qui concerne les ressources personnalisées par l’utilisateur, le fichier chez l’utilisateur les contenant est $HOME/.Xresources On trouve aussi $HOME/.Xdefaults.

En pratique, faire un lien de $HOME/.Xdefaults vers

$HOME/.Xresources.
La commande xrdb permet de manipuler les ressources chargées dans le serveur :

% xrdb -query > $HOME/ressources % vi $HOME/ressources % xrdb -load $HOME/ressources

Formation permanente – ARS

/ 103

Système de multifenêtrage : X

Personnalisation – Ressources X

A quoi ressemble une ressource ?

Exemple :

% xterm -fg red -sb -ls -bw 4 -fn 10x20
 

xterm*scrollBar: xterm*foreground: xterm*loginShell: xterm*borderWidth: xterm*font:

True red True 4 10x20

Formation permanente – ARS

/ 104

Système de multifenêtrage : X

Personnalisation – Ressources X

Un client X est construit autour d’un arbre de widgets fournis par les bibliothèques :

Formation permanente – ARS

/ 105

Système de multifenêtrage : X

Personnalisation – Ressources X

Une ressource désigne donc, via une sorte de PATH, un élément dans l’arbre à personnaliser. Les composantes du path de la ressouce peuvent être séparées par ’.’ ou ’*’ :
Clock*Background: Clock*BorderColor: Clock*hour: Clock*jewel: Clock*minute: XTerm.JoinSession: XTerm*mainMenu*quit*Label: grey light blue yellow yellow yellow False Quit

Le caractère ’*’ permet de sauter la spécification de composantes intermédiaires. On peut aussi préciser des ressources via la ligne de commande :

% xterm -xrm ’XTerm*mainMenu*quit*Label: Quit’

Formation permanente – ARS

/ 106

Système de multifenêtrage : X

Autorisation d’accès

§ 4.18 Autorisation d’accès

Principe client / serveur :

On doit pouvoir contrôler quels clients peuvent se connecter au serveur X.
Formation permanente – ARS / 107

Système de multifenêtrage : X

Autorisation d’accès

La commande xhost permet de gérer les accès au serveur X :

% xhost access control enabled, only authorized clients can connect % xhost + peterpan.ens.fr peterpan.ens.fr being added to access control list % xhost access control enabled, only authorized clients can connect INET:peterpan.ens.fr % xhost - peterpan.ens.fr peterpan.ens.fr being removed from access control list

Formation permanente – ARS

/ 108

Système de multifenêtrage : X

Autorisation d’accès

En pratique :

% echo $DISPLAY MA-MACHINE:0.0 % xhost + FQDN % rlogin FQDN $ setenv DISPLAY MA-MACHINE:0.0 $ clientX ... $ exit % xhost - FQDN

Formation permanente – ARS

/ 109

Système de multifenêtrage : X

Autorisation d’accès

Le défaut de la commande xhost est d’autoriser une machine et donc tout utilisateur y étant connecté. Solution : emploi d’un cookie, pseudo secret connu du serveur à rappeler lors d’une demande de connexion au serveur X.

transmission du cookie au demarrage

copie du cookie

gestion du display

xdm

~/.Xauthority

reseau Serveur X

Formation permanente – ARS

/ 110

Système de multifenêtrage : X

Autorisation d’accès

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

magic cookie A

ACCEPTE

Transmission magic cookie A

CLIENT X 1

~alice/.Xauthority
Transmission magic cookie B

REFUSE

~charly/.Xauthority
CLIENT X 2

reseau Serveur X

Formation permanente – ARS

/ 111

Système de multifenêtrage : X

Autorisation d’accès

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 /users/adm/besancon/.Xauthority

Formation permanente – ARS

/ 112

Système de multifenêtrage : X

Autorisation d’accès

Que faire si $HOME/.Xauthority n’est pas disponible sur la machine distante ? Réponse : utiliser la commande xauth

Extrait de la page de manuel :

The most common use for xauth is to extract the entry for the current display, copy it to another machine, and merge it into the user’s authority file on the remote machine: % xauth extract - $DISPLAY | rsh otherhost xauth merge -

Formation permanente – ARS

/ 113

Système de multifenêtrage : X

Autorisation d’accès

Le danger : l’utilisateur faisant "xhost tout client peut se connecter !
 

+"

L’attaque :
 

– lecture / espionnage du clavier root" Cf

récupération de mots de passe lors de "su

ftp://ftp.giga.or.at/pub/hacker/unix/xscan.tar.gz
– destruction de fenêtres par l’utilisation de "xkill" par exemple – capture d’écran par l’utilisation de "xwd -root"

Formation permanente – ARS

/ 114

Système de multifenêtrage : X

Utilisation répartie de X

§ 4.19 Utilisation répartie de X
Manuellement

% echo $DISPLAY MA-MACHINE:0.0 % xhost + FQDN % rlogin FQDN $ setenv DISPLAY MA-MACHINE:0.0 $ clientX ... $ exit % xhost - FQDN
Formation permanente – ARS / 115

Système de multifenêtrage : X

Utilisation répartie de X

On peut automatiser : – xrsh : cf
ftp://ftp.lip6.fr/pub/X11/contrib/utilities/xrsh-5.8.shar.gz

– rxx : cf
ftp://ftp.lip6.fr/pub/X11/contrib/utilities/rxx-4.2.3.tar.gz

– SSF : transmission automatique du DISPLAY avec son cookie associé (voir

http://www.in2p3.fr/secur/ssf) et sécurisation de la liaison par
chiffrement légal de la communication :

Formation permanente – ARS

/ 116

Système de multifenêtrage : X

Utilisation répartie de X

Chiffrement Dechiffrement client X PSEUDO CLIENT X

S S H

S S H

Chiffrement Dechiffrement

Pseudo Serveur X PSEUDO DISPLAY "stationB:11.0"

DISPLAY

"stationA:0.0"

client X

Formation permanente – ARS

/ 117

Système de multifenêtrage : X

Utilisation répartie de X

% echo $DISPLAY :0.0 % ssf central.pasteur.fr besancon@central.pasteur.fr’s password: ... % echo $DISPLAY nefertiti.pasteur.fr:11.0 ...

Formation permanente – ARS

/ 118

Système de multifenêtrage : X

XDM : X Display Management

§ 4.20 XDM : X Display Management
C’est la fenêtre d’accueil standard sous X. Cf annexe G.
 

xdm

getty + login

xdm est un programme qui tourne sur un serveur de calcul et qui gère un ensemble de serveurs X (par exemple sur des terminaux X). xdm crée un shell sur le serveur de calcul qui configure l’environnement utilisateur via le fichier "$HOME/.xsession".

la durée de vie de la session sous X est celle du script
 

$HOME/.xsession.

Formation permanente – ARS

/ 119

Système de multifenêtrage : X

XDM : X Display Management

En général :

#!/bin/sh appliX1 & appliX2 & ... appliXn & appliX
Le dernier client X n’est pas lancé en tâche de fond. En général, le dernier client est un window manager. Cf ftp://ftp.lip6.fr/pub/doc/faqs/x-faq/speedups.gz

Formation permanente – ARS

/ 120

Système de multifenêtrage : X

XDM : X Display Management

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 le démarrage de la session X, utiliser le mode FailSafe : 1. entrer le nom de login 2. valider par la tocuhe Retour 3. entrer le mot de passe 4. valider par la touche F1 et non pas par la touche Retour Il apparait alors un simple xterm sans window manager.

Formation permanente – ARS

/ 121

Système de multifenêtrage : X

XDM : X Display Management

Le terminal X offre uniquement une interface de connexion à d’autres machines. Il peut accèder à un ou plusieurs serveurs XDM : – serveur initial défini dans la configuration du terminal X – recherche d’autres serveurs XDM et choix laissé à l’utilisateur via une liste Sur le serveur XDM : – lancement de /usr/X11R6/bin/xdm – configuration via /usr/X11R6/lib/X11/xdm/xdm-config XDM gère les connexions depuis les serveurs X : – locaux – distants c’est-à-dire des terminaux X

Formation permanente – ARS

/ 122

Système de multifenêtrage : X

XDM : X Display Management

Le fichier /usr/X11R6/lib/X11/xdm/xdm-config définit les paramètres associés à chaque serveur X : – paramètres globaux : Par exemple :

DisplayManager.errorLogFile: DisplayManager.pidFile: DisplayManager.servers: DisplayManager.accessFile:
– paramètres spécifiques à chaque serveur X :

/etc.local/xdm/logs/xdm.errors /etc.local/xdm/logs/xdm.pid /etc.local/xdm/lib/shared/Xservers /etc.local/xdm/lib/shared/Xaccess

DisplayManager.<NOM-SERVEUR-X>.<paramètre>
Par exemple :

DisplayManager._0_0.grabServer: DisplayManager._0_0.authorize: DisplayManager*grabServer: DisplayManager*authorize:
Formation permanente – ARS

false true false true
/ 123

Système de multifenêtrage : X

XDM : X Display Management

Ressources XDM : Elles sont définies dans le fichier Xresources. Par exemple :

xlogin*login.translations: #override\ <Key>F2: allow-all-access() finish-field()\n\ <Key>F1: set-session-argument(failsafe) finish-field()\n\ <Key>Return: set-session-argument() finish-field() xlogin*borderWidth: 3 xlogin*greeting: Bienvenue sur le terminal X HOST\nconnecté à CLIENTHOST. xlogin*fail: Play it Sam. Play "As time goes by".

Formation permanente – ARS

/ 124

Système de multifenêtrage : X

Compilation d’un client X

§ 4.21 Compilation d’un client X

Se reporter à ftp://ftp.lip6.fr/pub/X11/ pour des applications à compiler. Procèdure pour une installation propre : 1. 2. 3. 4. 5. 6. 7. 8.

uncompress package tar xvf package xmkmf make depend make make install make install.man make clean
/ 125

Formation permanente – ARS

Système de multifenêtrage : X

Compilation d’un client X

L’automatisme de la compilation provient de l’utilitaire "imake" qui génére les Makefile appropriés à la machine en fonction d’une mini base de données. Se reporter à : – –

ftp://night.primate.wisc.edu/pub/imake-book/ ftp://night.primate.wisc.edu/pub/imake-stuff/

– Software Portability with imake, 2nd Edition By Paul DuBois 2nd Edition September 1996 O’Reilly & Associates, Inc. 1-56592-226-3, 410 pages, $32.95

Formation permanente – ARS

/ 126

Système de multifenêtrage : X

Quelques clients X spéciaux

§ 4.22 Quelques clients X spéciaux

xset Ce client permet de récupérer et de modifier la configuration de la souris, du clavier, du chemin des fontes. . . Cf annexe H pour un exemple. xdpyinfo Ce client renvoit des renseignements sur la configuration de l’affichage : version du serveur, résolutiob, taille, etc. Cf annexe G pour un exemple.

Formation permanente – ARS

/ 127

Chaîne de compilation

Chapitre 5 : Chaîne de compilation

§ 5.1 Passes d’un compilateur
Apparemment la compilation se résume à

% cc toto.c % ls -lF a.out -rwxr-xr-x 1 besancon software

24576 Sep 28 23:25 a.out*

En fait, c’est beaucoup plus complexe.

Formation permanente – ARS

/ 128

Chaîne de compilation

Passes d’un compilateur

Le même exemple de compilation mais en ne masquant plus rien (exemple sur SunOS) :

% cc -v toto.c /lib/cpp -undef -Dunix -Dsun -Dsparc toto.c >/tmp/cpp.13192.0.i /lib/ccom - </tmp/cpp.13192.0.i >/tmp/ccom.13192.1.s rm /tmp/cpp.13192.0.i /bin/as -o toto.o -Q /tmp/ccom.13192.1.s rm /tmp/ccom.13192.1.s /bin/ld -dc -dp -e start -X -o a.out /usr/lib/crt0.o toto.o -lc rm toto.o % ls -lF a.out -rwxr-xr-x 1 besancon software 24576 Sep 28 23:26 a.out*

Formation permanente – ARS

/ 129

Chaîne de compilation

Passes d’un compilateur

On distingue donc plusieurs passes formant la chaîne de compilation : 1. Préprocesseur : commande cpp

/lib/cpp -undef -Dunix -Dsun -Dsparc toto.c >/tmp/cpp.13192.0.i
2. Compilateur C générant le code assembleur : commande ccom, cc1, ou autre

/lib/ccom - </tmp/cpp.13192.0.i >/tmp/ccom.13192.1.s rm /tmp/cpp.13192.0.i
3. Assembleur générant le code machine : commande

as

/bin/as -o toto.o -Q /tmp/ccom.13192.1.s rm /tmp/ccom.13192.1.s
4. Edition de liens (assemblage du code machine avec les bibliothèques système) : commande

ld

/bin/ld -dc -dp -e start -X -o a.out /usr/lib/crt0.o toto.o -lc rm toto.o

Formation permanente – ARS

/ 130

Chaîne de compilation

Passes d’un compilateur

On peut bien sûr lancer chaque étape manuellement.

En pratique : On ne compile jamais manuellement un fichier C.

Au mieux : On désire connaître le résultat après le passage du préprocesseur. Essentiellement dans le cas de portage d’un Unix à un autre Unix.

Formation permanente – ARS

/ 131

Chaîne de compilation

Préprocesseur C : CPP

§ 5.2 Préprocesseur C : CPP
Il intervient tout au début de la chaîne de compilation.

Il existe deux méthodes de l’appeler : 1. commande du type :

% /usr/lib/cpp toto.c
2. le plus pratique (mais cela ne marche que si le fichier a une extension «.c») :

% cc -E toto.c

Formation permanente – ARS

/ 132

Chaîne de compilation

Préprocesseur C : CPP

CPP a pour utilités : – de fournir des macros dans le code C – de fournir les descriptions de structures système, les prototypes des fonctions système – de décider du déroulement du code C selon certains critères de compilation

Formation permanente – ARS

/ 133

Chaîne de compilation

Macro CPP

§ 5.3 Macro CPP
Exemple de macro :

#define DIV(x,y)

x / y

Cette macro est cependant fausse :
   

DIV(a+1, b)

Façon correcte de coder la macro :

#define DIV(x,y)

(x) / (y)

Formation permanente – ARS

Chaîne de compilation

Structures et prototypes système

§ 5.4 Structures et prototypes système
% man stat STAT(2) NAME stat, lstat, fstat - get file status SYNOPSIS #include <sys/types.h> #include <sys/stat.h> ... struct stat { dev_t st_dev; ino_t st_ino; mode_t st_mode; nlink_t st_nlink; uid_t st_uid; ... FreeBSD System Calls Manual STAT(2)

/* /* /* /* /*

inode’s device */ inode’s number */ inode protection mode */ number of hard links */ user ID of the file’s owner */

Formation permanente – ARS

 ©  
/ 134 / 135



© ¡ ¢ 

§¥£ ¡ ¨¦¤¢ 

Chaîne de compilation

Structures et prototypes système

% cat foo.c #include <sys/stat.h> /* fin du fichier */ % cc -E foo.c # 1 "foo.c" # 1 "/usr/include/sys/stat.h" 1 3 ... # 96 "/usr/include/sys/types.h" 2 3 typedef unsigned long clock_t; ... # 51 "/usr/include/sys/stat.h" 2 3 struct stat { dev_t ino_t mode_t nlink_t uid_t ...

st_dev; st_ino; st_mode; st_nlink; st_uid;

Formation permanente – ARS

/ 136

Chaîne de compilation

Structures et prototypes système

Au passage, on notera les lignes du type :

# 96 "/usr/include/sys/types.h" 2 3

La commande

cpp -P permet de supprimer ces lignes.

Formation permanente – ARS

/ 137

Chaîne de compilation

Directive #include

§ 5.5 Directive #include
Il existe deux applications possibles de la directive :

#include<...>
   

On cherche le fichier spécifié entre <> dans la liste des répertoires système :

/usr/include, /usr/local/include . . . #include "..."
On cherche le fichier spécifié entre "" relativement au directory courant de compilation.

Par exemple :

#include "hack.h" #include <signal.h>
Formation permanente – ARS / 138

Chaîne de compilation

Directive #include

La recherche des fichiers include peut être modifiée en spécifiant de nouveaux répertoires à sonder. La syntaxe est :

% cc -Irépertoire foo.c

Pour porter un programme sur une nouvelle architecture, on utilisera parfois -I.

Formation permanente – ARS

/ 139

Chaîne de compilation

Directives #define

§ 5.6 Directives #define
CPP propose quelques structures de contrôle. Selon les valeurs de symboles mis en jeu, il décidera du code C qui sortira du préprocessing. On peut tester l’existence d’un symbole :
 

#ifdef symbole ... #else ... #endif

#if defined(symbole) ... #else ... #endif

Formation permanente – ARS

/ 140

Chaîne de compilation

Directives #define

Par exemple :

#ifdef CHDIR static void chdirx(); #endif /* CHDIR */ #if defined(__sun) extern struct passwd *FDECL(getpwuid,(uid_t)); #else extern struct passwd *FDECL(getpwuid,(int)); #endif

Formation permanente – ARS

/ 141

Chaîne de compilation

Directives #define

On peut tester la non existence d’un symbole :
   

#ifndef symbole ... #else ... #endif
Par exemple :

#if ! defined(symbole) ... #else ... #endif

#ifndef O_RDONLY #include <fcntl.h> #endif #if !defined(O_RDONLY) #include <fcntl.h> #endif
Formation permanente – ARS / 142

Chaîne de compilation

Directives #define

On peut tester la valeur d’un symbole au moyen des opérateurs classiques du C

’==’, ’!=’, etc. :

#if symbole operateur valeur ... #else ... #endif

Par exemple :

#if STACK_DIRECTION == 0 if (STACK_DIR == 0) find_stack_direction (); #endif

/* Unknown growth direction.

*/

Formation permanente – ARS

/ 143

Chaîne de compilation

Directives #define

On peut préciser l’existence d’un symbole, la non existence d’un symbole, la
   

valeur d’un symbole de divers façons : 1. Au niveau du fichier :

#define FOO #define FOOBAR 32 #undef TRUC
2. Au niveau de la ligne de commande :

% cc -DFOO toto.c % cc -DFOOBAR=32 toto.c % cc -UTRUC toto.c

Formation permanente – ARS

/ 144

Chaîne de compilation

Directives #define

On peut composer des tests sur les symboles par les opérateurs

&&, ||, (, ),

!: #if !defined(_ANSI_SOURCE) && !defined(__STRICT_ANSI__) #include <sys/types.h> #endif

Formation permanente – ARS

/ 145

Chaîne de compilation

Directives #define

Structure courante d’un fichier include du système :
   

Extrait de <stdio.h> :

Extrait de <sys/cdefs.h> :

#ifndef _STDIO_H_ #define _STDIO_H_ ... #include <sys/cdefs.h> ... #endif /* _STDIO_H_ */
Explication : permet l’inclusion multiple

#ifndef _SYS_CDEFS_H_ #define _SYS_CDEFS_H_ ... #endif /* _SYS_CDEFS_H_ */

#include <stdio.h> #include <sys/cdefs.h>

Formation permanente – ARS

/ 146

Chaîne de compilation

Directives #define

L’utilisation de l’option
 

-v de cc permet de connaître les define du système :
multiplateforme)
 

Linux (en fait cc

gcc

% cc -v foo.c Reading specs from /usr/lib/gcc-lib/i386-linux/2.7.2.1/specs gcc version 2.7.2.1 /usr/lib/gcc-lib/i386-linux/2.7.2.1/cpp -lang-c -v -undef -D__GNUC__=2 \ -D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux -D__ELF__ -D__unix__ \ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux -Asystem(unix) \ -Asystem(posix) -Acpu(i386) -Amachine(i386) foo.c \ /tmp/cca29785.i GNU CPP version 2.7.2.1 (i386 Linux/ELF) #include "..." search starts here: #include <...> search starts here: /usr/local/include /usr/i386-linux/include /usr/lib/gcc-lib/i386-linux/2.7.2.1/include /usr/include End of search list. ...

Formation permanente – ARS

/ 147

Chaîne de compilation

Directives #define

AIX 4 (compilateur C payant)
# cc -v foo.c exec: /usr/lpp/xlC/exe/xlcentry(xlcentry,-D_AIX,-D_AIX32,-D_AIX41,-D_IBMR2,\ -D_POWER,-qtbtable=full,-qlanglvl=extended,-qnoro,-qnoroconst,-ofoo.o,foo.c,\ /tmp/xlcrdt2ia,/tmp/xlcrdt2ib,/dev/null,foo.lst,foo,/tmp/xlcrdt2ic,NULL) ...

Digital UNIX 4
% cc -v foo.c /usr/lib/cmplrs/cc/gemc_cc -D__LANGUAGE_C__ -D__unix__ -D__osf__ -D__alpha \ -D_SYSTYPE_BSD -D_LONGLONG -DLANGUAGE_C -Dunix -DSYSTYPE_BSD -I/usr/include \ -preempt_symbol -g0 -O2 -std0 -o foo.o foo.c /usr/lib/cmplrs/cc/gemc_cc: 0.00u 0.04s 0:02 1% 0+7k 467+4io 39pf+0w 7stk+920mem ...

Formation permanente – ARS

/ 148

Chaîne de compilation

Directives #define

HP-UX 9.07
% cc -v foo.c cc -v foo.c cc: CCOPTS is not set. /lib/cpp foo.c /tmp/ctmAAAa19847 -$ -D__hp9000s700 -D__hp9000s800 -D__hppa \ -D__hpux -D__unix -D_PA_RISC1_1 -j cc: Entering Preprocessor. ...

Solaris 2.5 (compilateur C payant)
% /opt/SUNWspro/bin/cc -\# foo.c /opt/SUNWspro/bin/../SC4.2/bin/acomp -i foo.c -y-fbe \ -y/opt/SUNWspro/bin/../SC4.2/bin/fbe -y-xarch=v7 -y-o -yfoo.o -y-s -y-verbose \ -Qy -D__SunOS_5_5 -D__SUNPRO_C=0x420 -D__SVR4 -D__unix -D__sun -D__sparc \ -D__BUILTIN_VA_ARG_INCR -Xa -Dunix -Dsun -Dsparc -D__RESTRICT \ -I/opt/SUNWspro/SC4.2/include/cc "-g/opt/SUNWspro/bin/../SC4.2/bin/cc -c " ...

SunOS
% cc -v foo.c /lib/cpp -undef -Dunix -Dsun -Dsparc foo.c >/tmp/cpp.00308.0.i ...

Formation permanente – ARS

/ 149

Chaîne de compilation

Edition de liens

§ 5.7 Edition de liens
Le langage C consiste en : – des types atomiques (int, long, etc.) – une syntaxe ; par exemple :

a = b + c ;
     

i++ ; int foo(int a) { return( a / 3 ); }

Formation permanente – ARS

/ 150

Chaîne de compilation

Edition de liens

Ne font pas partie du langage C : – les directives du préprocesseur : #include, #ifdef, etc. – les fonctions ! : printf(), scanf(), etc.

L’édition de liens consiste en la complémentation du code utilisateur par le code
 

précompilé des fonctions système utilisées.

emploi de bibliothèques.

Comment précise-t-on une bibliothèque à la compilation ?

% cc toto.c -lm
C’est toujours de la forme -lbibliothèque.

Formation permanente – ARS

/ 151

Chaîne de compilation

Edition de liens

Où chercher les bibliothèques de fonctions système ?

Traditionnellement dans : /lib, /usr/lib, /usr/local/lib

C’est précisable au niveau de la ligne de compilation :

% cc -Lrépertoire toto.c -lfoo

Formation permanente – ARS

/ 152

Chaîne de compilation

Edition de liens

Quels fichiers stockent les bibliothèques ?

Par exemple :

% cc prog.c -lrpcsvc -lm
utilise les bibliothèques

/usr/lib/librpcsvc.a /usr/lib/libm.a
Attention : cela dépend en fait du type d’édition de liens, cf après.

Formation permanente – ARS

/ 153

Chaîne de compilation

Edition de liens

Deux méthodes d’édition de liens : Edition de liens statique
   

Le code de toutes les fonctions système utilisées est chargé dans l’exécutable. Inconvénient : l’exécutable est figé, monolithique, auto-suffisant, gros. En cas de problème avec une fonction système (incorrectement codée par exemple), si une nouvelle bibliothèque est disponible auprès du constructeur, il faudra recompiler.

% cc -static foo.c -lrpcsvc % ls -lF a.out -rwxr-xr-x 1 besancon software
emploi de /usr/lib/librpcsvc.a
 

32768 Oct

8 21:42 a.out*

Formation permanente – ARS

/ 154

Chaîne de compilation

Edition de liens

Edition de liens dynamique On ne chargera qu’à l’exécution le code des fonctions système utilisées. Avantage : l’exécutable n’a pas besoin d’être remis à jour en cas de changement de bibliothèques système. Inconvénients : 1. l’exécutable est dépendant vis-à-vis des bibliothèques système 2. pseudo ralentissement au moment du lancement de l’exécutable ?

% cc -dynamic foo.c -lrpcsvc % ls -lF a.out -rwxr-xr-x 1 besancon software
emploi de
 

24576 Oct

8 21:42 a.out*

/usr/lib/libc.so.2.0 /usr/lib/librpcsvc.so.3.1

Formation permanente – ARS

/ 155

Chaîne de compilation

Edition de liens

Comment connaître le type d’édition de liens d’un exécutable a posteriori ? Utiliser la commande file :

% gcc -static toto.c % file a.out a.out: FreeBSD/i386 compact demand paged executable not stripped % gcc toto.c % file a.out a.out: FreeBSD/i386 compact demand paged dynamically linked executable \ not stripped

Par défaut les compilateurs travaillent en mode dynamic.

Formation permanente – ARS

/ 156

Chaîne de compilation

Edition de liens

Les binaires de /sbin sont compilés en static :
% file /sbin/* /sbin/dump: /sbin/fastboot: /sbin/fasthalt: /sbin/fdisk: /sbin/fsck: ... /sbin/ifconfig: /sbin/init: ... /sbin/mknod: ... /sbin/mount: ...

FreeBSD/i386 FreeBSD/i386 FreeBSD/i386 FreeBSD/i386 FreeBSD/i386

compact compact compact compact compact

demand demand demand demand demand

paged paged paged paged paged

executable executable executable executable executable

FreeBSD/i386 compact demand paged executable FreeBSD/i386 compact demand paged executable FreeBSD/i386 compact demand paged executable FreeBSD/i386 compact demand paged executable

Raison : on fait appel à ces binaires à un moment dans la vie de la station Unix où le mécanisme des bibliothèques partagées n’est pas encore activé.

Formation permanente – ARS

/ 157

Bibliothèques système

Chapitre 6 : Bibliothèques système

§ 6.1 Bibliothèques partagées
Rappel :

Edition de liens dynamique On ne chargera qu’à l’exécution le code des fonctions système utilisées.

Cela concerne principalement les bibliothèques du système. Quand une bibliothèque se prête à l’édition de liens dynamique, on lui donne le nom de bibliothèque partagée (son code est chargé une seule fois en mémoire et il est partagé entre les diverses applications)

Formation permanente – ARS

/ 158

Bibliothèques système

Bibliothèques partagées

Comment connaître la liste des bibliothèques partagées dont a besoin un exécutable ? Utiliser la commande ldd

% ldd /sbin/fsck ldd: /sbin/fsck: not a dynamic executable

% gcc toto.c % ldd a.out a.out: -lc.3 => /usr/lib/libc.so.3.1 (0x2001e000)

Formation permanente – ARS

/ 159

Bibliothèques système

Bibliothèques partagées

% ldd /usr/X11R6/bin/xterm /usr/X11R6/bin/xterm: -lXaw.6 => /usr/X11R6/lib/libXaw.so.6.1 (0x2003e000) -lXmu.6 => /usr/X11R6/lib/libXmu.so.6.0 (0x20071000) -lXt.6 => /usr/X11R6/lib/libXt.so.6.0 (0x20080000) -lX11.6 => /usr/X11R6/lib/libX11.so.6.1 (0x200bc000) -lSM.6 => /usr/X11R6/lib/libSM.so.6.0 (0x2014c000) -lICE.6 => /usr/X11R6/lib/libICE.so.6.3 (0x20154000) -lXext.6 => /usr/X11R6/lib/libXext.so.6.3 (0x20165000) -ltermcap.2 => /usr/lib/libtermcap.so.2.1 (0x2016e000) -lc.3 => /usr/lib/libc.so.3.1 (0x20172000)

Formation permanente – ARS

/ 160

Bibliothèques système

Bibliothèques partagées

Une bibliothèque dynamique a un numéro de version :
% ldd /usr/X11R6/bin/xterm /usr/X11R6/bin/xterm: ... -lSM.6 => /usr/X11R6/lib/libSM.so.6.0 (0x2014c000) -lICE.6 => /usr/X11R6/lib/libICE.so.6.3 (0x20154000) -lXext.6 => /usr/X11R6/lib/libXext.so.6.3 (0x20165000) -ltermcap.2 => /usr/lib/libtermcap.so.2.1 (0x2016e000) -lc.3 => /usr/lib/libc.so.3.1 (0x20172000)

Formation permanente – ARS

/ 161

Bibliothèques système

Bibliothèques partagées

Exemple de message en cas de mismatch de versions d’une bibliothèque partagée :

% ./a.out /usr/libexec/ld.so: warning: /usr/lib/libc.so.3.0: minor version 0 \ older than expected 1, using it anyway

Formation permanente – ARS

/ 162

Bibliothèques système

Bibliothèques partagées

Exemple de message en cas d’absence d’une bibliothèque partagée :

% ./a.out ld.so failed: Can’t find shared library "libpico.so.1.3" % ldd a.out a.out: /usr/libexec/ld.so: warning: /usr/lib/libc.so.3.0: minor version 0 \ older than expected 1, using it anyway -lpico.1 => not found (0x0) -lc.3 => /usr/lib/libc.so.3.0 (0x1001d000)

Formation permanente – ARS

/ 163

Bibliothèques système

Bibliothèques partagées

Comment ajouter des bibliothèques partagées au système ? 1. Copier la bibliothèque partagée dans un répertoire système prévu pour cela 2. Faire prendre connaissance au système (en fait au programme ld.so) de la présence d’une nouvelle bibliothèque partagée. Utiliser la commande ldconfig
 

Formation permanente – ARS

/ 164

Bibliothèques système

Bibliothèques partagées

En cas d’effacement de bibliothèques partagées. . . 1. AÏE 2. Essayer d’utiliser les binaires static pour réparer 3. Redémarrer sur CDROM 4. Avoir pensé à exporter par NFS les répertoires de bibliothèques partagées de façon à recopier les bibliothèques manquantes par NFS. 5. Avoir compilé en static les outils nécessaires à réparer. C’est possible en utilisant des sources d’Unix du domaine public.

Formation permanente – ARS

/ 165

Bibliothèques système

Bibliothèques statiques

§ 6.2 Bibliothèques statiques

La création de bibliothèques partagées nécessite de concevoir le code C
 

spécialement.

trop compliqué pour être abordé ici.

Le cas des bibliothèques statiques est plus simple. Une bibliothèque statique est une collection de modules objet ’.o’ avec un index.

Formation permanente – ARS

/ 166

Bibliothèques système

Bibliothèques statiques

La commande Unix pour assembler les modules objet et créer la table d’index est : ar

% ar cq libtoto.a module1.o module2.o ...
ou plus généralement

% ar [option] bibliotheque module1.o module2.o ...

Formation permanente – ARS

/ 167

Bibliothèques système

Bibliothèques statiques

Selon les systèmes Unix, il faut utiliser la commande ranlib pour mettre à jour la table des matières (problème de date) :

# touch /usr/lib/libm.a % cc -Bstatic foo.c -lm ld: /lib/libm.a: warning: table of contents for archive is out \ of date; rerun ranlib(1)
Parfois, l’édition de liens échoue uniquement par absence d’un ranlib non fait.

Formation permanente – ARS

/ 168

Voyage à l’intérieur des exécutables

Chapitre 7 : Voyage à l’intérieur des exécutables

1. nom des symboles de compilation 2. table de symboles 3. chaînes de caractères 4. formats de binaires

Formation permanente – ARS

/ 169

Voyage à l’intérieur des exécutables

Mangling

§ 7.1 Mangling
Le mangling est le passage du nom de fonction exprimé dans le langage au symbole interne pour la compilation. Par exemple : Fortran sur HP-UX :
 

Fortran sur SunOS :
 

Fortran sur AIX :
   

foo

foo

foo foo
 

_foo_ _foo

foo foo

.foo _foo__Fv

C sur HP-UX :
 

C sur FreeBSD :

C++ sur FreeBSD :

foo

foo

Formation permanente – ARS

/ 170

Voyage à l’intérieur des exécutables

Mangling

Le problème de l’administrateur (lors du portage d’un soft par exemple) :

% cc foo.c /var/tmp/ccl134891.o: Undefined symbol ‘_pintf’ referenced from \ text segment
Il faut donc : – savoir identifier la fonction en cause dans le source C. La fonction en cause existe-t-elle sur cet Unix ? – Si la fonction est implémentée, dans quelle bibliothèque la trouve-t-on ?

Formation permanente – ARS

/ 171

Voyage à l’intérieur des exécutables

Mangling

La commande nm répond au point 2. Par exemple :

% nm /usr/lib/libm.a i387_s_tan.o: 00000038 t ___arch_select_tan 00000090 D ___arch_tan U ___generic_tan U ___get_hw_float 0000005c T ___i387_tan 00000054 T _tan ...

Formation permanente – ARS

/ 172

Voyage à l’intérieur des exécutables

Table de symboles d’un exécutable

§ 7.2 Table de symboles d’un exécutable
Pour diverses raisons, il y a au sein d’un exécutable une table interne d’informations qui ne servent pas la plupart du temps : la table des symboles Inconvénient : l’exécutable est plus gros que nécessaire à cause de la table des symboles.

Pour supprimer cette table, utiliser la commande strip.

Formation permanente – ARS

/ 173

Voyage à l’intérieur des exécutables

Table de symboles d’un exécutable

% gcc foo.c -lm % file a.out a.out: sparc demand % ls -lF a.out -rwxr-xr-x 1 besancon % strip a.out % file a.out a.out: sparc demand % ls -lF a.out -rwxr-xr-x 1 besancon

paged dynamically linked executable not stripped software 32768 Oct 8 22:21 a.out*

paged dynamically linked executable software 24576 Oct 8 22:21 a.out*

A noter :

% strip a.out strip: a.out already stripped

Formation permanente – ARS

/ 174

Voyage à l’intérieur des exécutables

Chaînes de caractères d’un exécutable

§ 7.3 Chaînes de caractères d’un exécutable
Soit un programme C :

#include <stdio.h> main() { int i = 3; printf ("Hello world %d !\n", i); }
Alors :

% cc foo.c % ./a.out Hello world 3 !
Formation permanente – ARS / 175

Voyage à l’intérieur des exécutables

Chaînes de caractères d’un exécutable

% strings a.out Hello world %d !
Intérêts de la commande strings : – elle permet de trouver certaines informations dans un exécutable sans avoir recours aux sources de l’exécutable – elle s’applique à tout fichier

# /usr/ucb/gcore 26704 /usr/ucb/gcore: core.26704 dumped # strings core.26704 ... log.log ...

Formation permanente – ARS

/ 176

Voyage à l’intérieur des exécutables

Formats de binaires

§ 7.4 Formats de binaires

A priori, un système supporte un seul format d’exécutable binaire. Attention aux systèmes en supportant deux : Linux, FreeBSD, Solaris.

Quelques formats : a.out, ELF Explications : certains systèmes de binaires seraient plus performants
 

ELF

a.out

Cf la commande file (fichier de configuration

/etc/magic,

/usr/share/misc/magic)

Formation permanente – ARS

/ 177

Make – Makefile

Chapitre 8 : Make – Makefile

Si par exemple les fichiers source1.c et source2.c constituent un programme, il faut faire : 1. 2. 3.

% cc -c source1.c % cc -c source2.c % cc source1.o source2.o -o foo

En cas de modification de source1.c, il faut exécuter à nouveau les étapes 1 et 3. Dans le cas d’un exécutable avec de nombreux fichiers sources, c’est vite lassant !

Formation permanente – ARS

/ 178

Make – Makefile

Le rôle de l’utilitaire make est d’automatiser la compilation. L’emploi de make permettra de ne plus refaire les étapes 1 et 3. On fera simplement :

% make
qui déclenchera ce qu’il faut.

Pour plus de détails sur le fonctionnement de make, se reporter à la documentation en annexe.

Formation permanente – ARS

/ 179

Make – Makefile

L’utilitaire

make peut être utilisé à autre chose que de faire de la compilation : rien

ne fait mention à l’obligation de n’utiliser que les commandes de compilation au niveau du fichier Makefile. Par exemple :

all: cours.dvi SRC = \ defs.tex \ cours.tex \ 01-unix-history.tex \ 02-role-sysop.tex \ 03-basic-unix.tex \ 41-sysadm-prog.tex cours.dvi: $(SRC) latex cours.tex
Formation permanente – ARS / 180

Make – Makefile

Adage : A programmer only does things twice. The third time he writes a program to do it.

Formation permanente – ARS

/ 181

Debuggers

Chapitre 9 : Debuggers

Un debugger permet de suivre l’exécution d’un programme essentiellement à des fins de mise au point.

Il existe deux sortes de debugger : debugger source
 

Il permet de suivre le déroulement du programme en faisant référence aux sources du programme. debugger assembleur
 

Il permet de suivre le déroulement du programme tout en se passant des sources de programme.

Formation permanente – ARS

/ 182

Debuggers

Debugger source

§ 9.1 Debugger source
Principaux debuggers (mode texte) : – dbx (aix, irix, sunos), cf "ftp://interviews.stanford.edu/pub/papers/dbx.ps.Z" en annexe. – sdb (hp), – gdb (multiplateforme)

Il peut être graphique : xdbx, xxgdb, environnements de compilation des constructeurs

Problèmes : nombreuses syntaxes différentes. utiliser gdb disponible sur de nombreuses plateformes Unix.
 

Formation permanente – ARS

/ 183

Debuggers

Debugger source

Exemple de session de travail sous debugger :
% dbx a.out dbx version 3.4 of 7/27/87 11:24 (lurch). Type ’help’ for help (dbx) run Segmentation fault in P at line 12 in file "source.c" 12 *ptr = param; (dbx) print ptr nil (dbx) where P(param = 3), line 12 in file "source.c" main(argc = 1, argv = 0x7fffe210), line 105 in file "main.c" (dbx) stop at 10 [1] stop at 10 (dbx) run [1] stopped in P at line 10 in file "source.c" 10 ptr = badptr; (dbx) print ptr 0x7fffe218 (dbx) print badptr nil (dbx) quit

Formation permanente – ARS

/ 184

Debuggers

Debugger assembleur

§ 9.2 Debugger assembleur

Il travail au niveau du code assembleur et sur l’image en mémoire.

Principal intérêt de ce type de debugger : patcher le noyau Unix, tant au niveau de son image en utilisation (fonction ’ ?’) qu’au niveau du fichier dans l’arborescence (fonction ’/’).

Principalement adb. gdb (permet de debugger au niveau du code assembleur aussi)

Formation permanente – ARS

/ 185

Debuggers

Debugger assembleur

Exemples de session de travail sous debugger : Activation sur HP-UX 8.07 de l’équivalence root via NFS :
 

#! /bin/sh adb -w /hp-ux /dev/mem <<EOF nobody/X nobody/W0 nobody/X EOF

Désactivation sur HP-UX 8.07 de l’équivalence root via NFS :
 

#! /bin/sh adb -w /hp-ux /dev/mem <<EOF nobody/X nobody/W0xfffffffe nobody/X EOF

Formation permanente – ARS

/ 186

Debuggers

Debugger assembleur

Désactivation de READDIRPLUS de NFS v3 sur Digital UNIX 4 :
 

# dbx -k /vmunix /dev/mem dbx version 3.11.10 Type ’help’ for help. stopped at [thread_block:2097 ,0xfffffc00002aaab0] Source not available

warning: Files compiled -g3: parameter values probably wrong (dbx) whatis do_client_readdirplus int do_client_readdirplus; (dbx) print do_client_readdirplus 1 (dbx) assign do_client_readdirplus=0 0 (dbx) patch do_client_readdirplus=0 0

Avant :
# sum /vmunix 64609 7325 /vmunix

Après :
# sum /vmunix 61267 7325 /vmunix

Formation permanente – ARS

/ 187

Debuggers

Debugger assembleur

Au niveau de rc.local de SunOS :
 

... if [ -f /etc/security/passwd.adjunct ]; then # Warning! Turning on port checking may deny access to # older versions (pre-3.0) of NFS clients. /usr/etc/rpc.mountd echo "nfs_portmon/W1" | adb -w /vmunix /dev/kmem >/dev/null 2>&1 else /usr/etc/rpc.mountd -n echo "rpc.mountd daemon started" echo "nfs_portmon/W1" | adb -w /vmunix /dev/kmem >/dev/null 2>&1 echo "NFS port checking on" fi ...

Formation permanente – ARS

/ 188

Debuggers

Debugging post mortem : fichier core

§ 9.3 Debugging post mortem : fichier core
Quand une application se termine anormalement, elle génére une image de son espace mémoire sous la forme d’un fichier core :

% cat buggy.c #include <string.h> main() { char *p; strcpy(p, "boum !"); } % cc buggy.c % ./a.out Segmentation fault (core dumped)

Formation permanente – ARS

/ 189

Debuggers

Debugging post mortem : fichier core

De par sa nature (image mémoire), le fichier core est plein de trous :
% df . Filesystem /dev/sd2g

1024-blocks Used Available Capacity Mounted on 1791382 1519809 92435 94% /users/adm

% gcc big-buggy.c % ./a.out 10 Allocation de 10 Mo... So far so good :-) Bye bye... Segmentation fault (core dumped) % ls -ls core 10336 -rw-r--r-% df . Filesystem /dev/sd2g

1 besancon software 18911664 Oct

8 23:49 core

1024-blocks Used Available Capacity Mounted on 1791382 1530081 82163 95% /users/adm

Formation permanente – ARS

/ 190

Debuggers

Debugging post mortem : fichier core

La taille du fichier ne correspond pas à ce qui est utilisé en réalité.

Raison : les trous de l’espace mémoire n’allouent pas de bloc disque. On parle de fichier sparse.

Formation permanente – ARS

 

On constate que

¥  £ ¡ ©



© ¢£ £ ¨¢¢¤¢   © § ¦ ¥ £ ¡

!

le fichier contient des trous.

/ 191

Debuggers

Debugging post mortem : fichier core

#include #include #include #include main() { int off_t char

<unistd.h> <string.h> <fcntl.h> <stdio.h>

fd; offset; *buf = "foo";

/* * Attention ce programme est quick & dirty car on ne verifie * aucune valeur de retour des fonctions. */ fd = open("/tmp/sparse", O_WRONLY | O_CREAT, 0644); offset = 16 * 1024 * 1024 ; lseek(fd, offset, SEEK_SET); write(fd, buf, strlen(buf)); close(fd); }

Formation permanente – ARS

/ 192

Debuggers

Debugging post mortem : fichier core

Les blocs intermédiaires ne sont pas alloués :

% ls -ls /tmp/sparse 16 -rw-r--r-- 1 besancon

bin

16777219 Sep 21 19:17 /tmp/sparse

Le caractère "sparse" n’est pas conservé par recopie :

% cp /tmp/sparse /tmp/sparse2 % ls -ls /tmp/sparse /tmp/sparse2 16 -rw-r--r-- 1 besancon bin 16400 -rw-r--r-- 1 besancon bin

16777219 Sep 21 19:17 /tmp/sparse 16777219 Sep 21 19:17 /tmp/sparse2

Formation permanente – ARS

/ 193

Debuggers

Debugging post mortem : fichier core

A noter que selon les systèmes Unix, le fichier core prend des noms différents : core program-name.core

Formation permanente – ARS

/ 194

Debuggers

Debugging du noyau

§ 9.4 Debugging du noyau

Il existe des core du noyau Unix. La noyau peut planter : on parle de panic Au redémarrage, on essaye de sauver l’image core du noyau quand il a planté en la sauvant dans la zone de swap. Cf l’utilitaire savecore. Les images sauvées s’appellent en général "vmcore.#" et sont placées à l’endroit précisé via une option à savecore. Il existe des debuggers spéciaux pour le noyau : kdbx, kgdb, kadb Leur emploi est délicat et est l’affaire des développeurs système.

Formation permanente – ARS

/ 195

Debuggers

Utilitaire trace

§ 9.5 Utilitaire trace

Il existe un debugger bridé intéressant : trace Il trace l’emploi d’appels systèmes (fonctions de la section 2 du manuel) par un exécutable.

Disponibilité de la commande sur la quasi totalité des systèmes soit de base soit via

ftp://ftp.mindspring.com/users/ahobson/strace-3.1.0.1-du.tgz

Formation permanente – ARS

/ 196

Debuggers

Utilitaire trace

Intérêt : – Connaître le type d’actions de base réalisées par un programme :
close(3) = 0 open("/usr/lib/libc.so.1.9.1", O_RDONLY) = 3 read(3, "\201\3\1\v\0\7\240\0\0\0@\0\0\000"..., 32) = 32

– Pouvoir comprendre les dysfonctionnements de programmes :
25487 xmgr-3.01pl7.LIN RET execve 0 25487 xmgr-3.01pl7.LIN CALL getitimer(0x1e6d7e) 25487 xmgr-3.01pl7.LIN NAMI "/compat/linux/lib/ld.so" 25487 xmgr-3.01pl7.LIN NAMI "/lib/ld.so" 25487 xmgr-3.01pl7.LIN RET getitimer JUSTRETURN 25487 xmgr-3.01pl7.LIN CALL write(0x2,0xefbfdd9c,0x14) 25487 xmgr-3.01pl7.LIN GIO fd 2 wrote 20 bytes "./xmgr-3.01pl7.LINUX" 25487 xmgr-3.01pl7.LIN CALL write(0x2,0xefbfdd20,0x2a) 25487 xmgr-3.01pl7.LIN GIO fd 2 wrote 42 bytes ": can’t load dynamic linker ’/lib/ld.so’ \0" 25487 xmgr-3.01pl7.LIN lin{\"u}N5{\^I} RET write 42/0x2a 25487 xmgr-3.01pl7.LIN lin{\"u}N5{\^I} CALL exit(0x80)

Formation permanente – ARS

/ 197

Divers autres outils de programmation

Chapitre 10 : Divers autres outils de programmation

§ 10.1 Préprocesseur M4

m4 est un préprocesseur comme CPP. Il est reconnu plus puissant que CPP mais il y a peu de gens à l’utiliser.

A la version de base fournie par les systèmes, préférer

ftp://ftp.lip6.fr/pub/gnu/m4-1.4.tar.gz
(documentation, traitement des caractères 8 bits)

Formation permanente – ARS

/ 198

Divers autres outils de programmation

Préprocesseur M4

Quelques emplois connus : – fichier de configuration de syslogd sur SunOS (et autres. . . )
#auth.notice mail.debug ifdef(‘LOGHOST’, /var/log/authlog, @loghost) ifdef(‘LOGHOST’, /var/log/syslog, @loghost) old sendmails. they will send will be turned into "user" messages "loghost" machine needs the following messages to be logged in the

# following line for compatibility with # messages with no facility code, which # by the local syslog daemon. only the # line, to cause these old sendmail log # mail syslog file. # ifdef(‘LOGHOST’, user.alert )

/var/log/syslog

Formation permanente – ARS

/ 199

Divers autres outils de programmation

Préprocesseur M4

– fichier de configuration de sendmail version 8 On pourra utiliser alternativement

ftp://ftp.jussieu.fr/jussieu/sendmail/kit/kit-5.3.tar.Z

Formation permanente – ARS

/ 200

Divers autres outils de programmation

Préprocesseur M4

item fichier de configuration de fvwm Attention au problème entre la fonction m4 "include" et la mention au directory

/usr/X11R6/include :
## #define M4 ## Causes m4 pre-processor patches to be included. Try man m4 for more info. ## Warning: m4 defines macros for some simple things like "include" ## which might mess up a config like ## IconPath /usr/include/X11/bitmaps ## for example, so you would need to include ## undefine(‘include’) to fix that one. Some version of m4 ## seem to give good error messages, others don’t? ## undefine(‘include’)

Formation permanente – ARS

/ 201

Divers autres outils de programmation

Utilitaire patch

§ 10.2 Utilitaire patch

Patcher, c’est apporter une correction à un fichier (binaire ou ascii). Cela peut être fastidieux à réaliser manuellement. Automatisation possible pour des fichiers texte par patch.

Disponibilité : ftp://ftp.lip6.fr/pub/gnu/patch-2.5.tar.gz

Formation permanente – ARS

/ 202

Divers autres outils de programmation

Utilitaire patch

Principe :
 

Soient les fichiers "foo.original" et "foo.modifie". Le fichier patch exhibant les différences de "foo.modifie" par rapport à "foo.original" s’obtient par diff -c :
% diff -c foo.original foo.modifie > p % cat p *** foo.original Sun Oct 11 15:14:46 1998 --- foo.modifie Sun Oct 11 15:14:42 1998 *************** *** 1,3 **** ligne 1 ! ligne 2 ligne 3 --- 1,3 ---ligne 1 ! ligne 2 ajout de texte ici ligne 3

Formation permanente – ARS

/ 203

Divers autres outils de programmation

Utilitaire patch

Utilisation :
 

On récupère un fichier patch, par exemple par Internet. On applique le patch de la façon suivante au fichier original (ici "foo.original") :

% patch < p Hmm... Looks like a new-style context diff to me... The text leading up to this was: -------------------------|*** foo.original Sun Oct 11 15:14:46 1998 |--- foo.modifie Sun Oct 11 15:14:42 1998 -------------------------Patching file foo.original using Plan A... Hunk #1 succeeded at 1. done

Formation permanente – ARS

/ 204

Divers autres outils de programmation

Utilitaire patch

Avant :

% ls -l total 2 -rw-r--r--rw-r--r--

1 besancon 1 besancon

software software

24 Oct 11 15:17 foo.original 204 Oct 11 15:17 p

Après :

% ls -l total 3 -rw-r--r--rw-r--r--rw-r--r--

1 besancon 1 besancon 1 besancon

software software software

43 Oct 11 15:17 foo.original 24 Oct 11 15:17 foo.original.orig 204 Oct 11 15:17 p

Formation permanente – ARS

/ 205


								
To top