OBSD4* : wiki

Créer une image d’installation d’OpenBSD personnalisée (iso)

Ce n’est pas très compliqué de créer sa propre iso d’installation d’OpenBSD. La méthode qui suit peut certainement être améliorée, surtout en utilisant directement des outils d’OpenBSD.

J’ai ici gardé une méthode artisanale qui devrait aussi bien fonctionner sous une système BSD que linux.

Récupérer les fichiers de travail

Le plus simple consiste à partir d’une image d’installation d’openBSD déjà existante et de la décompresser :

$ curl -C - -o install62.iso "http://ftp.fr.openbsd.org/pub/OpenBSD/6.2/amd64/install62.iso"

Une fois téléchargé, on extrait les fichiers contenus dans l'image d'intallation, vers le dossier install62 :

$ mkdir -p loopdir
$ vnconfig vnd0 install62.iso
$ mount -t cd9660 /dev/vnd0c loopdir
$ cp -rv loopdir/* ./install-62
$ chown -R 1000:1000 ./install-62
$ chmod -R +w ./install-62

Il ne reste plus qu'à démonter l'image d'installation:

$ umount loopdir/
$ vnconfig -u vnd0
$ rm -r loopdir/

Il est maintenant possible de personnaliser le contenu de l'image se trouvant dans le dossier install-62

Modifier le contenu de l’iso

Dans le dossier précédent, vous trouverez un dossier 6.2/amd64/ qui contient tous les “sets”. Ce sont en fait toutes les archive .tgz disponibles à l’installation.

Vous pouvez librement supprimer celles qui ne vous intéressent pas. Mais j’imagine que ce que vous voulez, c’est en rajouter. Il faut pour cela créer une archive siteXX.tgz (en remplaçant les XX par le numéro de version).

Créer un set d’installation siteXX.tgz

Cette archive site62.tgz doit contenir la hiérarchie des fichiers prêts à être décompressée dans /. Pour vous faire une idée, regardez comment sont faits les autres archives.

Vous avez donc la possibilité de mettre les programmes et autres fichiers que vous souhaitez avoir dans le système installé, comme par exemple le contenu de /etc/skel. Puisque cette archive est installée en dernier, les fichiers peuvent remplacer des déjà existants.

Lancer un script juste après l’installation

Heureusement, on peut inclure un script qui sera lancé juste après l’installation. Ce script doit s’appeler install.site, qui doit être présent dans l’archive siteXX.tgz.

Vous pouvez donc mettre dedans une commande qui installera tous les paquets souhaités. Par exemple :

#!/bin/sh
echo "* RUNNING POST-INSTALL SCRIPT"

# pkg
echo "http://ftp.fr.openbsd.org/pub/OpenBSD" > /etc/installurl
pkg_add fluxbox p7zip dmenu st netsurf

# kshrc
mkdir -p /etc/skel
echo ". /etc/ksh.kshrc" >> /etc/skel/.profile
echo "HISTFILE=~/.mksh_hist" >> /etc/skel/.profile
echo "HISTSIZE=3000" >> /etc/skel.profile

exit 0

N’oubliez pas de rendre ce script exécutable :

chmod 755 install.site

Vous créez l’archive contenant ce script ainsi :

tar cvzf site62.tgz install.site

Notez que on peut installer des paquets par cette méthode. Cependant, je préfère installer les paquets lors du premier démarrage après l’installation pour m’assurer que tous les paquets sont bien enregistrés et les caches correctement générés.

Lancer un script au premier démarrage

ous pouvez lancer une série de commandes lors du premier démarrage de la machine qui vient d’être installée. Il faut pour cela créer le script /etc/rc.firsttime. Ce script peut très bien être intégré dans l’archive siteXX.tgz. Veillez toutefois à lui donner les droits d’exécutions :

chmod 755 rc.firsttime

Reconstruire l’iso

Une commande suffit :

genisoimage -r -no-emul-boot -b 6.2/amd64/cdbr -c boot.catalog -o CustomOBSD.iso install-62/

Récupérer les archives des programmes (méthode déconseillée)

Vous pouvez récupérer les archives des programmes que vous voulez installer ainsi que leur dépendances, les décompresser dans un dossier, puis compresser le contenu de ce dossier dans une archive site62.tgz.

Voilà pour la théorie. Cependant, retrouver manuellement les dépendances de chaque paquet est très pénible (on les trouve dans le fichier +DESC contenu dans chaque archive).

Je vous propose donc le script suivant qui se chargera de récupérer les paquets listés dans la variables PACKAGES et d’en faire une archive siteXX.tgz (ne l’utilisez pas ☺) :

#!/bin/sh

PKG_PATH="http://ftp.fr.openbsd.org/pub/OpenBSD/6.2/packages/amd64/"

PACKAGES="
fluxbox-1.3.7p0.tgz
ImageMagick-6.9.3.0.tgz    
antiword-0.37p0.tgz   
aspell-fr-0.50.3v1.tgz  
bogofilter-1.2.4-sqlite3.tgz                       
bogofilter-1.2.4.tgz 
catfish-1.2.2.tgz 
cdrdao-1.2.0p2.tgz                                 
cdrtools-3.00p1.tgz 
detox-1.2.0.tgz   
discount-2.1.8ap0.tgz    
dmenu-4.6.tgz    
docx2txt-1.4.tgz  
dos2unix-7.3.2.tgz 
gv-3.7.1p1.tgz  
lftp-4.6.5.tgz 
ntfs_3g-2015.3.14.tgz      
oggconvert-0.3.3p3.tgz 
odt2txt-0.5.tgz   
p7zip-15.09p4.tgz  
pdftk-2.02p2.tgz 
rox-filer-2.11.tgz        
st-0.6p0.tgz    
vim-7.4.900-no_x11.tgz  
vim-spell-fr-7.4.tgz 
xdotool-3.20150503.1v0.tgz 
youtube-dl-2016.01.01.tgz  
"

dl_tgzs() {
    mkdir -p temp
    for p in $@; do
        if [ ! -e $p ]; then
            echo $p
            curl -# -C - -O $PKG_PATH/$p
            tar -C site -xzphf $p
            DEPS=$(grep "@depend" site/+CONTENTS | cut -d':' -f3 | sed -e 's;$;.tgz;g')
            rm -f site/+*
            dl_tgzs $DEPS
        fi
    done
}


mkdir -p packages/site
cd packages

echo "* Downloading packages"
dl_tgzs $PACKAGES

echo "Create siteXX.tgz"
cd site
tar cvzf ../site62.tgz *

exit 0

Mettez cette archive dans le dossier 6.2/amd64 avec les autres sets pour qu’elle soit proposée à l’installation de votre iso.

Avouez que récupérer le nom des paquets au numéro de version près, c’est juste super fastidieux (et je reste poli!). Qui plus est, selon les archives que l’on décompresse ensuite, il peut y avoir des erreurs.

Plus grave, le gestionnaire de paquets n’a aucune trace des paquets installés pour une suppression ultérieure. Il faut donc trouver une autre solution, comme lancer un script juste après l’installation.

Références