« Création d'une image debian bootable (système de rescue, live system) » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
(18 versions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :
[[category:desktop]]
[[category:desktop]]
[[category:debian]]
[[category:debian]]
[[category:bureautique]]


Manuel complet : http://debian-live.alioth.debian.org/live-manual/stable/manual/html/live-manual.en.html
Manuel complet : https://live-team.pages.debian.net/live-manual/html/live-manual/index.en.html


=Paquets nécessaires=
=Paquets nécessaires=
Ligne 21 : Ligne 20 :
--archive-areas "main contrib non-free" --apt-indices false \
--archive-areas "main contrib non-free" --apt-indices false \
--memtest memtest86+ --security true --updates true --backports true \
--memtest memtest86+ --security true --updates true --backports true \
--mirror-bootstrap http://ftp.fr.debian.org/debian/ --mirror-binary http://ftp.fr.debian.org/debian/ \
--mirror-bootstrap http://ftp.fr.debian.org/debian/ --mirror-binary http://deb.debian.org/debian/ \
--bootappend-live "boot=live components timezone=Europe/Paris locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
username=user noprompt noeject autologin"
</pre>
 
==Pour debian stretch :==
<pre>
lb config --distribution stretch --binary-images iso-hybrid --architectures amd64 --linux-flavours amd64 \
--archive-areas "main contrib non-free" --apt-indices false \
--memtest memtest86+ --security true --updates true --backports true \
--mirror-bootstrap http://ftp.fr.debian.org/debian/ --mirror-binary http://deb.debian.org/debian/ \
--bootappend-live "boot=live components timezone=Europe/Paris locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
username=user noprompt noeject autologin"
</pre>
 
==Pour debian buster :==
<pre>
lb config --distribution buster --binary-images iso-hybrid --architectures amd64 --linux-flavours amd64 \
--archive-areas "main contrib non-free" --apt-indices false \
--memtest memtest86+ --security true --updates true --backports true \
--mirror-bootstrap http://ftp.fr.debian.org/debian/ --mirror-binary http://deb.debian.org/debian/ \
--bootappend-live "boot=live components timezone=Europe/Paris locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
--bootappend-live "boot=live components timezone=Europe/Paris locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
username=user noprompt noeject autologin"
username=user noprompt noeject autologin"
Ligne 28 : Ligne 47 :
=Tunning=
=Tunning=


==Autologin pour debian jessie==
==Autologin pour debian jessie uniquement==


Pour debian jessie avec systemd, afin d'activer l'autologin, il faut créer un script personnalisé dans <code>config/hooks/autologin.hook.chroot</code> :
Pour debian jessie avec systemd, afin d'activer l'autologin, il faut créer un script personnalisé dans <code>config/hooks/live/autologin.hook.chroot</code> :
<pre>
<pre>
cat > config/hooks/autologin.hook.chroot << EOF
cat > config/hooks/live/autologin.hook.chroot << EOF
#!/bin/sh
#!/bin/sh
set -e
set -e
Ligne 43 : Ligne 62 :


Ce fichier sera exécuté au moment de la création de notre image.
Ce fichier sera exécuté au moment de la création de notre image.
Cette manœuvre n'est pas nécessaire pour debian stretch.
==hotfix debian stretch/buster afin d'avoir la bonne keymap==
A l'heure ou j'écris ces lignes, un [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=818065 bug] empêche debian stretch de démarrer avec la keymap que vous avez défini lors de l'étape précédente.<br>
Pour le régler temporairement, nous allons créer le fichier hook qui sera lancé par live-config lors du démarrage de l'iso et qui va charger la bonne keymap :
<pre>
mkdir -p config/includes.chroot/lib/live/config/
chmod 755 config/includes.chroot/lib/ config/includes.chroot/lib/live/ config/includes.chroot/lib/live/config/
cat > config/includes.chroot/lib/live/config/9999-fix-keymap << EOF
#!/bin/sh
#/etc/init.d/console-setup restart
/bin/setupcon
EOF
chmod 755 config/includes.chroot/lib/live/config/9999-fix-keymap
</pre>


==MOTD au shell==
==MOTD au shell==
Un peu de tunning : <code>config/hooks/motd.hook.chroot</code> :
Un peu de tunning : <code>config/hooks/live/motd.hook.chroot</code> :
<pre>
<pre>
cat > config/hooks/motd.hook.chroot << EOF
cat > config/hooks/live/motd.hook.chroot << EOF
#!/bin/sh
#!/bin/sh
set -e
set -e
Ligne 57 : Ligne 93 :
</pre>
</pre>


==keymap du clavier==
==keymap du clavier et configuration de l'utilisateur==
Pour avoir la console en keymap française, ajoutez les paquets <code>console-data console-setup console-setup-linux</code> dans la liste des paquets a installer
Pour avoir la console en keymap française et assurer la création de l'utilisateur live, ajoutez les paquets <code>console-data console-setup console-setup-linux user-setup</code> dans la liste des paquets a installer
<pre>echo console-data console-setup console-setup-linux >> config/package-lists/keymap.list.chroot</pre>
<pre>echo console-data console-setup console-setup-linux user-setup >> config/package-lists/keymap.list.chroot</pre>


==Liste personnalisée de packages==
==Liste personnalisée de packages==
Ligne 65 : Ligne 101 :
<pre>echo whois dnsutils htop jnettop tcpdump mtr telnet git iperf iperf3 wget curl rsync screen patch aptitude lm-sensors lshw \
<pre>echo whois dnsutils htop jnettop tcpdump mtr telnet git iperf iperf3 wget curl rsync screen patch aptitude lm-sensors lshw \
parted nmap binutils lsof dosfstools ntfs-3g debootstrap pciutils usbutils lsb-release debian-goodies fancontrol \
parted nmap binutils lsof dosfstools ntfs-3g debootstrap pciutils usbutils lsb-release debian-goodies fancontrol \
zerofree ethtool testdisk gddrescue smartmontools hdparm lvm2 psmisc freeipmi ipmitool openipmi gdisk bzip2 > config/package-lists/mypackage.list.chroot</pre>
zerofree ethtool net-tools testdisk gddrescue smartmontools hdparm lvm2 psmisc freeipmi ipmitool openipmi gdisk bzip2 zsync > config/package-lists/mypackage.list.chroot</pre>


==installer un package depuis les dépots backports==
==installer un package depuis les dépots backports==
Ligne 81 : Ligne 117 :
</pre>
</pre>


==Ajouter un dépot personnalisé==
==Ajouter un dépôt personnalisé==
Pour qu'il soit accessible (installable) à la création de l'image :
<pre>
echo "deb http://mirror/debian/ sid main" > config/archives/sid.list.chroot
</pre>


Pour qu'il soit accessible (installable) sur le système créé :
<pre>
<pre>
echo "deb http://mirror/debian/ sid main" > config/archives/sid.list.chroot
echo "deb http://mirror/debian/ sid main" > config/archives/sid.list.binary
</pre>
</pre>
Si ce dépot requiert une clé gpg, déposez sa version texte (armored) dans <code>config/archives/sysbench.key.chroot</code> et/ou <code>config/archives/sysbench.key.binary</code>


==boot automatique==
==boot automatique==
Pour ajouter un boot automatique (par défaut lb config utilise isolinux comme bootloader) :
Pour ajouter un boot automatique au bout de 30secondes (par défaut lb config utilise isolinux comme bootloader) :
<pre>
<pre>
mkdir config/bootloaders/
mkdir config/bootloaders/
cp -R /usr/share/live/build/bootloaders/isolinux/ config/bootloaders/isolinux/
cp -R /usr/share/live/build/bootloaders/isolinux/ config/bootloaders/isolinux/
sed -i "s/timeout 0/timeout 300/g" config/bootloaders/isolinux/isolinux.cfg
</pre>
</pre>


Puis éditez config/bootloaders/isolinux/isolinux.cfg (un timer de 0 signifie infini, les unités sont des dixièmes de secondes)
Un timeout de 0 signifie infini, les unités sont des dixièmes de secondes.


==openssh==
==openssh==
On peut ajouter des clés ssh de la même manière :
On peut ajouter des clés ssh de la même manière :
<pre>
<pre>
cat > config/hooks/addsshkey.hook.chroot << EOF
cat > config/hooks/live/addsshkey.hook.chroot << EOF
#!/bin/sh
#!/bin/sh
set -e
set -e
Ligne 122 : Ligne 166 :
<pre>
<pre>
mkdir config/includes.chroot/root/
mkdir config/includes.chroot/root/
chmod 750 config/includes.chroot/root/
cat > config/includes.chroot/root/README << EOF
cat > config/includes.chroot/root/README << EOF
Vous pouvez créer les fichiers que vous voulez de cette manière afin de les inclures dans le système de fichier de linux
Vous pouvez créer les fichiers que vous voulez de cette manière afin de les inclures dans le système de fichier de linux
Ligne 170 : Ligne 215 :
--archive-areas "main contrib non-free" --apt-indices false \
--archive-areas "main contrib non-free" --apt-indices false \
--memtest memtest86+ --updates true --backports true \
--memtest memtest86+ --updates true --backports true \
--mirror-bootstrap http://ftp.fr.debian.org/debian/ --mirror-binary http://ftp.fr.debian.org/debian/ \
--mirror-bootstrap http://deb.debian.org/debian/ --mirror-binary http://deb.debian.org/debian/ \
--bootappend-live "boot=live persistence components locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
--bootappend-live "boot=live persistence components locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
username=user noprompt noeject autologin"
username=user noprompt noeject autologin"

Version du 1 décembre 2019 à 12:29


Manuel complet : https://live-team.pages.debian.net/live-manual/html/live-manual/index.en.html

Paquets nécessaires

aptitude install live-build
mkdir live-default && cd live-default

Préparation de l’environnement

Pour debian jessie :

lb config --distribution jessie --binary-images iso-hybrid --architectures amd64 --linux-flavours amd64 \
--archive-areas "main contrib non-free" --apt-indices false \
--memtest memtest86+ --security true --updates true --backports true \
--mirror-bootstrap http://ftp.fr.debian.org/debian/ --mirror-binary http://deb.debian.org/debian/ \
--bootappend-live "boot=live components timezone=Europe/Paris locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
username=user noprompt noeject autologin"

Pour debian stretch :

lb config --distribution stretch --binary-images iso-hybrid --architectures amd64 --linux-flavours amd64 \
--archive-areas "main contrib non-free" --apt-indices false \
--memtest memtest86+ --security true --updates true --backports true \
--mirror-bootstrap http://ftp.fr.debian.org/debian/ --mirror-binary http://deb.debian.org/debian/ \
--bootappend-live "boot=live components timezone=Europe/Paris locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
username=user noprompt noeject autologin"

Pour debian buster :

lb config --distribution buster --binary-images iso-hybrid --architectures amd64 --linux-flavours amd64 \
--archive-areas "main contrib non-free" --apt-indices false \
--memtest memtest86+ --security true --updates true --backports true \
--mirror-bootstrap http://ftp.fr.debian.org/debian/ --mirror-binary http://deb.debian.org/debian/ \
--bootappend-live "boot=live components timezone=Europe/Paris locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
username=user noprompt noeject autologin"

Tunning

Autologin pour debian jessie uniquement

Pour debian jessie avec systemd, afin d'activer l'autologin, il faut créer un script personnalisé dans config/hooks/live/autologin.hook.chroot :

cat > config/hooks/live/autologin.hook.chroot << EOF
#!/bin/sh
set -e
mkdir /etc/systemd/system/getty@tty1.service.d
echo "[Service]" > /etc/systemd/system/getty@tty1.service.d/autologin.conf
echo "ExecStart=" >> /etc/systemd/system/getty@tty1.service.d/autologin.conf
echo "ExecStart=-/sbin/agetty --autologin "root" %I" >> /etc/systemd/system/getty@tty1.service.d/autologin.conf
EOF

Ce fichier sera exécuté au moment de la création de notre image.

Cette manœuvre n'est pas nécessaire pour debian stretch.

hotfix debian stretch/buster afin d'avoir la bonne keymap

A l'heure ou j'écris ces lignes, un bug empêche debian stretch de démarrer avec la keymap que vous avez défini lors de l'étape précédente.
Pour le régler temporairement, nous allons créer le fichier hook qui sera lancé par live-config lors du démarrage de l'iso et qui va charger la bonne keymap :

mkdir -p config/includes.chroot/lib/live/config/
chmod 755 config/includes.chroot/lib/ config/includes.chroot/lib/live/ config/includes.chroot/lib/live/config/
cat > config/includes.chroot/lib/live/config/9999-fix-keymap << EOF
#!/bin/sh
#/etc/init.d/console-setup restart
/bin/setupcon
EOF
chmod 755 config/includes.chroot/lib/live/config/9999-fix-keymap

MOTD au shell

Un peu de tunning : config/hooks/live/motd.hook.chroot :

cat > config/hooks/live/motd.hook.chroot << EOF
#!/bin/sh
set -e
echo "Default user: user" >> /etc/issue
echo "Default pass: live" >> /etc/issue
echo "You can get root by using sudo su" >> /etc/issue
echo "" >> /etc/issue
EOF

keymap du clavier et configuration de l'utilisateur

Pour avoir la console en keymap française et assurer la création de l'utilisateur live, ajoutez les paquets console-data console-setup console-setup-linux user-setup dans la liste des paquets a installer

echo console-data console-setup console-setup-linux user-setup >> config/package-lists/keymap.list.chroot

Liste personnalisée de packages

Pour installer une liste personnalisée de package, créez un fichier mespackets.list.chroot dans config/package-lists :

echo whois dnsutils htop jnettop tcpdump mtr telnet git iperf iperf3 wget curl rsync screen patch aptitude lm-sensors lshw \
parted nmap binutils lsof dosfstools ntfs-3g debootstrap pciutils usbutils lsb-release debian-goodies fancontrol \
zerofree ethtool net-tools testdisk gddrescue smartmontools hdparm lvm2 psmisc freeipmi ipmitool openipmi gdisk bzip2 zsync > config/package-lists/mypackage.list.chroot

installer un package depuis les dépots backports

cat >> config/archives/backports.pref.chroot << EOF
Package: smartmontools
Pin: release a=jessie-backports
Pin-Priority: 600

Package: e2fsprogs
Pin: release a=jessie-backports
Pin-Priority: 600
EOF

Ajouter un dépôt personnalisé

Pour qu'il soit accessible (installable) à la création de l'image :

echo "deb http://mirror/debian/ sid main" > config/archives/sid.list.chroot

Pour qu'il soit accessible (installable) sur le système créé :

echo "deb http://mirror/debian/ sid main" > config/archives/sid.list.binary

Si ce dépot requiert une clé gpg, déposez sa version texte (armored) dans config/archives/sysbench.key.chroot et/ou config/archives/sysbench.key.binary

boot automatique

Pour ajouter un boot automatique au bout de 30secondes (par défaut lb config utilise isolinux comme bootloader) :

mkdir config/bootloaders/
cp -R /usr/share/live/build/bootloaders/isolinux/ config/bootloaders/isolinux/
sed -i "s/timeout 0/timeout 300/g" config/bootloaders/isolinux/isolinux.cfg

Un timeout de 0 signifie infini, les unités sont des dixièmes de secondes.

openssh

On peut ajouter des clés ssh de la même manière :

cat > config/hooks/live/addsshkey.hook.chroot << EOF
#!/bin/sh
set -e
mkdir /root/.ssh/
echo "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIG0Z4ITNfoPG0+L5UMyY253C5CA8JQcWZHb9Hd/nuWaj pfoo@laptop" > /root/.ssh/authorized_keys
sed -i "s/PermitRootLogin no/PermitRootLogin without-password/g" /etc/ssh/sshd_config
EOF

Notez qu'on modifie en même temps la configuration du serveur openssh afin d'autoriser la connexion root avec des clés.
Tout celà n'a d'intérêt que si on installe aussi openssh :

echo openssh-server >> config/package-lists/ssh.list.chroot

Les clés serveurs openssh seront automatiquement supprimés après l'installation par le fichier config/hooks/0160-remove-openssh-server-host-keys.hook.chroot, puis régénéré lors du boot par live-config.

Dans le cas ou vous installez un serveur ssh, il sera bon de changer le mot-de-passe utilisateur. Vous pouvez vous inspirer du fichier /usr/share/doc/live-config/examples/hooks/passwd pour créer une hook réalisant celà.

Un petit README pour terminer ?

Le dossier config/includes.chroot/ permet d'ajouter des dossiers et fichiers au système de fichier debian qui sera créé pour cette image.

mkdir config/includes.chroot/root/
chmod 750 config/includes.chroot/root/
cat > config/includes.chroot/root/README << EOF
Vous pouvez créer les fichiers que vous voulez de cette manière afin de les inclures dans le système de fichier de linux
EOF

Un petit README a la root de l'iso ?

Le dossier config/includes.binary/README permet de créer des fichiers ou dossier à la racine de l'iso (ils seront donc accessible même si vous branchez votre future clé usb / cdrom sous windows par exemple)

cat > config/includes.binary/README << EOF
Vous pouvez créer les fichiers que vous voulez de cette manière, ils seront situés directement à la racine de l'iso
EOF

Executer des hooks personnalisée lors du boot

Il faut les créer dans config/includes.chroot/lib/live/config/

Création de l'image

Enfin, pour lancer la création de l'image :

lb build

ajouter memtest : méthode manuelle

Notez que si vous avez suivi ce wiki, vous devriez déjà avoir memtest installé (--memtest memtest86+), vous n'avez donc rien à faire. Memtest se situ dans le menu advanced au boot.

cd binary/live/
wget http://www.memtest.org/download/5.01/memtest86+-5.01.bin.gz
gunzip memtest86+-5.01.bin.gz
mv memtest86+-5.01.bin memtest
cd ../../
lb binary_iso --force

image usb uniquement

Par défaut, la configuration utilisée dans ce wiki créé une image hybrid, capable de booter sur un cd ou une clé usb. Si vous souhaitez ne permettre que le boot usb de vos images il faut modifier la directive binary-images :

--binary-images hdd

Créer un stockage persistant sur une clé usb

Le début de la procédure est le même que pour le reste : créez votre image, en ajoutant l'option persistence a la directive --bootappend-live :

lb config --distribution jessie --binary-images hdd --architectures amd64 --linux-flavours amd64 \
--archive-areas "main contrib non-free" --apt-indices false \
--memtest memtest86+ --updates true --backports true \
--mirror-bootstrap http://deb.debian.org/debian/ --mirror-binary http://deb.debian.org/debian/ \
--bootappend-live "boot=live persistence components locales=en_US.UTF-8 keyboard-layouts=fr hostname=rescue \
username=user noprompt noeject autologin"

Continuez la création de l'image comme avant, puis écrivez la sur une clé usb de taille suffisante :

dd if=votre_image.iso of=/dev/your_usb_device

Il faut ensuite créer une nouvelle partition avec parted, fdisk, cfdisk, comme vous voulez, sur la clé usb
Une fois la partition créée, il faut y écrire un système de fichier ext4 qui aura comme label "persistence" (obligatoire, sinon ça ne marchera pas). Si votre partition est sdb2, on arrive a ça :

mkfs.ext4 -L persistence /dev/sdb2
mount -t ext4 /dev/sdb2 /mnt
echo "/home" >> /mnt/persistence.conf
umount /mnt

Vous ainsi un dossier /home persistant qui survivra aux reboots sur la clé usb. Si vous souhaitez conserver plus de fichiers, comme par exemple des programmes installés par la suite, le fichier persistence.conf ressemblera à ça :

/usr union
/home
/var/cache/apt

Si on vous tout simplement garder la totalité des donnée sur le stockage persistant :

/ union

Modifier une iso déjà préparée

aptitude install genisoimage squashfs-tools
mount /var/lib/vz/templates/iso/rescue_amd64.iso /mnt/01 -o loop
cp -a 01/* 02/
mount /mnt/01/live/filesystem.squashfs /mnt/03/ -o loop
cp -a 03/* 04/

04 : a modifier pour debian 02 : a modifier pour le cd

Pour modifier les fichiers debian, le mieux est de

chroot /mnt/04

Vous pouvez par exemple rajouter des paquets que vous auriez oublié (dnsutils, ntfsprogs, dosfstools ...), en reconfigurer certains (locales, console-data)

Une fois 04 modifié :

cd /mnt
rm 04/root/.*_history
mksquashfs 04/ blah.squashfs
mv blah.squashfs 02/live/filesystem.squashfs 
chmod 444 02/live/filesystem.squashfs 
sha256sum

Vous pouvez ensuite modifier 02 : par exemple, ajouter dans 02/isolinux/isolinux.cfg : timeout 1

genisoimage -J -r -v -o test.iso -V rescue \
-b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table 02/