Développement d’Evinux
Ce document a pour objectif de détailler la procédure suivie lors du développement d’Evinux pour générer l’image disque.
Principe
La première version publique d’Evinux a été réalisée grâce à une remasterisation de Knoppix.
Ce procédé a l’avantage de partir d’une base fonctionnelle en LiveCD et de limiter les risques de dysfonctionnement.
En revanche, il présente l’inconvénient de garder parfois des résidus de paquets ou de configuration qui ne sont plus nécessaires car les paquets ne sont plus présent.
De octobre 2005 à novembre 2006, différents moyens de générer des LiveCD ont été essayés :
- remasterisation,
- scripts linux-live,
- le projet Debian-Live,
- etc.
Finalement, il a été décidé d’essayer de maîtriser complètement le contenu du système et pour cela de partir d’une installation de Debian à laquelle sont ajoutés les paquets de Knoppix nécessaire au fonctionnement en LiveCD. C’est ce procédé qui est détaillé ultérieurement.
Préparation
Les pré-requis
Pour commencer, il vous faut :
- De l’espace disque : environ 5 fois la taille de l’image disque souhaitée pour contenir : l’installation de Debian, le contenu du CD (qui comprend le système compressé) et l’image du CD (qui reprend tout le contenu dans un seul et même fichier)
- De la mémoire vive et/ou de la swap : environ 1,5 fois la taille de l’image disque souhaitée (sera utilisé principalement lors de la compression du système)
- Un CD ou DVD de Knoppix
- Un accès fonctionnel à un dépôt de Debian
Mise en place de l’environnement de travail
La construction d’Evinux se fait dans deux dossiers principaux :
- Un premier dossier nommé master contient ce qui sera sur le CD.
- Un deuxième dossier nommé source qui recevra l’installation de Debian.
Dans le dossier master, il y a donc le dossier boot contenant isolinux qui permet à l’ordinateur de savoir qu’il peut démarrer sur le CD et le dossier KNOPPIX qui contiendra le système compressé et le dossier modules (qui seront chargés au démarrage du système)
Dans le dossier source vous ne retrouvez qu’un unique dossier KNOPPIX dans lequel on installera Debian.
Le plus simple pour mettre en place cet environnement est de lancer le LiveCD de Knoppix, de monter la partition permettant de construire Evinux (par exemple hda7).
Par défaut Knoppix monte les partitions en lecture seule. Comme le reste de la procédure se fera en ligne de commande, nous allons monter manuellement la partition afin de s’assurer qu’elle soit directement en mode lecture/écriture :
mount -o rw /dev/hda7 /media/hda7
Vous pouvez éventuellement vérifier que la partition est bien monté en lecture/écriture en saisissant la commande mount sans option. Vous devriez voir un rw (pour read-write soit lecture-écriture) dans la ligne hda7.
Maintenant, on crée les répertoires de travail (l’option -p permet de créer les répertoires parents s’ils n’existaient pas) :
mkdir -p /media/hda7/master mkdir -p /media/hda7/source/KNOPPIX
Puis on copie les fichiers nécessaires qui seront présent sur le CD (sans le(s) fichier(s) système(s)) :
rsync -av /cdrom/boot /media/hda7/master rsync -av --exclude='KNOPPIX/KNOPPIX' --exclude='KNOPPIX/KNOPPIX2' /cdrom/KNOPPIX /media/hda7/master
L’exclusion du fichier KNOPPIX2 n’est nécessaire que si vous démarrez sur le DVD de Knoppix.
Récupération des paquets de Knoppix
La liste des paquets personnalisés pour Knoppix est assez facile à récupérer : il suffit de rechercher dans la liste des paquets installés ceux contenant le mot knoppix ce qui donne la commande suivante :
dpkg -l | grep "knoppix"
Attention toutefois, certains de ces paquets ne concernent que l’environnement graphique KDE. Comme pour Evinux, XFce a été retenu, il ne sert à rien de les conserver.
Il reste toutefois quelques paquets supplémentaires à récupérer pour le bon fonctionnement : ce sont les modules. Pour eux, il faudra faire une recherche sur le terme module et sur le numéro de version du noyau de Knoppix (pour la version 5.1.1 il s’agit de 2.6.19)
Il va maintenant falloir recréer tous ces paquets pour pouvoir les installer par la suite dans la nouvelle installation de Debian. Pour cela, il suffit d’utiliser la commande dpkg-repack pour chacun de ces paquets. Comme il peut être fastidieux de faire manuellement tout cela, n’hésitez pas à faire un petit script. Voici celui que j’ai utilisé pour Evinux 200701 :
#!/bin/bash #script /media/hda7/knoppix_pkg.sh #Liste des paquets KNOPPIX propre a la version 5.1.1 KNOPPIX_PACKAGES="\ linux-image-2.6.19 \ aufs-cvs-modules-2.6.19 \ aufs-cvs-utils \ cloop-module-2.6.19 \ loop-aes-modules-2.6.19 \ madwifi-modules-2.6.19 \ ndiswrapper-modules-2.6.19 \ ndiswrapper-utils \ rt2x00-modules-2.6.19 \ mkbootdev \ ntfs-3g \ 0wn" #Liste des paquets KNOPPIX pour detection du materiel KNOPPIX_PACKAGES="${KNOPPIX_PACKAGES} hwsetup hwdata-knoppix linux-kernel-headers-knoppix \ knoppix-udev-config knoppix-initscripts" #Liste des paquets KNOPPIX pour lancement et configuration interface graphique KNOPPIX_PACKAGES="${KNOPPIX_PACKAGES} knoppix-graphics mkdesktophdicons-knoppix ddcxinfo-knoppix\ xorgconfig-knoppix xsession-initscript-knoppix xsession-knoppix" #Liste des paquets KNOPPIX pour utilitaire divers KNOPPIX_PACKAGES="${KNOPPIX_PACKAGES} ash-knoppix-26 knoppix-remountrw knoppix-setrootpassword \ startsyslog-knoppix sudoers-knoppix scanpartitions-knoppix rebuildfstab-knoppix \ network-setup-knoppix usleep-knoppix netcardconfig-knoppix kudzu-knoppix-dev \ automount-knoppix knoppix-image knoppix-ndiswrapper mkdosswapfile-knoppix \ saveconfig-knoppix wlcardconfig-knoppix knoppix-installer ntfsprogs-knoppix \ mount-ntfs-knoppix libntfs-knoppix-dev libntfs9-knoppix" for PACKAGE in ${KNOPPIX_PACKAGES}; { dpkg-repack ${PACKAGE} };
Enregistrez ce script sur /media/hda7 dans un fichier que vous pouvez appeler knoppix_pkg.sh. Pour recréer les paquets, faites ensuite :
mkdir /media/hda7/PaquetsKNOPPIX
cd /media/hda7/PaquetsKNOPPIX
sudo sh /media/hda7/knoppix_pkg.sh
Vous récupérerez ainsi tous les paquets dans le répertoire /media/hda7/PaquetsKNOPPIX. Ne vous inquiétez pas si vous voyez quelques messages d’erreur : ils concernent l’absence de certains fichiers sans importance pour le fonctionnement ultérieur des scripts de Knoppix.
Tout est ainsi prêt pour la suite.
Installation Debian
Debootstrap
Pour installer Debian dans le répertoire source/KNOPPIX, nous ne partons pas des CD d’installation, mais nous utilisons l’outil debootstrap et s’inspirer de la procédure présente dans le manuel d’installation de Debian.
Evinux est basée sur Debian Etch et prévue pour une architecture i486 (par le noyau de Knoppix). De plus nous utilisons le miroir http://ftp2.fr.debian.org/debian.
L’installation dans le répertoire /media/hda7/source/KNOPPIX via debootstrap se fait avec la commande :
debootstrap --arch i386 etch /media/hda7/source/KNOPPIX http://ftp2.fr.debian.org/debian
Une fois cela fait, la base du système est présente pour pouvoir ajouter des paquets supplémentaires.
Chroot
Pour installer les paquets que nous désirons avoir dans Evinux, il faut changer temporairement la racine du système : sans cela, les paquets s’installeront sur le CD de Knoppix et non dans /media/hda7/source/KNOPPIX/. Ceci peut se faire grâce à la commande chroot.
Cependant, il sera nécessaire de pouvoir retrouver une connexion Internet dans ce “nouveau système”. Les fichiers /etc/resolv.conf et /etc/network/interfaces seront donc utiles. De plus au cours de l’installation, la configuration de certains paquets peut nécessiter une recherche des périphériques (dans /dev) et/ou des processus (dans /proc). Il faut donc penser à monter ces systèmes spécifiques.
mount -o bind /dev /media/hda7/source/KNOPPIX/dev mount -o bind /proc /media/hda7/source/KNOPPIX/proc cp -a /etc/resolv.conf /media/hda7/source/KNOPPIX/etc/ cp -a /etc/network/interfaces /media/hda7/source/KNOPPIX/etc/network/
Vous pouvez maintenant dire au terminal de considérer que la nouvelle racine est /media/hda7/source/KNOPPIX :
chroot /media/hda7/source/KNOPPIX /bin/bash
Installation des paquets désirés
Vous vous retrouvez donc maintenant dans le futur système. Pour installer les paquets désirés, il suffit d’utiliser apt-get ou aptitude.
apt-get install nom_paquet
Comme cela peut être fastidieux d’ajouter tous les paquets désirés, voici pour exemple le petit script utilisé pour Evinux 200701 :
#!/bin/bash #script /media/hda7/install_live_pkg.sh #Liste de paquets pour piloter imprimantes LIVECD_PACKAGES="cupsys cupsys-bsd cupsys-client \ cupsys-driver-gutenprint foomatic-filters foomatic-db-engine \ foomatic-db-gutenprint foomatic-db-hpijs hpijs cups-pdf" #Liste de paquets pour support materiel LIVECD_PACKAGES="${LIVECD_PACKAGES} hdparm gphoto2 sane-utils alsa-base \ alsa-oss alsa-utils hal udev pcmcia-cs pcmciautils \ wireless-tools wpasupplicant reiserfsprogs " #Liste de paquets pour client serveur courant LIVECD_PACKAGES="${LIVECD_PACKAGES} smbclient openssh-client ncftp ntpdate" #Liste de paquets pour bureau en francais LIVECD_PACKAGES="${LIVECD_PACKAGES} locales aspell-fr myspell-fr-gut ifrench-gut \ manpages-fr wfrench " #Liste de paquets pour outil en ligne de commande LIVECD_PACKAGES="${LIVECD_PACKAGES} mc fuse-utils grub dctrl-tools initramfs-tools bzip2" #Liste de paquets pour interface graphique LIVECD_PACKAGES="${LIVECD_PACKAGES} menu menu-xdg gksu xfce4 xfce4-mixer-alsa xfce4-mixer \ xfce4-terminal xfprint4 xorg gdm librsvg2-common" #Liste de paquets pour multimedia LIVECD_PACKAGES="${LIVECD_PACKAGES} audacious vlc vlc-plugin-alsa gthumb" #Liste de paquets pour internet/reseau LIVECD_PACKAGES="${LIVECD_PACKAGES} iceweasel iceweasel-l10n-fr icedove \ icedove-locale-fr gftp" #Liste de paquets pour bureautique LIVECD_PACKAGES="${LIVECD_PACKAGES} orage mousepad abiword abiword-plugins gnumeric \ gnumeric-plugins-extra grisbi sane xsane" #Liste de paquets pour se divertir LIVECD_PACKAGES="${LIVECD_PACKAGES} frozen-bubble monsterz gcompris-sound-fr gcompris gtetrinet" #Liste de paquets pour ... LIVECD_PACKAGES="${LIVECD_PACKAGES} evince xfce4-mailwatch-plugin xfce4-messenger-plugin \ xfce4-mount-plugin xfce4-netload-plugin xfce4-notes-plugin xfce4-quicklauncher-plugin \ xfce4-screenshooter-plugin xfce4-verve-plugin xfce4-wavelan-plugin xfce4-taskmanager \ synaptic thunar-archive-plugin xfce4-appfinder gparted debian-multimedia-keyring" # commande pour executer apt-get dans le chroot (une seule commande) chroot /usr/bin/env -i HOME="/root" TERM=${TERM} PS1='\u:\w\$ ' PATH="/bin:/usr/bin:/sbin:/usr/sbin" \ DEBIAN_FRONTEND="noninteractive" DEBIAN_PRIORITY="critical" \ /media/hda7/source/KNOPPIX apt-get install --yes --force-yes ${LIVECD_PACKAGES}
Vous noterez que de nombreux paramètres sont donnés à chroot. Ils servent à déterminer quelques variables d’environnement dans le système “chrooté” et en particulier :
- le répertoire personnel (HOME)
- le terminal par défaut (TERM)
- l’invite de terminal (PS1)
- le chemin pour rechercher les exécutables (PATH)
Deux autres variables, DEBIAN_FRONTEND et DEBIAN_PRIORITY, sont utilisés pour paramétrer les valeurs utiles à debconf (pour la configuration de certains paquets) afin d’éviter que ne soit posé trop de question au cours de l’installation des différents paquets.
Enfin l’on passe la commande apt-get en spécifiant de répondre oui à toutes les questions qui seraient posés : option —yes et —force-yes.
Vous pouvez également profiter d’être dans le chroot pour modifier la configuration de certains paquets…
Finalisation
Ajout des paquets de Knoppix
Maintenant que tous les paquets désirés sont installés, il ne reste plus qu’à installer les paquets spécifiques à Knoppix.
Dans un premier temps, il faut installer les dépendances de ces paquets :
chroot /usr/bin/env -i HOME="/root" TERM=${TERM} PS1='\u:\w\$ ' PATH="/bin:/usr/bin:/sbin:/usr/sbin" \
DEBIAN_FRONTEND="noninteractive" DEBIAN_PRIORITY="critical" \
/media/hda7/source/KNOPPIX "apt-get install --yes --force-yes \
gawk \
perl \
libdb4.4 \
perl-modules \
console-tools \
console-data \
console-common \
pciutils \
libpci2 \
udev \
libvolume-id0 \
pump \
dhcp3-common \
linux-sound-base \
binutils \
debhelper \
dpkg-dev \
file \
gettext \
html2text \
intltool-debian \
libmagic1 \
make \
patch \
nmap\
xloadimage \
libidn11 \
whois \
sudo \
libfuse2\
rsync \
xdialog \
alsa-utils \
hal \
loop-aes-utils \
aespipe\
rxvt-beta"
Ensuite on copie tous les paquets Knoppix préalablement récupérer dans /media/hda7/source/KNOPPIX/root :
cp -a /media/hda7/PaquetsKNOPPIX/ /media/hda7/source/KNOPPIX/root/
Avant d’installer les paquets spécifiques à Knoppix, il convient de nettoyer les répertoires /etc/rc*.d/ qui servent au démarrage du système. En effet en LiveCD, seul l’initscript de KNOPPIX est réellement nécessaire. Mais juste au cas où (pour une installation ultérieure à partir du livecd par exemple), il est préférable de conserver une sauvegarde de ces dossiers.
cd /media/hda7/source/KNOPPIX
tar czf root/rcd.tar.gz etc/rc*.d/*
rm -f etc/rc*.d/*
Et on peut ensuite les installer grâce à dpkg. Attention toutefois, il convient de commencer par l’installation du noyau donc on fait :
chroot /media/hda7/source/KNOPPIX/ /bin/bash dpkg -i /root/linux-image-2.6.19_2.6.19-10.00.Custom_i386.deb dpkg -i /root/*.deb
Enfin, en plus des paquets, j’ai remarqué qu’il était nécessaire d’avoir les dossiers media et mnt tels que présent dans ‘KNOPPIX’ :
cp -a /KNOPPIX/media /media/hda7/source/KNOPPIX/ cp -a /KNOPPIX/mnt /media/hda7/source/KNOPPIX/
Configuration finale
Vous pouvez maintenant appliquer la configuration finale :
- personnalisation des scripts de Knoppix
- ajout de l’utilisateur knoppix
- mise à jour de la base de localisation de fichier (updatedb)
- modifications des fichiers de configuration /etc/hosts, /etc/resolv.conf, /etc/network/interfaces
Personnalisation des scripts de Knoppix
Pour Evinux, les scripts suivant ont été modifiés :
- /etc/X11/Xsession.d/45xsession pour l’utilisation de XFce uniquement
- /etc/init.d/knoppix-autoconfig pour la configuration de langue d’environnement par défaut en UTF8
- /usr/sbin/knoppix-installer pour tenir compte de quelques spécificités d’Evinux et décompresser le fichier /root/rcd.tar.gz (cf. chapitre ci-dessus) pour que l’installation fonctionne
- /usr/sbin/rebuildfstab pour supprimer les uid et gid qui ne semble pas utile voir même pose des problèmes après installation
- /etc/udev/knoppix-post.rules pour éviter de créer une icône KDE sur le bureau à l’insertion de disque externe (XFce gère cela tout seul avec hal.
Les modifications faites sur ces fichiers peuvent être récupérées à partir du dépôt subversion d’Evinux hébergé par Tuxfamily.
Ajout de l’utilisateur knoppix
Pour que tout soit fonctionnel, il faut bien sûr créer l’utilisateur knoppix et l’ajouter aux différents groupes nécessaire à une utilisation simple. Pour cela saisissez successivement les commandes suivantes :
chroot /media/hda7/source/KNOPPIX /bin/bash
useradd -s /bin/bash knoppix
adduser knoppix dialout
adduser knoppix fax
adduser knoppix voice
adduser knoppix cdrom
adduser knoppix floppy
adduser knoppix tape
adduser knoppix sudo
adduser knoppix audio
adduser knoppix dip
adduser knoppix video
adduser knoppix games
adduser knoppix users
adduser knoppix scanner
adduser knoppix fuse
adduser knoppix plugdev
exit
Updatedb
Pour que updatedb fonctionne, il faut en plus du fait que /proc soit monté que mtab soit rempli. Il faut donc faire :
cat /media/hda7/source/KNOPPIX/proc/mounts > /media/hda7/source/KNOPPIX/etc/mtab chroot /usr/bin/env -i HOME="/root" TERM=${TERM} PS1='\u:\w\$ ' PATH="/bin:/usr/bin:/sbin:/usr/sbin" \ DEBIAN_FRONTEND="noninteractive" DEBIAN_PRIORITY="critical" \ /media/hda7/source/KNOPPIX updatedb rm -f /media/hda7/source/KNOPPIX/etc/mtab touch /media/hda7/source/KNOPPIX/etc/mtab
Modification des fichiers de configuration
Ici, le plus simple et le plus sûr est de récupérer ceux présent dans /KNOPPIX/ si vous avez bien démarré sur un LiveCD/DVD de Knoppix.
cp -a /KNOPPIX/etc/hosts /KNOPPIX/etc/resolv.conf /media/hda7/source/KNOPPIX/etc/ cp -a /KNOPPIX/etc/network/interfaces /media/hda7/source/KNOPPIX/etc/network/
Nettoyage
Avant de générer l’image disque, il convient de nettoyer le système de tous les fichiers inutiles comme, les archives des paquets installés, la liste des paquets disponible sur le dépôt, les éventuels mail système… Voici ci-après un script pour faire ce nettoyage. Vous pourrez le lancer avec la commande sudo sh /media/hda7/nettoyage.sh.
#!/bin/bash # script /media/hda7/nettoyage.sh # suppression des archives des paquets installés chroot /media/hda7/source/KNOPPIX "apt-get clean" # suppression des listes de paquets disponibles sur les différents dépôts rm -f /media/hda7/source/KNOPPIX/var/lib/apt/lists/*_Release rm -f /media/hda7/source/KNOPPIX/var/lib/apt/lists/*_Packages rm -f /media/hda7/source/KNOPPIX/var/lib/apt/lists/*_Sources # suppression des logs, mails, spool... find "/media/hda7/source/KNOPPIX/var/cache/" "/media/hda7/source/KNOPPIX/var/log/" \ -name \*\\.gz -o -name \*\\.bz2 -o -name \*\\.[0-9][0-9]? -exec rm -f {} \; find "/media/hda7/source/KNOPPIX/var/log/" "/media/hda7/source/KNOPPIX/var/mail/" \ "/media/hda7/source/KNOPPIX/var/spool/" -type f -size +0 -exec cp /dev/null '{}' \;
Le système est maintenant nettoyé.
Création de l’image disque
Compression du système
Pour compresser le système, il faut utiliser mkisofs et create_compressed_fs (un outil de cloop-utils) :
mkisofs \
-R \
-U \
-V "Evinux-200701" \
-publisher "Frederic AUPEPIN" \
-hide-rr-moved \
-cache-inodes \
-no-bak \
-pad /media/hda7/source/KNOPPIX | \
nice -5 /usr/bin/create_compressed_fs - 65536 > /media/hda7/master/KNOPPIX/KNOPPIX
Génération de l’image iso
Avant de générer l’image disque en tant que tel, il faut mettre à jour le fichier md5sums qui est utilisé lors d’un démarrage avec l’option knoppix testcd.
Cette mise à jour se fait ainsi :
cd /media/hda7/master/ rm -f KNOPPIX/md5sums find -type f -not -name md5sums -not -name boot.cat -exec md5sum {} \; >> /media/hda7/master/KNOPPIX/md5sums
Vous pouvez ensuite générer l’image disque qui pourra être gravée :
mkisofs \
-pad \
-l \
-r \
-J \
-v \
-V "Evinux-200701" \
-no-emul-boot \
-boot-load-size 4 \
-boot-info-table \
-b boot/isolinux/isolinux.bin \
-c boot/isolinux/boot.cat \
-hide-rr-moved \
-o /media/hda7/Evinux-200701.iso /media/hda7/master/
Et voilà comment est généré l’image disque d’Evinux avant d’être envoyé sur les serveurs pour que vous puissiez la récupérer.
Page mise à jour le 09 juillet 2007 à 22h12.