Ceci est un howto pour faire sa propre image de développement de l'Os fourni avec l'offre Easyneuf. Pour faire l'Os qui est fourni sur les Opengate, il faut utiliser le dépôt 9buildroot-blackgate à la place de 9buildroot
Lors de la compilation, certains logiciels ne sont pas fait pour être cross-compilés et vont chercher leurs fichiers de développement (entête c, librairies) sur le système. Il est donc préférable de créer une distribution Linux minimale pour faire une image.
Notre choix s'est porté sur une distribution à base de paquet debian. Il est nécessaire d'avoir les utilitaires debootstrap et chroot pour créer cette distribution minimale.
L'exemple suivant se déroule dans le répertoire howtobuild de l'utilisateur fredo et créer un répertoire etch-chroot. Vous pouvez bien sûr changer ces paramètres.
Voici les étapes à suivre pour faire l'installation :
devenir root :
fredo@ubuntu:~/howtobuild$ su root@ubuntu:~/howtobuild#
installer la distribution ( en l'occurence une debian 'etch' dans le répertoire 'etch-chroot' ) :
root@ubuntu:~/howtobuild# debootstrap etch etch-chroot http://ftp.debian.org/debian I: Retrieving Release I: Retrieving Packages I: Validating Packages I: Resolving dependencies of required packages... I: Resolving dependencies of base packages... I: Checking component main on http://ftp.debian.org/debian... I: Retrieving adduser I: Validating adduser I: Retrieving apt [...] I: Configuring sysklogd... I: Configuring tasksel... I: Base system installed successfully. root@ubuntu:~/howtobuild#
A ce point, nous avons une distribution debian de base. On peut donc changer de répertoire racine avec chroot pour se retrouver dans cette distribution :
root@ubuntu:~/howtobuild# chroot etch-chroot root@ubuntu:/#
Maintenant, il faut récupérer les logiciels nécessaires pour la suite des opérations :
root@ubuntu:/# apt-get update Réception de : 1 http://ftp.debian.org etch Release.gpg ... [...] root@ubuntu:/# apt-get install zip tar bzip2 bison libncurses5-dev pkg-config gettext libglib2.0-dev xutils intltool unzip zip libidl-dev locales gcc make g++ ccache bc libtool automake1.9 automake1.4 autoconf flex libpng12-dev mercurial libxml2 ssh curl vim less grub libxml-simple-perl Lecture des listes de paquets... Construction de l'arbre des dépendances...
Lors de l'installation, l'installeur vous demande si vous êtes sûr de vouloir installer tous ces paquets non certifiés. Répondez oui à toutes les questions.
Pour gagner de la place, on efface les fichiers temporaires.
root@ubuntu:/# apt-get clean
Le processus force la locale à en_US.UTF-8. Elle est nécessaire pour pouvoir utiliser les noms de fichiers en UTF-8. De plus, le chroot passe les variables d'environnements dont celles concernant le langage. Comme le français n'est pas installé par défaut, il faut reconfigurer la langue (197 pour le français, 126 pour l'anglais). Il faut également spécifier quelle locale utiliser par défaut.
root@ubuntu:/# dpkg-reconfigure -freadline locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "fr_FR:fr:en_GB:en",
LC_ALL = (unset),
LANG = "fr_FR.UTF-8"
are supported and installed on your system.
[...]
/usr/bin/locale: Cannot set LC_ALL to default locale: No such file or directory
Configuring locales
-------------------
Locale is a framework to switch between multiple languages for users who can select to use their language, country, characters, collation order, etc.
Choose which locales to generate. The selection will be saved to `/etc/locale.gen', which you can also edit manually (you need to run `locale-gen' afterwards).
When `All locales' is selected, /etc/locale.gen will be set as a symlink to /usr/share/i18n/SUPPORTED.
1. Tous les choix possibles 80. da_DK.UTF-8 UTF-8 159. es_PA.UTF-8 UTF-8 238. iw_IL ISO-8859-8 317. se_NO UTF-8
2. aa_DJ ISO-8859-1 81. de_AT ISO-8859-1 160. es_PE ISO-8859-1 239. iw_IL.UTF-8 UTF-8 318. si_LK UTF-8
3. aa_DJ.UTF-8 UTF-8 82. de_AT.UTF-8 UTF-8 161. es_PE.UTF-8 UTF-8 240. ja_JP.EUC-JP EUC-JP 319. sid_ET UTF-8
[...]
78. da_DK ISO-8859-1 157. es_NI.UTF-8 UTF-8 236. it_IT.UTF-8 UTF-8 315. rw_RW UTF-8 394. zu_ZA.UTF-8 UTF-8
79. da_DK.ISO-8859-15 ISO-8859-15 158. es_PA ISO-8859-1 237. it_IT@euro ISO-8859-15 316. sa_IN UTF-8
(Enter the items you want to select, separated by spaces.)
Locales to be generated: 126 197
[...]
Note: This will select the language for your whole system. If you're
running a multi-user system where not all of your users speak the
language of your choice, then they will run into difficulties and you
might want not to set a default locale.
1. None 2. en_US.UTF-8 3. fr_FR.UTF-8
Default locale for the system environment: 3
[...]
root@ubuntu:/#
Maintenant, il faut ajouter un utilisateur au système chrooté: J'utilise ici le même uid que sur le système pour copier facilement des fichiers :
root@ubuntu:/# adduser -uid 1000 fredo Ajout de l'utilisateur « fredo »... Ajout du nouveau groupe « fredo » (1000)... Ajout du nouvel utilisateur « fredo » (1000) avec le groupe « fredo »... Création du répertoire personnel « /home/fredo »... Copie des fichiers depuis « /etc/skel »... Enter new UNIX password: Retype new UNIX password: [...]
Dans le chroot, on se met sous le login utilisateur :
root@ubuntu:/# su - fredo fredo@ubuntu$
Maintenant, on peut récupérer le projet (environ 340 Mo):
fredo@ubuntu:~$ hg clone http://hg.easyneuf.org/9buildroot requesting all changes adding changesets adding manifests adding file changes added 1558 changesets with 6921 changes to 4770 files 3400 files updated, 0 files merged, 0 files removed, 0 files unresolved fredo@ubuntu:~$ cd 9buildroot/
Nous utilisons le fichier de config par défaut, il faut le créer :
fredo@ubuntu:~/9buildroot$ MERCURIAL_SERVER="http://hg.easyneuf.org" ./build --config
Ceci fait un fichier .config à la racine du projet, comme pour un noyau Linux. C'est le même système. Par défaut c'est celui de l'opengate.
Le projet télécharge les fichiers sources des logiciels dans un répertoire nommé downloads à la racine du compte utilisateur.
Les fichiers ne sont téléchargés que s'ils n'existent pas dans ce répertoire.
Malheureusement, il arrive souvent qu'au cours d'un téléchargement, un serveur ne réponde pas et que la compilation s'arrête.
Il est donc préférable de télécharger les fichiers sources en avance :
fredo@ubuntu:~/9buildroot$ MERCURIAL_SERVER="http://hg.easyneuf.org" make source [...] 100%[===========================================================>] 41 853 865 3.64M/s ETA 00:00 10:53:25 (3.02 MB/s) - « /home/fredo/downloads/linux-2.6.18.6.tar.bz2 » sauvegardé [41853865/41853865] Terminé --10:53:25-- Téléchargement: 41 853 865 octets dans 1 fichiers fredo@ubuntu:~/9buildroot$
Enfin, on peut lancer la création de l'image :
fredo@ubuntu:~/9buildroot$ MERCURIAL_SERVER="http://hg.easyneuf.org" ./build Build log is stored in /home/fredo/9buildroot/buildroot.log Build started at Wed, 23 May 2007 15:38:23 +0000 Wait while deleting old crosstool Cleaning crosstool checkout crosstool building crosstool Setting up ccache Making crosstool tarball Deleting crosstool build Cleaning buildroot building buildroot Finished at Wed, 23 May 2007 21:45:38 +0000 fredo@ubuntu: ~/9buildroot