RSS: Blog | Wiki | Forum

Buildroot HOWTO

Un article de Easyneuf.

[modifier] Comment faire son image pas à pas

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

[modifier] Créer son environnement

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: 
[...]

[modifier] Construire l'image

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