Aide memoire

HTML/PHP de Formulario de Contacto simple

7décembre

Le DNS est un protocole indispensable au fonctionnement d'Internet. Non pas d'un point de vue technique, mais d'un point de vue de son utilisation. Il est inconcevable aujourd'hui d'utiliser des adresses IP en lieu et place des noms des sites web pour naviguer sur Internet. Se souvenir de 58.250.12.36 est déjà compliqué, mais quand vous surfez sur 40 sites différents par jour, cela fait quelques adresses à retenir. Et ça, on ne sait pas faire...

Un arbre avec des branches

Une arborescence ordonnée

Le système DNS, vous l'utilisez tous les jours quand vous naviguez sur Internet. Lorsque vous voulez accéder au Site du Zéro, le système DNS se charge de convertir (on parle de résolution) le nom du site web demandé en adresse IP.

Un nom de domaine se décompose en plusieurs parties. Prenons l'exemple suivant :

www.google.fr
Chaque partie est séparée par un point.
On trouve l'extension en premier (en premier, mais en partant de la droite) ; on parle de Top Level Domain (TLD). Il existe des TLD nationaux (fr, it, de, es, etc.) et les TLD génériques (com, org, net, biz, etc.).
Ici, on a le découpage suivant :

www.google.fr
Il existe une infinité de possibilités pour la deuxième partie. Cela correspond à tous les sites qui existent : google.fr, siteduzero.com, ovh.net, twitter.com, etc.
Comme vous le voyez, google.fr est un sous-domaine de fr. Le domaine fr englobe tous les sous-domaines finissant par fr.
La troisième partie est exactement comme la seconde. On y retrouve généralement le fameux "www", ce qui nous donne des noms de domaine comme www.google.fr. www peut soit être un sous-domaine de google.fr, mais dans ce cas il pourrait y avoir encore des machines ou des sous-domaines à ce domaine, soit être directement le nom d'une machine.
Ici, www est le nom d'une machine dans le domaine google.fr.

On peut bien entendu ajouter autant de troisièmes parties que nécessaire, ce qui peut vous conduire à avoir un nom de domaine comme : www.fr.1.new.super.google.fr. :D

Voici une toute petite partie de l'arborescence des noms Internet :

Image utilisateur

Chaque "partie" est appelée label et l'ensemble des labels constitue un FQDN : Fully Qualified Domain Name. Ce FQDN est unique. Par convention, un FQDN se finit par un point, car au-dessus des TLD il y a la racine du DNS, tout en haut de l'arbre. Ce point disparaît lorsque vous utilisez les noms de domaine avec votre navigateur, mais vous verrez qu'il deviendra très important lorsque nous configurerons notre propre serveur DNS.

Trucs et astuces !

Si jamais vous administrez un réseau, et que vous possédez le domaine mondomaine.com, vous pouvez vous amuser à ajouter dans votre serveur DNS une machine qui s'appellera www.siteduzero.fr.mondomaine.com.
Ainsi, dès qu'une personne qui utilise votre serveur DNS demande www.siteduzero.fr en oubliant de mettre le . à la fin, elle sera envoyée vers votre la machine www.siteduzero.fr.mondomaine.com. !
Hacking power ! :p

Mais revenons aux principes du DNS pour étudier un dernier point important dans l'arborescence.
Dans l'architecture du service DNS, chaque label est responsable du niveau directement en dessous et uniquement de celui-ci. La racine est responsable du domaine .com, le .com de google.com et google.com de www.google.com, etc. Bien entendu, Google veut gérer lui-même le domaine google.com. L'organisme qui gère le domaine .com délègue donc la gestion de ce nom de domaine à Google.

Ainsi, chaque personne qui veut posséder un domaine sur Internet peut l'acheter, mais devra ensuite gérer un serveur DNS pour publier ses adresses.
Cependant, la plupart des entreprises qui vendent des noms de domaine (qu'on appelle registrar) proposent de gérer elles-mêmes vos enregistrements DNS, mais c'est moins fun. ;)

Nous savons donc que le DNS est organisé sous forme d'une grosse arborescence, et que chaque partie de l'arborescence peut être gérée par la personne qui la possède.

Mais comment fait-on pour savoir qui possède telle où telle partie et où sont stockées les informations que l'on recherche ?

La résolution, comment ça marche ?

Vous êtes connectés à votre réseau, votre serveur DHCP vous a donné une adresse IP, un masque de sous-réseau et probablement une passerelle par défaut, ainsi qu'un serveur DNS.

Imaginez que vous entrez www.siteduzero.com dans votre navigateur. Lorsque vous entrez ce nom, votre machine doit commencer par le résoudre en une adresse IP.
Vous allez donc demander une résolution au serveur DNS que vous avez reçu par le DHCP. Celui-ci a deux moyens pour vous fournir la réponse :

  • il connaît lui-même la réponse ;

  • il doit la demander à un autre serveur, car il ne la connaît pas.

La plupart du temps, votre serveur DNS est bien peu savant et demande à un autre serveur de lui donner la réponse. En effet, chaque serveur DNS étant responsable d'un domaine ou d'un petit nombre de domaines, la résolution consiste à aller chercher la bonne information sur le bon serveur.

Nous voulons donc joindre le site www.siteduzero.com et voilà ce que va faire mon serveur DNS.
Tout d'abord, il est évident que cette information ne se trouve pas sur notre serveur, car ce n'est pas lui qui est en charge du Site du Zéro.
Pour obtenir cette résolution, notre serveur va procéder de façon rigoureuse et commencer par là où il a le plus de chance d'obtenir l'information, c'est-à-dire au point de départ de notre arborescence.

  • Il va demander aux serveurs racine l'adresse IP de www.siteduzero.com. Mais comme les serveurs racine ne sont pas responsables de ce domaine, ils vont le rediriger vers un autre serveur qui peut lui donner une information et qui dépend de la racine, le serveur DNS de com.

  • Il demande ensuite au serveur DNS de com l'adresse IP de www.siteduzero.com. Mais comme auparavant, le serveur com renvoie l'adresse IP du serveur DNS qui dépend de lui, le serveur DNS de siteduzero.com.

  • Enfin, il demande au serveur DNS de siteduzero.com l'adresse IP de www.siteduzero.com et là, ça marche : le serveur de siteduzero.com connaît l'adresse IP correspondante et peut la renvoyer.

Maintenant, vous avez l'adresse IP de www.siteduzero.com !

Existe-t-il aussi un protocole pour convertir une adresse IP en nom de domaine ?

Non, c'est inutile. Le DNS sait faire cela, on parle alors de reverse DNS et de résolution inverse.

La gestion internationale des noms de domaine

Même si le système DNS n'est pas indispensable au fonctionnement d'Internet, il en est un élément incontournable.
Le système de noms de domaine est géré par un organisme américain appelé l'ICANN. Celui-ci dépend directement du Département du Commerce des États-Unis. L'ICANN est responsable de la gestion des 13 serveurs DNS qui gèrent la racine du DNS. Ces 13 serveurs connaissent les adresses IP des serveurs DNS gérant les TLD (les .fr, .com; org, etc.)

Il n'y a vraiment que 13 serveurs racine ?

Oui et non.
En fait, après plusieurs attaques sur les serveurs racine, on s'est rendu compte de la faiblesse de n'avoir que 13 serveurs et de la menace que cela pouvait représenter pour le fonctionnement d'Internet.
On a donc mis en place un système qui duplique les 13 serveurs en différents endroits d'Internet. Il y a donc réellement aujourd'hui plusieurs centaines de serveurs racine qui dupliquent les informations des 13 serveurs d'origine.

C'est l'ICANN qui autorise la création d'une nouvelle extension, comme le .xxx il y a plusieurs mois ou l'utilisation de caractères non-latins (arabes, chinois, japonais, etc.), il y a quelques années.
L'ICANN délègue ensuite les domaines de premier niveau à divers organismes. Pour l'Europe, c'est le RIPE qui délègue lui-même à L'AFNIC qui est responsable du domaine .fr (ainsi que des extensions correspondantes à la France d'outre-mer) ; pour le domaine .com, c'est VeriSign qui s'en occupe. Les labels inférieurs correspondent généralement à des sites ou à des entreprises, et la gestion du nom de domaine leur revient.

Configuration de Bind

Maintenant que nous nous sommes familiarisés avec les noms de domaine et le fonctionnement des DNS, nous allons configurer notre premier nom de domaine. Nous utiliserons le serveur de noms de domaine le plus vieux et le plus utilisé au monde : BIND.

La configuration de notre nom de domaine se fera sous Debian. Vous pouvez donc réutiliser votre Debian préférée.

Préparation

Présentons d'abord ce que nous allons configurer ici.

Première chose, quand vous possédez un domaine, vous devez avoir deux serveurs DNS, un serveur primaire et un serveur secondaire. Ceci est nécessaire pour pouvoir garantir que si l'un tombe en panne, le second permettra toujours d'accéder à vos serveurs.

Le domaine que nous allons configurer sera : reseau.fr.

  • Ce nom de domaine sera géré par deux serveurs dns :

    • ns1.reseau.fr - 192.168.0.1 sera notre serveur maître ;

    • ns2.reseau.fr - 192.168.0.2 sera notre serveur esclave.

  • Les adresses email de ce nom de domaine seront gérées par deux serveurs de messagerie :

    • mx1.reseau.fr - 192.168.0.3 ;

    • mx2.reseau.fr - 192.168.0.4.

  • Ce nom de domaine possédera deux machines :

  • Il existera aussi une autre machine, blog.reseau.fr, qui sera un alias de www.reseau.fr.

Installation de Bind9

# apt-get install bind9

Les fichiers de configuration de Bind se trouvent, comme on peut s'y attendre, dans /etc/bind.
La configuration se fait en deux temps. Nous devons tout d'abord déclarer à notre serveur quels seront les noms de domaine qu'il va devoir gérer, on appelle ça des zones. Ensuite, nous devrons configurer ces zones, grâce à un fichier de configuration par zones.

Configuration du serveur master

Déclaration des zones

Une zone se déclare de cette façon :

zone "reseau.fr" {
                type master;
                file "/etc/bind/db.reseau.fr";
                allow-transfer { 192.168.0.2; };
        };

Le type indique si vous êtes master ou slave sur la zone, c'est-à-dire si c'est vous qui effectuez les mises à jour (master) ou si vous les recevez d'un autre serveur (slave).
File indique le fichier dans lequel sera configurée votre zone.
Allow-transfer indique le serveur qui pourra recevoir vos mises à jour. Bien entendu, cette directive n'existe que dans le cas d'un serveur master.

Passons maintenant à la configuration de notre zone.

Configuration de la zone du serveur master

On édite donc le fichier /etc/bind/db.reseau.fr. Afin d'avoir une configuration "basique", vous pouvez faire une copie de /etc/bind/db.local.

cp /etc/bind/db.local /etc/bind/db.reseau.fr
vim /etc/bind/db.reseau.fr

Dans ce fichier de zone, nous allons indiquer des enregistrements. Il en existe de plusieurs types :

  • A : c'est le type le plus courant, il fait correspondre un nom d'hôte à une adresse IPv4 ;

  • AAAA : fait correspondre un nom d'hôte à une adresse IPv6 ;

  • CNAME : permet de créer un alias pointant sur un autre nom d'hôte ;

  • NS : définit le ou les serveurs DNS du domaine ;

  • MX : définit le ou les serveurs de mail du domaine ;

  • PTR : fait correspond une IP à un nom d'hôte. Il n'est utilisé que dans le cas d'une zone inverse, que nous verrons plus loin ;

  • SOA : donne les infos de la zone, comme le serveur DNS principal, l'adresse mail de l'administrateur de la zone, le numéro de série de la zone et des durées que nous détaillerons.

Il en existe d'autres mais pas forcément utiles ou intéressants pour ce cours.

Voici ce que donnera notre fichier de zone complet :

$TTL 604800     ; 1 semaine
$ORIGIN reseau.fr.
@       IN SOA  ns1.reseau.fr. admin.reseau.fr. (
                                2013020905 ;serial
                                3600       ; refresh (1 hour)
                                3000       ; retry (50 minutes)
                                4619200    ; expire (7 weeks 4 days 11 hours 6 minutes 40 seconds)
                                604800     ; minimum (1 week)
                                )

@               IN      NS      ns1.reseau.fr.
@               IN      NS      ns2
@               IN      MX      10 mx1
@               IN      MX      20 mx2
ns1             IN      A       192.168.0.1
ns2             IN      A       192.168.0.2
mx1             IN      A       192.168.0.3
mx2             IN      A       192.168.0.4
tuto            IN      A       192.168.0.5
www             IN      A       192.168.0.6
blog            IN      CNAME   www

Examinons chacune de ces informations.
La première info est un TTL (Time to Live). Quand quelqu'un va interroger votre serveur DNS pour obtenir des informations, ces informations vont être stockées en cache chez cette personne (dans la mémoire de son serveur DNS, pour éviter qu'il vienne nous réinterroger de nombreuses fois s'il a de nouveau besoin d'une information). Ce TTL est la durée pendant laquelle les informations sont conservées en cache. Ce délai passé, une nouvelle demande devra être faite au serveur. Le TTL est défini ici sur 1 semaine. En fonction de la fréquence de vos mises à jour, vous pouvez décider de baisser cette valeur pour que vos clients aient leurs informations à jour.

La deuxième info est la variable ORIGIN. Celle-ci est optionnelle. Vous voyez les petits @ plus loin ? Ces @ prennent la valeur de la variable ORIGIN. En l'absence de variable ils prendront la valeur du nom de votre zone défini dans le fichier named.conf (reseau.fr ici).

Vient ensuite notre premier enregistrement, c'est un enregistrement de type SOA (Start Of Authority). Le type SOA est suivi de deux informations. La première est le nom du serveur de domaine principal (master) et la seconde est l'adresse mail de l'administrateur du domaine (en remplaçant l'arrobase par un point). Suivent entre parenthèses différentes valeurs.

  • Le serial peut être comparé à un numéro de version de votre zone. Il doit être incrémenté à chaque modification. Cela indique à votre serveur que votre zone a été mise à jour et qu'il faut envoyer la notification à vos serveurs esclaves. Les best practices recommandent une syntaxe particulière pour le serial de la forme AAAAMMJJXX (où XX est la version du jour en question). Cela vous permet entre autres de savoir la date de la dernière mise à jour de votre zone.

  • Refresh est le temps au bout duquel les enregistrements sont stockés sur le serveur slave. Passer ce délai, le serveur slave demandera une nouvelle mise à jour au serveur master.

  • Retry est le temps qu'attendra le serveur slave dans le cas où le serveur master contacté n'est pas joignable pour faire un nouvel essai.

  • Expire est le temps pendant lequel le serveur slave continuera à essayer de contacter le serveur master.

  • Minimum est la durée minimale du cache ; elle est en général égale à Refresh.

Nous trouvons ensuite les enregistrements, du moins ceux qui nous intéressent !

Les enregistrements se découpent en 4 parties sur une ligne (parfois 5 pour des enregistrements spécifiques).
La première information, c'est l'hôte de votre domaine. Nous avons parlé du @ tout à l'heure qui est remplacé par la valeur de $ORIGIN (le cas échéant par le nom de votre zone). Notez qu'on peut ne rien mettre du tout si on veut parler du domaine entier. Rien, @, ou un nom de machine ou de sous-domaine au choix.
Le second, représente la classe. Ici, elle spécifie qu'il s'agit d'un enregistrement concernant Internet. Il existe d'autres valeurs mais elles ne sont pas utilisées, donc on met toujours IN.
Le troisième spécifie le type d'enregistrement dont on a détaillé les différents types précédemment.
Enfin, le dernier spécifie la valeur de l'enregistrement dépendant du type. Un type A attendra une adresse IP, un type PTR attendra un nom d'hôte, etc.
On trouve parfois, juste avant cette dernière valeur, un nombre qui indique le "poids" d'un enregistrement. On verra plus loin dans quel cas c'est utile.

On commence généralement par les enregistrements des serveurs gérant notre domaine et les services associés (le mail en l'occurrence). Dans notre cas il s'agit des types NS et MX. On utilise l'@ parce que ces enregistrements ne déterminent pas un hôte en particulier, mais bien le domaine entier.

@               IN      NS      ns1.reseau.fr.

Cette ligne se traduit donc par : "ns1.reseau.fr est un serveur de nom de domaine de reseau.fr"

Ceci étant, réécrire à chaque fois le FQDN c'est un peu contraignant. Et comme on sait que, ne pas finir sa ligne par un "." rajoute au FQDN de votre zone, on peut se permettre de n'écrire que "ns1". Ainsi, votre serveur rajoutera "reseau.fr." et on aura le FQDN que l'on cherchait à obtenir.
Voyez la deuxième ligne qui utilise cette syntaxe raccourcie.

Les enregistrements MX utilisent la même syntaxe que pour les NS et indiquent l'adresse IP d'un serveur de messagerie, à cela près que nous avons rajouté un chiffre devant "mx1". Nous avons dit tout à l'heure que ce chiffre déterminait le "poids" d'un enregistrement, on parle aussi de priorité. Nous avons deux serveurs MX : mx1 et mx2 ; cette valeur va permettre de déterminer lequel des deux doit être utilisé en priorité. Plus elle est basse, plus le serveur est prioritaire.

Mais nous avons aussi deux serveurs NS ! Comment se passe cette priorité, étant donné qu'il n'y a pas de valeur pour les départager ?

Dans ce cas, c'est chacun son tour. Sur une machine Linux, essayez plusieurs fois de suite cette commande :

host -t NS google.fr

Vous verrez que les réponses que vous recevez ne sont jamais dans le même ordre. Cela s'appelle du Round-Robin, c'est une méthode qui permet d'équilibrer la charge entre les deux serveurs pour ne pas les surcharger, car un serveur sera autant consulté que les autres serveurs du même type.

Très bien, maintenant on sait que les serveurs mail de notre domaine sont mx1.reseau.fr et mx2.reseau.fr. Cependant, on ne sait toujours pas leurs adresses IP alors que c'est quand même le but d'un serveur DNS, non ?

D'ailleurs, vous voyez qu'ensuite nous définissons l'adresse IP de mx1 (sans . à la fin, donc mx1.reseau.fr ! ) avec un enregistrement de type A.
C'est ce qu'on appelle un Glue Record. On définit une première fois le nom d'hôte du serveur NS, puis on définit l'adresse IP de cet hôte. On doit faire cela, car un enregistrement NS associe un nom de serveur au nom du domaine. Il faut donc ajouter un enregistrement A pour le nom de ce serveur.

On retrouve ensuite les enregistrements les plus courants, ceux de type A (et AAAA quand on a de l'IPv6). En effet, le rôle principal du DNS est de faire correspondre un nom d'hôte avec son adresse IP, et c'est ce que fait le type A.
La syntaxe est relativement simple comme vous pouvez le voir :

tuto               IN      A      192.168.0.5

Comme pour les autres enregistrements, "tuto" ou "tuto.reseau.fr." revient au même. N'oubliez pas le point si vous optez pour le FQDN.

Le type CNAME est aussi simple à comprendre. On fait correspondre un nom d'hôte à un autre nom d'hôte. Bien sûr, si "blog" pointe sur "www", l'enregistrement www doit exister.
Je le répète encore une fois : si vous choisissez le FQDN, n'oubliez pas le point, c'est une des premières causes d'erreurs dans les configurations DNS.

Voilà, notre zone est maintenant configurée sur notre serveur master. Vous devez redémarrer BIND pour que les changements soient pris en compte :

# /etc/init.d/bind9 restart

Configuration du serveur slave

Nous avons prévu deux serveurs dans notre architecture . Celui que nous venons de configurer est le master ; celui que nous allons faire sera le slave. Les modifications se font sur le master, et celui-ci enverra des notifications aux slaves (il peut y en avoir plusieurs) pour que leurs zones soient mises à jour.

La configuration du serveur slave est donc relativement simple, tout se passe dans le named.conf. Il n'y a pas de fichier de zone à configurer étant donné que celui-ci sera reçu du master.

On commence par installer Bind comme pour le master et on édite /etc/bind/named.conf.

zone "reseau.fr" {
                type slave;
                file "/var/cache/bind/db.reseau.fr";
                masters { 192.168.0.1;};
        };

Et c'est tout ! :D
La directive masters indique l'adresse IP du serveur master duquel nous allons recevoir les mises à jour de notre zone.

Résolution inverse

Pour l'instant, nous avons vu le protocole DNS comme un moyen de résoudre un nom d'hôte en une adresse IP. Nous avons parlé des enregistrements de type PTR et vous savez donc que DNS permet aussi de faire le travail inverse. C'est une résolution inverse.
Votre serveur DNS se doit de pouvoir résoudre une adresse IP en un nom d'hôte. C'est ce que nous allons faire ici.

Retournons dans notre fichier named.conf afin d'ajouter cette zone inverse. Nous allons déclarer la zone inverse de notre adressage IP, ici c'est 192.168.0.0/24.
Alors qu'une zone "normale" se déclare de façon plutôt logique, une zone inverse doit respecter une certaine forme concernant le nom de la zone :

zone "0.168.192.in-addr.arpa." {
        type master;
        file "/etc/bind/db.192.168.0";
};

Voilà pour la déclaration. Il faut juste faire attention au nommage de la zone, la partie réseau de l'adresse IP à l'envers, puis ".in-addr.arpa".

On crée ensuite le fichier de zone.

$TTL 604800     ; 1 semaine
$ORIGIN 0.168.192.in-addr.arpa.
@       IN SOA  ns1.reseau.fr. admin.reseau.fr. (
                                2013020905 ;serial
                                3600       ; refresh (1 hour)
                                3000       ; retry (50 minutes)
                                4619200    ; expire (7 weeks 4 days 11 hours 6 minutes 40 seconds)
                                604800     ; minimum (1 week)
                                )

@               IN      NS        ns1.reseau.fr.
@               IN      NS        ns2.reseau.fr.
1               IN      PTR       ns1.reseau.fr.
2               IN      PTR       ns2.reseau.fr.
3               IN      PTR       mx1.reseau.fr.
4               IN      PTR       mx1.reseau.fr.
5               IN      PTR       tuto.reseau.fr.
6               IN      PTR       www.reseau.fr.

Ce n'est pas très compliqué. C'est l'inverse d'une zone "normale". Ça, je pense que vous l'avez compris maintenant. ^^
Les points auxquels il faut faire attention :

  • une zone inverse ne contient que des enregistrements de type NS ou PTR ;

  • dans notre zone "normale", blog redirigeait vers www, mais là une adresse IP ne peut pointer que vers un seul hôte ;

  • la variable ORIGIN a changé ! Il faut donc penser à utiliser le FQDN de nos hôtes à chaque fois.

Vérification

On va quand même vérifier le fonctionnement de notre zone maintenant.
Commencez déjà par redémarrer votre serveur de nom pour prendre en compte les changements de configuration : # /etc/init.d/bind9 restart
Il existe plusieurs commandes pour faire des interrogations DNS. La commande la plus utilisée est host mais dig fournit plus d'informations et permet un diagnostic plus précis en cas de problème. Vérifiez d'abord le serveur DNS utilisé par votre machine. Comme cette machine est elle-même un serveur DNS, elle va devoir s'interroger elle-même.

Le programme qui fait toutes les résolutions DNS pour votre machine s'appelle le resolver. Ainsi, chaque programme qui a besoin de faire une résolution DNS s'adresse au resolver.
Son fichier de configuration se trouve dans /etc/resolv.conf qui doit au moins contenir l'adresse d'un serveur DNS à interroger :

nameserver 127.0.0.1

Oui, votre serveur va s'interroger lui-même. Vous pouvez spécifier d'autres serveurs, un par nameserver. Ce fichier peut aussi contenir des informations sur votre domaine ou le domaine de recherche.

On peut maintenant commencer nos tests :

Nous allons donc utiliser la commande host qui permet de faire une interrogation DNS.
Sa syntaxe est la suivante:
# host -t type nom_a_chercher IPserveur

On peut ainsi indiquer le type de la requête (NS, A, MX, CNAME, etc.), le nom à interroger, ainsi que l'adresse IP du serveur que l'on peut préciser.

Par exemple, si l'on cherche l'adresse des serveurs DNS du domaine reseau.fr :

# host -t ns reseau.fr
reseau.fr name server ns1.reseau.fr.
reseau.fr name server ns2.reseau.fr.

Et pour avoir leurs adresses IP:

# host -t a ns1.reseau.fr
ns1.reseau.fr has address 192.168.0.1
# host -t a ns2.reseau.fr
ns2.reseau.fr has address 192.168.0.2

Si tout se passe bien, c'est parfait. Dans le cas contraire, penser à vérifier que les syntaxes de vos fichiers de zones sont bonnes, avec "named-checkzone", et que vous avez bien pensé à relancer votre serveur Bind, etc.

Nous venons de voir que grâce à la commande host (ou dig), il est possible de demander toute information contenue dans vos zones DNS, ou même sur des serveurs situés sur Internet !

Exercice

Sachant que 8.8.8.8 est un serveur DNS public proposé par Google,

  • Trouvez les noms et adresses IP des 13 serveurs racine ;

  • trouvez la ou les adresses IP de www.siteduzero.fr ;

  • trouvez la ou les adresses IP de www.siteduzero.com ;

  • trouvez les adresses IP des serveurs DNS de lalitte.com.

Voici les requêtes à faire pour obtenir les réponses :

  • # host -t ns . 8.8.8.8

  • Faire ensuite une requête A pour chacun des serveurs racine :

  • # host -t a www.siteduzero.fr 8.8.8.8

  • # host -t a www.siteduzero.com 8.8.8.8

  • # host -t ns lalitte.com 8.8.8.8

Voilà, vous savez maintenant faire des interrogations DNS pour vérifier le fonctionnement de vos serveurs, ou de n'importe quel domaine sur Internet.

  • Vous avez vu comment mettre en place votre propre serveur DNS ainsi qu'un second serveur slave.

  • Vous savez gérer vous-mêmes votre propre nom de domaine.

  • Vous êtes familiarisés avec les concepts de zone, de résolution et de résolution inverse.

Quelques Scripts

12janvier

Ce billet est consacré au script Linux. J'ai écrit divers script pour "automatiser" certaines commandes, même si je dois exécuter ces scripts manuellement. Je pourrais, quand bien même, appeler ces scripts dans un cron si je le souhaitais.

Vous trouverez, donc, dans la suite, différents scripts, différentes idées, à améliorer, à récupérer.

Liste des paquets

Ce script permet de lister les paquets installés sur un système GNU\Debian. Cela me permet de récupérer une liste de paquet dans un fichier, liste que je peux réutiliser dans un logiciel comme synaptic pour installer les mêmes paquets sur une autre distribution.Couplé à une sauvegarde du dossier home et du dossier etc, le script permet de pouvoir réinstaller un système à l'identique (à condition que l'on ne se trouve pas sur unstable et moyennant le dossier /var.

liste=`dpkg -l | tail +6 | cut -d\  -f3`
for i in $liste ; do
echo "$i        install"
done

La commande dpkg --get-selections peut très bien remplacer le script ci-dessus. Merci à mx pour sa remarque.

Purge des paquets

Permet de purger les paquets supprimés d'une distribution GNU\Debian. Cela permet de supprimer les quelques fichiers inutiles lors de la suppression de paquet GNU\Debian. Néanmoins, parfois on ne veut pas faire les purges.

for i in `dpkg -l | grep -e '^rc.*' | cut -f3 -d\ ` ; do dpkg -P $i ; done

Sécurisation des données

Permet de monter une partition démontée et démonter une partition montée. Ce script est basé sur KDialog pour demander les informations, il nécessite donc KDE (mais je pense qu'il est possible de le réécrire pour Gnome).On lui passe en paramètre le nom d'un périphérique. Il suppose que la partition démontée est un volume logique (sous LVM) dont le groupe est GNU\Debian et dont le nom est $DISK-close. Il crée à la suite le device-mapper (en supposant qu'il a été créé à l'aide de LUKS) du nom de $DISK-open.S'il trouve ce "device-mapper", il le démonte et le supprime.

#!/bin/sh

DISK=$1
DISKOPEN="$DISK-open"
DISKCLOSE="$DISK-close"

if [ -e /dev/mapper/$DISKOPEN ] ; then
        umount /dev/mapper/$DISKOPEN 2> /dev/null
        if [ $? != 0 ] ; then
                kdialog --title KSecure --error "Impossible de démonter le péripherique $DISK"
        fi
                if [ -e /dev/mapper/$DISKOPEN ] ; then
                /sbin/cryptsetup luksClose $DISKOPEN
                                kdialog --title KSecure --msgbox "Suppression du péripherique $DISK accomplie"
                fi
else
        password=`kdialog --title KSecure --password "Cle de déchiffrement de $DISK"`
        if [ -z $password ] ; then
                password="nopassword"
        fi
        echo "$password" | \
                /sbin/cryptsetup luksOpen /dev/debian/$DISKCLOSE $DISKOPEN 2> /dev/null
        mount /dev/mapper/$DISKOPEN 2> /dev/null
                if [ $? -ne  0 ] ; then
                                kdialog --title KSecure --error "Clé incorrecte"
                fi
fi

Apprentissage du spam

Permet d'appeler bogofliter et spamassassin sur une liste de message Indésirable au format mbox. Il permet aussi de faire l'apprentissage des messages désirables.

#!/bin/bash

sa-learn -L --no-sync --spam --mbox /home/phoenix/Mail/Indésirable\ \(Spam\)
sa-learn -L --no-sync --ham --mbox /home/phoenix/Mail/Désirable\ \(Non\ spam\)

bogofilter -N -s < /home/phoenix/Mail/Indésirable\ \(Spam\)
bogofilter -S -n < /home/phoenix/Mail/Désirable\ \(Non\ spam\)

Création de lien

Permet à partir d'une liste de fichier identique générée par fdupes de créer des liens physiques entre les fichiers pour économiser de la place. Attention : si un des fichiers physiques est modifié, l'autre le sera aussi.

#!/bin/sh

echo -n "|"
read -r line
while [ $? -eq 0 ] ; do
        line=`echo $line | sed -e "s/\\\\\\ /@/g"`
        index=0
        principal=""
        for chemin in $line ; do
                if [ $index -eq 0 ] ; then
                        principal=$chemin
                else
                        a=`echo $principal | sed -e "s/@/\\ /g"`
                        b=`echo $chemin | sed -e "s/@/\\ /g"`
                        ln -f "$a" "$b"
                fi

                index=`expr $index + 1`
        done

        echo -n "="

        read -r line
done
echo -n "|"

Renumérotation

Permet de renuméroté une liste d'image d'un dossier, du style 1 10 11 12 13 2 3 4... en une suite précédé d'un 0 : 01 02 03 04 05 06 ...

#!/bin/sh

for DIR in `ls` ; do

echo -n "Change directory $DIR "

cd $DIR

CMD=`ls | sed -e 's/\(.*\)_\([1-9]\)\.jpg/mv \1_\2.jpg \1_0\2.jpg ;/g' | grep "mv "`
eval $CMD

cd ..

echo "Ok"

done

Génération de playlist

Permet de générer une playlist sur un dossier pour utilisation avec le logiciel kpf (par exemple) de KDE. Il parcourt l'ensemble des dossiers et crée un fichier m3u à chaque fois qu'il trouve un fichier multimédia. Il remplace le début du dossier par un lien http.

#!/bin/sh

OLD=`pwd`

cd "$1"
if [ $? -ne 0 ] ; then
    exit
fi

THIS=`pwd`
BASE=`basename "$THIS"`

echo "Ouverture de $BASE"

for path in * ; do
    if [ -d "$THIS/$path" ] ; then
        $0 "$THIS/$path"
    fi
done

echo "Traitement de $BASE"
rm $BASE.m3u 2> /dev/null

for path in *.mp3 *.ogg *.wma *.avi ; do
    echo $path | grep \* > /dev/null
    if [ $? -eq 1 ] ; then
        echo $THIS/$path | sed -e "s/\/media\/music/http\:\/\/192\.168\.101\.7\:8001/g" >> $BASE.m3u
    fi
done

echo "Sortie de $BASE"

Script pour gérer les documents latex

Ce script date de quelques temps quand je devais générer des documents différents à partir d'un même document LaTeX.Il utilise différentes commandes pour cela, et permet aussi de nettoyer le dossier. Une sorte de Makefile à la mode bash.

#!/bin/sh

if [ $# != 2 ] ; then
    echo "Il faut le nom du fichier et de la sortie"
    exit 1;
fi

NAME=$1
DEST=$2

case $DEST in
    cleanPDF)
        rm -f $NAME.pdf ;;
    cleanTXT)
        rm -f $NAME.txt ;;
    cleanPS)
        rm -f $NAME.ps  ;;
    cleanDVI)
        rm -f $NAME.dvi ;;
    cleanHTML)
        rm -f $NAME.html ;;
    cleanTEX)
        rm -f *.log *.toc *.htoc *.aux *.haux *~ ;;
    clean)
        glatex.sh $NAME cleanTEX
        glatex.sh $NAME cleanDVI
        glatex.sh $NAME cleanPS
        glatex.sh $NAME cleanTXT
        glatex.sh $NAME cleanPDF
        glatex.sh $NAME cleanHTML ;;
    mrproper)
        glatex.sh $NAME clean ;;
    _dvi)
        pslatex $NAME.tex
        pslatex $NAME.tex ;;
    xdvi)
        glatex.sh $NAME _dvi
        xdvi $NAME.dvi ;;
    dvi)
        glatex.sh $NAME _dvi
        glatex.sh $NAME cleanTEX ;;
    _html)
        hevea -francais -fix -noiso $NAME.tex ;;
    html)
        glatex.sh $NAME _html
        glatex.sh $NAME cleanTEX ;;
    _txt)
        hevea -francais -fix -text $NAME.tex ;;
    txt)
        glatex.sh $NAME _txt
        glatex.sh $NAME cleanTEX ;;
    _ps)
        glatex.sh $NAME _dvi
        dvips -Ppdf $NAME.dvi ;;
    ps)
        glatex.sh $NAME _ps
        glatex.sh $NAME cleanDVI
        glatex.sh $NAME cleanTEX ;;
    _pdf)
        pdflatex $NAME.tex
        pdflatex $NAME.tex ;;
    pdf)
        glatex.sh $NAME _pdf
        glatex.sh $NAME cleanTEX ;;
esac

Billets similaires

Email2Trac est un logiciel permettant de créer un ticket sous Trac en envoyant un mail au système de suivi de ticket.

8janvier

L'intérêt d'envoyer un mail au système de suivi plutôt que de se connecter sur le site Internet pour faire ses rapports d'anomalie, est de faciliter l'accès à de nouvelles personnes.En effet, il est parfois plus facile d'envoyer un mail avec son client mail préféré (en considérant que le logiciel est quasiment toujours ouvert, ce qui doit être le cas en entreprise) que d'ouvrir le navigateur pour envoyer une anomalie de temps en temps (ouvrir le site, se logger, remplir tous les champs, ...).

Ceci peut également être utilisé par un outil de rapport de bug, envoyant un mail automatique (avec confirmation de l'utilisateur) au crash dudit logiciel.

Comme dit précédemment, EMail2Trac1 permet

  • d'ajouter un ticket en envoyant un mail, avec des fichiers attachés
  • mettre à jour un ticket (en répondant au mail du ticket par exemple)

Installation

Pour installer Email2Trac, il faut télécharger le source et le décompresser dans un dossier temporaire (ou utilisateur).

Sans gestionnaire de paquet

Ensuite la compilation se fait à l'aide des habituelles autotools

configure --prefix=/usr/local --with-mta_user=nobody --with-trac_user=www-data
make
make install

Sous Debian

Après avoir installé les paquets cdbs et autotools-dev, vous pouvez exécuter les commandes suivante en root (ou la première à l'aide de fakeroot) :

debian/rules binary
dpkg -i ../email2trac_<version>.deb

Pour le gestionnaire de paquets RPM vous pouvez visiter la page https://subtrac.sara.nl/oss/email2trac/wiki/Email2tracInstallation

Configuration de l'application

La deuxième étape est l'édition du fichier /etc/email2trac.conf. Dans ce fichier les informations à renseigner concerne la gestion du projet Trac2 par Email2Trac.

[DEFAULT]
project: /www/site/trac/projet1
spam_level: 5
drop_spam: 1
ticket_update: 1
strip_signature: 1

[projet2]
project: /www/site/trac/projet2
spam_level: 5
drop_spam: 1
ticket_update: 1
strip_signature: 1

Les différentes options dépendent de ce que vous souhaitez avoir. Les différentes possibilités sont à l'adresse suivante.

Spam

La gestion du SPAM se fait à l'aide des 3 lignes :

spam_level: 5
drop_spam: 1
spam_header: X-Spam-Level

La ligne spam_header étant à configurer suivant votre politique de gestion des spams (utilisation de SpamAssassin ou d'un autre utilitaire).

Configuration de Postfix

Il faut maintenant configurer notre système de messagerie pour intégrer Email2Trac. Nous allons détailler ici la mise en place de Email2Trac sous Postfix. Pour les autres serveurs mails vous pouvez visiter la page : http://subtrac.sara.nl/oss/email2trac/wiki/Email2tracMta

Aliases

La première méthode concerne la modification du fichier des alias pour une configuration standard de postfix. Nous allons commencer par modifier le fichier /etc/aliases en ajoutant la ligne suivante (pour le projet 1) :

projet1: |"/usr/bin/run_email2trac"

Il est également possible de préciser le projet sur lequel il faut travailler (projet définit dans /etc/email2trac.conf) :

projet2: |"/usr/bin/run_email2trac --project=projet2 --ticket_prefix=devel"

Dans le fichier /etc/postfix/main.cf, il faut avoir défini l'emplacement des alias de la manière suivante :

alias_maps = hash:/etc/aliases

Les commandes suivantes permettent de mettre à jour le fichier des alias et demander à Postfix de recharger la configuration :

postaliases /etc/aliases
postfix reload

Une fois ceci terminé, les mails envoyé à projet1@domain.org et projet2@domaine.org seront automatiquement redirigés vers email2trac qui s'occupera de créer le ticket dans votre système de suivi.

Transport

Cette configuration concerne les personnes qui ont une configuration plus complexe de postfix par exemple en gérant des domaines virtuels. Il est alors possible de définir une redirection des tickets pour un sous domaine.

Nous avons donc créé le sous-domaine tickets.domaine.org et voulons que les mails envoyés à projet1@tickets.domaine.org est projet2@tickets.domaine.org soient redirigés vers email2trac.

Pour cela nous allons créer un fichier /etc/postfix/transport avec les lignes ci-dessous :

projet1@tickets.domaine.org  projet1:
projet2@tickets.domaine.org  projet2:

Puis dans le fichier /etc/postfix/main.cf nous allons définir que pour le sous domaine tickets.domaine.org, il faut lire et utiliser le fichier des transports. (Attention il ne faut pas ajouter ce sous-domaine dans mydestination.

relay_domains = tickets.domaine.org
transport_maps = hash:/etc/postfix/transport

Ensuite, il nous faut définir dans le fichier /etc/postfix/master.cf notre nouveau mode de transport. Il n'est pas obligé d'utiliser run_email2trac qui fait un changement d'utilisateur, car dans le fichier master.cf on peut directement définir l'utilisateur de destination.

projet1      unix  -       n       n       -       -       pipe
    flags=FR user=www-data argv=/usr/bin/email2trac
    ${nexthop} ${user}
projet2      unix  -       n       n       -       -       pipe
    flags=FR user=www-data argv=/usr/bin/email2trac
    ${nexthop} ${user}\r

Enfin il faut redémarrer postfix :

postmap /etc/postfix/transport
postfix reload

Et voilà vous pouvez envoyer vos mails à projet1@tickets.shadoware.org.

Tester

Pour tester il est possible d'envoyer un mail, comme ceci :

mail projet1@tickets.shadoware.org < ticket.txt

En cas de problème, vous pouvez vérifier que email2trac est bien configuré avec la commande :

email2trac --project=projet1 < ticket.txt

ZFS

24juin

10.1 Introducción a ZFS
ZFS (Zettabyte File System ) es el nuevo sistema de archivos incorporado a OpenSolaris. Es un sistema de archivos
de 128 bits y su límite de tamaño máximo es de 256 cuatrillones de zettabytes 1.
En la wikipedia se hace la siguiente referencia sobre la capacidad de ZFS:
“Como ejemplo de las capacidades expresadas por estos números, si un usuario crease 1000 ficheros
por segundo, tardaría unos 9000 años en alcanzar el límite impuesto por el número de ficheros.”
En este capitulo pretendemos ver la parte práctica de ZFS, si deseas conocer los límites teóricos de ZFS puedes
ver los valores de referencia en la wikipedia o en www.sun.com.
Las principales características de ZFS son:
Tamaño máximo de 256 cuatrillones de zettabytes
Administración sencilla por comandos o web. (nos olvidamos de format, newfs, mount, vfstab, etc..)
Copy-on-write (ZFS no sobrescribe los nuevos datos directamente, crea los datos en un nuevo bloque y
posteriormente cambia los punteros de datos y realiza la escritura definitiva. Con este método siempre esta
garantizada la integridad de los datos y no es necesario el uso de utilidades como fsck)
Snapshots (capturas). Podemos sacar un “foto” de forma rápida a todo un sistema de ficheros. Podemos
instalar un paquete en el sistema y si este no cumple nuestras expectativas podemos realizar un rollback
para volver al estado anterior.
Comprensión. Podemos definir un sistema de ficheros donde toda la información este comprimida.
Mirror y RAID-Z: Se pueden definir de forma muy sencilla mirroring entre discos y RAID-Z.
Actualmente cuando trabajamos con herramientas como Solaris Volume Manager hay que crear las particiones
(slice), agrupar discos y crear la base de datos que alberga la configuración y estado de todos los volúmenes.
Todo esto implica la ejecución de comandos como prtvtoc, fmthard, metadb, metainit y metaroot
sin contar las modificaciones en el fichero /etc/vfstab.
Con ZFS todo se resume a dos comandos zfs y zpool. Tal como podemos ver en la figura 4.1 ZFS trabaja con
un pool que esta formado por todos los dispositivos físicos. Las características del pool son:
El pool esta formado por dispositivos de almacenamiento de igual o diferentes capacidades.
El pool puede crecer y encoger añadiendo y quitando discos.
Los sistemas de ficheros ZFS comparten el pool y se puede definir cuotas y reservar de espacio para un solo
sistema de ficheros.
1 Información detallada sobre la unidad de medida en la wikipedia: http://es.wikipedia.org/wiki/Zettabyte
73
Guía del Estudiante: Community Edition, Versión 2.0
Nota: Si estás viendo esta nota es porque todavía no he hecho algo parecido a la figura 4.1 que se encuentra en la
version original.
10.1.1 Crear un pool
Vamos a crear un pool de 4GB comprendido por lo discos c1d0 y c1d1 ambos con un tamaño de 2GB. Para
crear un pool llamado babilonia utilizamos el comando zpool de la siguiente forma:
zpool create -f [nombre del pool] [lista de dispositivos]
# /usr/sbin/zpool create -f babilonia c1d0 c1d1
Para verificar que se ha creado correctamente ejecutamos el comando zpool list:
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
babilonia 3,88G 59,5K 3,87G 0 % ONLINE -
#
Podemos ver que el tamaño del pool es de 3,88GB y es accesible desde /babilonia.
10.1.2 Crear sistemas de ficheros ZFS
Ya tenemos creado el pool y ahora podemos comenzar a definir sistemas de ficheros. Vamos a crear dos sistemas
de ficheros uno para instalar aplicaciones y otro para datos utilizando el comando zfs con la opción create:
zfs create [nombre del pool/sistema de ficheros]
# /usr/sbin/zfs create babilonia/aplicaciones
# /usr/sbin/zfs create babilonia/datos
Para ver los nuevos sistema de ficheros ejecutamos el comando zfs con la opción list:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 138K 3,81G 27,5K /babilonia
babilonia/aplicaciones 24,5K 3,81G 24,5K /babilonia/aplicaciones
babilonia/datos 24,5K 3,81G 24,5K /babilonia/datos
La salida muestra los dos nuevos sistemas de ficheros que también son visibles con el comando df -k. Se puede
observar que todos los sistemas de ficheros comparten el mismo espacio de 3,81GB que es el tamaño del pool.
Los sistemas de ficheros creados con ZFS se montan automáticamente y de forma persistente. Con ZFS nos hemos
ahorrado los pasos con los comandos format, newfs, mount y la posterior edición del fichero /etv/vfstab
para dejarlo de forma persistente.
10.2 Propiedades de un ZFS
Los sistemas de ficheros ZFS tienen propiedades que pueden ser activadas o desactivadas según nuestras necesidades.
Para establecer el valor de una propiedad se ejecuta el comando zfs con las opciones set para establecer
o get para leer. Veamos algunos de los mas interesantes:
74 Capítulo 10. ZFS
Guía del Estudiante: Community Edition, Versión 2.0
10.2.1 Creación cuotas y reserva de espacio
ZFS nos da la posibilidad de controlar el espacio de los sistemas de ficheros estableciendo cuotas y reserva
de espacio para los sistemas de ficheros. Continuando con el pool de los ejemplos anteriores vamos a establecer
una cuota para el sistema de ficheros babilonia/aplicaciones y reservar espacio del pool para
babilonia/datos.
Estableciendo una cuota a un sistema de ficheros limitamos el espacio máximo que puede tener. Para crear una
cuota utilizamos el comando zfs y la opción set quota=1GB:
zfs set quota=[tamaño] [nombre del pool/sistema de ficheros]
# /usr/sbin/zfs set quota=1GB babilonia/aplicaciones
Si ejecutamos el comando zfs list para ver los sistemas de ficheros observaremos que se ha establecido la
cuota correctamente:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 138K 3,81G 27,5K /babilonia
babilonia/aplicaciones 24,5K 1024M 24,5K /babilonia/aplicaciones
babilonia/datos 24,5K 3,81G 24,5K /babilonia/datos
Una cuota limita el espacio de un sistema de ficheros pero no garantiza dicho espacio. Para reservar el espacio
para un sistema de ficheros dentro del pool ejecutamos zfs con el parámetro set reservation=1GB:
zfs set reservation=[tamaño] [nombre del pool/sistema de ficheros]
# /usr/sbin/zfs set reservation=1GB babilonia/datos
El sistema de ficheros babilonia/datos tiene reservados 1GB del pool. Si el resto de ficheros llena el pool
no peligra nuestro espacio reservado. Ejecutando zfs list se puede ver que el pool babilonia tiene como
usado 1GB y para el resto de sistemas de ficheros hay disponible 2,81GB. Salida de zfs list:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 1,00G 2,81G 27,5K /babilonia
babilonia/aplicaciones 24,5K 1024M 24,5K /babilonia/aplicaciones
babilonia/datos 24,5K 3,81G 24,5K /babilonia/datos
Realizar una reserva de espacio no implica un limite de cuota para el sistema de ficheros este puede utilizar todo
el tamaño del pool. Se pueden combinar las opciones de cuota y reserva para un sistema de ficheros.
10.2.2 Sistema de ficheros comprimido
ZFS ofrece nuevas posibilidades como tener un sistema de ficheros con información comprimida. El comando
para habilitar la compresión del sistema de ficheros es zfs con el parámetro compression=on. El siguiente
ejemplo activa la compresión para el sistema de ficheros babilonia/datos:
zfs set compression=[on/off] [nombre del pool/sistema de ficheros]
#/usr/sbin/zfs set compression=on babilonia/datos
Para obtener datos del ratio de compresión del sistema de ficheros:
zfs get [nombre de la propiedad] [nombre del pool/sistema de ficheros]
#zfs get compressratio babilonia/datos
10.2. Propiedades de un ZFS 75
Guía del Estudiante: Community Edition, Versión 2.0
NAME PROPERTY VALUE SOURCE
babilonia/datos compressratio 1.00x -
10.2.3 Sistema de ficheros de solo lectura
Para establecer un sistema de ficheros como solo lectura utilizamos el comando zfs con el parámetro
readonly=on:
zfs set readonly =[on/off] [nombre del pool/sistema de ficheros]
#/usr/sbin/zfs set readonly=on babilonia/datos
10.2.4 Cambiar el punto de montaje
Para cambiar el punto de montaje de un sistema de ficheros ejecutamos el comando zfs estableciendo el nuevo
punto de montaje con el parámetro mountpoint. El siguiente ejemplo muestra como cambiar el punto de
montaje de babilonia/datos a /aulaunix:
zfs set mountpoint =[/punto de montaje] [nombre del pool/sistema de ficheros]
# cd /
# zfs set mountpoint=/aulaunix babilonia/datos
Verificamos el cambio ejecutando zfs list:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 1,00G 2,81G 25,5K /babilonia
babilonia/aplicaciones 24,5K 1024M 24,5K /babilonia/aplicaciones
babilonia/datos 24,5K 3,81G 24,5K /aulaunix
10.2.5 Ver las propiedades de un ZFS
Hasta ahora hemos utilizado el comando zfs set para establecer propiedades del sistema de archivos. Para ver
los valores de las propiedades de un ZFS ejecutamos zfs con la opción get:
zfs get [nombre de la propiedad] poll/sistemdeficheros
# zfs get quota babilonia/aplicaciones
NAME PROPERTY VALUE SOURCE
babilonia/aplicaciones quota 1G local
Con la opción all podemos ver todos los valores de las propiedades de un ZFS y cuales son sus valores por
defecto:
# zfs get all babilonia/aplicaciones
NAME PROPERTY VALUE SOURCE
babilonia/aplicaciones type filesystem -
babilonia/aplicaciones creation Fri Jan 26 19:11 2007 -
babilonia/aplicaciones used 24,5K -
babilonia/aplicaciones available 1024M -
babilonia/aplicaciones referenced 24,5K -
babilonia/aplicaciones compressratio 1.00x -
babilonia/aplicaciones mounted yes -
babilonia/aplicaciones quota 1G local
76 Capítulo 10. ZFS
Guía del Estudiante: Community Edition, Versión 2.0
babilonia/aplicaciones reservation none default
babilonia/aplicaciones recordsize 128K default
babilonia/aplicaciones mountpoint /babilonia/aplicaciones default
babilonia/aplicaciones sharenfs off default
babilonia/aplicaciones checksum on default
babilonia/aplicaciones compression off default
babilonia/aplicaciones atime on default
babilonia/aplicaciones devices on default
babilonia/aplicaciones exec on default
babilonia/aplicaciones setuid on default
babilonia/aplicaciones readonly off default
babilonia/aplicaciones zoned off default
babilonia/aplicaciones snapdir hidden default
babilonia/aplicaciones aclmode groupmask default
babilonia/aplicaciones aclinherit secure default
10.3 Gestión del POOL
10.3.1 Añadir nuevos discos al pool
Para ampliar el espacio disponible en un pool tenemos que añadir nuevos discos a la máquina o utilizar particiones
(slices) no usada en otro disco. Para ampliar el pool utilizamos el comando zpool con la opción add:
zpool add -f [nombre del pool] [dispositivo a añadir]
bash-3.00# zpool list -H
babilonia 1,98G 77,5K 1,98G 0 % EN LÍNEA -
bash-3.00# /usr/sbin/zpool add -f babilonia c0d1
bash-3.00# zpool list -H
babilonia 3,97G 184K 3,97G 0 % EN LÍNEA -
Tal como podemos ver en la salida de la ejecución de zpool add el espacio a aumentado de 1,89G a 3,97G. Se
pueden añadir tantos discos como sean necesarios.
10.3.2 Quitar discos al pool
Se pude sacar un disco que forma parte del pool utilizamos la orden zpool remove:
zpool remove [nombre del pool] [dispositivo aquitar]
# zpool remove babilonia c0d1
10.3.3 Eliminar un pool
Si tenemos que eliminar un pool por completo y dejar los dispositivos libres para otro uso utilizamos el comando
zpool:
zpool destroy -f [nombre del pool]
# /usr/sbin/zpool destroy -f babilonia
Esta opción es “destructiva” por lo que tenemos que estar muy seguros de que no tenemos información valiosa en
el pool a borrar.
10.3. Gestión del POOL 77
Guía del Estudiante: Community Edition, Versión 2.0
10.3.4 Reemplazar un disco del pool
En caso de que un de los discos falle y se tenga que reemplazar utilizamos el comando zpool con el parámetro
replace:
zpool replace -f [pool] [dispositivo a reemplazar] [dispositivo nuevo]
Antes del cambio:
# zpool status
conjunto: babilonia
estado: ONLINE
limpiar: resilver completed con 0 errores en Wed Jan 31 16:46:57 2007
config:
NAME STATE READ WRITE CKSUM
almoroz ONLINE 0 0 0
mirror ONLINE 0 0 0
c0d1 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
errores: ningún error de datosconocido
10.4 Crear un mirror (RAID 1)
Si tuviéramos que crear un espejo de dos discos utilizando herramientas como Solaris Volume Manager realizaríamos
varias tareas para lograr nuestro objetivo. Con ZFS es muy sencillo tan solo necesitamos con los comandos
zpool y zfs.
zpool create -f [nombre del pool] mirror [dispositivos]
# zpool create -f babilonia mirror c0d1 c1d1
Con zpool status verificamos si se ha creado correctamente:
bash-3.00# zpool status
conjunto: babilonia
estado: ONLINE
limpiar: no se ha solicitado ninguna
config:
NAME STATE READ WRITE CKSUM
babilonia EN LÍNEA 0 0 0
mirror EN LÍNEA 0 0 0
c0d1 EN LÍNEA 0 0 0
c1d1 EN LÍNEA 0 0 0
10.4.1 Crear un mirror desde un disco existente
Si tenemos un pool de un disco y queremos crear un mirror del disco acudimos al comando zpool con el parámetro
attach:
zpool attach -f [pool] [dispositivo] [nuevo dispositivo]
# zpool attach -f almoroz c0d1 c1d1
La ejecución del comando creara un mirror formado por los discos c0d1 ya existente y el nuevo disco c1d1.
78 Capítulo 10. ZFS
Guía del Estudiante: Community Edition, Versión 2.0
10.4.2 Reemplazar un disco del mirror
En caso de que un de los discos falle y se tenga que reemplazar utilizamos el comando zpool con el parámetro
replace:
zpool replace -f [pool] [dispositivo a reemplazar] [dispositivo nuevo]
Antes del cambio:
# zpool status
conjunto: almoroz
estado: ONLINE
limpiar: resilver completed con 0 errores en Wed Jan 31 16:46:57 2007
config:
NAME STATE READ WRITE CKSUM
almoroz ONLINE 0 0 0
mirror ONLINE 0 0 0
c0d1 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
errores: ningún error de datosconocido
Realizamos el cambio del disco c1d1 por c0d1s0:
#/usr/sbin/zpool replace -f babilonia c0d1 c1d1
Y lo verificamos:
zpool status
conjunto: almoroz
estado: ONLINE
limpiar: resilver completed con 0 errores en Wed Jan 31 16:46:57 2007
config:
NAME STATE READ WRITE CKSUM
almoroz ONLINE 0 0 0
mirror ONLINE 0 0 0
c0d1 ONLINE 0 0 0
replacing ONLINE 0 0 0
c0d1 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
errores: ningún error de datosconocido
# zpool status
conjunto: almoroz
estado: ONLINE
limpiar: resilver completed con 0 errores en Wed Jan 31 16:46:57 2007
config:
NAME STATE READ WRITE CKSUM
almoroz ONLINE 0 0 0
mirror ONLINE 0 0 0
c0d1 ONLINE 0 0 0
c0d1s0 ONLINE 0 0 0
10.4. Crear un mirror (RAID 1) 79
Guía del Estudiante: Community Edition, Versión 2.0
10.5 Crear RAID-Z
ZFS permite la creación de RAID-Z muy similar a RAID 5. RAID 5 se compone como mínimo de tres discos y
en cada uno de ellos se reserva un espacio con información de paridad.
RAID-Z cuenta con ventajas como la paridad distribuida simple y doble. La doble paridad permite asumir errores
en uno dos discos que componen el RAIDZ.
Para crear un RAID-Z con paridad simple ejecutamos el comando zpool:
zpool create -f [pool] raidz [dispositivos]
El ejemplo siguiente muestra la creación y su posterior verificación:
#/usr/sbin/zpool create -f babilonia raidz c0d1 c1d1 c2t0d0
# zpool status
conjunto: babilonia
estado: ONLINE
limpiar: no se ha solicitado ninguna
config:
NAME STATE READ WRITE CKSUM
babilonia ONLINE 0 0 0
raidz1 ONLINE 0 0 0
c0d1 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
errores: ningún error de datos conocido
Para crear un RAID-Z con paridad doble ejecutamos el comando zpool:
zpool create -f [pool] raidz2 [dispositivos]
# zpool create -f babilonia raidz2 c0d1 c1d1 c2t0d0
# zpool status
conjunto: babilonia
estado: ONLINE
limpiar: no se ha solicitado ninguna
config:
NAME STATE READ WRITE CKSUM
babilonia ONLINE 0 0 0
raidz2 ONLINE 0 0 0
c0d1 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
errores: ningún error de datos conocido
10.6 Snapshots
Los snapshots son fotos de los datos de un sistema de ficheros, esto se hace de forma instantánea y comparte
el espacio de los datos no modificados. Tiene gran utilidad para realizar modificaciones sobre servicios y si no
funcionan realizar un rollback de forma sencilla. Vamos un caso práctico:
Disponemos de los siguientes sistemas de ficheros en el pool llamado babilonia:
80 Capítulo 10. ZFS
Guía del Estudiante: Community Edition, Versión 2.0
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 500M 3,42G 27,5K /babilonia
babilonia/prueba1 500M 3,42G 500M /babilonia/prueba1
babilonia/prueba2 24,5K 3,42G 24,5K /babilonia/prueba2
El sistema de ficheros babilonia/prueba1 contiene los siguientes archivos:
# ls -lrt
total 1024223
-rw------T 1 root root 104857600 Feb 2 13:10 fichero1
-rw------T 1 root root 104857600 Feb 2 13:10 fichero2
-rw------T 1 root root 104857600 Feb 2 13:10 fichero3
-rw------T 1 root root 104857600 Feb 2 13:10 fichero4
-rw------T 1 root root 104857600 Feb 2 13:10 fichero5
Procedemos a crear el snapshot o foto del sistema de ficheros babilonia/prueba1 con el comando zfs y el
parámetro snapshots:
zfs snapshot [pool/sistemadeficheros]@nombrefoto
Ejecutamos el comando:
# zfs snapshot babilonia/prueba1@nombredelafoto
Con zpool list observamos que se ha creado la foto:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 300M 3,61G 27,5K /babilonia
babilonia/prueba1 300M 3,61G 300M /babilonia/prueba1
babilonia/prueba1@nombredelafoto 0 - 300M -
babilonia/prueba2 24,5K 3,61G 24,5K /babilonia/prueba2
Ahora vamos a simular un pequeño desastre borrando los archivos fichero4 y fichero5:
# rm fichero4 fichero5
# ls -lrt
total 614541
-rw------T 1 root root 104857600 Feb 2 13:10 fichero1
-rw------T 1 root root 104857600 Feb 2 13:10 fichero2
-rw------T 1 root root 104857600 Feb 2 13:10 fichero3
Recuperamos archivos los borrados recurriendo a snapshot creado. Recuperamos con el comando zfs y el parámetro
rollback:
zfs rollback [pool/sistemadeficheros]@nombrefoto
Ejecutamos el comando:
#zfs rollback -r babilonia/prueba1@nombredelafoto
# ls -lrt
total 1024223
-rw------T 1 root root 104857600 Feb 2 13:10 fichero1
-rw------T 1 root root 104857600 Feb 2 13:10 fichero2
-rw------T 1 root root 104857600 Feb 2 13:10 fichero3
-rw------T 1 root root 104857600 Feb 2 13:10 fichero4
-rw------T 1 root root 104857600 Feb 2 13:10 fichero5
10.6. Snapshots 81
Guía del Estudiante: Community Edition, Versión 2.0
Y el resultado es la recuperación de los archivos fichero4 y fichero5. Tal como se decía al principio la foto comparte
los datos con los no modificados, en nuestro ejemplo se traduce con que la foto comparte el espacio de fichero1,
fichero2 y fichero3 que no se han modificado ocupando realmente solo el tamaño de fichero4 y fichero5.
10.6.1 Borrar snapshots o fotos
Cuando ya no sea necesario conservar un snapshot podemos borrarlo con el comando zfs y el parámetro
destroy, ejemplo:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 300M 3,61G 27,5K /babilonia
babilonia/prueba1 300M 3,61G 300M /babilonia/prueba1
babilonia/prueba1@nombredelafoto 0 - 300M -
babilonia/prueba2 24,5K 3,61G 24,5K /babilonia/prueba2
# zfs destroy -f babilonia/prueba1@nombredelafoto
10.7 Estados de ZFS
Con el comando zpool status obtenemos información sobre el estado de un pool:
zpool status [pool]
# zpool status babilonia
conjunto: babilonia
estado: ONLINE
limpiar: no se ha solicitado ninguna
config:
NAME STATE READ WRITE CKSUM
babilonia ONLINE 0 0 0
mirror ONLINE 0 0 0
c0d1 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
errores: ningún error de datosconocido
Los estados posibles son:
ONLINE: el dispositivo esta operando normalmente.
DEGRADED: el dispositivo virtual tiene fallos pero continúa en funcionamiento. Este caso de puede dar
cuando falla un dispositivo que forma parte de un RAIDZ. Hay que sustituir lo antes posible dispositivo
dañado.
OFFLINE: dispositivo parado manualmente por el administrador.
UNAVAILABLE: dispositivo no disponible. Este estado es el siguiente a DEGRADED cuando finalmente el
dispositivo es inaccesible.
Con el comando zpool status -x obtenemos de forma rápida sin un pool esta teniendo problemas:
El siguiente ejemplo muestra un mirror compuesto por dos dispistivos fallando c0d1 que esta totalmente inaccesible.
Al ser un mirror el servicio continuo operativo pero se degrada el rendimiento y perdemos alta disponibilidad
hasta que se reponga el disco dañado.
Ejemplo de un disco dañado:
82 Capítulo 10. ZFS
Guía del Estudiante: Community Edition, Versión 2.0
# zpool status -x
conjunto: babilonia
estado: DEGRADED
estado: no se pudieron abrir uno o varios dispositivos. Hay réplicas suficientes para
que el conjunto pueda seguir funcionando con un menor rendimiento.
acción: adjunte el dispositivo que falta y establézcalo en línea mediante ’zpool online’.
consulte: http://www.sun.com/msg/ZFS-8000-D3
limpiar: no se ha solicitado ninguna
config:
NAME STATE READ WRITE CKSUM
babilonia DEGRADED 0 0 0
mirror DEGRADED 0 0 0
c0d1 UNAVAIL 0 62 0 no es posible abrir
c1d1 ONLINE 0 0 0
errores: ningún error de datosconocido
La información que ofrece es detallada indicándonos el estado en el que se encuentra el mirror. En la salida
del comando nos remite a la dirección web de Sun Microsystems http://www.sun.com/msg/ZFS-8000-D3 donde
podemos encontrar información y soluciones al problema.
Para solucionar este problema tenemos que añadir un nuevo disco al sistema o utilizar un slice de otro disco. Una
vez localizado el disco que sustituye a c0d1 lo remplazamos con el comando zpool replace:
Pasos para reemplazar el disco dañado:
# zpool replace babilonia c0d1 c2t0d0
# zpool status babilonia
conjunto: babilonia
estado: ONLINE
limpiar: resilver completed con 0 errores en Fri Feb 2 15:04:57 2007
config:
NAME STATE READ WRITE CKSUM
babilonia ONLINE 0 0 0
mirror ONLINE 0 0 0
c2t0d0 ONLINE 0 0 0
c1d1 ONLINE 0 0 0
errores: ningún error de datosconocido
En el ejemplo hemos reemplazado el disco c0d1 por c2t0d0 y automáticamente el mirror para a estado ONLINE
y replica los datos de c0d1 a c2t0d0.
También podemos optar por sacar el disco del mirror para repararlo. Tenemos que desasociar el disco c0d1 del
mirror con el comando zpool detach:
zpool detach [pool] [dispositivo]
#zpool detach babilonia c0d1
El disco c0d1 ya no forma parte del mirror babilonia. Podemos someterlo a pruebas y volver a añadirlo al
mirror o añadir otro disco distinto se la siguiente forma:
zpool attach -f [pool] [chisposito] [nuevo dispositivo]
# zpool attach -f babilonia c1d1 c0d1
# zpool status
conjunto: babilonia
estado: ONLINE
limpiar: resilver completed con 0 errores en Fri Feb 2 15:18:50 2007
10.7. Estados de ZFS 83
Guía del Estudiante: Community Edition, Versión 2.0
config:
NAME STATE READ WRITE CKSUM
babilonia ONLINE 0 0 0
mirror ONLINE 0 0 0
c1d1 ONLINE 0 0 0
c0d1 ONLINE 0 0 0
errores: ningún error de datosconocido
10.7.1 Operaciones entrada y salida
ZFS proporciona el comando zpool iostat que reporta e sobre operaciones de lectura, escritura y ancho de
banda. El siguiente ejemplo muestra la salida del comando zpool iostat:
zpool iostat [pool]
# zpool iostat babilonia
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
babilonia 10,1M 1,97G 0 0 41 2
Para obtener información de todos los dispositivos virtuales:
zpool iostat -v [pool]
# zpool iostat -v babilonia
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
babilonia 10,1M 1,97G 0 0 41 2
mirror 10,1M 1,97G 0 0 42 2
c1d1 - - 0 0 44 111
c0d1 - - 0 0 0 52
---------- ----- ----- ----- ----- ----- -----
Si omitimos el nombre del pool en el comando lista la información de todos los pool disponibles.
84 Capítulo 10. ZFS

usb

17juin

Debian etch - Clé USB

Il peut être parfois utile de se déplacer ici et là avec une distribution Linux clé en main sans se trimbaler toujours avec un ordinateur portable ou un CD.

La clé USB devient alors très utile atteignant aujourd'hui des tailles de l'ordre de 2G pour pas trop cher1. De petite taille, elle peut être utilisée dans des endroits ayant des ordinateurs avec un système d'exploitation propriétaire (ou un autre système libre, ou même pas sans système) mais permettant de démarrer sur un périphérique externe (une clé USB par exemple).

L'utilité peut-être variable :

  • Surfer avec une plus grande tranquillité
  • Utiliser ses logiciels favoris ( Amarok, KMyMoney, KDevelop, ... )
  • Utiliser une interface graphique, bien sûr, meilleure.
  • Utiliser dans un système embarqué.
  • Tester les ordinateurs portables dans les magasins

J'ai trouvé différents sites, tel que Ubuntu en mode persistant permettant d'installer une distribution Ubuntu sur une clé USB ou un disque dur USB.L'inconvénient de cette méthode est qu'il n'est pas possible d'installer uniquement ce que l'on souhaite partant obligatoirement d'une base LiveCD.

Ensuite j'ai trouvé d'autres sites, tels que Howto Install a Debian GNU/Linux system onto a USB flash thumb drive et Installing Debian onto USB flash media with everything encrypted. dont je me suis inspiré pour écrire ce tutoriel.

Préparation de la clé

Modules

Afin de pouvoir accéder à la clé USB, il faut bien évidemment avoir chargé sur sa machine Gnu/Linux les modules adéquates :

# modprobe ehci_hcd
# modprobe ohci_hcd
# modprobe usbhid
# modprobe usb_storage

Logiciels

Nous allons considérer que nous sommes sur un système à base de Gnu/Debian (Ubuntu devrait pouvoir faire l'affaire). Si vous avez un autre système, il vous faut trouver un moyen d'installer le programme debootstrap

Sur un système Gnu/Debian, il vous suffit de taper la commande, si le programme n'est pas déjà installé :

# aptitude install debootstrap

Installation du système de base

Partitionnement de la clé USB

En premier lieu il faut effectuer le partitionnement de la clé USB. Selon sa taille et aussi de la quantité de logiciel que vous voulez installer il faudra prévoir plus ou moins de place.

Pour le partitionnement vous pouvez utiliser votre utilitaire favori (parted, qtparted, fdisk, cfdisk, ...). Le partitionnement que j'ai effectué pour ma propre clé est le suivant :

  1. 50Mo pour la partition /boot
  2. 1,5Go pour la partition /
  3. le reste pour la partition /home

La partition /home a été séparée afin de pouvoir mettre la partie / de la clé USB en lecture seule (étape que je n'ai pas encore effectuée).

Disk /dev/usb/k2g: 2024 MB, 2024275968 bytes
63 heads, 62 sectors/track, 1012 cylinders
Units = cylinders of 3906 * 512 = 1999872 bytes

       Device Boot      Start         End      Blocks   Id  System
/dev/sda1                   1          26       50747   83  Linux
/dev/sda2                  27         827     1564353   83  Linux
/dev/sda3                 828        1012      361305   83  Linux

Une fois les partitions créées vous pouvez les formater pour les utiliser.

# mke2fs /dev/sda1 -L live-boot
# mke2fs /dev/sda2 -L live-root
# mke2fs /dev/sda3 -L live-home
# mount /dev/sda2 /mnt
# mkdir /mnt/boot
# mkdir /mnt/home
# mount /dev/sda1 /mnt/boot
# mount /dev/sda3 /mnt/home

Installation à l'aide de debootstrap

Une fois les partitions montées on peut installer le système Gnu/Debian sur la clé USB en utilisant l'utilitaire debootstrap :

# debootstrap --arch i386 etch /mnt/ ftp://ftp2.fr.debian.org/debian/
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
I:  Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional base dependencies: libdb4.2 libgnutls12 libreadline5
   libsigc++-2.0-0c2a openbsd-inetd readline-common
I: Checking component main on http://ftp.debian.org/debian...
I: Retrieving adduser
...
I: Configuring gnupg...
I: Configuring sysklogd...
I: Configuring klogd...
I: Configuring netbase...
I: Configuring openbsd-inetd...
I: Base system installed successfully.

Dans un Chroot

Les opérations suivantes sont à faire sur l'environnement de destination, il faut donc utiliser la commande chroot pour s'y placer.

# chroot /mnt '/bin/bash -i'

Noyaux

Une fois le système de base installé, il faut le configurer et y ajouter de quoi démarrer la clé USB.

Ajustement et systèmes de fichiers : /etc/fstab

Cela dépend de votre configuration, et du partitionnement que vous avez fait. Si vous avez fait le même partitionnement que moi vous devriez avoir un fstab ressemblant à celui là :

#/etc/fstab: static file system informations.
#
LABEL=live-root    /           ext2    defaults,errors=remount-ro,noatime  0   1
LABEL=live-boot    /boot           ext2    defaults,noatime,ro         0   2
LABEL=live-home    /home           ext2    defaults,noatime            0   2
proc       /proc           proc    defaults                0   0
#tmpfs     /etc/network/run    tmpfs   defaults,noatime            0   0
tmpfs      /tmp            tmpfs   defaults,noatime            0   0
tmpfs      /var/lock       tmpfs   defaults,noatime            0   0
tmpfs      /var/log        tmpfs   defaults,noatime            0   0
tmpfs      /var/run        tmpfs   defaults,noatime            0   0
tmpfs      /var/tmp        tmpfs   defaults,noatime            0   0

J'utilise le label de la partition au lieu d'utiliser le block device. L'utilisation du block device peut gêner si la clé USB n'est pas toujours détectée dans le même ordre2.Les dossiers temporaires sont tous reportés dans un système de fichier virtuel (en mémoire) à l'aide de tmpfs.

Une fois le fichier /etc/fstab configuré, il ne reste plus qu'à monter les partitions. Pour monter les partitions un simple mount -a le fait. Il est aussi possible de monter les partitions une à une.

Il est possible que la commande suivante faite hors du chroot puisse résoudre certain problème si l'application utilise udev, ... :

mount --bind /dev/ /mnt/dev/
Le réseau : /etc/hostname /etc/hosts

Le fichier /etc/hosts doit contenir une ligne indiquant l'adresse du loopback et le nom de la machine. Ceci afin que KDE par exemple puisse démarrer :

127.0.0.1       localhost.localdomain   localhost  liveding

Dans le fichier /etc/hostname il faut également mettre le nom de la machine.

Apt : /etc/apt/sources.list

Le fichier sources.list contient les lignes par défaut suivantes :

# etch
deb ftp://ftp2.fr.debian.org/debian/ etch main contrib non-free
deb-src ftp://ftp2.fr.debian.org/debian/ etch main contrib
deb http://security.debian.org/ etch/updates main
deb-src http://security.debian.org/ etch/updates main

# etch unofficial
deb http://ftp.debian-unofficial.org/debian etch main contrib non-free restricted

Ces lignes permettent de télécharger les paquets par défaut de Gnu/Debian ainsi que les paquets de sécurité, et les paquets non officiels permettant d'activer certaine fonctionnalité.

Initrd : /etc/kernel-img.conf

Dans le fichier /etc/kernel-img.conf on enregistre les informations suivantes (afin que Gnu/Debian crée un fichier initrd lors de l'installation du noyau) :

# Kernel Image management overrides
# See kernel-img.conf(5) for details
do_symlinks = Yes
do_initrd = yes

Le fichier initrd permet de charger les modules nécessaires3 au démarrage de Gnu/Linux sur une clé USB.

Installation de paquet
# aptitude install initrd-tools linux-image-2.6.16-1-686
# aptitude install grub
# aptitude install localepurge
# aptitude clean# localepurge

On installe une image du noyau, ainsi que les outils pour générer l'image initrd. On installe également grub qui servira à démarrer sur la clé USB. Le paquet localepurge permet quant à lui de nettoyer les locales qui prennent un peu trop de place sur la clé USB. Généralement je ne conserve que les locales françaises et anglaises.

Il est aussi possible d'installer quelques paquets comme un serveur graphique, même voir KDE, ou encore des outils d'administration. On peut aussi installer des outils qui pourront permettre de réparer une machine.

Quelques ajustements.

Afin de ne pas écrire trop souvent sur la clé USB, on remplace quelques fichiers.

rm -f /etc/blkid.tab*
ln -s /dev/null /etc/blkid.tab
rm -f /etc/mtab
ln -s /proc/mounts /etc/mtab

Configuration de grub

Afin que la machine puisse démarrer il faut installer grub sur le secteur de démarrage de la clé USB.Pour cela, on peut quitter le chroot. Pour installer grub on peut utiliser grub-install :

# grub-install recheck root-directory=/mnt/ /dev/sda

Normalement cela devrait fonctionner ;) mais il est possible, si cela ne marche pas d'essayer de l'installer à l'aide de la commande grub directement (attention le hd1 est à adapter selon votre configuration) :

# grub
grub> root (hd1,0)
grub> setup (hd1)

Il faut également renseigner le fichier /mnt/boot/grub/menu.lst

# menu.lst - See: grub(8), info grub, update-grub(8)
#            grub-install(8), grub-floppy(8),
#            grub-md5-crypt, /usr/share/doc/grub
#            and /usr/share/doc/grub-doc/.

## default num
# Set the default entry to the entry number NUM. Numbering starts from 0, and
# the entry number 0 is the default if the command is not used.
#
# You can specify 'saved' instead of a number. In this case, the default entry
# is the entry saved with the command 'savedefault'.
# WARNING: If you are using dmraid do not change this entry to 'saved' or your
# array will desync and will not let you boot your system.
default        0

## timeout sec
# Set a timeout, in SEC seconds, before automatically booting the default entry
# (normally the first entry defined).
timeout        5

# Pretty colours
color cyan/blue white/blue

## password '--md5' passwd
# If used in the first section of a menu file, disable all interactive editing
# control (menu entry editor and command-line)  and entries protected by the
# command 'lock'
# e.g. password topsecret
#      password --md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/
# password topsecret

#
# examples
#
# title        Windows 95/98/NT/2000
# root     (hd0,0)
# makeactive
# chainloader  +1
#
# title        Linux
# root     (hd0,1)
# kernel   /vmlinuz root=/dev/hda2 ro
#

#
# Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST

### BEGIN AUTOMAGIC KERNELS LIST
## lines between the AUTOMAGIC KERNELS LIST markers will be modified
## by the debian update-grub script except for the default options below

## DO NOT UNCOMMENT THEM, Just edit them to your needs

## ## Start Default Options ##
## default kernel options
## default kernel options for automagic boot options
## If you want special options for specific kernels use kopt_x_y_z
## where x.y.z is kernel version. Minor versions can be omitted.
## e.g. kopt=root=/dev/hda1 ro
##      kopt_2_6_8=root=/dev/hdc1 ro
##      kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=LABEL=live-root rootdelay=5 ro quiet

## default grub root device
## e.g. groot=(hd0,0)
# groot=(hd0,0)

## should update-grub create alternative automagic boot options
## e.g. alternative=true
##      alternative=false
# alternative=true

## should update-grub lock alternative automagic boot options
## e.g. lockalternative=true
##      lockalternative=false
# lockalternative=false

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=vga=791

## should update-grub lock old automagic boot options
## e.g. lockold=false
##      lockold=true
# lockold=false

## Xen hypervisor options to use with the default Xen boot option
# xenhopt=

## Xen Linux kernel options to use with the default Xen boot option
# xenkopt=console=tty0

## altoption boot targets option
## multiple altoptions lines are allowed
## e.g. altoptions=(extra menu suffix) extra boot options
##      altoptions=(single-user) single
# altoptions=(single-user mode) single

## controls how many kernels should be put into the menu.lst
## only counts the first occurence of a kernel, not the
## alternative kernel options
## e.g. howmany=all
##      howmany=7
# howmany=all

## should update-grub create memtest86 boot option
## e.g. memtest86=true
##      memtest86=false
# memtest86=true

## should update-grub adjust the value of the default booted system
## can be true or false
# updatedefaultentry=false

## ## End Default Options ##

title      Debian GNU/Linux, kernel 2.6.18-4-686
root       (hd0,0)
kernel     /vmlinuz-2.6.18-4-686 root=LABEL=live-root rootdelay=5 ro quiet vga=791
initrd     /initrd.img-2.6.18-4-686
savedefault

title      Debian GNU/Linux, kernel 2.6.18-4-686 (single-user mode)
root       (hd0,0)
kernel     /vmlinuz-2.6.18-4-686 root=LABEL=live-root rootdelay=5 ro quiet single
initrd     /initrd.img-2.6.18-4-686
savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

Ajout d'un utilisateur

Enfin il ne faut pas oublier d'installer un compte utilisateur4, ainsi que changer le mot de passe root à l'aide des commandes :

# chroot /mnt
# passwd
# adduser toto

Redémarrage et test

Il ne reste plus qu'à démonter toutes les partitions et redémarrer la machine.

# umount -a
# exit
# reboot

  1. J'ai par ailleurs acheté récemment une clé USB de 2Go à cet effet pour à peine 15 euros 

  2. Ce qui peut arriver quand on change de machine par exemple. 

  3. i.e les modules USB, ... 

  4. Il ne faudrait pas travailler en administrateur, hein ! 

Batch erreur

17juin

 Batch en erreur
UNIVERSE.UVS0001 upr UVS03010,0194774 ( ses UVS03,0033077, ug XUVS00 ) en erreur sur beah06
 

Batch en horaire dépassé
UNIVERSE.UVS0002 upr UVS03010 0045,13 04 2002 ( ses UVS03, ug XUVS00 ) en horaire depasse sur beai67
 

Batch refusé au pilotage
UNIVERSE.UVS0005 upr UVS03010,0194774 ( ses UVS03,0033077, ug XUVS00 ) refusee au pilotage sur beah06

Batch dont la duree d’exécution est trop longue
UNIVERSE.UVS0005 upr UVS03010,0194774 ( ses UVS03,0033077, ug XUVS00 ) trop longue sur beah06

Batch en erreur
SD : UVS03.XUVS00
LD : UVS03.XUVS00
L'uproc UVS03010 (Num exec = 0194774) de la session UVS03 (Num sess = 0033077) execute sur l'ug XUVS00 est en erreur sur le noeud beah06 avec le code erreur xxx
 Batch en horaire dépassé
SD : UVS03.XUVS00
LD : UVS03.XUVS00
L'uproc UVS03010 de la session UVS03 planifiee le 13/04/2002 a 00:45 sur l'ug XUVS00 est en horaire depasse sur le noeud beai67
10
 Batch refusé au pilotage
SD : UVS03.XUVS00
LD : UVS03.XUVS00
L'uproc UVS03010 (Num exec = 0194774) de la session UVS03 (Num sess = 0033077) execute sur l'ug XUVS00 est refusee au pilotage sur le noeud beah06
 Batch dont la duree d’exécution est trop longue
SD : UVS03.XUVS00
LD : UVS03.XUVS00
L'uproc UVS03010 (Num exec = 0194774) de la session UVS03 (Num sess = 0033077) execute sur l'ug XUVS00 est trop longue sur le noeud beah06