Modifications entre les versions 1 et 2
Version 1 à la date du 2012-01-17 15:37:57
Taille: 12893
Éditeur: FranckKouyami
Commentaire:
Version 2 à la date du 2012-01-17 18:40:21
Taille: 12898
Éditeur: FranckKouyami
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 170: Ligne 170:
==== Enlever les utilisateurs non système ==== Enlever les utilisateurs non système ====

Faire un LiveCD personnalisé

Généralités

  • Un cd ou un dvd est une média en lecture seule. Linux a besoin d'avoir des droits en écriture sur certaines parties du système pour fonctionner correctement (/var, /tmp, /dev, /proc). Il y a beaucoup de façons de résoudre ce problème et toutes utilisent la mémoire ram. Certaines de ces méthodes n'autorisent qu'un accès très limité à certains emplacements essentiels et de ce fait, ne permettent pas à l'utilisateur de modifier en profondeur l'installation ou d'installer de nouveau paquet. D'autres méthodes comme aufs2 qui est utilisées dans ce tutoriel, accorde des droits étendus en écriture à l'utilisateur sur le système. ceci est réalisé en combinant la RAm avec le le système de fichier en lecture seul du CD/DVD live pour le faire passer pour un seul système de fichier avec des accès en lecture/ecriture. Aufs2 doit être monté au démarrage.
  • Avec l'installation sur le disque dur, l'emplacement du du système de fichier racine est fixée. Soit il est indiqué au noyeau au démarrage avec le paramêtre " root=/dev/...". Avec un liveCD∕DVD, l'emplacement de la racine n'est pas précisée car la machine peut avoir plusieurs lecteur CD/DVD qui peuvent respecter plusieurs types (scsi, sas , sata, ide ..). Donc pour que le système de fichier racine soit monté, il doit exister un moyen de l'identifier et de charger les modules correspondants et ce même avant de connaître le contenu de la partition racine
  • Pour pouvoir être gravé sur un cdrom, le système de fichier doit être compressé au format squashfs. Nous avons besoin donc de le détecter et de disposer des bons modules pour le monter et l'utiliser.

Linux propose une approche de solution pour résoudre cette problématique : "initial root filesystem or initramfs" (système racine primaire). Il est également utilisé dans les installations sur disques durs et ajoute de la flexibilité aux processus de démarrage. initramfs est un system de ficher virtuel. Il est compressé grace à CPIO (qui est un format d'archive similaire à tar) et contient un shell minimal et les modules noyeau nécessaires ua montage des fichiers racine et un certains nombres de scripts pour les processus pendant le démarrage. Le plus important de ces scripts est init à la racine de l'initramfs.

Fonctionnement

Le boot loader charge le noyeau et l'initramfs en mémoire et démarre le noyeau. Le noyeau décompresse l'initramfs et le monte comme système de fichiers racine primordial et cherche le script init dans le systeme de fichier qu'il vient de monter. S'il le trouve, il l'excécute et le passe la main pour continuer le démarrage. L'init s'occupe ensuite de trouver le vrai système de fichier et le monte. Toute autre opération nécessaire au démarrage du systeme via les média de type liveCD eput (et doit même) être intégrée dans les scripts présents dans l'initramfs.

Comment crée t-on l'initramfs

Bien que cela soit possible de le faire manuellement, cela n'est pas conseillé. Il existe des outils pour céer et mettre à jour un initramfs comme la commande update-initramfs. Mieux, ces outils permettent d'inclure des scripts personnalisés dans l'initramfs en les placant simplement dans les certains répertoires (/usr/share/initramfs/scripts).

Il n'y même pas besoin d'écrire ces scripts car il existe des paquets débian qui proposent des scripts dédiés au démarrages de liveCD/DVD comme par exemple caper. L'installation de casper dépose les scripts de casper sur les bons répertoires pour qu'ils soient pris en compte lors de la contruction de l'initramfs.

Arborescence d'un liveCD

(CD ROOT)
|-------+casper
|       |-------filesystem.${FORMAT}    
|       |-------filesystem.manifest
|       |-------filesystem.manifest-desktop
|       |-------vmlinuz
|       |-------initrd.img
|
|-------+boot
|       |--------+grub
|       |        |--------grub.cfg
|       |
|       |-------memtest86+
|
|--------md5sum.txt
  • /casper/filesystem.${FORMAT}: Ceci est le contenaire de systeme de fichier qui sera copier sur le disque dur de la machine. Il est compressé en au format squashfs
  • /casper/filesystem.manifest: Optionnel. Il n'est utile que si Ubuntu Installer est inclut dans le CD.
  • /casper/filesystem.manifest-desktop: Idem
  • /casper/vmlinuz: Le noyeau linux. Il est copier à partir de noyeau de l'instalation local
  • /casper/initrd.img: L'initramfs qui contient les personnalisations nécessaires au live CD/DVD.
  • /boot/grub/grub.cfg: Fichier contenant les options de démarrage grub
  • /boot/memtest86+: Fichier optionnel utilisé pour tester la RAM de la machine en mode live
  • /md5sum.txt: Fichier optionnel contennant le MD5 checksums pour tous les fichiers du CD

Réalisation d'un liveCD personnalisé

Méthode simple :remastersys

sudo echo "deb http://www.remastersys.com/repository lucid/" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install remastersys -y
man remastersys # voir les options disponibles
  • Faire toutes les personnalisations requises. Installer tous les programmes et mettre toutes les données/configuration à conserver sur le liveCD.
  • Enlever tous ce qui n'est pas utile

sudo apt-get clean
sudo remastersys backup ubuntu_test.iso
sudo mv /home/remastersys/remastersys/ubuntu_test.iso ./
  • Récupérer l'iso et tester
  • Pensez à l'option "dist" qui permet de ne pas sauvegarder les données des utilisateurs

Méthode compliquée

Fixer le variable système

export WORK=~/work
export CD=~/cd
export FORMAT=squashfs
export FS_DIR=casper
  • Le répertoire work est l'emplacement des fichier temporaire et l'endroit où nous monteron le système de fichier
  • Le répertoire CD contient l'arborescence du CD
  • FORMAT est le type de système de fichier à utiliser
  • FS_DIR est l'emplacement de l'image de l'actuelle système de fichier dans l'arborescence du CD

Création des répertoires

sudo mkdir -p ${CD}/{${FS_DIR},boot/grub} ${WORK}/rootfs

Installation des paquets nécessaires

sudo apt-get update && sudo apt-get install grub2 xorriso squashfs-tools qemu

quemu est optionnel. Il permet juste de tester le cd live. On peu aussi utiliser virtualbox

Copier des données

sudo rsync -av --one-file-system --exclude=/proc/* --exclude=/dev/* \
--exclude=/sys/* --exclude=/tmp/* --exclude=/home/* --exclude=/lost+found \
--exclude=/var/tmp/* --exclude=/boot/grub/* --exclude=/root/* \
--exclude=/var/mail/* --exclude=/var/spool/* --exclude=/media/* \
--exclude=/etc/fstab --exclude=/etc/mtab --exclude=/etc/hosts \
--exclude=/etc/timezone --exclude=/etc/shadow* --exclude=/etc/gshadow* \
--exclude=/etc/X11/xorg.conf* --exclude=/etc/gdm/custom.conf \
--exclude=/etc/lightdm/lightdm.conf --exclude=${WORK}/rootfs / ${WORK}/rootfs

On peut également utiliser cp, mais rsync offre la possibilité directement d'exclure des emplacement et de limiter la copier une seule partition

Si le /boot est sur une autre partition, il faudra la copier avec :

sudo cp -av /boot/* ${WORK}/rootfs/boot

Personnalisation

Il est possible de retrouver dès le démarrage un environnement personnalisé avec le cd live en les mettant dans le "${WORK}/rootfs/etc/skel" . Par example pour concerver les configurations de l'environnement kde c'est :

sudo cp -rpv --parents ~/.kde ${WORK}/rootfs/etc/skel

Faire un chroot dans le nouveau système

sudo mount  --bind /dev/ ${WORK}/rootfs/dev
sudo mount -t proc proc ${WORK}/rootfs/proc
sudo mount -t sysfs sysfs ${WORK}/rootfs/sys
sudo chroot ${WORK}/rootfs /bin/bash

Maintenant vous êtes dans un chroot

LANG=

Quelques réglages

apt-get update

Si vous utilisez gnome

apt-get install ubiquity ubiquity-frontend-gtk

Si vous utilisez kde

apt-get install ubiquity ubiquity-frontend-kde

Ensuite installer tous les programmes qui doivent de trouver par défaut sur le liveCD/DVD

sudo apt-get install vim most gparted vlc

Nettoyer le cache de paquets

sudo apt-get clean

Mettre à jour initramfs

mettre à jour modules.dep

depmod -a $(uname -r) && update-initramfs -u -k $(uname -r)

Initramfs est chargé de préparer l'environnement nécessaire au démarrage sur le CD/DVD. le mettre à jour lui permet de disposer des scripts live installer avec casper

Enlever les utilisateurs non système

Les utilisateurs nons système sont ceux avec des uid => 1000. Un utilisateur avec l'uid 999 est supprimé car nous le réservons pour l'utilisateur liveCD

for i in `cat /etc/passwd | awk -F":" '{print $1}'`;
do;
        uid=`cat /etc/passwd | grep "^${i}:" | awk -F":" '{print $3}'`;
        [ "$uid" -gt "998" -a  "$uid" -ne "65534"  ] && userdel --force ${i} 2>/dev/null;
done;

Nettoyage du système

Nettoyage des logs

find /var/log -regex '.*?[0-9].*?' -exec rm -v {} \;

Les fichiers logs restant sont mis à zéro même su le système se plaint de leur suppression

find /var/log -type f | while read file
do
        cat /dev/null | tee $file
done

rm /etc/resolv.conf /etc/hostname;
exit;

Préparer l'arborescence du CD

Copier le kernel et l'initramfs mis à jour et le memtest dans le chroot

export kversion=`cd ${WORK}/rootfs/boot && ls -1 vmlinuz-* | tail -1 | sed 's@vmlinuz-@@'`
sudo cp -vp ${WORK}/rootfs/boot/vmlinuz-${kversion} ${CD}/${FS_DIR}/vmlinuz
sudo cp -vp ${WORK}/rootfs/boot/initrd.img-${kversion} ${CD}/${FS_DIR}/initrd.img
sudo cp -vp ${WORK}/rootfs/boot/memtest86+.bin ${CD}/boot

Générer le manifest

Uniquement utile si on installe l'installer Ubiquity. Cela génère 2 fichiers (filesystem.manifest & filesystem.manifest-desktop).

sudo chroot ${WORK}/rootfs dpkg-query -W --showformat='${Package} ${Version}\n' | sudo tee ${CD}/${FS_DIR}/filesystem.manifest
sudo cp -v ${CD}/${FS_DIR}/filesystem.manifest{,-desktop}

REMOVE='ubiquity casper user-setup os-prober libdebian-installer4'

for i in $REMOVE ;
do
        sudo sed -i "/${i}/d" ${CD}/${FS_DIR}/filesystem.manifest-desktop;
done;

Ces 2 fichiers sont utilisés par l'installateur ubiquity lors de l'installation sur le disque. Ils ne sont que des listes de paquets. Ubiquity compare ces 2 fichiers et supprime les paquets spécifiques filesystem.manifest. Ainsi lors de l'installation, les paquets comme casper qui ne sont utiles que dans une cession live sont supprimés. Les paquets à supprimer lors de l'instalation sont définis dans la variable $REMOVE.

Démonter les répertoires

sudo umount ${WORK}/rootfs/proc
sudo umount ${WORK}/rootfs/sys
sudo umount ${WORK}/rootfs/dev

Covertir le répertoire en saquashfs

sudo mksquashfs ${WORK}/rootfs ${CD}/${FS_DIR}/filesystem.${FORMAT} -noappend

Il est important de vérifier que la taille finale peut être contenu dans un CD/DVD

Faire filesystem.size

echo -n $(sudo du -s --block-size=1 ${WORK}/rootfs | tail -1 | awk '{print $1}') | sudo tee ${CD}/${FS_DIR}/filesystem.size

Calculer le MD5

find ${CD} -type f -print0 | xargs -0 md5sum | sed "s@${CD}@.@" | grep -v md5sum.txt | sudo tee -a ${CD}/md5sum.txt

Faire de Grub le bootloader sur le cd

sudo vi ${CD}/boot/grub/grub.cfg

Et y copier le texte suivant

set default="0"
set timeout=10

menuentry "Ubuntu GUI" {
linux /casper/vmlinuz boot=casper quiet splash
initrd /casper/initrd.img
}

menuentry "Ubuntu in safe mode" {
linux /casper/vmlinuz boot=casper xforcevesa quiet splash
initrd /casper/initrd.img
}

menuentry "Ubuntu CLI" {
linux /casper/vmlinuz boot=casper textonly quiet splash
initrd /casper/initrd.img
}

menuentry "Ubuntu GUI persistent mode" {
linux /casper/vmlinuz boot=casper persistent quiet splash
initrd /casper/initrd.img
}

menuentry "Ubuntu GUI from RAM" {
linux /casper/vmlinuz boot=casper toram quiet splash
initrd /casper/initrd.img
}

menuentry "Check Disk for Defects" {
linux /casper/vmlinuz boot=casper integrity-check quiet splash
initrd /casper/initrd.img
}

menuentry "Memory Test" {
linux16 /boot/memtest86+.bin
}

menuentry "Boot from the first hard disk" {
set root=(hd0)
chainloader +1
}

Construire le CD/DVD

sudo grub-mkrescue -o ~/live-cd.iso ${CD}

Eventuellement le tester avec

qemu -cdrom ~/live-cd.iso -boot d

Et nettoyer l'espace de travail

[ -d "$WORK" ] && rm -r $WORK $CD

Tester

ZAO/Réunions/201201/custom_livecd (dernière édition le 2012-01-17 18:40:21 par FranckKouyami)