Debian live personnalisée - Configuration avancée

Mise à jour : Debian 9.8

La configuration avancée décrite dans ce document fait suite au document Debian live personnalisée - Configuration par défaut.

S'y reporter pour

Références :

Sommaire

1 - Principe

config/binary
config/bootstrap
config/common
config/chroot
$ sudo lb clean

2 - Configuration

2.1 - Utilisation du script auto/config

$ cat auto/config
#!/bin/sh

set -e

lb config noauto \
"${@}"

Exemple : debian stretch

$ cat auto/config
#!/bin/sh

set -e

lb config noauto \
--mode "debian" \
--system "live" \
--architectures "amd64" \
--distribution "stretch" \
--apt "aptitude" \
--archive-areas "main contrib non-free" \
--apt-source-archives "false" \
--security "true" \
--updates "true" \
--backports "true" \
--firmware-binary "true" \
--firmware-chroot "true" \
--bootloaders "grub-efi" \
--bootappend-live "boot=live components persistence sudo locales=fr_FR.UTF-8 \
keyboard-layouts=fr timezone=Europe/Paris username=live quiet" \
--binary-images "iso-hybrid" \
--debian-installer "true" \
--debian-installer-gui "false" \
--memtest "none" \
--verbose \
"${@}"

Exemple : debian buster

$ cat auto/config
#!/bin/sh

set -e

lb config noauto \
--distribution "buster" \
"${@}"

En cas de doute, voir le manuel de lb config (man lb_config) pour la signification des options. A noter

Parmi ces paramètres,

persistence et persistence-encryption=luks

indiquent au système d'utiliser une partition de persistence. La clé devra avoir été préparée en conséquences : voir Debian live avec persistance. et cryptsetup devra être installée sur le système live.

$ lb config
[2017-08-23 17:57:20] lb config
P: Executing auto/config script.
[2017-08-23 17:57:20] lb config noauto --mode debian --system live --architectures amd64 --distribution stretch --apt aptitude --archive-areas main contrib non-free --mirror-bootstrap https://deb.debian.org/debian/ --mirror-binary https://deb.debian.org/debian/ --source false --security true --updates true --backports true --bootloader syslinux --bootappend-live boot=live components persistence locales=fr_FR.UTF-8 keyboard-layouts=fr quiet splash --binary-images iso-hybrid --debian-installer false --debian-installer-gui false --memtest none --iso-application Debian_Live_Perso --verbose
P: Creating config tree for a debian/stretch/amd64 system
P: Symlinking hooks...

Note : il est également possible de passer directement les paramètres dans la ligne de commande de lb config.

$ lb config \
--archive-areas "main contrib non-free" \
--bootappend-live "boot=live \
components persistence \
locales=fr_FR.UTF-8 \
keyboard-layouts=fr quiet"

Attention : La commande lb config ne modifie que les paramètres présents dans le script (ou dans la ligne de commande). Elle ne réinitialise pas les paramètres absents à leur valeur par défaut. Utiliser lb clean pour cet usage.

2.2 - Modification manuelle

Certains paramètres ne peuvent pas être modifiés par le script auto/config, c'est le cas par exemple du nom du fichier iso qui est défini dans le fichier config/build, paramètres Name et Type. Remplacer Name (par défaut Debian-live), par le nom souhaité, par exemple Debian-live-perso. Le nom complet du fichier sera Debian-live-perso-amd64.iso-hybrid.iso dans le cas d'une architecture amd64-X86.

$ cat config/build 
[Image]
Architecture: amd64
Archive-Areas: main contrib non-free
Distribution: stretch
Mirror-Bootstrap: http://ftp.debian.org/debian/

[FIXME]
Configuration-Version: 1:20170213
Name: Debian-live-perso
Type: iso-hybrid

4 - Nouvelle configuration

1 - lb clean

Si l'on souhaite changer une configuration après avoir déjà construit une image, sans repartir de zéro, utiliser la commande lb clean

$ sudo lb clean

2 - Changement de distribution

$ sudo lb clean
$ sudo rm -r config cache
$ cat auto/config
#!/bin/sh

set -e

lb config noauto \
--mode "debian" \
--system "live" \
--architectures "amd64" \
--distribution "buster" \
--parent-distribution "buster" \
--parent-debian-installer-distrbution "buster" \
--apt "aptitude" \
--archive-areas "main contrib non-free" \
--apt-source-archives "false" \
--security "true" \
--updates "true" \
--backports "true" \
--firmware-binary "true" \
--firmware-chroot "true" \"
--binary-images "iso-hybrid \
--bootloaders "syslinux,grub-efi" \
--bootappend-live "boot=live locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris username=live quiet" \
--debian-installer "true" \
--debian-installer-gui "false" \
--memtest "none" \
--uefi-secure-boot "auto"
--verbose \
"${@}"
$ lb config
[2020-08-31 23:50:05] lb config
P: Executing auto/config script.
[2020-08-31 23:50:05] lb config noauto --mode debian --system live --architectures amd64 --distribution buster --parent-distribution buster --parent-debian-installer-distribution buster --apt aptitude --archive-areas main contrib non-free --apt-source-archives true --security true --updates true --backports true --firmware-binary true --firmware-chroot true --binary-images iso-hybrid --bootloaders syslinux,grub-efi --bootappend-live locales=fr_FR.UTF-8 keyboard-layouts=fr timezone=Europe/Paris username=live quiet --debian-installer true --debian-installer-gui false --memtest none --uefi-secure-boot auto --verbose
P: Creating config tree for a debian/buster/amd64 system
P: Symlinking hooks...
$ sudo lb build
$ grep W: build.log

$ cat build.log |grep -i uefi
P: UEFI Secure Boot support enabled.

$ ls -l |grep *.iso
-rw-r--r-- 1 root root 650117120 sept. 1 00:05 live-image-amd64.hybrid.iso
-rw-r--r-- 1 root root 2222306 sept. 1 00:05 live-image-amd64.hybrid.iso.zsync

3 - Sélection des paquets

3.1 - Installation à partir des dépôts

Pour ajouter des paquets disponibles dans les dépôts, créer dans le Répertoire config/package-lists, un ou plusieurs fichiers contenant les noms des paquets à inclure. Les noms des fichiers sont libres, leur extension doit être .list.chroot.

Pour utiliser une partition persistante chiffrée, ajouter le paquet cryptsetup

$ cat >> config/package-lists/console.list.chroot  << EOF      # Attention exécuter la commande avec les droits utilisateurs
console-setup task-french task-laptop aptitude links2 pciutils hwinfo lshw
command-not-found bash-completion sysfsutils fbset lsscsi
upower rsync rfkill cryptsetup
EOF
$ cat >> config/package-lists/xfce4.list.chroot << EOF
xorg xserver-xorg-video-all xserver-xorg-input-all xdg-utils lightdm
xfce4 xfce4-terminal atril wicd-gtk
firefox-esr geany clonezilla gparted lshw-gtk seahorse keepassx owncloud-client
gvfs-bin gvfs-backends gvfs-fuse
EOF

3.2 - Sélection des dépôts

La liste des dépôts a été établie dans les paramètres de la configuration. Si nécessaire, spécifier le "pinning" dans des fichiers installés dans Répertoire config/archives/ . Les noms des fichiers sont libres, leur extension doit être .pref.chroot.

Exemple : Installation du noyau et de firmwares à partir des dépôts backports. Attention, l'installation ne doit pas provoquer de problèmes de dépendances, tous les paquets à installer depuis les dépôts backports devront être listés.

$ cat >> config/archives/backports.pref.chroot << EOF
Package: firmware-iwlwifi
Pin: release a=stretch-backports
Pin-Priority: 600

Package: firmware-misc-nonfree
Pin: release a=stretch-backports
Pin-Priority: 600

Package: firmware-amd-graphics
Pin: release a=stretch-backports
Pin-Priority: 600

Package: firmware-linux-nonfree
Pin: release a=stretch-backports
Pin-Priority: 600

Package: firmware-linux
Pin: release a=stretch-backports
Pin-Priority: 600

Package: linux-image-amd64
Pin: release a=stretch-backports
Pin-Priority: 600

Package: intel-microcode
Pin: release a=stretch-backports
Pin-Priority: 600

EOF

3.3 - Installation à partir de binaires .deb

Pour faire prendre en compte des paquets binaire (.deb), les inclure dans le répertoire config/packages.chroot. Ce peuvent être, des paquets propriétaires si l'on a fait le choix d'installer un système à partir des seuls dépôts libres.

Attention :

Exemple : Rajout du paquet cryptomator absent des dépôts :

$ cd config/packages.chroot
$ wget https://bintray.com/cryptomator/cryptomator-deb/download_file?file_path=cryptomator-1.3.1-amd64.deb -O cryptomator-1.3.1_amdi64.deb

Les dépendances du paquet cryptomator ont été ajoutées dans la liste des paquets bureau : gvfs-bin, gvfs-backends, gvfs-fuse

4 - Ajout de fichiers

4.1 - Ajout à la racine de l'iso / CD

Les fichiers inclus dans config/includes.binary seront placés à la racine de l'iso et seront accessibles sans que le système soit lancé, dès que la clé usb sera connectée. Nota : ils ne feront pas partie du système live (squashfs).

4.2 - Ajout dans le système de fichier linux

Pour rajouter des fichiers dans l'arborescence du système live, créer l'architecture nécessaire dans le répertoire includes.chroot, puis y copier les fichiers.

Il ne semble pas possible de remplacer un fichier système existant. Par exemple pour ajouter un fichier de configuration d'interface, ne pas chercher à remplacer /etc/network/interfaces, mais l'ajouter dans /etc/network/interfaces.d :

$ mkdir -p config/includes.chroot/etc/network/interfaces.d
$ cat >> config/includes.chroot/etc/network/interfaces.d/wifi << EOF

# Connexion wifi pour une interface de nom wlp3s0 au réseau "pengouin"
allow-hotplug wlp3s0
iface wlp3s0 inet dhcp

# wpa-ssid pengouin
#psk="xxxxxxxxxxxxxxxxxxxxxxxxxx"
wpa-psk 11d5619c28057a4ab0e5a0779325e101be73fc4859a20cc7e238105fa2a40772

EOF

5 - Scripts

5.1 - Scripts exécutés à l'étape du chroot

Rajouter les scripts à exécuter à l'issue de la construction du système live, avant la compression en squashfs, dans le répertoire config/hooks/normal (ou config/hooks/live). Les fichiers doivent avoir un nom débutant par un numéro d'ordre à 4 chiffres et leur extension est .hook.chroot.

Note 1 : à cette étape, dans le chroot, le système de fichier du système linux live est accessible directement : par exemple le fichier sources.list de apt se situe en /etc/apt/sources.list

Note 2 : il est tout à fait possible d'installer de nouveaux paquets à cette étape, bien que cela paraisse impossible d'après la documentation ....

$ cat >> config/hooks/normal/0500-backports.chroot << EOF
#!/bin/sh

set -e

echo "deb http://deb.debian.org/debian stretch-backports main" >/etc/apt/sources.list.d/backports.list
apt update
apt install aptitude -y --force-yes
aptitude install -t stretch-backports linux-image-amd64 -y
rm /etc/apt/sources.list.d/backports.list

EOF
$ chmod +x config/hooks/normal/0500-backports.chroot

5.2 - Scripts exécutés au démarrage du système live

Ces scripts sont à placer dans le répertoire config/includes.chroot/lib/live/config/ (non testé à ce jour)ls *.iso

Annexe - Liste des options de lb config

         [--apt apt|aptitude]
[--apt-ftp-proxy URL]
[--apt-http-proxy URL]
[--apt-indices true|false]
[--apt-options OPTION|"OPTIONS"]
[--aptitude-options OPTION|"OPTIONS"]
[--apt-pipeline PROFONDEUR]
[--apt-recommends true|false]
[--apt-secure true|false]
[--apt-source-archives true|false]
[-a|--architectures ARCHITECTURE]
[-b|--binary-images iso|iso-hybrid|netboot|tar|hdd]
[--binary-filesystem fat16|fat32|ext2|ext3|ext4]
[--bootappend-install PARAMÈTRES|"PARAMÈTRES"]
[--bootappend-live PARAMÈTRES|"PARAMÈTRES"]
[--bootappend-live-failsafe PARAMETER|"PARAMETERS"]
[--bootloaders grub-legacy|grub-pc|syslinux|grub-efi]
[--cache true|false]
[--cache-indices true|false]
[--cache-packages true|false]
[--cache-stages STAGE|"STAGES"]
[--checksums md5|sha1|sha256|none]
[--compression bzip2|gzip|lzip|none]
[--config GIT_URL::GIT_ID]
[--build-with-chroot true|false]
[--chroot-filesystem ext2|ext3|ext4|squashfs|jffs2|none]
[--clean]
[-c|--conffile FICHIER]
[--debconf-frontend dialog|editor|noninteractive|readline]
[--debconf-priority low|medium|high|critical]
[--debian-installer true|cdrom|netinst|netboot|businesscard|live|false]
[--debian-installer-distribution daily|NOM_DE_CODE]
[--debian-installer-preseedfile FICHIER|URL]
[--debian-installer-gui true|false]
[--debootstrap-options OPTIONS]
[--debootstrap-script SCRIPT]
[--debug]
[-d|--distribution NOM_DE_CODE]
[--parent-distribution NOM_DE_CODE]
[--parent-debian-installer-distribution NOM_DE_CODE]
[--dump]
[--fdisk fdisk|fdisk.dist]
[--firmware-binary true|false]
[--firmware-chroot true|false]
[--force]
[--grub-splash FICHIER]
[--gzip-options OPTION|"OPTIONS"]
[--hooks FICHIER]
[--ignore-system-defaults]
[--initramfs auto|none|live-boot|casper]
[--initramfs-compression bzip2|gzip|lzma]
[--initsystem sysvinit|runit|systemd|upstart|none]
[--interactive shell]
[--isohybrid-options OPTION|"OPTIONS"]
[--iso-application NOM]
[--iso-preparer NOM]
[--iso-publisher NOM]
[--iso-volume NOM]
[--jffs2-eraseblock TAILLE]
[--keyring-packages PAQUET|"PAQUETS"]
[-k|--linux-flavours VARIÉTÉ|"VARIÉTÉS"]
[--linux-packages "PAQUETS"]
[--losetup losetup|losetup.orig]
[--memtest memtest86+|memtest86|none]
[-m|--parent-mirror-bootstrap URL]
[--parent-mirror-chroot URL]
[--parent-mirror-chroot-security URL]
[--parent-mirror-chroot-updates URL]
[--parent-mirror-chroot-backports URL]
[--parent-mirror-binary URL]
[--parent-mirror-binary-security URL]
[--parent-mirror-binary-updates URL]
[--parent-mirror-binary-backports URL]
[--parent-mirror-debian-installer URL]
[--mirror-bootstrap URL]
[--mirror-chroot URL]
[--mirror-chroot-security URL]
[--mirror-chroot-updates URL]
[--mirror-chroot-backports URL]
[--mirror-binary URL]
[--mirror-binary-security URL]
[--mirror-binary-updates URL]
[--mirror-binary-backports URL]
[--mirror-debian-installer URL]
[--mode debian|progress-linux|ubuntu]
[--system live|normal]
[--net-root-mountoptions OPTIONS]
[--net-root-path CHEMIN]
[--net-root-server IP|NOM_D_HÔTE]
[--net-cow-filesystem nfs|cfs]
[--net-cow-mountoptions OPTIONS]
[--net-cow-path CHEMIN]
[--net-cow-server IP|NOM_D_HÔTE]
[--net-tarball true|false]
[--onie true|false]
[--onie-kernel-cmdline "OPTION1 OPTION2"]
[--quiet]
[--archive-areas DOMAINE_D'ARCHIVE|"DOMAINES_D'ARCHIVE"]
[--parent-archive-areas DOMAINE_D'ARCHIVE_PARENT|"DOMAINE_D'ARCHIVE_PARENT"]
[--security true|false]
[--source true|false]
[-s|--source-images iso|netboot|tar|hdd]
[--tasksel apt|aptitude|tasksel]
[--templates CHEMIN]
[--uefi-secure-boot auto|enable|disable]
[--hdd-size MB]
[--updates true|false]
[--backports true|false]
[--verbose]
[--win32-loader true|false]