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 :
mount /dev/sda1 /mnt
/dev/sda1 sera peut-être à adapter à votre situation.
2-2. Décompression du SquashFS▲
Nous installons les squashfs-tools :
apt-get install squashfs-tools
Nous décompressons ensuite le SquashFS du CD :
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 :
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 :
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 :
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 :
Nous répondons « Yes ».
Nous avons ensuite une demande de mise à jour GRUB :
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 :
apt-get clean
Puis sortons du chroot :
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 :
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 :
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 :
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 :
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 :
!#/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 :
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) :
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 :
ps -aux
Le processus Adeskbar apparaîtra sous la forme :
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 :
Kill 1551
Puis relançons celui-ci :
adeskbar &
Nous retrouvons bien notre menu :
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 :
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 :
/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 :
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 :
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.
apt-get install --reinstall plymouth plymouth-themes
Nous déplaçons les fichiers plymouth de RedoBackup :
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 :
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 :
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 :
Affichage dégradé :
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 :
CD actuel :
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 » :
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
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 :
# 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 :
Relançons RedoBackup et cliquons sur « Sauvegarder » :
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 :
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 :
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 :
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 :
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 :
apt-get install bleachbit
puis nous le lançons par :
bleachbit
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.
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 :
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 :
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 :
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 :
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 :
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) :
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 :
https://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 :
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).
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 :
Gtk-Message ** : Failed to load module "canberra-gtk-module"
suivi du message :
Can't locate XML/Simple.pm in @INC ….........
Nous installons les paquets en commençant par lib-xml-simple-perl :
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) :
Nous installons ensuite le paquet canberra :
apt-get install libcanberra-gtk-module
Ceci ne change pas le problème d'affichage. Nous avons le message suivant dans la console :
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 :
mkdir -p /root/.local
/share
Ceci règle le problème de message d'erreur précédent. Nous avons ensuite l'erreur suivante :
sh: 1
: notify-send: not found
réglé en installant le paquet nécessaire :
apt-get install libnotify-bin
Nous avons ensuite le message d'erreur suivant :
Invalid Number of options
Cette erreur vient de notre traduction. Il nous a fallu remplacer la ligne :
`notify-send 'Bienvenue dans RedoBackup' 'd'autres outils sont disponibles à partir du menu principal, accessibles dans l'angle en bas à gauche' -i info`
par :
`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 :
Dans la console, nous obtenons deux messages d'erreur :
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 :
apt-get install beep
Voici la ligne provoquant une erreur dans le script RedoBackup :
Sans avoir de compétences Perl, nous reconnaissons une commande système :
fsarchiver probe 2
>&
1
fsarchiver est un outil permettant de sauvegarder le contenu d'un filesystem dans une archive compressée.
Nous l'installons :
apt-get install fsarchiver
Le logiciel bloque ensuite sur l'étape 2 : choix des partitions à sauvegarder. Il ne voit aucune partition :
La console affiche le message :
Can't exec "os-prober" : Aucun fichier ou dossier de ce type...
Nous installons le paquet :
apt-get install os-prober
Nous pouvons ensuite sélectionner la ou les partition(s) à sauvegarder :
Le processus reste ensuite bloqué sur la barre de progression de la sauvegarde :
La console indique l'erreur suivante :
sh: 1
: partclone.extfs: not found
résolue en installant le paquet :
apt-get install partclone
Vous ne pouvez pas sauvegarder une partition montée, sous peine d'avoir l'erreur :
Erreur dans la console :
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 :
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 :
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.
#!/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 :
#/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 :
sudo chmod 755
redobackup/DEBIAN/pre*
sudo chmod 755
redobackup/DEBIAN/post*
Puis nous générons le paquet :
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 :
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 :
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 :
can't locate Glib.pm in @INC...
résolue par :
apt-get install libglib-perl
Nous avons ensuite l'erreur :
can't locate Gtk2.pm in @INC...
résolue par :
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 :
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.
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.
Au premier démarrage, nous arrivons sur une console.
Nous commençons par changer le mot de passe root, le compte root étant désactivé par défaut sous Ubuntu.
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 :
apt-get update
puis nous mettons à jour la distribution par :
apt-get upgrade
4-1-2. Ajout de l'interface graphique▲
Nous installons ensuite l'interface graphique minimale OpenBox :
apt-get install openbox
Nous tentons le démarrage de l'interface graphique :
startx
Ceci ne fonctionne pas, il manque le serveur X :
apt-get install xorg
Suite à cela, l'appel de startx fonctionne et nous nous trouvons devant un écran gris :
L'interface est fonctionnelle, si nous cliquons sur le bouton droit de la souris, nous avons accès au menu de base d'OpenBox :
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 :
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 :
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 :
Nous installons les outils fournis avec le CD original:
apt-get install leafpad pcmanfm gparted gpicview testdisk system-config-lvm
Nous avons installé gdmap, plus léger, à la place de baobab :
apt-get install gdmap
Nous n'installons pas Chromium, mais nous le remplaçons par le navigateur Midori, plus léger.
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 :
apt-get install cairo-dock
Le lancement se fera via :
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 :
Nous cliquons ensuite avec le bouton droit de la souris dans le dock pour essayer d'accéder à la configuration :
Nous accédons à l'onglet greffon permettant de désactiver toutes les icônes que nous ne souhaitons pas :
En bas à gauche, un bouton mode avancé nous permet de disposer de davantage de fonctionnalités :
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 » :
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 :
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) :
apt-get install slim
Nous éditons ensuite son fichier de configuration : /etc/slim.conf.
Nous décommentons la ligne :
#default_user simone
et mettons notre nom d'utilisateur : root.
Nous décommentons également la ligne :
#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 :
echo $PATH
>
chemin.txt
Le fichier slim.conf contient une ligne :
default_path
Nous avons envoyé le contenu de chemin.txt dans le fichier slim.conf via :
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 :
/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 :
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.
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 :
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 :
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 :
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 :
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 :
rm -rf /var/log/*.log
les fichiers de crash (erreurs de démarrage des logiciels) :
rm -r /var/crash/*
les miniatures des images qui se trouvent dans ~/.thumbnails :
rm -rf ~/.thumbnails/normal/*
le répertoire tmp :
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 :
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 :
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.
export CONSTRUCTION
=
~/construction
export CD
=
~/cd
Nous préparons des répertoires de travail par :
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 :
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) :
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 :
mkdir "
$CONSTRUCTION
"
/dev/pts
Nous nous plaçons maintenant dans notre nouveau système par :
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.
apt-get update
apt-get install casper lupin-casper
Nous nous assurons d'un complet nettoyage du système :
apt-get clean
Nettoyage des fichiers log par :
find /var/log -regex '.*?[0-9].*?'
-exec rm -v {} \;
Remise à zéro des fichiers log restants :
find /var/log -type f |
while
read file
do
cat /dev/null |
tee $file
done
Puis nous sortons du chroot par :
exit
et nous démontons les répertoires montés pour le chroot :
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 :
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 :
rm -rf "
$CONSTRUCTION
"
/boot
4-3-2. Compression du système▲
Nous installons les outils dont nous aurons besoin :
apt-get install xorriso squashfs-tools
puis nous construisons l'image compressée du système de fichiers par :
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 :
apt-get install genisoimage
puis nous lançons cette construction par :
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 :
- La Linux Foundation arrache une solution pour le SecureBoot
- Linus Torvalds s'oppose radicalement au SecureBoot et déverse sa colère sur RedHat qui propose d'intégrer un patch à Linux
- Windows 10-ils fermés à Linux ?
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 :
- désactiver SecureBoot ;
- utiliser une distribution Linux ayant acheté une clé à Microsoft telle que Redhat ou Ubuntu ;
- utiliser la solution proposée par la Linux Foundation ;
- utiliser Shim ;
- utiliser notre méthode vue au chapitre 2.12.3Support SecureBoot.
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 :
Alors qu'avec le même CD, en boot UEFI, vous aurez l'écran suivant :
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 :
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 :
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 :
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.