wiki:BuildingImages/fr

Génération d'images

À propos de strap1

Pré-requis

strap1 devrait fonctionner tel quel sur n'importe quelle distribution GNU/Linux, voire sur d'autres systèmes Unix (tels que les BSD). Il utilise ces logiciels en particulier:

  • binutils (pour ar et strip)
  • fakeroot (optionel)
  • grep
  • gzip
  • mtdutils (selon le matériel)
  • sed
  • sh
  • sudo (optionel)
  • tar
  • wget

strap1 est basé sur un simple script shell POSIX, contenant actuellement moins d'un millier de lignes de code.

Récupérer strap1

strap1 se trouve au sein du système de gestion de code source de hackable:1. Il utilise SVN, et peut être téléchargé ainsi:

$ svn co svn://trac.hackable1.org/hackable1

Il faut alors se rendre dans le répertoire trunk/build dans l'arbre des sources.

Aucune version stable et officielle de strap1 n'a encore été publiée.

Structure du projet

strap1 comprend les composants suivants:

  • build.sh, le script créant les images
  • profiles, définitions des cas d'usages pour les matériels ciblés
  • packages, scripts de configuration post-installation des paquets
  • depends, répertoire temporaire de cache pour les dépendances
  • destdir, répertoire temporaire de préparation de l'image finale

build.sh

build.sh est un script shell, coordonnant les différentes composants requis. Il est utilisable comme suit:

$ ./build.sh
Usage: build.sh [option=value...] target...
Targets:
  archive       Create an archive of an image contents
  clean         Remove temporary data
  config        Configure installed packages
  help          Display this help screen
  image         Create a native image file
  list          List the available profiles
Options:
  VENDOR        (Openmoko)
  MODEL         (Freerunner)
  PURPOSE       (user)

Un profil est en fait la combinaison d'un fabricant, modèle et cas d'usage (triplet VENDOR-MODEL-PURPOSE). Toute variable interne au script, ou utilisée par un profil peut être redéfinie ici telle qu'une option.

Quelques exemples:

Pour créer une image JFFS2 flashable pour l'Openmoko Freerunner:

$ ./build.sh VENDOR=Openmoko MODEL=Freerunner image

Pour créer une archive d'image pour l'Openmoko Freerunner, avec un environnement de développement:

$ ./build.sh VENDOR=Openmoko MODEL=Freerunner PURPOSE=developer archive

D'autres options utiles:

DESTDIR Le répertoire temporaire où préparer l'image
MODEL Le nom du modèle pour le materiel visé
PURPOSE Le cas d'usage désiré
USERNAME Le nom du compte utilisateur sur l'image
VENDOR Le nom du fabricant pour le matériel visé
VERSION Le numéro ou nom de la version de l'image

Des options et variables plus avancées sont détaillées plus bas.

Les profils

Le répertoire des profils contient un fichier par triplet VENDOR-MODEL-PURPOSE (avec l'extension ".profile"), qui à leur tour peuvent inclure des fichiers communs (avec l'extension ".include").

Ils n'ont normalement besoin que de définir quelques variables, dont les plus appropriées sont:

CLEAN_APT "yes" retire la base de données des logiciels installés
CLEAN_DEVEL "yes" retire les fichiers de développement (en-têtes, bibliothèques...)
CLEAN_DOC "yes" retire toute documentation
CLEAN_KERNEL "yes" retire le fichier du noyau
CLEAN_LOCALES "yes" retire les informations de localisation
CLEAN_STRIP "yes" "strippe" les exécutables binaires et bibliothèques
DEBIAN_ARCH le port matériel Debian à déployer
DISTRIBUTIONS les dépôts Debian à utiliser
PACKAGES_BLACKLIST une liste de logiciels packages à ne pas installer
PACKAGES_PRIORITY les paquets correspondant à des priorités sont installés
PACKAGES une liste additionnelle de logiciels à installer

Elles peuvent également être redéfinies au lancement de build.sh.

Configuration des paquets

Les paquets sont simplement extraits dans le répertoire temporaire avant de générer l'image finale. Ils sont donc configurés avec leurs paramètres par défaut, voire pas du tout. Chaque paquet peut donc être explicitement configuré depuis le répertoires packages, dans un script shell du même nom.

Ces scripts shell dépendent de certaines variables en particulier. Les options mentionnées précédemment peuvent être accédées afin d'influencer le comportement des scripts, et ainsi la configuration des images générées (comme le triplet VENDOR-MODEL-PURPOSE).

Certains outils sont supportés explicitement, dont en particulier:

AR Créer, analyser and extraire des archives
CHMOD Changer les permissions de fichiers et répertoires
CHOWN Changer le propriétaire de fichiers et répertoires
CP Copier fichiers et répertoires
CUT Traiter des données textuelles en ligne de commande
DU Interroger l'espace disque utilisé par des fichiers et répertoires
GREP Look for given text patterns in files or on the command-line
GUNZIP Décompresser des fichiers
LN Create and modify hard and symbolic links
MKDIR Créer des répertoires
MKNOD Create device nodes
MV Renommer et déplacer des fichiers et répertoires
RMDIR Effacer des répertoires
RM Effacer des fichiers et répertoires
SED Remplacer le contenu de fichiers or sur la ligne de commande
STRIP Retirer les informations de débogage
TAR Create, analyze and extract archives
TOUCH Create files and alter timestamps
WGET Télécharger des fichiers via HTTP ou FTP

Quelques exemples suivent.

Dans packages/base-passwd:

#/etc/passwd
$SUDO$MKDIR "$DESTDIR/home/$USERNAME"                           || exit 2
$SUDO$CHMOD 0750 "$DESTDIR/home/$USERNAME"                      || exit 2
$SUDO$CHOWN 1000:1000 "$DESTDIR/home/$USERNAME"                 || exit 2
${SUDO}sh -c "cat > \"$DESTDIR/etc/passwd\"" << EOF
root:x:0:0:root:/root:/bin/sh
$USERNAME:x:1000:1000:Hackable1 user:/home/hackable1:/bin/sh
EOF

Dans packages/bluez-utils:

#/etc/rc?.d/S25bluetooth
for i in 2 3 4 5; do
        $SUDO$MKDIR "$DESTDIR/etc/rc$i.d"                       || exit 2
        $SUDO$LN -s "../init.d/bluetooth" "$DESTDIR/etc/rc$i.d/S25bluetooth" \
                                                                || exit 2
done

Dans packages/fakeroot:

#/usr/bin/fakeroot
$SUDO$MKDIR "$DESTDIR/etc/alternatives" "$DESTDIR/usr/bin"      || exit 2
$SUDO$LN -s "/usr/bin/fakeroot-tcp" "$DESTDIR/etc/alternatives/fakeroot" \
                                                                || exit 2
$SUDO$LN -s "/etc/alternatives/fakeroot" "$DESTDIR/usr/bin/fakeroot" \
                                                                || exit 2