Mise à jour : Debian 10.5 / Buster
L'objectif est ici de construire une image iso Debian live personnalisée. La construction s'effectue à partir d'un système linux opérationnel, avec l'assistance du paquet live-build.
Cette première partie décrit l'utilisation de live-build avec la configuration par défaut
L'utilisation d'une configuration personnalisée est décrite dans une deuxième partie : Debian live personnalisée - Configuration avancée
Références :
Commandes porcelaine principales
lb config(1)
creates configuration for live-build
lb bootstrap(1)
executes the first build stage, creating (bootstraping) a basic Debian root fi‐
lesystem
lb chroot(1)
executes the second build stage, building the live OS filesystem
lb installer(1)
executes the third build stage, obtaining installer components (optional)
lb binary(1)
executes the fourth build stage, generating a binary image
lb source(1)
executes the fifth build stage, generating a source image (optional)
lb clean(1)
cleans up system build directories
Sommaire
$ sudo aptitude install live-build
Les trois commandes de base sont lb config, lb build et lb clean. Pour accéder aux détails des commandes :
$ man lb_config
$ man live-config
$ man lb_build
$ man lb_clean
$ mkdir debian_live && cd debian_live
Désormais, toutes les commandes qui suivent seront à lancer depuis le répertoire de travail debian_live qui vient d'être créé.
$ mkdir auto
$ cp /usr/share/doc/live-build/examples/auto/* auto/
La construction d'une image Debian live s'effectue en deux grandes étapes : la configuration et la construction de l'image
La configuration consiste à
Une fois le système configuré, la construction de l'image est automatique et comprend
Le téléchargement des paquets
La construction de l'image squashfs dans le chroot
La construction de l'image binaire comprenant le bootstrap et le fichier squashfs
$ lb config
$ sudo lb build
Attention à bien identifier et respecter les commandes qui s'effectuent avec les droits utilisateur et celles qui s'effectuent avec les droits administrateur. De façon générale, toutes les commandes et créations ou modifications de fichiers de l'étape de configuration s'effectuent avec les droits utilisateurs.
En particulier, la commande lb config doit être passée en utilisateur. Aucun avertissement en cas d'erreur!!!
L'erreur est ensuite difficile à rectifier et il peut être préférable de supprimer tous les répertoires (y compris ? le répertoire cache .build) en ne conservant que le répertoire cache.
$ lb config # Attention lancer la commande avec les droits utilisateurs
Noter la réponse à la commande
$ lb config
[2020-08-31 22:51:15] lb config
P: Executing auto/config script.
[2020-08-31 22:51:15] lb config noauto
P: Updating config tree for a debian/stretch/amd64 system
P: Symlinking hooks...
Cette étape crée le répertoire config et son contenu, en particulier les fichiers suivants qui sont créés avec des valeurs par défaut modifiés par le contenu du script auto/config
$ cat config/bootstrap |grep -i Distribution
# $LB_DISTRIBUTION: select distribution to use
LB_DISTRIBUTION="stretch"
# $LB_PARENT_DISTRIBUTION: select parent distribution to use
LB_PARENT_DISTRIBUTION="stretch"
# $LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION: select parent distribution for debian-installer to use
LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="stretch
$ cat config/chroot |grep updates
# $LB_SECURITY: enable security updates
# $LB_UPDATES: enable updates updates
# $LB_BACKPORTS: enable backports updates
$ cat config/binary |grep UEFI
# $LB_UEFI_SECURE_BOOT: enable/disable UEFI secure boot
LB_UEFI_SECURE_BOOT="auto"
$ cat config/binary |grep -i firmware
# $LB_FIRMWARE_BINARY: include firmware packages in debian-installer
LB_FIRMWARE_BINARY="true"
# $LB_FIRMWARE_CHROOT: include firmware packages in debian-installer
LB_FIRMWARE_CHROOT="true"
$ cat config/source |grep -i source
# config/source - options for live-build(7), source stage
# $LB_SOURCE: set source option
LB_SOURCE="false"
# $LB_SOURCE_IMAGES: set image type
LB_SOURCE_IMAGES="tar"
$ cat config/common |grep -i source
# $LB_APT_SOURCE_ARCHIVES: set apt/aptitude source entries in sources.list
LB_APT_SOURCE_ARCHIVES="true"
--distribution "buster"
$ for i in config/{bootstrap,chroot,binary,common} ; \
do echo $i ; cat $i | grep -a1 -i "buster" ; done
$ for i in config/{bootstrap,chroot,binary,common} ; \
do echo $i ; cat $i | grep -a1 -i "buster" ; done
config/bootstrap
# $LB_DISTRIBUTION: select distribution to use
# (Default: buster)
LB_DISTRIBUTION="buster"
# $LB_PARENT_DISTRIBUTION: select parent distribution to use
# (Default: buster)
LB_PARENT_DISTRIBUTION="buster"
# $LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION: select parent distribution for debian-installer to use
# (Default: buster)
LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="buster"
config/chroot
config/binary
# (Default: empty)
LB_DEBIAN_INSTALLER_DISTRIBUTION="buster"
--
# $LB_ISO_VOLUME: set iso volume (max 32 chars)
# (Default: Debian buster $(date +%Y%m%d-%H:%M))
LB_ISO_VOLUME="Debian buster $(date +%Y%m%d-%H:%M)"
config/common
$ sudo lb build # Attention : lancer la commande avec les droits super-utilisateur création d'une image iso
.......
......
$ ls *.iso
live-image-amd64.hybrid.iso
Un fichier de log est disponible en
$ cat build.log
$ grep W: build.log
W: UEFI Secure Boot disabled due to missing signed Grub/Shim.
$ ls binary
Avec la configuration par défaut, les caractéristiques principales de l'image sont :
Le fichier image est directement testable dans un émulateur (qemu ou VirtualBox) .
$ qemu-system-x86_64 -enable-kvm -cpu host -m 2048 -smp 4 \
-drive media=cdrom,format=raw,file=live-image-amd64.hybrid.iso -boot d
$ qemu-system-x86_64 -enable-kvm -cpu host -m 2048 -smp 4 \
-drive media=cdrom,format=raw,file=live-image-amd64.hybrid.iso -boot d \ -bios /usr/share/ovmf/OVMF.fd \
-vga virtio
$ cp /opt/suze/ovmf/OVMF_CODE.secboot.fd ./ && cp /opt/suze/ovmf/OVMF_VARS.secboot.fd ./
$ qemu-system-x86_64 -enable-kvm -cpu host -m 2048 -smp 4 \
-machine pc-q35-2.5 \
-drive if=pflash,format=raw,readonly,file=./OVMF_CODE.secboot.fd \
-drive if=pflash,format=raw,file=./OVMF_VARS.secboot.fd \
-drive format=raw,media=cdrom,file=live-image-amd64.hybrid.iso -boot d \
-vga virtio
L'utilisation est identique à celle d'une distribution Debian live. Sélectionner la ligne Live ( amd64) et taper sur la touche Tabulation pour éditer la ligne de commande du noyau :
locales=fr_FR.UTF-8 keyboard-layouts=fr
Lorsque le système est lancé, une console utilisateur s'ouvre
Nom et mots de passe utilisateur (user, live), droits super-utilisateurs (sudo), création d'un administrateur (sudo passwd)
Choix du clavier, de la langue, etc..... : installer console-setup si non présent, reconfigurer si nécessaire console-setup, keyboard-configuration, locales
$ sudo apt install console-setup
$ sudo dpkg-reconfigure console-setup
$ sudo dpkg-reconfigure keyboard-configuration
$ sudo dpkg-reconfigure locales
Mise à jour du fuseau horaire (dpkg-reconfigure tzdata)
Recopier l'image sur une clé, attachée dans cet exemple en /dev/sdb :
$ sudo dd if=live-image-amd64.hybrid.iso of=/dev/sdb bs=4M conv=fsync
$ ls auto
build clean config
$ ls config/
apt build hooks includes.chroot packages rootfs
archives chroot includes includes.installer packages.binary source
binary common includes.binary includes.source packages.chroot
bootstrap debian-installer includes.bootstrap package-lists preseed
Et en particulier, les fichiers de configuration (voir lb config)
config/boostrap
config/chroot
config/common
config/source
config/binary
$ ls -l cache
total 36
drwxr-xr-x 17 root root 4096 août 31 11:01 bootstrap
drwxr-xr-x 2 root root 4096 août 31 11:01 contents.chroot
drwxr-xr-x 2 root root 12288 août 31 11:05 packages.binary
drwxr-xr-x 2 root root 12288 août 31 11:00 packages.bootstrap
drwxr-xr-x 2 root root 4096 août 31 11:02 packages.chroot
$ ls -l cache/packages.bootstrap |grep wget
-rw-r--r-- 1 root root 799516 août 31 18:13 wget_1.18-5+deb9u3_amd64.deb
$ ls -l cache/packages.chroot/ |grep linux-image
-rw-r--r-- 1 root root 39307534 juil. 6 19:00 linux-image-4.9.0-13-amd64_4.9.228-1_amd64.deb
-rw-r--r-- 1 root root 7182 juil. 6 23:27 linux-image-amd64_4.9+80+deb9u11_amd64.deb
$ ls -l cache/packages.binary |grep xorriso
-rw-r--r-- 1 root root 299252 oct. 11 2016 xorriso_1.4.6-1+b1_amd64.deb
ls -l ./ |grep chroot
drwxr-xr-x 17 root root 4096 août 31 11:05 chrootchro
-rw-r--r-- 1 root root 1098104 août 31 11:02 chroot.files
-rw-r--r-- 1 root root 4986 août 31 11:02 chroot.packages.install
-rw-r--r-- 1 root root 4986 août 31 11:02 chroot.packages.live
chroot : système dans le quel s'effectue le chroot (arborescence et fichiers). Exemples
$ cat chroot/etc/debian_version
$ cat chroot/etc/apt/sources.list
$ ls binary
boot EFI efi.img isolinux live md5sum.txt
live-image-amd64.hybrid.iso # Image iso
live-image-amd64.hybrid.iso.zsync # ?
$ cat live-image-amd64.files
.:
total 76
drwxr-xr-x 2 root root 4096 Aug 26 08:41 bin
drwxr-xr-x 2 root root 4096 Aug 26 08:41 boot
drwxr-xr-x 4 root root 4096 Aug 26 08:34 dev
drwxr-xr-x 57 root root 4096 Aug 26 08:41 etc
drwxr-xr-x 2 root root 4096 Jul 13 13:04 home
lrwxrwxrwx 1 root root 29 Aug 26 08:41 initrd.img -> boot/initrd.img-4.9.0-3-amd64
lrwxrwxrwx 1 root root 29 Aug 26 08:41 initrd.img.old -> boot/initrd.img-4.9.0-3-amd64
......
$ cat live-image-amd64.contents
/boot
.....
/live/filesystem.squashfs
/live/initrd.img
/live/initrd.img-4.9.0-3-amd64
/live/vmlinuz
/live/vmlinuz-4.9.0-3-amd64
....
$ cat live-image-amd64.packages
aptitude-common 0.8.7-1
base-files 9.9+deb9u1
base-passwd 3.5.43
........
$ cat build.log
$ grep W build.log