まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Live Build : créer une distribution GNU/Linux à base Debian

L'idée est ici de retranscrire les étapes qui m'ont permises de créer l'image ISO de mon système Arcade, à partir de ce qui est décrit dans mon dernier script d'installation du bartop.


1 - Installation de Live-Build et des outils :

apt-get install live-build live-manual live-tools
  • Créer un dossier de travail et s'y rendre :
mkdir livearcade
cd livearcade
  • Lancer la config afin de créer l'arborescence de travail :
lb config

Les dossiers auto, .build, config et local ont donc été ajouté.

2 - Préparation de la session Live :

Il s'agit ici de créer ou d'amender un certains nombre de fichiers qui vont permettre de personnaliser la distribution GNU/Linux Live qui sera générée à l'issue du build.

2.1 - La configuration du build :

  • Le fichier auto/config :
#!/bin/sh

set -e

lb config noauto \
--bootappend-live "boot=live components locales=fr_FR.UTF-8 keyboard-layouts=fr username=arcade autologin" \
--architectures amd64 \
--distribution jessie \
--debian-installer live \
--archive-areas "main contrib non-free" \
	"${@}"

--bootappend-live "…", pour spécifier le type de clavier, le nom d'utilisateur et le login automatique de celui-ci.
--debian-installer live, pour spécifier qu'en cas d'installation, la session live est reproduite à d'identique sur le disque dur.


2.2 - Les packets logiciels qu'on désire proposer :

  • Le fichier config/package-lists/arcade.list.chroot :
#################################
# Liste des packets a installer #
#################################

libsdl-ttf2.0-0 libgtk2.0-0 libqtgui4 libgconf-2-4 xserver-xorg-video-all xfonts-base xinit x11-xserver-utils alsa-base alsa-utils libsdl1.2debian sshfs acpid sudo firmware-linux-nonfree psmisc console-setup console-setup-linux


2.3 - Les fichiers du dossier personnel :
Il suffit de simplement copier le contenu du dossier /home/arcade dans le dossier /includes.chroot/etc/skel qu'on aura préalablement créé,

mkdir config/includes.chroot/etc
mkdir config/includes.chroot/etc/skel

Donc j'ai déposé les fichiers et dossiers qui concernent l'émulation et les roms, à savoir .advance (dossier et sous-dossiers), usb (dossier vide), hiscore.dat et mame.ini.

Et les fichiers pour démarrer la session X et AdvanceMenu automatiquement :

  • Le fichier config/includes.chroot/etc/skel/.profile :
# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
	. "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

tty=`tty`
# Start X only if login in tty1
if [ $tty = '/dev/tty1' ]; then
        startx
fi
  • Le fichier config/includes.chroot/etc/skel/.xinitrc :
advmenu &
xterm -maximized -bg black -fg grey75


2.4 - La customisation du système :
Ici j'ai besoin de xorg.conf pour régler l'affichage, et de fichiers systemd pour permettre le login automatique de la session live.

  • Le fichier config/includes.chroot/etc/X11/xorg.conf
Section "Device"
    Identifier  "Video"
EndSection

Section "Monitor"
        Identifier   "Ecran"
EndSection

Section "Screen"
    Identifier "Default Screen"
    Device     "Video"
    Monitor    "Ecran"
    DefaultDepth     24
    SubSection "Display"
    Depth     24
    Modes    "640x480"
    EndSubSection
EndSection
  • Le fichier config/includes.chroot/etc/systemd/system/getty.target.wants/getty@tty1.service
[Unit]
Description=Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
After=systemd-user-sessions.service plymouth-quit-wait.service
After=rc-local.service

Before=getty.target
IgnoreOnIsolate=yes

ConditionPathExists=/dev/tty0

[Service]
ExecStart=-/sbin/agetty -a arcade --noclear %I $TERM
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes

Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=

[Install]
WantedBy=getty.target
DefaultInstance=tty1
  • Le fichier config/includes.chroot/etc/systemd/system/getty@tty1.service.d/autologin.conf
[service]
ExecStart=
ExecStart=-/sbin/agetty --autologin arcade --noclear %I 38400 linux
  • Le fichier config/includes.chroot/etc/sudoers
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

root	ALL=(ALL:ALL) ALL
%sudo	ALL=(ALL:ALL) ALL
arcade	ALL=NOPASSWD: /sbin/reboot, /bin/mount, /bin/umount


2.5 - Pour installer des packets logiciels tierce :

  • Si un logiciel n'est pas dans les dépôts où qu'il a été compilé soit même, il faut juste les déposer dans le dossier config/packages.chroot/

J'y ai donc placé mon packet advancemenu_2.8-1_amd64.deb.

3 - Génération de l'image :

  • Afin de prendre en compte toutes les modifications effectuées, il faut, depuis le dossier livearcade, lancer à nouveau la commande :
lb config

Et de vérifier qu'aucune erreur ne remonte…

  • Ensuite on peut enfin lancer la construction de l'image iso :
lb build

Le processus est assez long, et il lui faudra entre 30 min et 1h pour s'achever suivant la puissance machine et le débit internet.
Si aucune erreur n'est survenue, une image iso est alors disponible dans le dossier livearcade

live-image-amd64.hybrid.iso
  • Pour rendre une cléUSB bootable avec cette iso et alors tester le système live sur un ordi :
dd if=live-image-amd64.hybrid.iso of=/dev/sdb bs=4M; sync
  • Insatisfait du résultat ? Pour modifier des trucs et relancer une génération de l'image iso, il faut nettoyer auparavant le dossier livearcade avec la commande :
lb clean


4 - Notes, pour aller plus loin :

  • Plutôt que de créer directement des fichiers système dans config/includes.chroot/etc/, comme je l'ai fait pour ces deux-ci :

config/includes.chroot/etc/systemd/system/getty.target.wants/getty@tty1.service
config/includes.chroot/etc/systemd/system/getty@tty1.service.d/autologin.conf

Il est possible d'écrire des scripts d'opérations qui font la même chose et de les déposer dans le dossier config/hooks :

  • Le fichier config/hooks/autologin.chroot
#!/bin/sh
set -e
mkdir /etc/systemd/system/getty@tty1.service.d
echo "[service]" > /etc/systemd/system/getty@tty1.service.d/autologin.conf
echo "ExecStart=" >> /etc/systemd/system/getty@tty1.service.d/autologin.conf
echo "ExecStart=-/sbin/agetty --autologin arcade --noclear %I 38400 linux" >> /etc/systemd/system/getty@tty1.service.d/autologin.conf
sed -i -e "s/sbin\/agetty/sbin\/agetty -a arcade/g" /etc/systemd/system/getty.target.wants/getty@tty1.service

De même on peut customiser la console d’accueil avec ces quelques messages utiles :

  • Le fichier config/hooks/accueil.chroot :
#!/bin/sh
set -e
echo "Bienvenue sur votre Borne d'Arcade" >> /etc/issue
echo "Utilisateur : arcade" >> /etc/issue
echo "Mot de passe : arcade" >> /etc/issue
echo "" >> /etc/issue
# Pour changer le mot de passe de la session LIVE
# sans ces deux commandes, le mot de passe par défaut est : "live"
adduser --disabled-password --gecos "" arcade
echo "arcade:arcade" | chpasswd


Ressources :

http://www.yeuxdelibad.net/Logiciel-libre/Debian/Creer_sa_propre_distribution_avec_live-build.html
https://debian-facile.org/doc:install:live-build
https://debian-facile.org/utilisateurs:abdelqahar:tutos:live-build
https://debian-live.alioth.debian.org/live-manual/stable/manual/html/live-manual.en.html#630
http://complete.sisudoc.org/manual/html/live-manual/customizing-run-time-behaviours.fr.html
https://arpinux.org/public/doc_arp_pdf/
http://man.developpez.com/man7/live-config/
http://wiki.csnu.org/index.php/Debian_live

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet