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
