arpinux - devblog

journal d'un apprenti dev debian

construire une Debian - partie 4 : finalisation de l'image iso

rédigé par arpinux - - 1 commentaire

pour celles et ceux qui auraient raté le début, le sommaire est dans le premier article.

alors aujourd'hui, 4° et dernier épisode de la saga je me fait ma debian tout seul : finalisation de l'image iso avec la personnalisation de l'installeur, une petit mot sur les règles de diffusion d'une Dérivée Debian et un exemple d'utilisation en mode backup.

au programme de cet article :

  • dernière personnalisation de la distribution et construction de l'iso finale : la bannière de l'installeur, le menu de démarrage, les choix d'installation préconfigurés depuis un fichier preseed, script de post-installation personnalisé.
  • ligne de conduite pour les dérivées Debian : vous avez une dérivée Debian sur votre machine, prête à être distribuée, ne faites pas n'importe quoi.
  • distribution sur la toile ou utilisation en backup : annoncez votre distribution, partagez-la, ou utilisez-la comme système de sauvegarde ultime et portable.

depuis hier, vous avez un live-cd exploitable et personnalisé, il reste à peaufiner l'environnement de démarrage.

config/includes.binary/isolinux : modifier le menu de démarrage du live

le fond d'écran et le texte qui s'affichent au lancement du live (par défaut , c'est l'écran noir avec les infos de construction et le joli casque de chantier jaune) se configurent dans le dossier debian_perso/config/includes.binary/isolinux. vous pouvez laisser le texte si vous voulez, mais pour le fond d'écran ,il se nomme splash.png et doit faire 640x480 en png indexé. pour les fichers texte, il suffit de recopier et modifier les fichiers originaux. (pour trouver les fichiers originaux, il faut monter le dernier live-cd testé, puis direction le dossier isolinux à la racine de votre live-cd)

 20:29 arp > pwd
/home/arp/tmp/debian_perso/config/includes.binary/isolinux
 20:29 arp > tree
.
├── install.cfg
├── isolinux.cfg
├── live.cfg
├── menu.cfg
├── splash.png
└── stdmenu.cfg

petit détail des fichiers qui vont vous permettre de définir quelques options par défaut ...
le fichier install.cfg :

label installgui
	menu label ^Installer debian_perso sur votre ordinateur
	linux /install/gtk/vmlinuz
	initrd /install/gtk/initrd.gz
	append video=vesa:ywrap,mtrr vga=788 -- quiet file=/cdrom/install/preseed.cfg locale=fr_FR.UTF-8 keymap=fr

ici l'installeur graphique va démarrer en français avec un clavier fr directement. vous remarquez aussi l'appel au fichier preseed que nous détaillerons plus loin

le fichier live.cfg

label live
	menu label ^Lancer debian_perso sans risques
	linux /live/vmlinuz
	initrd /live/initrd.img
	append boot=live config quiet splash username=humain hostname=debian_perso keyboard-layouts=fr locales=fr_FR.UTF-8

ici; la session live se lancera en français, le nom de l'utilsateur sera "humain" et le nom d'hôte "debian_perso"

le fichier menu.cfg

menu hshift 0
menu width 82

menu title Tester ou Installer debian_perso
include stdmenu.cfg
include live.cfg
include install.cfg

menu clear

je vous laisse modifier les autres comme vous désirez si nécessaire... bah oui, pas de copier/coller .. faut bosser un peu bande de vilains !

config/includes.debian-installer/usr/share/graphics et themes : modifier le thème de l'installeur graphique

c'est dans ces dossiers que se trouvent les fichiers utilisés par l'installeur graphique. à modifier si vous voulez... le thème, c'est pas obligé, mais la bannière au moins, située dans config/includes.debian-installer/usr/share/graphics/logo_debian.png (une bannière en png de 800x75 pixels)

et à part le look du truc et la langue, on peut changer quoi alors ?? et bien il nous reste deux fichiers à explorer avant de finaliser l'iso.

config/debian_installer/preseed.cfg : la préconfiguration de l'installeur

ce fichier va vous permettre de supplanter les étapes de l'installeur Debian et ainsi accélérer le processus ou définir vos préférences. l'autre atout de ce fichier preseed est qu'il peut lancer un script de post-installation préalablement placé dans votre chroot lors du build, afin de procéder aux derniers ajustement avant le reboot et le premier démarrage du système installé.
un exemple commenté de fichier preseed :

############
## Global ##
############

# fr
d-i debian-installer/language string fr
#d-i debian-installer/country string FR
#d-i debian-installer/locale string fr_FR.UTF-8
#d-i keymap select fr

# suppression de la config réseau lors de l'installation
d-i netcfg/enable boolean false

# horloge matérielle sur UTC :
#d-i clock-setup/utc boolean true

# Vous pouvez mettre toute valeur acceptée pour $TZ.
# Voyez ce que contient /usr/share/zoneinfo/ pour les valeurs possibles.
#d-i time/zone string Europe/Paris

#########################
## gestion des comptes ##
#########################

# Ne pas créer de compte root (l'utilisateur ordinaire utilisera sudo).
d-i passwd/root-login boolean false

# Le compte sera ajouté à certains groupes.
d-i passwd/user-default-groups string audio cdrom video sudo netdev plugdev fuse users lp lpadmin

# apt - no mirror
d-i apt-setup/use_mirror boolean false

# tout dans une seule partition
d-i partman-auto/choose_recipe select atomic

#################################
## Commandes lors de l'install ##
#################################

# La préconfiguration de l'installation n'est pas sécurisée. Rien dans 
# l'installateur ne vérifie que des dépassements de tampons ou des
# exploitations quelconques des valeurs données dans ce fichier n'ont pas lieu.
# N'utilisez que les fichiers dont vous connaissez la provenance !
# Pour tout dire, et parce que c'est en général utile, voici un
# moyen d'exécuter automatiquement une commande dans l'installateur.

# La première commande est exécutée aussi tôt que possible, juste après
# la lecture du fichier.
#d-i preseed/early_command string anna-install some-udeb

# Cette commande est exécutée juste avant que le partitionneur ne commence. Il peut être
# utile de préconfigurer le partitionneur en fonction de l'état des disques
# (qui ne sont peut-être pas visibles quand preseed/early_command est exécutée).
#d-i partman/early_command \
#       string debconf-set partman-auto/disk "$(list-devices disk | head -n1)"

# Cette commande est exécutée juste avant que l'installation ne se termine,
# mais quand le répertoire /target est encore utilisable. Vous pouvez exécuter
# chroot /target et utiliser cet environnement directement ; ou bien vous
# pouvez utiliser les commandes apt-install et in-target pour installer des
# paquets et lancer des commandes dans le répertoire target.
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

# Grub
# Auto install grub if this is the only one system.
d-i grub-installer/only_debian boolean true

# suppression de la fenêtre de fin d'install
#d-i finish-install/reboot_in_progress note

# sources.list
d-i preseed/late_command string \
    in-target /usr/local/bin/debian_perso_preseed ;\
    in-target rm -f /usr/local/bin/debian_perso_preseed ;

vous trouverez aisément des exemples de fichiers preseed sur la toile.

à propos des 3 dernières lignes du script : l'option late_command permet de lancer un script ou un commande à la fin de l'installation, une fois les utilisateurs en place, juste avant le redémarrage. encore une façon de personnaliser votre environnement. sur handylinux, je place un script dans config/includes.chrotot/usr/local/bin/debian_perso_preseed afin de modifier le sources.list Debian, modifier grub et retirer les entrées usb du fichier /etc/fstab générées lors d'une installation depuis une clé usb.

le fichier en question :

#!/bin/bash

# set handylinux sources.list
mv -f /usr/share/handylinux/sources.list /etc/apt/sources.list

# ajouter un background à GRUB
echo "GRUB_BACKGROUND=\"/usr/share/images/grub/handylinux.tga\"" >> /etc/default/grub
update-grub

# This is a fugly hack for fixing fstab after installing
# CrunchBang using unetbootin. Basically, if using unetbootin,
# the USB device is identified as a cdrom drive and added to
# /etc/fstab as that. This script will find any such entries
# in fstab and disable them. It is looking for cdrom entries
# which reference devices under "/dev/sdX".

# a big thank you to corenominal, dev of CrunchbangLinux

FSTAB=/etc/fstab
if grep "^/dev/sd" ${FSTAB} | grep "/media/" | grep "auto"
then
    NEEDLE=`grep "^/dev/sd" ${FSTAB} | grep "/media/" | grep "auto"`
    if ! echo "${NEEDLE}" | grep "#/dev/sd"
    then
        CORK="#${NEEDLE}"
        rpl -q "${NEEDLE}" "${CORK}" ${FSTAB}
    fi
fi
exit 0

ce script est utilisé simplement ici, mais rien ne vous empêche d'installer des paquets, faire un update, ou toute autre opération d'administration. notez que cette phase est "masquée" à l'utilsateur et peut le perturber si elle dure trop longtemps car plus rien ne bouge à l'écran pendant l'exécution du script preseed.

et voilà, on a fait le tour des modifications simples de votre live-cd. vous avez pu constater que plusieurs outils et procédures mènent au même résultat, c'est donc à vous de choisir la meilleure selon votre situation. et donc non, c'est pas si simple dès lors qu'on modifie de plus en plus.

il ne vous reste plus qu'à retourner dans votre dossier de build, re-vérifier vos dernières modifications puis lancer la formule magique

sudo lb clean && sudo lb build

et hop.. vous avez votre dérivée Debian personnalisée prête à être distribuée. quelques mots à ce sujet...

distribuer votre live-cd : ligne de conduite pour les dérivées Debian

vous êtes fier de votre réalisation ? vous voulez la partager, en faire profiter les autres ? cool ! vous pouvez faire héberger votre iso sur des sites dédiés aux projets open-source comme sourceforge.net, ou prendre un serveur mutualisé ou dédié afin de monter votre site pour votre OS avec forum, doc et blog associés. une petite chose toutefois : vous venez de construire une dérivée Debian. ce n'est pas n'importe quoi, vous utilisez le travail de toute une communauté, alors une petite ligne sérieuse :

Debian est une distribution GNU/Linux, mais pas que... Debian, c'est aussi une ligne de conduite, une charte, et certaines recommandations quand à la distribution de dérivée. cette ligne de conduite est précisée dans les Debian Derivatives Guidelines (en anglais). je vous conseille vivement de consulter ce document afin de respecter un maximum la distribution grâce à laquelle vous avez pu construire la votre. merci beaucoup.

live-build comme système de sauvegarde

live-build peut être utilisé comme système de sauvegarde afin de pouvoir effectuer une réinstallation rapide de votre environnement personnel : pour ceci, il suffit de récupérer la liste de vos paquets pour les coller dans le live, et de prendre votre /home pour le coller dans le /etc/skel du live. l'avantage est que votre système pourra s'installer facilement sur un autre ordianteur. l'inconvénient est qu'il faut effectuer une sauvegarde externe de vos données si il y en a trop (vidéos/images/docs/zik).

comment on fait le truc du live + données ?

alors on récupère la liste des paquets actuellement installés sur son système grâce à dpkg

dpkg --list | grep "ii" | awk '{print $2}' > debian_perso/config/package-lists/my_system.list.chroot

prenez soin de vérifier la liste complète pour éliminer les éventuels paquets externes que vous auriez compilé (et non présent dans les dépôts utilisés) . de toute façon, si un paquet listé n'est pas dispo, le log du live-build vous le dira.

pour la sauvagarde de votre /home, ne copiez que les données de configuration (le reste prend trop de place) dans le live-cd (debian_perso/config/includes.chroot/etc/skel). puis sauvegardez vos données régulilèrement sur un disque dur externe. en cas de plantage ou de ré-installation sur un nouvel ordinateur, il vous suffira de lancer votre live-cd en mode installation, puis de rapatirer vos données une fois l'installation terminée. vous retrouverz votre environnement, à jour, tout neuf... pratique hein ?!

conclusion et derniers conseils

log  log log ... c'est le maître-mot de ce processus de construction. pourquoi ? parce que vous aurez de la chance si tout se passe bien du premier coup !  mon conseil ? lisez les logs debian_perso/build.log .

euh ... c'est ça tes conseils ?

oui... et que si tu veux des exemples , vas jeter un œil sur mes sources =>

et la conclusion ?

log log log ... et ... le fork ceymal !

@+

arp

1 commentaire

#1 Xala a dit :

Cette Saga est tout simplement géniale. Je l'ai lu une première fois et je vais la lire et relire jusqu'à obtenir le résultat souhaité. Ces articles vont m'être d'une grande aide pour me permettre d'installer de façon simple et rapide mon environnement de travail sur un nouveau poste.
En effet, j'utilise Debian avec dwm depuis quelques années déjà et c'est dommage de perdre du temps à tout reconfig à la mano ou avec l'aide de backups.

Encore une fois, merci arpinux !

lâche toi

Quelle est la première lettre du mot dmaxc ? :