arpinux - devblog

journal d'un apprenti dev debian

construire une Debian - partie 3 : personnalisation système et utilisateur

rédigé par arpinux - - 2 commentaires

pour celles et ceux qui auraient raté le début, le sommaire est dans le premier article.

alors aujourd'hui, 3° épisode de la saga je me fait ma debian tout seul : on va attaquer les modifications en dur du live-cd, c'est à dire en agissant directement sur les dossiers et fichers du live-cd.

au programme de cet article :

  • modification du dossier système depuis config/includes.chroot : redéfinir le comportement du sytème par défaut
  • modification du dossier utilisateur depuis config/includes.chroot/etc/skel : la personnalisation fine avec vos réglages, vos préférences, même vos données si vous voulez
  • test de l'iso en vbox et derniers changements : on va quand même voir si ça fonctione... et changer les derniers trucs pour achever la personnalisation de votre live-cd

nous avons vu que la construction d'un live-cd s'effectuait dans un chroot, un sous-sytème dans votre système. nous avons vu hier que vous pouviez agir sur ce chroot grâce aux options du live-build, mais également depuis les scripts hooks qui modifient le chroot de l'intérieur avant sa compression dans le squashfs.

nous allons voir aujourd'hui comment remplacer ou ajouter des fichiers dans le chroot avant même le processus de construction.

 

config/includes.chroot : modification directe du système

si vous avez fait le test à vide lors du premier article, vous avez remarqué ce dossier vide dans votre environnement de build. ce dossier sera copié dans le chroot avant l'exécution des scripts hooks. euh .. oui .. et ? et bien cela signifie que tout ce qui sera dans ce dossier config/includes.chroot se retrouvera dans le chroot, donc dans le squashfs, donc dans le live-cd.

oki. cool... comment ça fonctionne ? tout simple :
vous voulez votre theme_perso dispo dans le live... il suffit de créer un dossier debian_perso/config/includes.chroot/usr/share/themes et d'y coller votre dossier theme_perso.
vous voulez que votre petit script_perso.sh soit dispo dans le live... il suffit de créer un dossier debian_perso/config/includes.chroot/usr/local/bin et d'y coller votre script_perso.sh.

vous avez compris le principe ? excellent non ? l'arborescence créée dans config.includes.chroot se retrouvera dans le live-cd, à la place des fichiers originaux. car c'est ça le bonus ! vous pouvez ajouter des thèmes, des icônes, des scripts, mais surtout, vous pouvez remplacer des fichers existants afin de modifier le comportement du système par défaut. quelques exemples :

  • vous utilisez slim comme gestionnaire de connexion et vous voulez changer le thème utilisé ? il suffit de placer un /etc/slim.conf dans config/includes.chroot avec le thème que vous voulez. vous prendrez soin de placer le thème correspondant dans config/includes.chroot/usr/share/slim/themes/ .
  • vous avez placé un script dans config/includes.chroot/usr/local/bin/ et voudriez le voir apparaître dans les menus système ? il suffit de placer un .desktop adéquate dans config/includes.chroot/usr/share/applications/ afin que votre script soit reconnu par les menus classiques.
  • vous désirez ajouter automatiquement l'utilsateur à certains groupes ? il suffit de copier votre fichier /etc/adduser.conf dans  debian_perso/config/includes.chroot/etc/adduser.conf et de modifier les lignes 77 et 81 concernant les groupes par défaut des utilsateurs créés sur le système.

ce qui ne fonctionne pas :

  • vous ne pouvez pas coller un /etc/defaut/grub modifié, il sera écrasé lors de l'installation
  • le gestionnaire de démarrage (syslinux dans notre exemple) ne fait pas partie du squashfs, la modification du comportement au lancement se fera dans un autre dossier (on verra ça demain pour les dernières modifications)
  • la modifications de .desktop existant est inutile car le .desktop sera écrasé à la prochaine mise à jour du paquet correspondant. si vous désirez changer l'icône d'une application pour un lanceur par ex, il faudra le faire depuis le dossier utilisateur (chapitre suivant)

ne pas oublier :

  • cette méthode de modification n'est pas prise en charge par le système lui-même : vous devez donc prévoir toutes les dépendances nécessaires si vous ajoutez des scripts par ex.
  • ni apt, ni dpkg n'auront trace de vos modifications si vous ajoutez un paquet à la main en copiant les fichiers exécutables par ex : vous ne pourrez pas le mettre à jour depuis apt.
  • ne recopiez pas bêtement vos préférences système dans config/includes.chroot : vérifiez tout ce que vous ajoutez, certaines configuration sont propres à votre système et ne fonctionneront pas forcément en live ou sur un autre ordinateur.

voilà pour les modifications du système. bien.. mais je peux ajouter des trucs dans config/includes.chroot/home alors ? et non. c'est ailleurs que ça se passe. le home reste vide dans le build. il ne sera peuplé que lors du lancement du live et à l'installation.

config/includes.chroot/etc/skel : modification directe de l'utilisateur

alors c'est là que ça se passe pour modifier l'utilisateur ? bah oui... /etc/skel aka skeleton. ...

c'est maintenant que vous allez vous servir de l'archive de votre /home préparée hier lors du test avec les applications. vous pouvez aussi recopier vos dossiers et fichiers personnels (~/.config/*, ~/.bashrc, ~/.conkyrc, ~/.mozilla/*, etc) afin de profiter/partager vos réglages et marques pages.

attention : la copie de vos dossiers personnels copie aussi vos cookies/mot de passe etc. si vous souhaitez partager votre iso, je vous conseille de travailler sur un dossier vierge.

mais comment faire ?? simple : vous commencez par sauvegarder votre dossier personnel ~/.mozilla par ex (pour firefox) dans ~/.mozilla_backup. à votre prochaine ouverture de firefox, vous aurez la config par défaut. installez les plugins que vous voulez, réglez les marques-pages, la disposition de la barre d'outils etc, puis effacer votre historique de navigation, votre cache. enfin, recopier le dossier neuf ~/.mozilla dans votre debian_perso/config/includes.chroot/etc/skel/.mozilla.

il ne vous reste plus qu'à effacer votre ~/.mozilla et renommer votre ~/.mozilla_backup pour retrouver vos préférences et vos réglages. prenez soin de refermer firefox avant de restaurer votre dossier. en revanche, si vous souhaitez utiliser live-build comme outil de sauvegarde perso, allez-y, copiez tout ! (cette option sera détaillée demain).

vous pouvez égalament déterminer les dossiers par défaut utilisés sur votre système. j'explique : les DE et WM aux nomes freedesktop acceptent  les dossiers nominaux (XDG_DOCUMENTS_DIR = ~/Documents, XDG_PICTURES_DIR = ~/Images etc) et ces dossiers sont déclarés dans le fichier ~/.config/user-dirs.dirs. ce fichier vous permet donc de déterminer quels dossiers vont être utilisés par défaut et ainsi les placer dans votre /etc/skel. exemple :

 18:35 arp > cat .config/user-dirs.dirs
XDG_DESKTOP_DIR="$HOME/tmp"
XDG_DOWNLOAD_DIR="$HOME/downloads"
XDG_TEMPLATES_DIR="$HOME/tmp"
XDG_PUBLICSHARE_DIR="$HOME/tmp"
XDG_DOCUMENTS_DIR="$HOME/docs"
XDG_MUSIC_DIR="$HOME/zik"
XDG_PICTURES_DIR="$HOME/pics"
XDG_VIDEOS_DIR="$HOME/videos"

 18:36 arp > tree -L 1
.
├── docs
├── downloads
├── pics
├── tmp
├── videos
└── zik

et pour avoir mon thème et mes icones que j'ai placé dans config/includes.chroot/usr/share/themes et /icons ? bah comme @home : soit vous utilisez un DE qui aura intégré les préférences dans sa config (.config/xfce4 pour xfce par ex), soit vous avez choisi un système minimal, et c'est le gtkrc qui gère ça. avec gtk3, yen a deux maintenant... donc il faut placer un gtkrc dans /etc/skel/.gtkrc-2.0 et un settings.ini dans /etc/skel/.config/gtk-3.0/settings.ini.

et mon menu spécial xml openbox que j'ai mis des plombes à faire ? il va aller dans config/includes.chroot/etc/skel/.config/openbox/menu.xml

voilà, comme pour les modifications système, un simple processus de copie au bon endroit intègrera vos préférences dans le live-cd. et comme pour les modifications système, prenez soin de vérifier et re-vérifier les dossiers et fichiers que vous ajoutez, surtout si vous comptez partager votre distribution.

tests, debug et derniers changements du chroot

vous avez désormais un dossier de build prêt à l'emploi pour construire une Debian personnalisée. alors un petit nettoyage, et on envoi le build

cd tmp/debian_perso/
sudo lb clean
sudo lb build

pour la dernière phase de test, je vous conseille d'installer votre distro sur une machine virtuelle afin de pouvoir noter vos dernières commandes (qui seront à répercuter dans le dossier e build) et pouvoir profiter des modifications lors d'un reboot.

conseils pour un bon debug :

  • testez chaque application en condition réelle : ne faites pas qu'ouvrir votre navigateur, naviguez avec. n'ouvrez pas implement gimp, éditez une image, enregistrez-la et imprimez-la.
  • lancez les applications depuis un terminal afin d'observer les erreurs eventuelles et noter les modifications qui s'imposent (ajout d'un gtk-engine pour le rendu graphique, d'une librairie manquante...)
  • lancez un update/upgrade et vérifiez les paquets recommandés non-installés pour détecter d'éventuels petits outils manquants
  • côté préférences utilsateurs : je vous conseille de peaufiner vos réglages personnels, puis d'archiver tout ça pour la dernière étape et la construction finale de demain.

modification du dossier de build > build > tests > répercution des modifications > nettoyage > build ... ce processus devra être répété pour parvenir à la distro de vos rêves.

demain nous verrons comment personaliser l'écran de boot, définir une préconfiguration pour l'installation et apporter les dernières modifications juste après l'installation... le fameux fichier preseed .

vous avez fabriqué une dérivée Debian, on va en parler un peu aussi ... normal. et on finira par un exemple d'utilsation alternatif du live-build : la sauvegarde systeme.

@+

arp

2 commentaires

#1 NaHash a dit :

Ouep j'ai un truc à dire, qui est tout simplement merci ^^

#2 arpinux a dit :

@NaHash :
cool que ça serve :)

lâche toi

Quelle est la troisième lettre du mot ynbyu ? :