1. Introduction

Un premier tutoriel a été réalisé sur la francisation de RedoBackup & Recovery. Celui-ci, en étant une suite, vous permettra :

  • d'avoir une distribution à jour ;
  • d'être compatible avec UEFI et SecureBoot ;
  • d'utiliser un paquet .deb pour installer RedoBackup ;
  • d'installer RedoBackup sur n'importe quelle distribution de votre choix.

Dans la partie 2 de ce tutoriel, nous commencerons par effectuer une mise à jour du système existant ; nous essayerons ensuite de le migrer en 64 bits avec support UEFI/SecureBoot.

Dans la partie 3, nous construirons un paquet de l'application RedoBackup, corrigée et francisée.

Dans la partie 4, nous ferons ensuite une installation « from scratch ». Nous construirons un CD contenant RedoBackup, basé sur une distribution Ubuntu 16 (Xenial). La version RedoBackup d'origine est basée sur une distribution Ubuntu 12 (Precise).

Enfin, dans la partie 5, nous verrons comment rendre compatible cet ISO avec le mode UEFI en SecureBboot.

Ce tutoriel est assez exhaustif en proposant différentes méthodes pour obtenir un live CD/USB à jour de RedoBackup & Recovery. Il n'est cependant pas nécessaire de suivre tout le tutoriel pour construire votre propre distribution, les parties 2, 3 et 4 étant relativement indépendantes. Lorsque la consultation d'une autre partie est nécessaire (pour des explications complémentaires), cela sera précisé.

2. Mise à jour du CD existant

Nous sommes partis de la distribution francisée par nos soins disponible ici, la version d'origine de RedoBackup étant disponible sur www.redobackup.org. La manipulation a été réalisée dans une machine virtuelle, et les opérations de mise à jour et de création du nouveau CD ont été réalisées depuis un démarrage sur le CD d'origine.

Nous allons décompresser le SquashFS, le modifier et régénérer le CD. Pour plus d'informations sur le fonctionnement d'un SquashFS, et si vous n'êtes pas familier du processus, consultez :

Fonctionnement et modification d'un.

2-1. Préparation

Dans notre machine virtuelle, nous commençons par créer un FileSystem dans le disque virtuel avec Gparted ou en ligne de commande.

Nous montons ensuite ce disque dans /mnt avec la commande :

 
Sélectionnez
mount /dev/sda1 /mnt

/dev/sda1 sera peut-être à adapter à votre situation.

2-2. Décompression du SquashFS

Nous installons les squashfs-tools :

 
Sélectionnez
apt-get install squashfs-tools

Nous décompressons ensuite le SquashFS du CD :

 
Sélectionnez
cd /mnt
unsquashfs /cdrom/casper/filesystem.squashfs

Ceci va décompresser le SquashFS dans le dossier squashfs-root.

2-3. Modification du SquashFS

Nous allons effectuer les modifications en chroot :

 
Sélectionnez
cd /mnt/squashfs-root
mount --bind /proc proc
mount --bind /sys sys
mount -t devpts none dev/pts
chroot .

Commençons par une petite mise à jour des dépôts :

 
Sélectionnez
apt-get update

Nous allons ensuite utiliser la commande do-release-upgrade. Nous installons tout d'abord le paquet update-manager-core, étant requis par do-release-upgrade :

 
Sélectionnez
apt-get install update-manager-core
do-release-upgrade

do-release-ugrade va mettre à jour la liste des dépôts nécessaires à la migration, puis effectuer les mêmes opérations que apt-get upgrade, mais de façon sécurisée. Les paquets n'étant plus maintenus seront laissés en l'état.

Il faudra valider les demandes (de téléchargement de paquets, puis de suppression à la fin) effectuées par celui-ci.

Nous avons eu plusieurs demandes de mise à jour de fichiers de configuration. Nous avons choisi de prendre la version du responsable du paquet et donc d'écraser le fichier actuel.

Nous avons ensuite un écran de demande d'arrêt des services :

Image non disponible

Nous répondons « Yes ».

Nous avons ensuite une demande de mise à jour GRUB :

Image non disponible

Nous ne sélectionnons rien. L'écran suivant nous demandera confirmation pour la non-installation de GRUB.

GRUB n'est pas utilisé sur l'ISO RedoBackup, c'est Isolinux qui est utilisé.

Nous nettoyons ensuite le cache des paquets :

 
Sélectionnez
apt-get clean

Puis sortons du chroot :

 
Sélectionnez
exit
umount dev/pts
umount sys
umount proc

En cas de problème de démontage, dû à des fichiers ouverts, redémarrez.

2-4. Préparation du nouvel ISO

Nous recréons un nouveau SquashFS :

 
Sélectionnez
cd .. # retour dans le dossier contenant le squashFS (dossier squashfs-root)
mksquashfs squashfs-root filesystem.squashfs -e boot

Nous appelons le fichier filesystem.squashfs, nom du fichier SquashFS utilisé par les live cd.

L'option -e permet d'exclure un dossier. Nous excluons le dossier /boot, le noyau et l'initrd étant présents dans le dossier casper du CD-ROM.

En cas de redémarrage (paragraphe 2.3), il sera nécessaire de réinstaller les squashfs-tools.

Nous recopions le contenu original du CD-ROM dans notre partition de travail :

 
Sélectionnez
mkdir /mnt/iso
cp -Rv /cdrom/* /mnt/iso

Le contenu du CD-ROM est monté automatiquement dans le point de montage /cdrom. Les options -Rv sont respectivement Récursivité et verbose (bavard).

Vous pouvez aussi faire la copie en mode graphique via le gestionnaire de fichiers PCmanFM.

Nous remplaçons le SquashFS par le nôtre :

 
Sélectionnez
mv filesystem.squashfs iso/casper

Nous supprimons les fichiers inutilisés dans iso/casper, à savoir les fichiers .manifest et filesystem.size, ceux-ci ne correspondant plus à la réalité. Idem pour le fichier md5sum.txt à la racine.

Nous déplaçons ensuite le noyau et l'initrd mis à jour vers l'ISO :

 
Sélectionnez
mv /mnt/squash-root/boot/vmlinuz* /iso/casper/vmlinuz
mv /mnt/squash-root/boot/initrd* /iso/casper/initrd.img

Attention à bien prendre les fichiers vmlinuz et initrd les plus récents dans /boot.

Nous supprimons le fichier iso/casper/initrd.lz, remplacé par l'initrd.img.

Il nous faut également modifier le fichier isolinux/isolinux.cfg et remplacer les références à initrd.lz par initrd.img.

2-5. Gravure du CD

Nous allons créer un script gravure.sh nous permettant d'effectuer la gravure, de façon à nous simplifier les multiples opérations.

En voici le contenu :

 
Sélectionnez
!#/bin/bash
cd /mnt/iso
genisoimage -o nom_fichier.iso -r -J --no-emul-boot --boot-load-size 4 --boot-info-table -b isolinux/isolibnux.bin -c isolinux/boot.cat .

Pour plus d'informations sur les options de genisoimage, nous vous invitons à consulter la page de man de celui-ci.

Ne pas oublier de rendre le script exécutable (chmod +x gravure.sh).

Il nous reste ensuite à récupérer l'ISO et à démarrer dessus.

2-6. Résultat

Le nouvel ISO généré pèse 589 Mo au lieu des 326 du CD d'origine. Nous sommes passés de la version 12 - Precise à la version 14 - Trusty, et du noyau 3.0.0-23 au noyau 3.13.0-101.

2-6-1. Problème avec Adeskbar et solution

Le menu Adeskbar d'origine n'est plus présent :

Image non disponible

Nous reprenons le dossier /etc/xdg/menus du CD original. Pour cela, nous montons le squash d'origine avec le CD mis dans un second lecteur (device sr1) :

 
Sélectionnez
mount /dev/sr1 /cdrom
mount /cdrom/casper/filesystem.squashfs /cdrom
rm /etc/xdg/menus/*
cp /cdrom/etc/xdg/menus/* /etc/xdg/menus

Nous allons ensuite redémarrer Adeskbar.

Pour cela, nous recherchons son pid avec :

 
Sélectionnez
ps -aux

Le processus Adeskbar apparaîtra sous la forme :

 
Sélectionnez
root 1551..... /usr/bin/python /usr/share/adeskbar/main.py

Nous tuons le processus Adeskbar via la commande kill, dans notre exemple le pid 1551 :

 
Sélectionnez
Kill 1551

Puis relançons celui-ci :

 
Sélectionnez
adeskbar &

Nous retrouvons bien notre menu :

Image non disponible

Nous recopions donc le dossier menus dans le dossier squashfs (dans notre cas squashfs-root) de notre partition de travail.

Nous constatons des entrées supplémentaires telles que « aide », « Nitrogen », que nous supprimons en effaçant les fichiers correspondants dans /usr/share/Applications. Nous tuons Adeskbar comme auparavant, puis répercutons les modifications dans le dossier squash.

Nous devons régénérer le SquashFS et l'ISO afin de vérifier le résultat.

2-7. Étape suivante de la mise à jour

Nous continuons notre mise à jour en effectuant à nouveau do-release-upgrade après chroot, comme vu précédemment.

Nous avons dû ajouter le point de montage /run avant de chrooter pour avoir accès au réseau :

 
Sélectionnez
mount -bind /run run

2-8. Nouveau résultat

Le nouvel ISO généré pèse 750 Mo au lieu des 589 du CD d'origine. Nous sommes passés de la version 14 - Trusty à la dernière version 16 - Xenial, et du noyau 3.13.0-101 au noyau 4.4.0-47.

2-8-1. Nouveau problème

Au boot, nous n'avons pas le splash screen et avons les messages suivants :

 
Sélectionnez
/scripts/init-premounts/plymouth: line 38: /sbin/plymouthd: not found
/scripts/init-premounts/plymouth: line 38: /bin/plymouth: not found

Le système démarre, mais la barre de progression reste activée :

Image non disponible

Ce problème n'apparaît pas à chaque démarrage. Pour supprimer cette barre de progression, il suffit d'ajouter la ligne suivante au fichier /etc/xdg/openbox/autostart :

 
Sélectionnez
plymouth quit

En dehors de cela, le système semble correctement fonctionner.

2-8-2. Résolution du nouveau problème

Après recherche sur Internet, le problème vient du changement de dossier par défaut de Plymouth. L'ancien chemin était dans /lib, le nouveau dans /usr/share.

Dans le chroot, nous avons eu une autre difficulté, nous avons dû exécuter chmod 1777 /tmp avant de pouvoir effectuer un apt-get update.

Nous réinstallons plymouth pour remettre les fichiers au bon endroit.

 
Sélectionnez
apt-get install --reinstall plymouth plymouth-themes

Nous déplaçons les fichiers plymouth de RedoBackup :

 
Sélectionnez
mv /lib/plymouth/themes/redo-logo /usr/share/plymouth/themes
rm /lib/plymouth -rf

Nous éditons ensuite le fichier /usr/share/plymouth/themes/redo-logo/redo-logo.plymouth afin de corriger les chemins.

Nous effectuons ensuite les opérations suivantes :

 
Sélectionnez
update-alternatives --install /usr/share/plymouth/themes/default.plymouth default.plymouth /usr/share/plymouth/themes/redo-logo/redo-logo.plymouth 100
update-alternatives --config default.plymouth

La dernière commande nous fait sélectionner le splash screen par défaut. Nos sélectionnons celui correspondant à RedoBackup.

Nous régénérons ensuite l'initrd :

 
Sélectionnez
update-initramfs -u

Après avoir quitté le chroot, nous régénérons un CD en y incorporant le nouvel initrd.

Au boot, le splash screen fonctionne.

Les icônes supprimées du menu applications ont été remises, nous les supprimons à nouveau. Il nous a fallu également supprimer des icônes dans le dossier /etc/skel/.local/share/applications pour l'analyseur d'utilisation disque.

2-8-3. Problème supplémentaire d'affichage

Nous pouvons constater un changement d'affichage. Les icônes des boîtes de dialogue ne sont plus arrondies.

Affichage normal :

Image non disponible

Affichage dégradé :

Image non disponible

2-8-4. Résolution du problème d'affichage

La commande lxappearance nous retourne un résultat différent entre le CD d'origine et notre CD.

CD source :

Image non disponible

CD actuel :

Image non disponible

Nous constatons que le thème utilisé dans le CD source se nomme « bluebird » et qu'il est absent de la liste des thèmes de notre nouveau CD.

Nous recopions donc le dossier /usr/share/themes/bluebird depuis le CD original. Un clic sur la commande bouton droit Restart permet l'affichage correct. Nous régénérons le SquashFS, puis le CD.

2-9. Tests de RedoBackup

2-9-1. Partition fantôme

Nous avons constaté l'apparition de partitions fantômes nommées « Unknown » :

Image non disponible

RedoBackup utilise des programmes externes tels que Partclone, fsarchiver (nous le verrons dans la partie création d'un paquet RedobackupCréation d'un paquet .deb pour RedoBackup).

Voyons le résultat retourné par la commande :

fsarchiver probe

 
Sélectionnez
ubuntu@PC-test:~# sudo fsarchiver probe

[======DISK======] [=============NAME==============] [====SIZE====] [MAJ] [MIN]
[sda       ] [VBOX HARDDISK         ] [  20.00 GB] [ 8] [ 0]
[sdb       ] [VBOX HARDDISK         ] [   8.00 GB] [ 8] [ 16]
[sr0       ] [CD-ROM             ] [  739.24 MO] [ 11] [ 0]
[sr1       ] [CD-ROM             ] [  326.21 MO] [ 11] [ 1]

[=====DEVICE=====] [==FILESYS==] [======LABEL======] [====SIZE====] [MAJ] [MIN]
[ram0      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 0]
[ram1      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 1]
[ram2      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 2]
[ram3      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 3]
[ram4      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 4]
[ram5      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 5]
[ram6      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 6]
[ram7      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 7]
[ram8      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 8]
[ram9      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 9]
[ram10      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 10]
[ram11      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 11]
[ram12      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 12]
[ram13      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 13]
[ram14      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 14]
[ram15      ] [<unknown> ] [<unknown>    ] [  64.00 MB] [ 1] [ 15]
[loop0      ] [squashfs  ] [<unknown>    ] [  694.65 GB] [ 7] [ 0]
[sda1      ] [ext3    ] [<unknown>    ] [  20.00 GB] [ 8] [ 1]
[sdb1      ] [vfat    ] [<unknown>    ] [   8.00 GB] [ 8] [ 17]

Le résultat varie en fonction de votre configuration.

Nous constatons que le(s) disque(s) fantôme(s) correspond(ent) à un RAMDISK.

2-9-1-1. Analyse et modification du code de RedoBackup

Nous recherchons dans le code de RedoBackup des lignes appelant fsarchiver. Nous trouvons celui-ci dans les fonctions :

  • sub find_local_drives ;
  • sub find_local_partitions.

Dans la fonction find_local_partitions, nous trouvons le code suivant :

 
Sélectionnez
# Get each partition's details
   next if $line =~ m/^\n/;
   next if $line =~ m/^loop/;
   next if $line =~ m/^ramzswap/;
   next if $line =~ m/^dm-/;

Tentons l'ajout de la ligne suivante :

 
Sélectionnez
next if $line =~ m/^ram/;

Relançons RedoBackup et cliquons sur « Sauvegarder » :

Image non disponible

Cela fonctionne.

2-9-2. Barre de progression inopérante

Nous lançons une sauvegarde et constatons que la barre de progression n'avance pas :

Image non disponible

La sauvegarde aboutit, mais la barre de progression RedoBackup ne fonctionne pas. Si nous lançons le script d'origine non modifié, nous constatons le même problème. Cela n'est pas dû à nos modifications du script.

La suppression du fichier /usr/share/locale/fr_FR/LC_MESSAGES/partclone.mo a réglé le problème.

En analysant le script redobackup, nous avons constaté qu'il utilisait les informations de partclone.log pour la barre de progression. Nous avons fait quelques tests entre les versions de partclone pour voir ce qui différait entre elles, pour constater que c'était dû à la traduction. Nous avons ensuite cherché où et comment se faisait la traduction.

2-10. Application des modifications

Nous appliquons nos modifications en copiant la nouvelle version du script dans notre dossier de préparation SquashFS, nous y supprimons également le fichier partclone.mo. Nous modifions également le numéro de version du fichier /usr/share/redo/VERSION (en le passant en v1.05_fr).

2-11. Nettoyage et allègement

2-11-1. Option remplacement du navigateur

Afin d'alléger la distribution, nous proposons de remplacer le navigateur incorporé Chromium par Midori, beaucoup plus léger. Libre à vous de garder le navigateur d'origine de la distribution si vous le souhaitez. Si vous remplacez le navigateur, il ne faut pas oublier de modifier le fichier /etc/xdg/openbox/menus.xml en conséquence.

Midori a ajouté une entrée de menu séparée, nommée Internet :

Image non disponible

La régénération du CD avec Midori à la place de Chromium pèse 684 Mo, soit un gain de 70 Mo.

2-11-2. Suppression de paquets inutiles

En chroot, nous commençons par supprimer les anciens noyaux :

 
Sélectionnez
dpkg -l|grep ii|grep linux-image* #listing des paquets noyaux installés
apt-get purge [nom du paquet à supprimer]

Le même modus operandi est utilisé pour lister les paquets et désinstaller ceux non utilisés :

 
Sélectionnez
dpkg -l|grep ii|more

La désinstallation de paquets peut rendre la distribution instable. Faites-le avec parcimonie, et faites attention aux dépendances. Dans le doute, laissez les paquets. La description de ceux-ci peut vous aider.

Voici les paquets que nous avons désinstallés :

  • aspell* ;
  • colord* ;
  • curftpfs ;
  • dns-root-data ;
  • enchant ;
  • gksu ;
  • grub* ;
  • lockfile-progs ;
  • logrotate ;
  • usbmuxd ;
  • wamerican ;
  • wodim ;
  • yelp.

2-11-3. Nettoyage

Nous allons utiliser l'outil Bleachbit qui permet un nettoyage approfondi du système et la suppression des langues superflues. Nous commençons par l'installer :

 
Sélectionnez
apt-get install bleachbit

puis nous le lançons par :

 
Sélectionnez
bleachbit

Image non disponible

Bleachbit s'ouvre sur la fenêtre des préférences dans laquelle il est possible de sélectionner les langues à conserver ou à retirer. Par défaut, il est proposé la suppression de toutes les langues sauf celle du système (ici le français), ainsi que l'anglais. Après fermeture de cette fenêtre, nous arrivons sur la fenêtre principale qui offre le choix des fichiers à supprimer. Nous cochons toutes les options et lançons le nettoyage.

Image non disponible

Une fois les opérations terminées, nous supprimons le logiciel lui-même et ses fichiers de configuration, puisqu'il ne nous sera pas utile dans l'image finale, par :

 
Sélectionnez
apt-get purge bleachbit
apt-get autoremove
apt-get clean
rm -rf ~/.config/bleachbit

Une fois sortis du chroot, avant de refaire une gravure, nous nettoyons les dossiers suivants :

  • tmp ;
  • var/log ;
  • var/tmp ;
  • var/run ;
  • run ;
  • usr/src/* ;
  • usr/include ;
  • usr/share/doc/* ;
  • usr/share/help/* ;
  • usr/share/help-langpack/* ;
  • usr/share/locale/* sauf fr et fr_FR ;
  • usr/share/locale-langpack/* ;
  • usr/share/man/*.

Nous nous retrouvons avec un fichier ISO de 433 Mo.

2-12. UEFI/SecureBoot

La partie SecureBoot est évoquée plus en détail dans le chapitre 5Compatibilité SecureBoot.

Il est à noter que le SecureBoot requiert un bootloader compatible SecureBoot signé.

2-12-1. Solution choisie

Nous avons tout d'abord essayé de générer un ISO contenant un noyau 64 bits et un noyau 32 bits pouvant booter en UEFI et/ou en mode dit Legacy. Les applications resteront 32 bits, un système d'exploitation 64 bits étant en mesure d'exécuter du code 32 bits.

Les tests ont abouti à une solution compatible Legacy/UEFI SecureBoot avec un noyau 32 bits. Nous utiliserons donc uniquement un noyau 32 bits, un système 64 bits permettant de booter un OS 32 bits.

En cas de boot avec un BIOS ou en mode Legacy, le noyau sera booté via Isolinux. En cas de boot en UEFI, celui-ci sera réalisé par GRUB, comme pour le DVD Live Ubuntu. L'utilisateur n'aura pas à faire de choix.

2-12-2. Support UEFI

Nous copions le dossier EFI depuis le DVD « Ubuntu-Desktop-Amd64 » compatible SecureBoot. Nous activons ensuite le support UEFI dans la machine virtuelle de travail. Au boot, nous tombons sur le prompt de GRUB :

Image non disponible

La désactivation du support UEFI remettra l'affichage de l'écran de démarrage d'Isolinux.

En copiant le dossier EFI du DVD Ubuntu Live amd64 et en activant l'UEFI, ça boote avec l'interface GRUB. Le shell GRUB apparaît, car celui-ci ne trouve pas de fichier de configuration.

Nous testons en entrant les commandes suivantes :

 
Sélectionnez
linux /vmlinuz boot=casper
initrd /initrd.img
boot

Si vous ne rajoutez pas « boot=casper », le noyau s'arrêtera dans l'initramfs, car il ne pourra pas monter le « / ».

Le boot s'effectue, mais notre environnement se retrouve en anglais.

L'ajout du paramètre « locale=fr_FR » après casper permet le passage du menu en français, le clavier restant cependant en Qwerty.

Nous intégrons ensuite le dossier boot de l'ISO Ubuntu en espérant avoir les paramétrages nécessaires au clavier français. Le fichier grub.cfg servira de base pour notre menu GRUB.

Une fois le CD régénéré, il nous a fallu modifier le menu en appuyant sur la touche « e » de façon à corriger les noms de noyau et de l'initrd, puis valider avec F10. L'ajout manuel de l'option « locale=fr_FR » nous a permis d'avoir l'interface en français, mais le clavier reste en Qwerty. Nous avons contourné ceci en ajoutant la commande setxkbmap fr au fichier /etc/xdg/openbox/autostart (nécessité de reconstruire le SquashFS).

Nous avons tenté de faire afficher l'image de fond via l'ajout de la ligne suivante dans le fichier grub.cfg :

 
Sélectionnez
GRUB_BACKGROUND=/isolinux/bg_redo.png

Ceci ne fonctionne pas. Il semble que cette option ne soit pas compatible avec la version GRUB utilisée, le DVD Ubuntu Desktop Amd64 n'affichant pas non plus d'image en mode UEFI, alors qu'il y en a une en mode non UEFI.

2-12-3. Support SecureBoot

Après quelques essais, il s'est avéré que le CD tel quel ne boote pas en SecureBoot. Après recherche, VirtualBox n'est pas compatible Secureboot, tandis que VMWare l'est après ajout de la ligne suivante au fichier .vmx :

 
Sélectionnez
firmware = "efi"

Avec cette option activée dans le fichier vmx de votre VM, un média non compatible SecureBoot ne bootera pas.

Après recherche, nous avons trouvé le script suivant permettant la gravure d'un ISO compatible BIOS et UEFI (à exécuter depuis le dossier contenant les données à graver) :

 
Sélectionnez
xorriso -as mkisofs -b isolinux/isolinux.bin --no-emul-boot --boot-info-table --boot-load-size 4 -c isolinux/boot.cat --isohybrid-mbr isolinux/isohdpfx.bin --eltorito-alt-boot -e boot/grub/efi.img --no-emul-boot --isohybrid-gpt-basdat -o /mnt/test.iso -r .

Le fichier isohdpfx.bin a été récupéré dans /usr/lib/ISOLINUX après installation du paquet par apt-get. Le fichier efi.img étant présent après copie du dossier boot/grub du CD Ubuntu comme vu précédemment.

Nous ajouterons également le fichier .deb à la racine. La génération de celui-ci est vue au chapitre suivant.

3. Création d'un paquet .deb pour RedoBackup

Nous allons commencer par créer un paquet .deb contenant RedoBackup et l'installation de ses dépendances, ceci de façon à pouvoir d'une part l'utiliser sur tout type de distribution, et d'autre part accélérer la création de CD pendant les essais.

Pour nos essais, nous avons créé une VM démarrant sur une distribution Debian Live 8, de façon à construire et tester notre paquet. Les fichiers de celui-ci seront copiés sur le disque dur virtuel de la VM. Nous ajoutons un second disque virtuel pour pouvoir faire des essais de sauvegarde/restauration.

Pour réaliser ce paquet, nous nous sommes basés sur le tutoriel suivant :

http://alp.developpez.com/tutoriels/debian/creer-paquet

3-1. test de mise en fonctionnement

Après avoir ajouté un second CD virtuel, le lecteur principal étant occupé par le live CD, nous avons commencé par démarrer notre distribution Live Debian 8 et monté le contenu du CD original redobackup_fr dans le dossier /mnt2 via les commandes suivantes :

 
Sélectionnez
sudo mount /dev/sr1 /mnt
sudo mkdir /mnt2
sudo mount /mnt/casper/filesystem.squashfs /mnt2

/dev/sr1 correspond au deuxième lecteur de CD de la VM.

Ces commandes montent le SquashFS du CD RedoBackup dans le dossier /mnt2. Consultez le paragraphe sur la modification de CD de notre article sur la francisation de Redo Backup pour plus d'informations.

Nous copions ensuite le fichier /sbin/redobackup ainsi que le dossier /usr/share/redo sur le live pour effectuer nos essais de fonctionnement (RedoBackup est un script Perl, voir le tutoriel francisation de RedoBackup pour plus d'informations).

 
Sélectionnez
sudo cp /mnt2/sbin/redobackup* /sbin
sudo mkdir /usr/share/redo
sudo cp -R /mnt2/usr/share/redo/* /usr/share/redo

Nous lançons ensuite la commande dans la console et obtenons le message d'erreur suivant :

 
Sélectionnez
Gtk-Message ** : Failed to load module "canberra-gtk-module"

suivi du message :

 
Sélectionnez
Can't locate XML/Simple.pm in @INC ….........

Nous installons les paquets en commençant par lib-xml-simple-perl :

 
Sélectionnez
apt-get install libxml-simple-perl

Une fois ce paquet installé, l'interface de RedoBackup démarre, mais sans les images des boutons (backup & restore) :

Image non disponible

Nous installons ensuite le paquet canberra :

 
Sélectionnez
apt-get install libcanberra-gtk-module

Ceci ne change pas le problème d'affichage. Nous avons le message suivant dans la console :

 
Sélectionnez
Gtk-Warning ** : Attempting to store changes into ·`/root/.local/share/recently-used.xbel `

Le dossier .local n'existe pas dans le compte root, nous le créons :

 
Sélectionnez
mkdir -p /root/.local/share

Ceci règle le problème de message d'erreur précédent. Nous avons ensuite l'erreur suivante :

 
Sélectionnez
sh: 1: notify-send: not found

réglé en installant le paquet nécessaire :

 
Sélectionnez
apt-get install libnotify-bin

Nous avons ensuite le message d'erreur suivant :

 
Sélectionnez
Invalid Number of options

Cette erreur vient de notre traduction. Il nous a fallu remplacer la ligne :

 
Sélectionnez
`notify-send 'Bienvenue dans RedoBackup' 'd'autres outils sont disponibles à partir du menu principal, accessibles dans l'angle en bas à gauche' -i info`

par :

 
Sélectionnez
`notify-send "Bienvenue dans RedoBackup" "d'autres outils sont disponibles à partir du menu principal, accessibles dans l'angle en bas à gauche" -i info`

Les simples quotes ne posaient pas de problème dans la version anglaise, l'anglais n'utilisant pas l'apostrophe.

À ce stade, plus de message d'erreur dans la console. Nous cliquons sur « sauvegarder », ceci déclenchant une erreur directement dans RedoBackup :

Image non disponible

Dans la console, nous obtenons deux messages d'erreur :

 
Sélectionnez
Use of uninitialized value $drivelist in scalar chomp at /sbin/redobackup line 1334.
Use of uninitialized value $drivelist in string eq at /sbin/redobackup line 1335.
Can't exec "beep" : No such file or directory at /sbin/redobackup line 1603.

Le dernier message sera simplement réglé par :

 
Sélectionnez
apt-get install beep

Voici la ligne provoquant une erreur dans le script RedoBackup :

 
Sélectionnez
1333.
1334.
1335.
1336.
my $drivelist = `fsarchiver probe 2>&1` ;
chomp($drivelist)
if ($drivelist eq "") {
...

Sans avoir de compétences Perl, nous reconnaissons une commande système :

 
Sélectionnez
fsarchiver probe 2>&1

fsarchiver est un outil permettant de sauvegarder le contenu d'un filesystem dans une archive compressée.

Nous l'installons :

 
Sélectionnez
apt-get install fsarchiver

Le logiciel bloque ensuite sur l'étape 2 : choix des partitions à sauvegarder. Il ne voit aucune partition :

Image non disponible

La console affiche le message :

 
Sélectionnez
Can't exec "os-prober" : Aucun fichier ou dossier de ce type...

Nous installons le paquet :

 
Sélectionnez
apt-get install os-prober

Nous pouvons ensuite sélectionner la ou les partition(s) à sauvegarder :

Image non disponible

Le processus reste ensuite bloqué sur la barre de progression de la sauvegarde :

Image non disponible

La console indique l'erreur suivante :

 
Sélectionnez
sh: 1: partclone.extfs: not found

résolue en installant le paquet :

 
Sélectionnez
apt-get install partclone

Vous ne pouvez pas sauvegarder une partition montée, sous peine d'avoir l'erreur :

Image non disponible

Erreur dans la console :

 
Sélectionnez
device (/dev/sda1) is mounted as /mnt
error exit

Nous avons réussi une sauvegarde/restauration.

Reste un problème : la barre de progression ne fonctionne pas. Après recherche, nous avons trouvé que le problème venait du fichier de traduction de partclone. Nous effaçons celui-ci :

 
Sélectionnez
sudo rm /usr/share/locale/fr_FR/LC_MESSAGES/partclone.mo

3-2. Construction du paquet

Nous préparons la structure de notre paquet dans un dossier nommé redobackup. Celui-ci contiendra l'arborescence des fichiers à copier, à savoir :

  • /sbin/redobackup* ;
  • /usr/share/redo/*.

Nous n'oublions pas de copier le script « drivereset » fourni avec RedoBackup ainsi que les fichiers .orig correspondant aux versions d'origine, avant francisation par nos soins.

Nous créons ensuite le fichier DEBIAN/control :

 
Sélectionnez
Package: RedoBackup
Version: 1.0
Architecture: all
Depends: libxml-simple-perl, libcanberra-gtk-module, libnotify-bin, beep, fsarchiver, os-prober, partclone
Maintainer: Christophe LOUVET & Philippe RONFLETTE <xxxx@yyy.zzz>
Description: Packaging of Redobackup script www.redobackup.fr

puis le script de post-installation DEBIAN/postinst qui créera le dossier local/share s'il n'existe pas.

Nous n'intégrons pas la suppression du fichier partclone.mo, car en cas d'utilisation d'une autre langue, la non-présence du fichier provoquera l'arrêt de l'installation, et nous ne savons pas si ce problème est spécifique au fichier de traduction français.

 
Sélectionnez
#!/bin/bash
mkdir -p ~/.local/share
mkdir -p /root/.local/share

Nous créons pour la forme un fichier de préinstallation affichant un message :

 
Sélectionnez
#/bin/bash
echo "Installation de Redo Backup"
echo "www.redobackup.org"
echo "Version francisée et packaging : Christophe LOUVET & Philippe RONFLETTE"

Nous changeons les droits des scripts comme précisé dans le tutoriel sur la création d'un paquet :

 
Sélectionnez
sudo chmod 755 redobackup/DEBIAN/pre*
sudo chmod 755 redobackup/DEBIAN/post*

Puis nous générons le paquet :

 
Sélectionnez
sudo dpkg-deb --build redobackup

3-3. Test du paquet créé

3-3-1. Installation du paquet

Une fois le paquet créé, nous redémarrons notre live, et nous récupérons le paquet pour faire un test d'installation.

Nous installons le paquet via la commande suivante :

 
Sélectionnez
sudo dpkg -i redobackup.deb

Celui-ci retourne une erreur de dépendances manquantes. Ceci est normal, il faut ensuite exécuter la commande suivante pour la résoudre :

 
Sélectionnez
sudo apt-get install -f

Pour pallier cela, il faudrait soumettre notre paquet à la communauté. Toutefois, son acceptation est peu probable, le projet n'évoluant plus. Il serait également possible de créer votre propre dépôt contenant le paquet. Voir ce lien.

3-3-2. Test sur live CD Debian 8 actuel

Suite à l'installation, le script RedoBackup se trouve bien dans le dossier /sbin. Nous faisons un test de sauvegarde/restauration : le résultat est correct.

3-3-3. Test sur live CD Ubuntu Xenial

Ubuntu Xenial sera la version de destination de notre projet. Le paquet s'installe sans difficulté via le même principe. Le système n'arrive pas à installer les paquets suivants :

  • beep ;
  • fsarchiver ;
  • partclone.

Pour résoudre ce problème, nous avons été obligés d'ajouter le dépôt universe dans le fichier /etc/apt/sources.list et de faire un apt-get update avant que l'installation des paquets précités puisse se faire.

Une fois installé, le logiciel ne se lance pas. Une erreur apparaît dans la console :

 
Sélectionnez
can't locate Glib.pm in @INC...

résolue par :

 
Sélectionnez
apt-get install libglib-perl

Nous avons ensuite l'erreur :

 
Sélectionnez
can't locate Gtk2.pm in @INC...

résolue par :

 
Sélectionnez
apt-get install libgtk2-perl

Une fois ces paquets installés, les tests de sauvegarde/restauration sont fonctionnels.

Il nous faudra donc ajouter ces paquets dans les dépendances requises.

3-3-4. Tests sur live CD Linux Mint

Nous ferons les essais sur trois versions différentes intégrant différents Window Manager :

  • Linux Mint Cinnamon ;
  • Linux Mint MATE ;
  • Linux Mate xfce.

Les tests avec les trois versions ont donné un résultat correct.

Le nouveau fichier DEBIAN/control sera :

 
Sélectionnez
Package: RedoBackup
Version: 1.0
Architecture: all
Depends: libxml-simple-perl, libcanberra-gtk-module, libnotify-bin, beep, fsarchiver, os-prober, partclone, libglib-perl, libgtk2-perl
Maintainer: Christophe LOUVET & Philippe RONFLETTE <xxx@yyy.zzz>
Description: Packaging of Redobackup script www.redobackup.fr

4. Construction d'une distribution RedoBackup à partir d'une Ubuntu minimale

Nous aboutirons à une image ISO de RedoBackup basée sur une version Ubuntu 16.04 64 bits. Le principe est applicable à une version 32 bits. Nous verrons dans la partie 5 comment construire une version supportée par les PC récents avec UEFI et SecureBoot actifs.

Le principe : nous installons une Ubuntu minimale (noyau Linux et console) que nous personnalisons. Nous utilisons ensuite cette installation pour construire un système de fichiers compressé qui permettra de réaliser une image ISO pour live CD ou USB.

Ces opérations peuvent indifféremment être faites à partir d'une installation en dur, ou à partir d'une machine virtuelle.

4-1. Installation et préparation de la distribution

4-1-1. Installation de la distribution minimale

Pour installer une Ubuntu minimale, c'est-à-dire ne disposant que d'un noyau et d'une console en mode texte (sans environnement graphique donc), nous utiliserons la version serveur d'Ubuntu que nous pouvons trouver ici. Il faudra choisir la version 32 bits en cliquant sur le lien « Plus d'options » permettant de préciser l'architecture voulue pour la télécharger (64 bits par défaut), et bien sûr en laissant cochée l'option LTS (support à long terme). Pour une construction compatible UEFI et SecureBoot telle que décrite dans la partie 4, il faudra choisir une version 64 bits.

Lors de l'affichage du menu de démarrage, nous appuyons sur la touche F4 afin d'afficher des options d'installation, et nous choisissons « Installer un système minimal » dans le menu qui s'affiche.

Image non disponible

Puis nous cliquons sur « Installer Ubuntu Server ». Nous choisissons Ubuntu comme nom de machine et comme nom d'utilisateur afin de nous simplifier la tâche par la suite. Nous mettons également Ubuntu comme mot de passe. Dans le cas contraire, en effet, il nous faudrait effectuer des modifications de certains fichiers système avant la création du système de fichiers.

L'installeur nous propose l'installation de fonctionnalités supplémentaires. Nous n'installons que le système de base.

Image non disponible

Au premier démarrage, nous arrivons sur une console.

Image non disponible

Nous commençons par changer le mot de passe root, le compte root étant désactivé par défaut sous Ubuntu.

 
Sélectionnez
sudo passwd root

Une fois le mot de passe entré, nous nous loguons en root.

Il ne faut jamais travailler en root. Nous dérogeons à cette règle, car notre distribution sera transformée en live cd.

Il est également à noter que les interfaces graphiques telles que KDE ou Gnome refusent de démarrer en root.

Nous mettons à jour la liste des paquets par :

 
Sélectionnez
apt-get update

puis nous mettons à jour la distribution par :

 
Sélectionnez
apt-get upgrade

4-1-2. Ajout de l'interface graphique

Nous installons ensuite l'interface graphique minimale OpenBox :

 
Sélectionnez
apt-get install openbox

Nous tentons le démarrage de l'interface graphique :

 
Sélectionnez
startx

Ceci ne fonctionne pas, il manque le serveur X :

 
Sélectionnez
apt-get install xorg

Suite à cela, l'appel de startx fonctionne et nous nous trouvons devant un écran gris :

Image non disponible

L'interface est fonctionnelle, si nous cliquons sur le bouton droit de la souris, nous avons accès au menu de base d'OpenBox :

Image non disponible

4-1-3. Installation des applications

Nous installons l'essentiel : RedoBackup. Une fois le .deb récupéré (par clé USB par exemple), celui-ci s'installe sans difficulté et nous avons la bonne surprise de voir les icônes de bouton apparaître.

Rappel des commandes d'installation :

 
Sélectionnez
dpkg -i redobackup.deb
apt-get install -f

 Nous montons ensuite le SquashFS d'origine de façon à récupérer le menu contextuel d'OpenBox :

 
Sélectionnez
 mount /dev/sr1 /mnt
 mount /mnt/casper/filesystem.squashfs /mnt
 cp /mnt/etc/xdg/openbox/menu.xml /etc/xdg/openbox
 umount /mnt

Après copie du fichier et clic de restart dans le menu contextuel, le menu est mis à jour :

Image non disponible

Nous installons les outils fournis avec le CD original:

 
Sélectionnez
apt-get install leafpad pcmanfm gparted gpicview testdisk system-config-lvm

Nous avons installé gdmap, plus léger, à la place de baobab :

 
Sélectionnez
apt-get install gdmap

Nous n'installons pas Chromium, mais nous le remplaçons par le navigateur Midori, plus léger.

 
Sélectionnez
apt-get install midori

Nous remplaçons l'entrée du navigateur Web en conséquence dans le menu contextuel.

4-1-4. Paramétrages de la distribution

Nous allons opérer divers paramétrages qui nous seront nécessaires ou utiles pour notre live CD/USB.

4-1-4-1. Ajout d'un dock

Nous avons tenté de remettre Adeskbar, mais celui-ci n'est pas opérationnel.

Nous avons testé :

  • lxpanel ;
  • wbar ;
  • cairo-dock.

Nous avons opté pour cairo-dock, très léger, facilement paramétrable, et au bel effet visuel.

4-1-4-1-1. Installation de cairo-dock

Cairo-dock s'installe tout simplement via :

 
Sélectionnez
apt-get install cairo-dock

Le lancement se fera via :

 
Sélectionnez
cairo-dock

Une boîte de dialogue nous demande si nous souhaitons utiliser OpenGL ou non, et précise qu'il faut ajouter l'option -o pour démarrer en mode OpenGL :

Image non disponible

Nous cliquons ensuite avec le bouton droit de la souris dans le dock pour essayer d'accéder à la configuration :

Image non disponible

Nous accédons à l'onglet greffon permettant de désactiver toutes les icônes que nous ne souhaitons pas :

Image non disponible

En bas à gauche, un bouton mode avancé nous permet de disposer de davantage de fonctionnalités :

Image non disponible

Nous avons coché l'option « Horloge ».

Pour positionner les icônes à l'endroit souhaité, il suffit de les déplacer avec la souris.

Pour ajouter les icônes des différentes applications, il suffit de les lancer, cliquer droit sur leur icône dans le cairo-dock, aller dans le menu portant le nom de l'application, puis cliquer sur « en faire un lanceur » :

Image non disponible

Le placement de l'icône de RedoBackup dans le dock nous a posé problème, la procédure habituelle nous a retourné le message suivant :

 
Sélectionnez
Désolé, le fichier de description correspondant n'a pu être trouvé. Veuillez glisser-déposer le lanceur à partir du menu applications.

Pour pallier cela, nous avons créé un fichier .desktop pour RedoBackup en faisant une copie d'un des fichiers de /usr/share/applications et en le modifiant. Une fois cette manipulation effectuée, l'icône peut être insérée.

Nous incorporerons ce fichier .desktop dans le paquet redobackup.deb.

4-1-4-2. Paramétrages des fichiers de lancement des applications

Nous commençons par automatiser le démarrage d'OpenBox. Pour cela nous installons slim (Simple Login Manager) :

 
Sélectionnez
apt-get install slim

Nous éditons ensuite son fichier de configuration : /etc/slim.conf.

Nous décommentons la ligne :

 
Sélectionnez
#default_user  simone

et mettons notre nom d'utilisateur : root.

Nous décommentons également la ligne :

 
Sélectionnez
#auto_login  no

et remplaçons le « no » par « yes ».

Slim modifie le path par défaut, rendant inopérant RedoBackup. Pour pallier cela, nous avons récupéré le path avant installation de slim par :

 
Sélectionnez
echo $PATH>chemin.txt

Le fichier slim.conf contient une ligne :

 
Sélectionnez
default_path

Nous avons envoyé le contenu de chemin.txt dans le fichier slim.conf via :

 
Sélectionnez
cat chemin.txt >>/etc/slim.conf

Puis nous avons remplacé la valeur par défaut par un copier-coller.

Pour démarrer automatiquement RedoBackup à l'ouverture de session, nous avons ajouté la ligne suivante dans le fichier /etc/xdg/openbox/autostart :

 
Sélectionnez
/sbin/redobackup &

Le « & » à la fin de la ligne permet, comme dans un terminal, de lancer le reste du processus plutôt que d'attendre la fin de la commande appelée.

Nous ajoutons également au fichier /etc/xdg/openbox/autostart l'entrée permettant de démarrer cairo-dock :

 
Sélectionnez
cairo-dock &

La commande précédente génère un blocage après le chargement de cairo-dock.

Pour pallier ce problème, la commande a été modifiée afin de générer un délai.

 
Sélectionnez
sleep 15 && cairo-dock &

4-1-4-3. Paramétrages divers des applications et de la distribution

Nous commençons par intégrer l'image de fond comme dans la version originale. Pour cela, nous installons le paquet feh :

 
Sélectionnez
apt-get install feh

Nous récupérons l'image de fond depuis l'ISO original (le fichier /usr/share/backgrounds/redo_blue.png), comme vu ici. Nous la plaçons dans le dossier /usr/share/redo.

Pour l'activer au démarrage, nous ajoutons la ligne suivante au fichier /etc/xdg/openbox/autostart :

 
Sélectionnez
feh -bg-scale /usr/share/redo/redo_blue.png &

Nous pouvons opérer diverses personnalisations à notre convenance, telles que par exemple :

- la configuration du navigateur Web Midori et de ses moteurs de recherche en modifiant les fichiers /etc/xdg/midori/config et search ;

- le comportement par défaut de PCManFM (pour afficher par exemple les réseaux dans les emplacements) en allant dans le menu Édition => Préférences => Agencement de PCManFM (cocher le bouton réseau) ;

- la création d'une entrée pour photorec en copiant-collant un des fichiers existants que l'on renommera photorec.desktop et dont on modifiera le contenu pour avoir notamment « Name=Récupération de données »,  « exec=photorec », « terminal=true »).

4-1-4-4. Nettoyage de la distribution

Nous allons maintenant nettoyer la distribution d'un maximum de fichiers inutiles afin d'alléger l'ISO final.

Depuis OpenBox, pour supprimer définitivement un fichier sans qu'il soit placé dans la corbeille, il suffit d'appuyer simultanément sur les touches [shift] et [Suppr].

Nous allons désinstaller les paquets inutiles. Nous commençons par lister ceux-ci :

 
Sélectionnez
dpkg -l|more

Désinstaller des paquets importants peut rendre votre système inutilisable ; dans le doute, passez cette étape.

Voici quelques exemples de paquets que nous avons désinstallés :

  • apparmor ;
  • apport* ;
  • aspell ;
  • cloud* ;
  • colord ;
  • enchant ;
  • lxd-client ;
  • sosreport ;
  • ubuntu-cloudimage-keyring.

La désinstallation se fait par :

 
Sélectionnez
apt-get purge nom-du-paquet

Nous nous assurons d'un complet nettoyage par quelques opérations complémentaires en ligne de commande.

Nous supprimons les fichiers logs qui se trouvent dans /var/log par :

 
Sélectionnez
rm -rf /var/log/*.log

les fichiers de crash (erreurs de démarrage des logiciels) :

 
Sélectionnez
rm -r /var/crash/*

les miniatures des images qui se trouvent dans ~/.thumbnails :

 
Sélectionnez
rm -rf ~/.thumbnails/normal/*

le répertoire tmp :

 
Sélectionnez
rm -rf /tmp/*

Nous pouvons également gagner de la place en supprimant des thèmes d'icônes dans /usr/share/icons. Nous ne conserverons que les répertoires Hicolor, Humanity, Humaniry-dark, ubuntu-mono-light et ubuntu-mono-dark.

Nous pouvons encore supprimer les fonds d'écran dans /usr/share/wallpapers par :

 
Sélectionnez
rm -rf /usr/share/wallpapers/*

La suppression d'icônes utilisées par cairo-dock peut entraîner des problèmes avec celui-ci.

Vidons la corbeille de l'utilisateur courant :

 
Sélectionnez
rm -rf ~/.local/share/Trash/*

Nous pouvons également supprimer manuellement les fichiers de man, les locales pour les langues autres que le français, les en-têtes Linux dans /usr/src, les documentations dans /usr/doc. Nous pouvons utiliser l'outil Bleachbit tel que vu dans le paragraphe 2.11.3Nettoyage.

En cas de besoin de ces fichiers, la réinstallation des paquets remettra les fichiers effacés.

4-2. Préparation du système de fichiers

4-2-1. Construction des répertoires nécessaires à la construction et création du système de fichiers

Nous commençons par définir des variables d'environnement dont vous pourrez personnaliser le contenu. L'utilisateur ne doit toutefois pas être modifié sans que cela ne nécessite d'autres opérations non décrites dans ce tutoriel.

 
Sélectionnez
export CONSTRUCTION=~/construction
export CD=~/cd

Nous préparons des répertoires de travail par :

 
Sélectionnez
mkdir -p "$CD"/casper "$CD"/boot/grub "${CONSTRUCTION}"

Nous y copions le système de fichiers de notre distribution installée, en excluant certains fichiers et répertoires grâce à la commande rsync :

 
Sélectionnez
 rsync -av --one-file-system --exclude=/dev/* \
--exclude=/tmp/* --exclude=/home/* --exclude=/var/tmp/* --exclude=/boot/grub/* --exclude=/root/* \
--exclude=/var/spool/* --exclude=/media/* \
--exclude=/etc/fstab --exclude=/etc/mtab \
--exclude="$CONSTRUCTION" / /"$CONSTRUCTION"

4-2-2. Opérations à faire dans le nouveau système

Le chroot est une technique permettant de se placer dans un autre système de fichiers en utilisant des ressources du système à partir duquel on effectue celui-ci. On peut ainsi travailler dans cet autre système de fichiers comme s'il s'agissait de notre système.

Nous commencerons par monter certains dossiers spéciaux du système en cours vers notre nouveau système, ceci à partir du dossier représentant le contenu du chroot. Les points de montage /proc, /sys et dev/pts doivent être remontés vers le chroot pour un fonctionnement correct (l'option -bind permet de ne pas modifier le fichier /etc/fstab) :

 
Sélectionnez
cd $CONSTRUCTION
mount --bind /proc proc
mount --bind /sys sys
mount -t devpts dev/pts

La commande rsync n'ayant pas traité le dossier dev, celui-ci est vide dans notre dossier de construction. Il nous faut donc créer le dossier pts avant de préparer les points de montage pour le chroot :

 
Sélectionnez
mkdir "$CONSTRUCTION"/dev/pts

Nous nous plaçons maintenant dans notre nouveau système par :

 
Sélectionnez
chroot "$CONSTRUCTION"

Nous y installons des paquets indispensables pour la construction d'une image live, après avoir fait une mise à jour de la liste des paquets.

Dans le chroot, nous n'avions pas le réseau, nous avons été obligés de sortir de celui-ci, et de copier le fichier /etc/resolv.conf après suppression du lien symbolique existant vers /run/resolvconf.d.

 
Sélectionnez
apt-get update
apt-get install casper lupin-casper

Nous nous assurons d'un complet nettoyage du système :

 
Sélectionnez
apt-get clean

Nettoyage des fichiers log par :

 
Sélectionnez
find /var/log -regex '.*?[0-9].*?' -exec rm -v {} \;

Remise à zéro des fichiers log restants :

 
Sélectionnez
find /var/log -type f | while read file
do
    cat /dev/null | tee $file
done

Puis nous sortons du chroot par :

 
Sélectionnez
exit

et nous démontons les répertoires montés pour le chroot :

 
Sélectionnez
umount dev/pts sys proc

4-3. Construction de l'image ISO

4-3-1. Mise en place du noyau

Nous copions le noyau et l'initramfs (appelé aussi initrd) dans le répertoire casper de l'ISO :

 
Sélectionnez
cp -vp "$CONSTRUCTION"/vmlinuz-$(uname -r) "$CD"/casper/vmlinuz
cp -vp "$CONSTRUCTION"/initrd.img-$(uname -r) "$CD"/casper/initrd.img

Nous supprimons le dossier boot qui ne nous sera pas nécessaire :

 
Sélectionnez
rm -rf "$CONSTRUCTION"/boot

4-3-2. Compression du système

Nous installons les outils dont nous aurons besoin :

 
Sélectionnez
apt-get install xorriso squashfs-tools

puis nous construisons l'image compressée du système de fichiers par :

 
Sélectionnez
mksquashfs "$CONSTRUCTION" "$CD"/casper/filesystem.squashfs

4-3-3. Mise en place du bootloader

Nous pouvons tout simplement récupérer les fichiers de bootloader de l'image ISO originale pour démarrer sur notre nouvel ISO. Pour cela nous récupérons les dossiers install et isolinux que nous plaçons dans notre dossier $CD de construction de l'ISO. Nous nous assurons que les entrées de menu du fichier /isolinux/isolinux.cfg ont bien les noms des noyaux de démarrage de la distribution contenus dans le répertoire /casper : vmlinuz et initrd.img. Par rapport à l'ISO d'origine, nous avons dû changer l'extension de l'initrd dans le fichier isolinux.cfg, la compression utilisée étant lz.

4-3-4. Construction de l'ISO

Nous installons l'outil de construction d'images ISO par :

 
Sélectionnez
apt-get install genisoimage

puis nous lançons cette construction par :

 
Sélectionnez
genisoimage -o "live-redo.iso" -r -J --no-emul-boot --boot-load-size 4 --boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat "$CD"

Dans cette commande vous pouvez remplacer « live-redo.iso » par un nom d'image ISO de votre choix.

5. Compatibilité SecureBoot

SecureBoot fait partie de la spécification UEFI.

Nous allons commencer par décrire ce qu'est l'UEFI.

5-1. Qu'est-ce que l'UEFI ?

L'UEFI (Unified Extensible Firmware Interface) est ce qui remplace le BIOS dans les machines récentes. C'est un microsystème à part entière,chargé de démarrer les systèmes d'exploitation. Il comprend un Shell UEFI. Il est possible de développer des applications UEFI. Les cartes mères intègrent une émulation BIOS pour la rétrocompatibilité. Votre disque dur contiendra une partition ESP qui est en fait une partition FAT32.

Un fichier .efi est un fichier au format Windows PE.

Windows peut booter en UEFI depuis Windows Vista SP2. Le SecureBoot activé par défaut (et donc la présence d'UEFI) est obligatoire pour qu'un appareil obtienne le logo « Windows Compatible » depuis Windows 8.

Concrètement, les machines modernes contiennent des clés Microsoft permettant de contrôler les signatures des systèmes d'exploitation. Si le SecureBoot est actif, un système non signé par une clé présente ne s'amorcera pas.

Il est possible d'ajouter ses propres clés, mais cela est complexe. La solution adoptée par Ubuntu est d'avoir son bootloader signé par Microsoft. Debian, par exemple, refuse cet état de fait.

Soit votre BIOS vous propose un menu pour booter au choix en mode UEFI ou en mode compatibilité, soit il faut chercher l'option dans ses menus. L'activation du mode compatibilité empêchera le boot de l'OS installé en UEFI et empêchera l'accès aux disques partitionnés en GPT.

La désactivation de l'option SecureBoot permettra l'amorce d'un système non signé avec les clés Microsoft.

Dans la suite de ce tutoriel, nous utiliserons l'expression de BIOS UEFI communément utilisée.

5-1-1. GPT

GPT (GUID Partition Table) remplace le MBR (Master Boot Record) dans les BIOS UEFI. GPT permet de dépasser la limitation à 2,2 To de MBR et d'avoir jusqu'à 128 partitions au lieu de 4 pour le MBR. Le début d'une table GPT contient un MBR pour rétrocompatibilité. L'utilisation d'UEFI implique l'utilisation d'une table GPT à la place d'une table MBR.

5-1-2. SecureBoot

Le SecureBoot est une option UEFI permettant de faire un contrôle de signature avant de booter un noyau ou un autre programme UEFI. Les signatures numériques sont stockées dans le firmware de la carte mère.

Microsoft impose la présence de SecureBoot pour qu'une machine soit estampillée Windows Compatible.

Extrait du « Windows Hardware Compatibility Program Requirements » :

Windows 8 and later WHCP requires that systems implement UEFI native boot as the firmware boot mode and Secure Boot as the default out-of-box configuration.

Cette fonctionnalité complexifie l'installation et l'utilisation de Linux sur les machines ayant Windows préinstallé. Nous vous recommandons la lecture des articles suivants :

Ceci implique que toute machine neuve avec Windows 8/10 préinstallé aura le SecureBoot activé.

Il est à noter que la master key SecureBoot de Microsoft a été dévoilée par erreur.

Si vous voulez utiliser Linux sur une machine UEFI avec SecureBoot, voici les solutions :

5-1-3. Implémentation

Notre distribution étant basée sur Ubuntu, nous pourrons la rendre plus facilement compatible SecureBoot.

5-2. Fonctionnement avec live CD Ubuntu

Si vous démarrez un live CD Ubuntu 16 en mode BIOS, vous aurez l'écran suivant :

Image non disponible

Alors qu'avec le même CD, en boot UEFI, vous aurez l'écran suivant :

Image non disponible

Si vous regardez le contenu du DVD, vous verrez les trois dossiers suivants :

  • isolinux ;
  • boot/grub ;
  • EFI/boot.

5-3. Implémentation

5-3-1. Première approche

Notre CD ne boote pas en UEFI (même sans SecureBoot), et la présence des dossiers isolinux et boot/grub nous fait supposer que le boot se fait différemment, selon que l'on est en BIOS ou en UEFI.

En recherchant sur Internet des informations sur la compatibilité UEFI des DVD, nous avons trouvé le script suivant, permettant la gravure de DVD hybride UEFI/BIOS :

 
Sélectionnez
xorriso -as mkisofs --isohybrid-mbr isolinux/isohdpfx.bin -c isolinux/boot.cat -b isolinux/isolinux.bin --no-emul-boot --boot-load-size 4 --boot-info-table --eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -o nom_cd.iso .

De ce que nous en avons compris, le CD est un CD hybride contenant une partition MBR et une partition GPT. Nous copions donc les dossiers boot et EFI depuis le live CD Ubuntu dans notre dossier de préparation de gravure. Nous récupérons également le fichier casper/vmlinuz.efi.

Nous modifions notre fichier isolinux/isolinux.cfg pour remplacer vmlinuz par vmlinuz.efi.

Notre dossier isolinux ne contient pas le fichier isohdpfx.bin, problème résolu en installant isolinux et en copiant le fichier :

 
Sélectionnez
sudo apt-get install isolinux
sudo cp /usr/lib/ISOLINUX/isohdpfx.bin /mnt/iso/isolinux

Après ces modifications et une nouvelle gravure, le CD boote en mode BIOS et en mode UEFI depuis une machine virtuelle. Par contre, il ne semble pas fonctionner avec le SecureBoot.

5-3-2. « Hack » d'un LiveDVD compatible SecureBoot existant

Nous avons ensuite tenté la modification d'un Live existant.

Nous avons pour cela utilisé l'outil isomaster permettant de modifier un ISO existant :

Image non disponible

L'arborescence du haut correspond au contenu de votre Filesystem, l'arborescence du bas correspond au contenu du fichier ISO.

Nous remplaçons le fichier casper/filesystem.squashfs de l'ISO par le nôtre. Nous supprimons les fichiers filesystem.size et filesysstem.squashfs.gpg.

Nous remplaçons le fichier de configuration isolinux/isolinux.cfg, et nous modifions les fichiers boot/grub/grub.cfg et loopback.cfg pour qu'ils correspondent à nos fichiers plutôt que ceux d'origine du DVD en cours de modification.

Avec isomaster, il n'est pas possible de modifier un fichier, il est uniquement possible d'en supprimer et d'en ajouter.

Pour modifier un fichier présent dans l'ISO, il faut donc l'extraire, le modifier, puis le remplacer dans l'ISO.

La solution isomaster ne fonctionne que si le CD d'origine est compatible SecureBoot, sinon utilisez le script xorriso en 5.1.3.

6. Conclusion

Avec ce tutoriel, vous avez vu :

  • comment générer un package Debian ;
  • comment upgrader un système obsolète et gérer les effets de bord de cette manipulation ;
  • comment transformer un système en cours d'exécution en live CD ;
  • comment rendre compatible votre live CD avec SecureBoot.

Vous pouvez télécharger notre version live CD sur SourceForge.

6-1. Remerciements

Nous remercions Gaby277 pour ses tests.

Nous remercions Zoom61 pour ses remarques et conseils.

Nous remercions ClaudeLeloup et KartSeven pour leur relecture orthographique.