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 :

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 :

Mise en place de l’environnement de travail

La construction d’Evinux se fait dans deux dossiers principaux :

  1. Un premier dossier nommé master contient ce qui sera sur le CD.
  2. 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 :

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

Pour Evinux, les scripts suivant ont été modifiés :

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.


^ Haut de Page ^

RSS ~ Copyright 2004-2008 © Linucie - Asso. Loi 1901 - CNIL : 1045544 - Notre hébergeur : APINC.org
Publication sous Licence GNU/FDL propulsée par PmWiki - XHTML 1.0, CSS 2.1, WAI.