Bonjour,
Pendant que je flânais un peu sur du tout et rien en oubliant les contraintes de tâches en instances, une idée me vient ce matin.
Je démarres un pc de bureau qui sert à pas mal de choses pour mes bricolages.
Au bout de quelques minutes, je me dis que ce serait sympa d'avoir ce système transportable sur un stockage usb, pour pouvoir dans certains cas de dépannages, pouvoir utiliser l'une des nombreuses possibilités que j'ai dans cette machine.
Ma première réflexion, du fait de ma familiarisation avec la virtualisation, va pour la création d'une image, qui sera manipulable via qemu.
Sur un stockage externe usb, j'ai toujours une version un peu récente des binaires qemu ou virtualbox.
Qemu sera pratique dans bien de situations. Je n'aurais pas besoin d'installer sur une machine Windows. L'archive zip est décompressé sur la clé.
Virtualbox par contre, il me faut l'installer sur la machine étrangère, à quand une version portable de virtualbox sur usb.
Mais tout ça au bout du compte m'amène à penser que sur une machine qui ne démarre pas, ou un système instable, pour cause de virus ou autres, fera que je ne pourrais rien faire avec.
L'idéal est donc de démarrer la machine étrangère directement sur l'image.
Les systèmes live font légion, dans le monde linux, même Microsoft, depuis Windows 8, en version Pro uniquement je crois, donne une possibilité de créer un live-usb du système installé avec un outil dont je ne me rappelles plus très bien du nom.
J'ai en trousseau quelques lives de distributions qui sont plus au moins arrangeants. Certains sont configurés avec une option de persistance au démarrage afin de retrouver quelques personnalisations.
Mais cela ne vaut vraiment pas cette debian installée à partir du minimum, puis enrichi progressivement. Truffée de beaucoup de choses utiles. Contenant une base de travail dans pas mal de cas. Je solutionnes beaucoup de choses à partir de cette machine.
Alors j'opte donc pour la solution de conversion en un live de mon debian. Je vous met ici le mémo des grandes lignes.
______________________________________________________________
Comment convertir sa debian en live ?
Ce qui suit permettra de le savoir.
De mémoire, par curiosité j'avais déjà crée un cd live de démonstration avec un outil assez connu: Live-Build. Le manuel en ligne ici.
Live-build est un bon départ pour la découverte de la création de systèmes live. Il suffit d'installer le paquet live-build.
Une fois le paquet installé, consulter la documentation est un prérequis pour tirer son épingle du jeu, les fichiers d'aide se trouvent dans /usr/share/doc/live-manual/ , en formats pdf ou html traduits dans pas mal de langues.
On suppose que vous avez une petite expérience de la chose, que vous voulez comme moi transporter votre Debian Favori n'importe où, continuez donc la lecture des grandes étapes pour y arriver.
______________________________________________________________
Phase 1 : Préparation d'une copie du sytème.
Après un df -h, je sais qu'un de mes stockages externes a suffisamment de place pour le clone.
Première étape.
Pour cette première étape, le dossier /home ne m’intéresse pas. Pour le reste j'estime avoir besoin de 15 Go. en fait 13 Go.
On va donc démarrer le pc cible sur un live pour copier proprement et rapidement le système.
Dans la session live, dans un terminal en tant que root, listage des partitions et montage de la partition qui va accueillir la copie. DANS MON CAS SDB4.
1 2 3
| # fdisk -l
# mount /dev/sdb4 /mnt
# cd /mnt |
Pour quelqu'un qui n'a pas de contraintes de temps et d'espace, un bête dd if=/dev/sda of=./monsysteme.img fera l'affaire. Mais ce n'est pas mon cas.:argh:
Préparation du comité ...
1 2 3
| # mkdir -p workspace/mnt workspace/mnts
# cd workspace |
Seconde étape.
- Création du fichier qui va accueillir le clone.
- On veut aller vite, donc pas de dd, on va dire à fallocate de réserver pour nous 15 milliards d'octets.
- Création du système de fichier ext2 sur ce fichier alloué.
- Création des répertoires qui serviront de point de montage pour les besoins de la copie source et destination
- Monter le fichier image et les partitions qui importent.
Dans mon cas, tout n'est pas sur une seule partition : boot, usr, var, home ont leurs partitions. Je dois monter donc celles qui m’intéressent dans le dossier correspondant sauf le home.
1 2 3 4 5 6 7 8 9 10 11 12 13
| # fallocate -l 15000000000 workspace/monsysteme.img
# mkfs workspace/monsysteme.img
# mkdir mnts/src mnts/dst
# mount monsysteme.copy mnt/dst
# mount /dev/sda5 mnts/dst
# mount /dev/sda7 mnts/dst/usr
... |
Dernière étape de cette phase.
Tout est en place. Il faut copier maintenant.
# cp -a --sparse=always workspace/mnts/src/* workspace/mnts/dst/
Nous avons notre copie. Un cd && sync && umount -a avant de rebooter sur la bécane.
Le reste du travail sera plus aisé en démarrant sur la machine à convertir.
______________________________________________________________
Phase 2 : Finalisations.
Dans un premier temps mettre en place les contextes utiles à un chroot sur la copie afin de réaliser quelques aménagements.
Ouvrir un terminal et se rendre sur le stockage externe, dans le dossier workspace qui contient notre fichier.
Monter le fichier pour chrooter dessus
# mount -o rw,suid,dev monsysteme.imf mnts/src
Vider les répertoires dev et proc ainsi que le fichier fstab dans l'image monteé.
1 2 3
| # :> mnts/src/etc/fstab
# rm -rf mnts/src/dev/*
# rm -rf mnts/src/proc/* |
Nettoyer notre image système des répertoires inutiles, mais surtout on a deux paquets à installer dont un au moins est vital. Il s'agit de live-boot.
Par conséquent on s'apprête à faire un chroot.
1 2 3
| # mount -t proc proc mnts/src/proc
# mount --bind /dev mnts/src/dev
# LANG=C.UTF-8 chroot ./mnts/src /bin/bash |
On est dans le chroot.
# export TERM=xterm-color
Si vous tenez au dossier home d'un utilisateur précis, c'est le moment de le créer.
Vous pouvez copier en étant à l'extérieur du chroot le dossier de l'utilisateur cible dans mnts/src/home/
1 2
| # mkdir home
# deluser user1 |
Dans mon cas je vide le home (j'avais personnellement monté la partition /home au moment de la copie dans le live). Je n'aurais pas besoin pour cette étape de mes utilisateurs. Les scripts de Live-config ou live-boot vont me mettre un utilisateur par défaut user avec autologin.
1 2 3
| #rm -rf home/*
# apt-get install live-boot live-config |
Je ne vais pas détailler l'usage de ces 2 paquets.
Le premier est quasi indispensable, sauf si vous vous sentez assez compétents pour écrire vous même vos scripts d'initialisation et de montage, là je vous dis tout de suite de passer votre chemin, cet article ne vous apprendra rien de nouveau sur ce plan.
J'avais voulu écrire par moi même mon script d'initialisation dans l'initrd sans cet outil il y a un moment. Je fus très vite découragé par la complexité déroutante et tortueuse des montages, remontages, démontages au chargement du noyau. Décompressez le fichier inirtrd pour examiner les scripts pour vous faire une idée. Bon vent.
Live-Boot génère un initrd avec ce qu'il faut pour ne pas avoir de panic au démarrage. Live-Config permet de passer les options de configuration personnalisées. Les options par défaut comme le nom d'hôte, d'utilisateur, d'autologin etc peuvent ne pas convenir à certains. Sinon pour l'exemple ci on se contentera de la configuration par défaut.
Live-Config permet par voies de scripts (rangées dans le dossier live-config) des personnalisations, comme la création d'utilisateur, configurations réseaux ...
Pour alléger au maximum, mon image, quelques nettoyages de répertoires ou fichiers dans srv, usr/local, .... Désinstallation de quelques paquets que je ne crois pas avoir besoin en nomade. Puis de certaines docs volumineuses Suppression du gestionnaire de session graphique et de l'environnement de bureau gnome. Installation d'openbox avec le gestionnaire de fenêtres lxde. Quelques paramétrages de ce dernier Et enfin
1 2 3
| # apt-get autoclean
# apt-get clean
# apt-get auto remove --purge |
J'ai gagné quelques gigas.
Sortir du chroot. Nb : si vous avez effectué un montage en étant dans le chroot, démontez le avant de taper Démonter les /dev et /proc
1 2
| # umount mnts/src/dev
# umount mnts/src/proc |
Effacement du contenu des fichiers mnts/src/etc/resolv.conf mnts/src/etc/network/interfaces, voir d'autres petites choses qui seront propres à votre contexte.
Dans mon cas, je suis descendu à 4 Go en supprimant pas mal de paquets dans le chroot, que je jugeais non utile dans ce live.
______________________________________________________________
Phase de finalisation.
Nous allons compresser le contenu de l'image montée dans le répertoire workspace/mns/src. Un sytème de fichier compressé de type squashfs convient. Mksquashfs est celui qui va nous permettre de réduire considérablement notre fichier. L'iso que j'obtiens par la suite ne pèsera pas plus de 1.2Go.
# mksquashfs mnts/src multiserv.sqh -e sys -e proc -e dev -e boot
Nous avons exclu les fichiers /sys /proc /dev /boot
On prépare l'environnement de création du fichier iso hybride
1 2 3 4
| # mkdir -p live-perso/live
# cp -a mnts/src/boot live-perso/
# mv multiserv.sqh live-perso/live/
# cd live-perso |
Je remplace le contenu du grub.cfg qui se trouve boot/grub
# echo :> live-perso/boot/grub/grub.cfg
# nano live-perso/boot/grub/grub.cfg
Recopier le contenu de mon fichier de configuration pour l'adapter à votre cas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| insmod search_fs_uuid
insmod regexp
if [ "${grub_platform}" == "pc" ]; then
insmod vbe
fi
if [ "${grub_platform}" == "efi" ]; then
insmod efi_gop
insmod efi_uga
fi
insmod font
if loadfont ${prefix}/unicode.pf2
then
insmod gfxterm
set gfxmode=auto
set gfxpayload=keep
terminal_output gfxterm
# set theme=${prefix}/themes/1/theme.txt
fi
set color_normal=white/black
set color_highlight=white/green
export color_normal
export color_highlight
insmod gzio
insmod part_msdos
insmod ext2
insmod xfs
insmod vga
insmod configfile
search --file --no-floppy --set=root /boot/grub/i386-efi/core.efi
# en fait j'avais 3 lignes de variables op1 à opt3. Le premier à marcher.
# S'il avait échoué au prochain démarrage, dans lle menu grub j'aurais essayé
# les suivants comportant plus d'options à fournir au kernel comme live-media-path ...
menuentry "Demarrer Live debian" {
opt="rootfstype=squashfs boot=live components ro noeject noprompt fstype=squashfs"
linux /boot/vmlinuz-3.16.0-4-amd64 $opt
initrd /boot/initrd.img-3.16.0-4-amd64
}
menuentry "System shutdown" {
echo "System shutting down..."
halt
}
menuentry "System restart" {
echo "System rebooting..."
reboot
} |
On a presque fini. Il ne reste plus qu'à générer le fichier iso à l'aide de la commande grub-mkrescue.
# grub-mkrescue -o live-perso.iso live-perso
Bon week end
Partager