Déployer Linux

De Wiki Dane (ex wikitice)
Aller à : navigation, rechercher

Les différentes manipulations décrites ici pourront être avantageusement remplacées par l'utilisation des services offerts maintenant sur le SE3.

Explications détaillées sur le site de Rouen

Cette page garde toutefois un rôle pédagogique pour expliquer ce que fait le SE3 pour déployer des clients GNU/Linux

Déployer une distribution GNU/Linux

Journal des modifications

Guide de déploiement de Debian GNU/Linux, version Wheezy, au sein d'un réseau administré par un serveur SambaEdu (version Squeeze).

Quelques précisions préalables:
Le dispositif vu dans sa globalité
  • les commandes utilisées dans ce guide doivent presque toutes être lancées avec un compte disposant des droits d'administration de la machine (c'est le sens du "#" précédant les commandes); vous devez donc nécessairement disposer du mot de passe root du se3
  • aucun de ces scripts n'est utilisable tel quel: vous devrez systématiquement modifier quelques données propres à votre établissement (adresse IP des serveurs, ou autre...)

Pour commencer, voici un schéma synthétisant tout le dispositif, et le fonctionnement d'un parc de clients GNU/Linux dans un réseau administré par un serveur se3.



Sources:

http://www.samba-edu.ac-versailles.fr/spip.php?article52

Introduction

Ce document propose un guide pour le déploiement d'une distribution GNU/Linux (dans le cas présent: Debian Wheezy) dans un établissement scolaire disposant d'un serveur SambaEdu (Squeeze).

Le déploiement de Debian GNU/Linux se justifie par des raisons techniques et déontologiques. L'importance de l'utilisation des logiciels libres dans l'éducation est désormais reconnue au plus haut sommet de la représentation nationale. L'installation d'un système économe, robuste et fiable permet de redonner une nouvelle vie à des postes voués sans cela au rebut (n'entendez pas par-là qu'il faille réserver aux vieux postes fatigués l'installation de GNU/Linux ;) ). Enfin, et contrairement aux idées reçues, la gestion au quotidien d'un parc sous GNU/Linux est d'une simplicité déconcertante.

L'installation des machines se fera:

  • avec un démarrage réseau
  • à partir d'un miroir local
  • en utilisant un script post-installation permettant:
  1. d'installer tous les paquets désirés
  2. d'intégrer les clients au domaine

Ces choix sont guidés par un souci d'efficacité. Une fois le travail préparatoire décrit ci-dessous (certes conséquent) effectué, l'installation des clients, leur configuration et leur intégration ne nécessitent quasiment plus aucun travail : l'intégralité du processus est automatisée.

3 étapes successives de préparation sont nécessaires:

  1. installation d'un miroir local
  2. préparation du boot PXE sur le serveur SambaEdu
  3. préparation du script d'installation et d'intégration

Installation du dépôt local

Lors de l'installation d'une distribution Debian GNU/Linux, l'utilisateur doit choisir un « dépôt », serveur à partir duquel sont téléchargés les paquets nécessaires au bon fonctionnement du système. Dans le cadre d'un déploiement au sein d'un établissement scolaire, ce système de dépôt pose un problème évident : celui de la bande-passante, qui risque d'être rapidement saturée, et donc de ralentir le processus d'installation et de déploiement.

La solution consiste à installer sur un poste du réseau de l'établissement un dépôt identique à celui des serveurs Debian. Ainsi, une fois le dépôt local créé, les postes sur lesquels la distribution Debian sera installée iront chercher les paquets nécessaires à l'intérieur du réseau local.

La création de ce dépôt nécessite l'installation de Debian GNU/Linux sur un poste du réseau pédagogique (installation ne comprenant que les utilitaires de base du système). Ce poste n'a pas à avoir une configuration particulière, hormis un espace disque important (si vous comptez installez GNU/Linux sur 2 ou 3 types d'architecture différentes, prévoyez au moins 200 Go).

Deux conseils cependant :

  • ce poste étant relativement sensible dans le dispositif de déploiement, il est recommandé de ne pas l'entreposer n'importe où (la salle des serveurs, de manière idéale);
  • il est nécessaire de lui assigner une IP fixe.
Voir : Créer_et_gérer_un_Miroir_Local
Vue du dépôt dans le navigateur

Attention à bien avoir ajouté « main/installer » dans les « sections » à télécharger.

Une fois le dépôt créé, il est très simple d'en vérifier le fonctionnement avec un navigateur « web » en allant à l'url suivante : http://machine_depot/depot/debian

La liste suivante doit apparaître

Préparation du boot PXE sur le serveur SambaEdu

Installer Debian GNU/Linux via un boot PXE présente deux avantages évidents:

  1. Il n'est plus nécessaire de disposer d'un support physique d'installation (clé USB, CD ou DVD)
  2. On peut configurer par avance tout le processus d'installation, et ainsi n'avoir à intervenir physiquement sur les machines qu'au démarrage

Il faut au préalable avoir activé le module Installation de stations (se3-unattended).

Configuration du menu PXE sur le serveur SambaEdu

Étape 1 : on récupère les fichiers nécessaires au démarrage de l'installation par le réseau des deux architectures i386 et amd64.

Il faut dans un premier temps télécharger et décompresser les archives dans un sous-dossier avant de les déplacer au bon endroit :

######### Création d'un répertoire pour l'architecture i386
# mkdir /tftpboot/debian-installer/i386
######### Création d'un répertoire temporaire pour le désarchivage et ne pas écraser les fichiers existants dans /tftpboot
# mkdir /tmp/di
# cd /tmp/di
# wget http://ftp.fr.debian.org/debian/dists/wheezy/main/installer-i386/current/images/netboot/netboot.tar.gz
# tar zxvf netboot.tar.gz
######### On déplace les fichiers qui nous intéressent
# mv /tmp/di/debian-installer/i386/*  /tftpboot/debian-installer/i386/
######### Suppression de tout avant opération pour l'architecture amd64, le fichier téléchargé ayant le même nom
# rm -r /tmp/di/*
######### Mêmes opérations pour l'architecture amd64
# mkdir /tftpboot/debian-installer/amd64
# wget http://ftp.fr.debian.org/debian/dists/wheezy/main/installer-amd64/current/images/netboot/netboot.tar.gz
# tar zxvf netboot.tar.gz
# mv /tmp/di/debian-installer/amd64/*  /tftpboot/debian-installer/amd64/
# rm -r /tmp/di/*

Étape 2 : on configure le menu de boot PXE qui apparaît sur les clients quand l'option de démarrage réseau est activée

Ces informations sont contenues dans le fichier /tftpboot/pxelinux.cfg/default, que l'on édite:

# nano /tftpboot/pxelinux.cfg/default 

On ajoute à ce fichier les entrées de menu suivantes:

  1. la première, intitulée « Installation Debian Wheezy » correspond à une installation standard, durant laquelle l'utilisateur devra intervenir à chaque fois qu'un choix de configuration (langue, partitionnement, miroir, etc.) se présentera
  2. les suivantes, intitulées « DebianWheezyPreseedi386 » et « DebianWheezyPreseedamd64 », correspondent à une installation préconfigurée, durant laquelle l'utilisateur a défini à l'avance, dans un fichier « preseed », tous les choix de configuration de l'installation, et n'a donc plus à intervenir une fois le processus lancé. Ces deux entrées permettent le déploiement dans une salle de machines i386 et dans une autre avec des machines amd64.
LABEL Installation Debian Wheezy
  MENU LABEL ^Netboot Debian Wheezy
  KERNEL debian-installer/i386/linux
  APPEND vga=normal initrd=debian-installer/i386/initrd.gz --quiet
  TEXT HELP
  Installation de Debian Wheezy par le réseau
  ENDTEXT

LABEL DebianWheezyPreseedi386
        MENU LABEL ^Netboot Debian Wheezy avec fichier Preseed (i386)
        KERNEL  debian-installer/i386/linux
        APPEND  ramdisk_size=7680 language=fr locale=fr_FR.UTF-8 console-setup/layoutcode=fr_FR netcfg/wireless_wep= netcfg/choose_interface=eth0 netcfg/dhcp_timeout=60 netcfg/get_hostname=poste netcfg/get_domain=intranet.local keyboard-configuration/xkb-keymap=fr languagechooser/language-name=French countrychooser/shortlist=FR console-keymaps-at/keymap=fr debian-installer/country=FR  debian-installer/locale=fr_FR.UTF-8 preseed/url=http://IP_SE3/Preseed/wheezy-preseed-i386.cfg initrd=debian-installer/i386/initrd.gz --
        TEXT HELP
        Installation de Debian Wheezy i386 par internet avec un fichier Preseed
        ENDTEXT

LABEL DebianWheezyPreseedamd64
        MENU LABEL ^Netboot Debian Wheezy avec fichier Preseed (amd64)
        KERNEL  debian-installer/amd64/linux
        APPEND  ramdisk_size=7680 language=fr locale=fr_FR.UTF-8 console-setup/layoutcode=fr_FR netcfg/wireless_wep= netcfg/choose_interface=eth0 netcfg/dhcp_timeout=60 netcfg/get_hostname=poste netcfg/get_domain=intranet.local keyboard-configuration/xkb-keymap=fr languagechooser/language-name=French countrychooser/shortlist=FR console-keymaps-at/keymap=fr debian-installer/country=FR  debian-installer/locale=fr_FR.UTF-8 preseed/url=http://IP_SE3/Preseed/wheezy-preseed-amd64.cfg initrd=debian-installer/amd64/initrd.gz --
        TEXT HELP
        Installation de Debian Wheezy amd64 par internet avec un fichier Preseed
        ENDTEXT

N'oubliez pas de modifier l'adresse où se trouve le fichier preseed, en remplaçant IP_SE3 par l'IP réelle de votre Se3 ou son nom si vous disposez d'un DNS !

Ce qui suis « APPEND » doit s'écrire sur une seule ligne

Étape 3 : tester son serveur TFTP

À ce stade, il faut vérifier que le serveur TFTP fonctionne. Lancer un poste client en boot PXE. Les menus préparés doivent s'afficher et l'installation démarrer lorsqu'on choisit l'une des différentes options.

Création et configuration du fichier preseed

Pour fonctionner, l'installation par le réseau via un fichier de configuration preseed a besoin... d'un fichier de configuration preseed. Voici un exemple de fichier, que vous déposerez (après avoir modifié quelques données) dans le répertoire /var/www/Preseed de votre se3. Afin qu'il fonctionne, ce fichier doit avoir le même nom que celui indiqué dans le boot PXE (dans cette documentation, il s'agit par exemple de "wheezy-preseed-amd64.cfg" et "wheezy-preseed-i386.cfg"). Vous veillerez donc à nommer correctement ces fichiers, pour qu'ils coïncident avec le contenu du fichier /tftpboot/pxelinux.cfg/default. Pour plus d'informations voir :

##########
#### Fichier de réponses pour l'installation de Debian Wheezy
# 12 sections
#	1.  Localisation (langue, clavier, etc.)
#	2.  Configuration du réseau en DHCP
#	3.  Miroir local alice
#	4.  Fuseau horaire
#	5.  Partitionnement
#	6.  Comptes Root et utilisateur
#	7.  Configuration d'apt
#	8.  Choix des paquets
#	9.  Programme d'amorçage Grub
#	10. Configuration de l'affichage
#	11. Commande à la fin de l'installation
#	12. Fin de l'installation
##########
# Pour adapter ce fichier, modifier principalement :
#	- la partie 3  : le miroir
#	- la partie 4  : l'ip du Slis
#	- la partie 6  : les mots de passe des comptes
#	- la partie 11 : lancement d'une commande
#
##########

### 1. Localisation (pour mémoire)
# cette partie doit être configurée à l'amorçage par le serveur tftp
# car le fichier preseed n'est chargé qu'après que les questions ont été posées.
# elle ne fonctionne qu'avec une préconfiguration de type initrd.
#############
# langue et pays
d-i localechooser/shortlist	select	FR
d-i debian-installer/locale string fr_FR.UTF-8
d-i debian-installer/language string fr
d-i debian-installer/country string FR

# clavier
d-i console-keymaps-at/keymap select fr-latin9
d-i debian-installer/keymap string fr-latin9
d-i console-setup/modelcode string pc105
d-i console-setup/layoutcode string fr


### 2. Configuration du réseau avec le serveur DHCP du SE3
#############
# choix automatique de l'interface
d-i netcfg/choose_interface select auto

# À décommenter quand le serveur dhcp est lent et que l'installateur s'arrête pour l'attendre
d-i netcfg/dhcp_timeout string 60

# Si pour le réseau ou pour un autre matériel vous avez besoin d'un microprogramme
# (« firmware ») non libre, vous pouvez forcer l'installateur à le télécharger,
# en évitant la demande de confirmation.
d-i hw-detect/load_firmware boolean true


### 3. Configuration du mirroir : utilisation du mirroir local
#############
d-i mirror/country string manual
d-i mirror/http/hostname string IP_MIROIR_LOCAL
d-i mirror/http/directory string /depot/debian/
d-i mirror/http/proxy string


### 4. Configuration du fuseau horaire : serveur de temps du Slis
#############
# réglage de l'horloge matérielle sur UTC et du fuseau horaire
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Paris

# autorisation de l'utilisation de NTP pour régler l'horloge pendant l'installation avec le serveur ntp du Slis
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string IP_SLIS

### 5. Partitionnement du disque dur
#############
# Si le système possède un espace libre, vous pouvez ne partitionner que cet espace.
# Alternatives: custom, some_device, some_device_crypto, some_device_lvm.
#d-i partman-auto/init_automatically_partition select Assisté - utiliser le plus grand espace disponible
#d-i partman-auto/init_automatically_partition select biggest_free

# Si le systeme doit utiliser un disque entier, le 1er disque sda
# en indiquant la méthode utilisée (3 sont possibles) :
# - regular	type de partitionnement habituel
# - lvm		partitionnement LVM
# - crypto	partitionnement LVM dans une partition cryptée
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular

# Choix d'une des 3 possibilités de partitionnement prédéfinies :
# - atomic: tout dans une seule partition
# - home:   partition /home separée
# - multi:  partitions /home, /usr, /var, and /tmp séparées
d-i partman-auto/choose_recipe select atomic

# choix du format ext4
d-i partman/default_filesystem string ext4

# partitionnement automatique sans demander de confirmation
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true


### 6. Configuration des comptes Root et utilisateur
#############
# Création du compte root (false → non, true → oui)
d-i passwd/root-login boolean true

# mot de passe root en clair… avec confirmation
d-i passwd/root-password password MOTDEPASSEROOT
d-i passwd/root-password-again password MOTDEPASSEROOT
# … ou chiffré sans confirmation
# pour le chiffrage, utiliser la commande suivante dans une console
# printf "MOTDEPASSEROOT" | mkpasswd -s -m md5
#d-i passwd/root-password-crypted password

# Création d'un compte utilisateur normal.
d-i passwd/user-fullname string enseignant
d-i passwd/username string enseignant

# Mot de passe de cet utilisateur normal en clair… avec confirmation
d-i passwd/user-password password enseignant
d-i passwd/user-password-again password enseignant
# … ou chiffré sans confirmation
# pour le chiffrage, utiliser la commande suivante dans une console
# printf "enseignant" | mkpasswd -s -m md5
#d-i passwd/user-password-crypted password


### 7. Configuration d'Apt
# le fichier /etc/apt/sources.list sera reconfiguré après l'installation
# à l'aide d'un script de post-installation
#############
# Vous pouvez installer des logiciels des distributions non-free et contrib.
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true

# Décommentez cette ligne si vous n'utilisez pas de miroir sur le réseau.
#d-i apt-setup/use_mirror boolean false

# Choisissez les services de mise à jour et les miroirs à utiliser.
# Les valeurs ci-après sont les valeurs par défaut :
d-i apt-setup/services-select multiselect security
d-i apt-setup/security_host string security.debian.org


### 8. Choix des paquets
#############
# Il est possible de choisir parmi plusieurs environnements de bureau
# Classement du plus gourmand au plus économe
# kde-desktop : choix de kde (http://kde.org/)
# gnome-desktop : choix de gnome (https://www.gnome.org/)
# xfce-desktop : choix de xfce (http://www.xfce.org/)
# lxde-desktop : choix de lxde (http://lxde.org/)
# Suivant le type d'environnement de bureau, il sera nécessaire ou pas de prévoir
# l'installation de beaucoup d'autres paquets.
tasksel tasksel/first multiselect standard, desktop, xfce-desktop

# installation d'un serveur ssh (administration distante de la machine)
# gdm3 n'est utile que si on choisit les environnements xfce ou lxde.
d-i pkgsel/include string openssh-server ldap-utils gdm3

# Sélection du pack de langues
d-i pkgsel/language-packs multiselect fr, en, es, de

# Gestion des mises à jour avec 3 possibilités prédéfinies :
# - "none" → pas de mise à jour automatique
# - "unattended-upgrades" → installe les mises à jour de sécurité automatiquement
# - "landscape" → manage system with Landscape
d-i pkgsel/update-policy select unattended-upgrades

# Envoyer rapport d'installation
popularity-contest popularity-contest/participate boolean true


### 9. Installation du programme d'amorçage GRUB
#############
# Installation automatique sur le MBR si aucun autre système n'est détecté
d-i grub-installer/only_debian boolean true

# S'il reconnaît un système d'exploitation, vous en serez informé
# et l'installateur configurera Grub pour pouvoir démarrer aussi bien ce système que Debian
d-i grub-installer/with_other_os boolean true

# Mot de passe optionnel pour Grub, en clair… pas nécessaire ici puisque le mot de passe Grub sera créé au moment de l'intégration au domaine
#d-i grub-installer/password password r00tme
#d-i grub-installer/password-again password r00tme
# … ou crypté avec MD5 hash, voir grub-md5-crypt(8).
#d-i grub-installer/password-crypted password [MD5 hash]


### 10. Configuration de X (gestion de l'affichage)
#############
# Détection automatique du moniteur.
xserver-xorg xserver-xorg/autodetect_monitor boolean true
# À décommenter en cas de moniteur LCD.
#xserver-xorg xserver-xorg/config/monitor/lcd boolean true
# X has three configuration paths for the monitor. Here's how to preseed
# the "medium" path, which is always available. The "simple" path may not
# be available, and the "advanced" path asks too many questions.
xserver-xorg xserver-xorg/config/monitor/selection-method \
       select medium
xserver-xorg xserver-xorg/config/monitor/mode-list \
       select 1024x768 @ 60 Hz


### 11. Exécution d'une commande avant la fin de l'installation
# Cette commande est exécutée juste avant que l'installation ne se termine,
# quand le répertoire /target est encore utilisable.
#############
# À décommenter pour que le script postinst.sh soit lancé au 1er redémarrage de la machine
# il faudra rajouter à la fin du script la suppression de ce fichier…
#d-i preseed/late_command string wget http://IP_SE3/script_post_install -O  /target/tmp/postinst.sh; in-target bash /tmp/postinst.sh

### 12. Fin de l'installation
# Si l'installation a réussi, les journaux créés pendant l'installation sont automatiquement sauvegardés
# dans le répertoire /var/log/installer/. 
#############
# Pour éviter le dernier message disant que l'installation est terminée
d-i finish-install/reboot_in_progress note

Ce fichier prévoit:

  • une partition unique pour l'ensemble du système (ce qui signifie évidemment, mais ça va mieux en le rappelant, que tout autre système que Debian sera supprimé de ce poste)
  • un compte local « enseignant » ayant pour mot de passe « enseignant »
  • l'installation de l'environnement de bureau Xfce4 et le gestionnaire de session gdm3

À modifier, avec un éditeur de textes:

  • le mot de passe root, pour l'instant "MOTDEPASSEROOT"
  • l'IP du serveur NTP, pour l'instant "IP_SLIS"
  • l'IP du miroir local, pour l'instant "IP_MIROIR_LOCAL"
  • l'IP du Se3, pour l'instant "IP_SE3"
  • la rubrique 11 de ce fichier prévoit le lancement automatique, au redémarrage, d'un script de post-installation (voir rubrique suivante de ce guide); si vous ne souhaitez pas qu'il se lance, commentez (ajoutez un "#") à la ligne commençant par "d-i preseed/late_command [...]", de cette manière, le script ignorera cette ligne.

Si vous avez créé ce fichier sur un poste autre que le Se3, vous pouvez copier celui-ci sur le serveur avec la commande scp (en remplaçant bien sûr IP_SE3 par l'adresse IP de votre serveur):

# scp wheezy-preseed-i386.cfg root@IP_SE3:"/var/www/Preseed"

Deux remarques concernant l'option preseed :

  1. dans cette documentation, le boot PXE prévoit un fichier preseed différent selon l'architecture du client (i386 ou amd64): cette distinction n'est en rien obligatoire (un seul et même fichier preseed peut être utilisé, indépendamment de l'architecture du client), mais elle permet, le cas échéant, d'adapter l'installation à l'état de la machine (on peut ainsi imaginer indiquer dans la section 8 du preseed, l'installation de xfce pour les vieilles machines i386, et gnome-shell, plus exigent matériellement, pour les postes récents amd64).
  2. théoriquement, aucune intervention de l'utilisateur n'est nécessaire durant le processus d'installation, après la configuration du réseau. Puisque ce n'est qu'à ce moment que la machine pourra télécharger le fichier preseed. Toutefois, dans la pratique, il arrive que l'utilisateur ait à intervenir (par exemple, si le système détecte un microcode privateur absent, il va vous demander s'il faut l'installer à partir d'un support externe). Pour cela, il faut disposer d'une clé USB avec ce paquet décompressé dessus : http://cdimage.debian.org/cdimage/unofficial/non-free/firmware/wheezy/current/).

Préparation du script d'installation et d'intégration

Soyons clairs: nous n'avons pas l'intention de nous compliquer la vie en installant Debian GNU/Linux, mais de nous la simplifier. C'est la raison pour laquelle ce script permettra d'automatiser:

  1. l'installation des paquets nécessaires au fonctionnement du poste
  2. l'intégration au domaine

Deux pré-requis pour que ceci se déroule correctement. Il faut:

  1. que le poste à intégrer au domaine soit correctement nommé dans le module DHCP du se3 (un nom et une adresse réservés)
  2. que le se3 soit prêt à intégrer des clients sous GNU/Linux

Nous allons régler ce second problème. Vous pouvez vous reporter à la documentation officielle, dont le chapitre consacré aux clients GNU/Linux est très complet et très clair.

Quoiqu'il en soit, il vous faudra, sur le se3, lancer les commandes suivantes pour installer le paquet nécessaire à cette fonctionnalité:

# aptitude update
# aptitude install se3-clients-linux

Il faudra ensuite déposer dans le répertoire /var/www/ du Se3 le script d'intégration au domaine, afin que les clients le récupèrent aisément au moment voulu:

# cp /home/netlogon/clients-linux/distribs/wheezy/integration/integration_wheezy.bash /var/www/

On pourra préférer la création d'un lien symbolique, ce qui aura pour avantage d'avoir un script toujours à jour : /!\ Attention cependant, il semble que cette solution ne soit pas systématiquement fonctionnelle. Vérifier que le fichier est accessible dans un navigateur à l'adresse http://IP_SE3/integration_wheezy.bash En cas d'erreur 403, préférer la solution ci-dessus.

# ln -s /home/netlogon/clients-linux/distribs/wheezy/integration/integration_wheezy.bash /var/www/integration_wheezy.bash

Vous pouvez faire la liste des paquets que vous souhaitez installer dans un fichier texte, (que nous appellerons ici "mesapplis.txt"), et déposer celui-ci dans le répertoire /var/www du Se3, avec la même commande scp:

# scp mesapplis.txt root@IP_SE3:"/var/www/"

Normalement, si vous avez effectué correctement les opérations décrites ci-dessus, vous devriez désormais voir apparaître deux fichiers et deux répertoires en lançant la commande suivante sur le se3:

# ls /var/www/

Ces fichiers et répertoires étant:

  • mesapplis.txt
  • integration_wheezy.bash
  • le répertoire "depot"
  • le répertoire "Preseed"

Nous touchons au but !

Depuis le se3, créez le script "script_post_install" dans /var/www. Pour cela:

# nano /var/www/script_post_install

Dans ce fichier, insérez le contenu suivant, en modifiant évidemment les variables propres à votre établissement (BaseDN, IP du Se3, classe du réseau, le mot de passe imposé à Grub):

#!/bin/bash

#Définition de variables
BaseDN="ou=Computers,ou=etab-nom-ville,ou=ac-versailles,ou=education,o=gouv,c=fr"
SE3="IP_SE3"
MdpGrub="mon-mot-de-passe-grub"

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

#copie des fichiers mesapplis.txt et integration_wheezy.bash dans le répertoire Documents du compte enseignant
wget http://$SE3/mesapplis.txt  -O "/root/mesapplis.txt"
wget http://$SE3/integration_wheezy.bash  -O "/root/integration_wheezy.bash"

#installation des paquets
apt-get update
apt-get -y dist-upgrade
apt-get -y install $(< /root/mesapplis.txt)
rm /root/mesapplis.txt

#on rend le script d'intégration exécutable
chmod u+x /root/integration_wheezy.bash 

# On sauvegarde le fichier /etc/rc.local original, avant modification
cp /etc/rc.local /etc/rc.local.orig

# On crée un nouveau fichier /etc/rc.local contenant...
echo "#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
BaseDN=\"$BaseDN\"
SE3=\"$SE3\"
MdpGrub=\"$MdpGrub\"

sleep 30
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y ldap-utils

# Recherche du nom de la machine dans l'annuaire
IP=\$(ip address show eth0 | grep 'inet ' | awk '{print \$2}' | cut -d '/' -f1)
MACHINE=\$(ldapsearch -xL -h \"\$SE3\" -b \"\$BaseDN\" ipHostNumber=\"\$IP\" | grep '^cn' | cut -d ' ' -f2)

# Lancement de l'intégration
bash /root/integration_wheezy.bash --mdp-grub=\"\$MdpGrub\" --nom-client=\"\$MACHINE\" --is --ivl

# On remet Grub en mode _je-demarre-tout-seul_ après 3s
sed -r -i -e 's/^\GRUB_TIMEOUT=-1.*\$/GRUB_TIMEOUT=3/g' /etc/default/grub
update-grub

# On programme la remise en place du /etc/rc.local d'origine après le lancement de l'intégration
# pour éviter que l'intégration ne se lance à chaque démarrage...
{
    sleep 5
    cat /etc/rc.local.orig > /etc/rc.local
    rm /etc/rc.local.orig
    reboot
} &
exit 0
" > /etc/rc.local

# On configure le réseau manuellement en DHCP...
apt-get purge -y network-manager

echo "
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

" > /etc/network/interfaces

Puis, comme d'habitude, enregistrez (Ctrl+o) et fermez (Ctrl+x) l'éditeur.

Bien entendu, vous pouvez créer ce fichier sur un autre poste, puis le copier sur le Se3 avec la commande scp:

# scp script_post_install root@IP_SE3:"/var/www/"

Que fait ce script ? Il installe les paquets nommés dans le fichier "mesapplis.txt" puis intègre le client au domaine en allant récupérer son nom dans le LDAP du Se3. Si vous n'avez pas au préalable nommé les machines sur le se3, cela ne fonctionnera bien sûr pas. Vous pouvez alors commenter les lignes:

IP=\$(ip address show eth0 | grep 'inet ' | awk '{print \$2}' | cut -d '/' -f1)

et

MACHINE=\$(ldapsearch -xL -h \"\$SE3\" -b \"\$BaseDN\" ipHostNumber=\"\$IP\" | grep '^cn' | cut -d ' ' -f2)

et remplacer dans le script "$Machine" par "toto" (où "toto" est le nom que vous avez choisi de donner à votre client) dans la ligne

./integration_wheezy.bash --mdp-grub="MdpGrub" --nom-client="$Machine" --is --ivl

Les lignes suivantes permettent de redéfinir une temporisation de Grub au démarrage, afin que le poste redémarre automatiquement après l'intégration. Il est possible de modifier le nombre de secondes (GRUB_TIMEOUT=3 dans cet exemple) :

sed -r -i -e 's/^\GRUB_TIMEOUT=-1.*\$/GRUB_TIMEOUT=3/g' /etc/default/grub
update-grub

Et maintenant?

Maintenant, tout le travail est fait! En bootant sur le réseau sur un poste, et en choisissant l'installation via preseed, tout votre travail préparatoire va permettre:

  1. d'installer le système de base selon les options prévues dans le fichier preseed
  2. d'installer tous les logiciels définis dans votre fichiers "mesapplis.txt"
  3. d'intégrer votre poste au domaine

Autrement dit, en deux tapes de clavier, vous obtiendrez un poste fonctionnel sur lequel n'importe quel enseignant ou élève pourra se connecter.

Quelques conseils pour la gestion du parc

Il ne s'agit pas ici d'expliquer d'une autre manière ce qui est déjà très clairement exposé dans le chapitre 9 de la documentation Samba Édu 3 éditée par la mission tice de l'académie de Versailles.

Quoiqu'il en soit, à partir du moment où vous décidez d'utiliser Debian GNU/Linux dans le contexte d'un réseau administré sous Se3, la lecture de ce document est tout simplement indispensable.

Vous y apprendrez notamment comment utiliser le dispositif unefois, permettant de faire tout ce qui est possible de faire via la ligne de commande (en gros: tout).

Cette partie du guide sert plutôt à donner quelques conseils et partager quelques expériences...

Quelques exemples:

Faire une mise à jour et une installation de paquets avec unefois

Pour l'exemple, on considérera qu'on souhaite faire cela sur le parc de la salle 221 (dont les postes sont nommés 221-01 à 221-16).

On placera donc un fichier nommé DATEDUJOUR-maj-install.unefois dans le répertoire "^221" du répertoire /home/netlogon/clients-linux/unefois du serveur se3, dont voici le contenu:

#!/bin/bash

aptitude update
aptitude -y full-upgrade
aptitude -y install wxgeometrie sweethome3d tupi celestia

La petite subtilité réside dans l'option "-y" des commandes "full-upgrade" et "install": elle permet à aptitude de considérer que vous répondez "oui" aux éventuels questions qu'il serait amené à vous poser. Sans cela, le processus échoue, puisque par définition, vous n'êtes pas là pour répondre.

Attention cependant: si le paquet ou la mise à jour que vous souhaitez installer nécessite une action spécifique de la part de l'utilisateur durant le processus (confirmation quelconque: c'est le cas lors de la mise à jour de grub notamment), l'installation échouera, malgré l'option "-y".

Programmer une mise à jour globale et importante du parc sans gêner les utilisateurs

On pourrait se contenter de placer un fichier nommé DATEDUJOUR-maj.unefois dans le répertoire "^" du répertoire /home/netlogon/clients-linux/unefois du serveur se3, avec le contenu suivant:

#!/bin/bash

aptitude update
aptitude -y full-upgrade

Simplement, pour éviter des ralentissements aux collègues et / ou élèves qui utiliseraient les postes et devraient "subir" la mise à jour, on peut envisager de:

  1. placer le fichier PAUSE dans le répertoire /unefois du se3
  2. programmer via le module "parc" du se3 un allumage automatique des postes du parc "GNU/Linux" regroupant tous les postes sous Debian durant, disons, le week-end
  3. modifier le contenu du fichier unefois ci-dessus en:
#!/bin/bash

aptitude update
aptitude -y full-upgrade
halt

Le "halt" se justifiant par le fait que le se3 ne sait pas éteindre des clients sous GNU/Linux.

N'oubliez pas, le vendredi soir, de supprimer le fichier PAUSE.

Remarque importante: l'utilisation du répertoire "^" est sensible quand des clients portables reliés en wifi au réseau font partie du parc. En effet, programmer une mise à jour globale avec la méthode décrite ci-dessus inclura les portables, mais les exclura des postes allumés pendant le week-end par le se3. La mise à jour aura donc lieu au prochain allumage manuel des postes, soit probablement au moment où un enseignant souhaitera les utiliser avec des élèves. L'accès aux postes ne sera possible qu'une fois les mises à jour téléchargées et installées (autrement dit un temps pouvant être relativement long...).

Personnaliser l'environnement de bureau

En prenant exemple sur le processus décrit dans la documentation à propos de Firefox, et si l'on considère que toute la configuration de l'environnement de bureau est "inscrite" dans les fichiers et répertoires cachés du home de l'utilisateur, on peut assez facilement envisager de faire redescendre sur les postes du réseau la configuration souhaitée.

La démarche est assez simple:

  1. Sur un poste du réseau pédagogique, et connecté avec le compte admin, on modifie l'environnement de bureau (icônes de la barre d'outils, menu, nombre de bureaux, etc.)
  2. On copie sur le se3, dans /home/netlogon/clients-linux/distribs/wheezy/skel, les répertoires et fichiers cachés du /home du client
  3. On lance sur le se3 la fin de la procédure décrite dans la documentation (modification du fichier VERSION et reconfiguration des droits du paquet se3-clients-linux)

À ce sujet, on peut être inventif:

- enregistrer dans le navigateur un mot de passe d'un compte élève pour accéder à un service en ligne (KNE par exemple), et éviter ainsi à ceux-ci d'avoir à le retenir et le taper

- simplifier l'interface de logiciels pour ne conserver que les outils essentiels

- ...

Intégrer une classe nomade

La seule différence entre un ordinateur portable et un PC fixe réside dans la gestion du Wifi: il faut nécessairement que le PC portable soit connecté au wifi avant l'ouverture de session.

Vous pouvez pour cela faire une chose très simple: sachant que le réseau est géré par le fichier /etc/network/interfaces, une modification de celui-ci permettra au client de se connecter dès le processus de boot au bon réseau.

Voici un exemple de fichier interfaces:

# The loopback network interface

auto lo
iface lo inet loopback

#auto eth0
#iface eth0 inet dhcp

auto wlan0
iface wlan0 inet dhcp
#         wpa-conf managed
         wpa-ssid nomdureseauwifi
#         wpa-ap-scan 1
#         wpa-scan-ssid 1
#         wpa-key-mgmt WPA-PSK
         wpa-psk motdepassedureseauwifi

On peut donc envisager de prévoir, au moment de l'installation des classes nomades, un script unefois contenant les lignes suivantes:

#!/bin/bash

#On supprime le fichier de configuration du réseau
rm /etc/network/interfaces

#On crée un nouveau fichier de configuration, contenant les informations relatives au wifi et désactivant le filaire
echo '# The loopback network interface

auto lo
iface lo inet loopback

#auto eth0
#iface eth0 inet dhcp

auto wlan0
iface wlan0 inet dhcp
#         wpa-conf managed
         wpa-ssid nomdureseauwifi
#         wpa-ap-scan 1
#         wpa-scan-ssid 1
#         wpa-key-mgmt WPA-PSK
         wpa-psk motdepassedureseauwifi' > /etc/network/interfaces

#On redémarre le réseau du client
/etc/init.d/networking restart

... et le portable se connectera au réseau wifi sus-nommé.

À noter: on commente les lignes concernant l'interface eth0 puisque le processus de boot est largement plus long lorsque le système cherche à obtenir une IP via cette interface plutôt que de simplement l'ignorer.