{"id":1033,"date":"2011-09-02T12:00:02","date_gmt":"2011-09-02T11:00:02","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=1033"},"modified":"2011-09-02T12:00:02","modified_gmt":"2011-09-02T11:00:02","slug":"creation-dun-systeme-live-linux-personnalise","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2011\/09\/02\/creation-dun-systeme-live-linux-personnalise\/","title":{"rendered":"Cr\u00e9ation d&rsquo;un syst\u00e8me Gnu\/Linux live personnalis\u00e9"},"content":{"rendered":"<p style=\"text-align: justify;\">Je vais \u00eatre amen\u00e9 \u00e0 pr\u00e9senter tr\u00e8s prochainement une session de formation professionnelle sur <a title=\"http:\/\/www.logilin.fr\/Formation_Linux_Temps_Reel_Embarque.html\" href=\"http:\/\/www.logilin.fr\/Formation_Linux_Temps_Reel_Embarque.html\" target=\"_blank\">Linux temps-r\u00e9el et embarqu\u00e9<\/a> dans une entreprise o\u00f9 l&rsquo;administrateur syst\u00e8me ne veut pas installer Gnu\/Linux sur les postes de formation&nbsp;! N&rsquo;ayant pas les comp\u00e9tences pour installer une partition Linux, il ne tol\u00e8re que le boot sur syst\u00e8mes <em>live<\/em> (CD ou Cl\u00e9 USB).<\/p>\n<p>\n<!--more-->\n<\/p>\n<p style=\"text-align: justify;\">Il existe de nombreuses distributions qui proposent des syst\u00e8mes <em>live<\/em> pr\u00e9configur\u00e9s et op\u00e9rationnels, toutefois plusieurs probl\u00e8mes se posent dans ce cas particulier<\/p>\n<ul>\n<li style=\"text-align: justify;\">J&rsquo;ai besoin de la <em>toolchain<\/em> Gnu compl\u00e8te (gcc, gdb, gprof, gcov, g++, etc.) rarement pr\u00e9sente sur les syst\u00e8mes <em>live<\/em>.<\/li>\n<li style=\"text-align: justify;\">Une partie importante de ma pr\u00e9sentation est orient\u00e9e sur l&rsquo;environnement Eclipse, qui est absent des syst\u00e8mes pr\u00e9configur\u00e9s.<\/li>\n<li style=\"text-align: justify;\">Je fournis aux participants de nombreux exemples et fichiers de configuration qui doivent \u00eatre rajout\u00e9s dans les r\u00e9pertoires de travail. Habituellement je fournis ces \u00e9l\u00e9ments sur CD-Rom, mais si nous d\u00e9marrons sur un CD <em>live<\/em>, le lecteur sera d\u00e9j\u00e0 occup\u00e9&nbsp;!<\/li>\n<li style=\"text-align: justify;\">En outre, nous devons t\u00e9l\u00e9charger et compiler de nombreux packages (Buildroot, Busybox, le kernel Linux lui-m\u00eame, Xenomai, Dropbear, etc.) L&rsquo;utilisation du r\u00e9seau et l&rsquo;acc\u00e8s Internet depuis les salles de formation \u00e9tant souvent probl\u00e9matique &#8211; d&rsquo;autant plus depuis un syst\u00e8me <em>live<\/em> &#8211; je voudrais pr\u00e9-t\u00e9l\u00e9charger les archives.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Au vu de ces points, il appara\u00eet qu&rsquo;il faut pouvoir construire un syst\u00e8me Linux <em>live<\/em> personnalis\u00e9. A nouveau, il existe plusieurs projets &#8211; plus ou moins aboutis &#8211; qui permettent d&rsquo;ajuster le syst\u00e8me <em>live<\/em>. Apr\u00e8s plusieurs exp\u00e9rimentations, j&rsquo;ai choisi d&rsquo;utiliser le projet \u00ab\u00a0<strong>Debian Live Build<\/strong>\u00a0\u00bb et son utilitaire <code>lb<\/code> (<em>Live Build<\/em>) pour lequel il existe de tr\u00e8s bonnes documentations sur le web, et je r\u00e9capitulerai simplement ici les op\u00e9rations n\u00e9cessaires dans mon cas, dans l&rsquo;espoir que cela puisse \u00eatre utile \u00e0 d&rsquo;autres.<\/p>\n<h1>Principe<\/h1>\n<p style=\"text-align: justify;\">Le principe est relativement simple. Je pars d&rsquo;une distribution Debian ou Ubuntu fraichement install\u00e9e avec les options par d\u00e9faut.<\/p>\n<p style=\"text-align: justify; padding-left: 90px;\">Je ne fais preuve d&rsquo;aucun sectarisme entre les principales distributions Linux, j&rsquo;utilise r\u00e9guli\u00e8rement des Debian, Fedora, Ubuntu, Centos, RHEL et autres Gentoo. J&rsquo;ai peut-\u00eatre une meilleure connaissance des Fedora, mais j&rsquo;appr\u00e9cie les avantages de chacune des autres. Pour le propos de cet article, le syst\u00e8me <em>Live Build<\/em> de Debian est sup\u00e9rieur aux autres environnements du m\u00eame genre.<\/p>\n<p style=\"text-align: justify;\">Certaines op\u00e9rations n\u00e9cessitent obligatoirement les privil\u00e8ges <em>root<\/em>, d&rsquo;autres peuvent s\u00fbrement \u00eatre effectu\u00e9es avec les droits d&rsquo;un utilisateur normal, mais j&rsquo;ai r\u00e9alis\u00e9 l&rsquo;ensemble des manipulations avec un shell <em>root<\/em> (en utilisant <code>sudo -i<\/code>).<\/p>\n<pre style=\"padding-left: 30px;\">[~]# <strong>apt-get install -y live-build<\/strong><\/pre>\n<p>On cr\u00e9e un r\u00e9pertoire de travail (<code>livekey<\/code> dans mon cas) puis on y ex\u00e9cute la configuration de <em>Live Build<\/em> :<\/p>\n<pre style=\"padding-left: 30px;\">[~] # <strong>mkdir livekey <\/strong>\n[~] #<strong> cd livekey <\/strong>\n[livekey]#<strong> lb config <em>options...<\/em><\/strong><\/pre>\n<p>Les options serons d\u00e9taill\u00e9es plus bas et&nbsp;:<\/p>\n<pre style=\"padding-left: 30px;\">[livekey]# <strong>lb build<\/strong><\/pre>\n<p>En sortie, nous obtenons une image pr\u00eate \u00e0 \u00eatre grav\u00e9e sur CD\/DVD ou transf\u00e9r\u00e9e sur une cl\u00e9 USB.<\/p>\n<p>La complexit\u00e9 va venir des options \u00e0 passer \u00e0 <code>lb config<\/code> pour ajuster le syst\u00e8me <em>live<\/em> et pr\u00e9installer les fichiers que l&rsquo;on veut fournir aux futurs utilisateurs.<\/p>\n<h1>Script de cr\u00e9ation<\/h1>\n<p style=\"text-align: justify;\">D\u00e8s que je dois r\u00e9p\u00e9ter \u00e0 plusieurs reprises les m\u00eames op\u00e9rations &#8211; pour ajuster mon syst\u00e8me en l&rsquo;occurrence &#8211; je les regroupe toujours dans un script shell. C&rsquo;est ce que je ferai ici.<\/p>\n<p>La premi\u00e8re version (<a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-09-02\/script-livekey-1.sh\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-09-02\/script-livekey-1.sh\" target=\"_blank\"><code>script-livekey-1.sh<\/code><\/a>) est tr\u00e8s simple<\/p>\n<pre>#! \/bin\/sh\nrm -rf config\/\nlb clean\n\nlb config \n   --distribution   \"squeeze\"           \n   --archive-areas  \"main contrib\"      \n   --packages-lists \"gnome-desktop\"     \n   --packages \"gcc gdb gedit g++ make\"  \n   --clean                              \n   --memtest none                       \n   --syslinux-timeout 20                \n   --interactive true                   \n\nlb build<\/pre>\n<p style=\"text-align: justify;\">Les r\u00e9pertoires <code>config<\/code>, <code>cache<\/code> et <code>chroot<\/code> sont cr\u00e9\u00e9s pendant la phase <code>lb build<\/code>. J&rsquo;efface syst\u00e9matiquement le r\u00e9pertoire <code>config<\/code> au d\u00e9marrage du script pour \u00e9viter les incoh\u00e9rences entre plusieurs ex\u00e9cutions successives. De m\u00eame la commande <code>lb clean<\/code> sert-elle \u00e0 \u00ab\u00a0faire le m\u00e9nage\u00a0\u00bb dans les fichiers g\u00e9n\u00e9r\u00e9s pr\u00e9c\u00e9demment.<\/p>\n<p style=\"text-align: justify;\">Voici la signification des options ajout\u00e9es \u00e0 \u00ab\u00a0<code>lb config<\/code>\u00ab\u00a0<\/p>\n<ul>\n<li style=\"text-align: justify;\"><code>--distribution squeeze<\/code> : il s&rsquo;agit de la distribution Debian stable actuelle, ce que l&rsquo;on peut naturellement modifier au besoin&nbsp;;<\/li>\n<li style=\"text-align: justify;\"><code>--archive-areas \"main contrib\"<\/code> : les sources de paquets, en fonction de leur licences,<\/li>\n<li style=\"text-align: justify;\"><code>--packages-lists \"gnome-desktop\"<\/code> : il s&rsquo;agit d&rsquo;une liste pr\u00e9configur\u00e9e de packages permettant de configurer une station graphique avec environnement Gnome. Il est \u00e9videmment possible de pr\u00e9f\u00e9rer <code>kde-desktop<\/code> ou <code>xfce-desktop<\/code>.<\/li>\n<li style=\"text-align: justify;\"><code>--packages \"...\"<\/code> : la liste des packages suppl\u00e9mentaires que je souhaite installer. Nous en reparlerons plus bas, j&rsquo;ai simplement indiqu\u00e9 ici les \u00e9l\u00e9ments essentiels de la <em>toolchain<\/em> Gnu.<\/li>\n<li style=\"text-align: justify;\"><code>--clean<\/code> : effacer les sous-r\u00e9pertoires inutiles dans <code>config\/<\/code> et <code>chroot\/<\/code>,<\/li>\n<li style=\"text-align: justify;\"><code>--memtest none<\/code> : ne pas proposer d&rsquo;option de v\u00e9rification de la m\u00e9moire dans le menu de d\u00e9marrage de Grub&nbsp;;<\/li>\n<li style=\"text-align: justify;\"><code>--syslinux-timeout 20<\/code> : D\u00e9marrer sur l&rsquo;image par d\u00e9faut apr\u00e8s 20 secondes d&rsquo;affichage du menu Grub&nbsp;;<\/li>\n<li style=\"text-align: justify;\"><code>--interactive true<\/code> : pour la mise au point, ceci nous permet d&rsquo;acc\u00e9der temporairement au futur environnement <em>live<\/em> (par le biais d&rsquo;un <code>chroot<\/code>) pour v\u00e9rifier son bon \u00e9tat. Cette option est supprim\u00e9e apr\u00e8s la mise au point.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Lan\u00e7ons notre script&nbsp;:<\/p>\n<pre>[livekey]# <strong>chmod 755 script-livekey-1.sh <\/strong>\n[livekey]# <strong>.\/script-livekey-1.sh <\/strong>\nP: Cleaning chroot\nP: Considering defaults defined in \/etc\/live\/build.conf\nP: Creating config tree\nP: Setting up cleanup function\nP: Begin caching bootstrap stage...\nP: Begin bootstrapping system...\nP: If the following stage fails, the most likely cause of the problem is with your mirror configuration or a caching proxy.\nP: Running debootstrap (download-only)...\nI: Retrieving Release\n[...]<\/pre>\n<p style=\"text-align: justify;\">Apr\u00e8s quelques (dizaines de) minutes de t\u00e9l\u00e9chargement et pr\u00e9paration des packages, la construction s&rsquo;interrompt avec un shell <em>chroot\u00e9<\/em> (c&rsquo;est-\u00e0-dire qui s&rsquo;ex\u00e9cute dans une sous-arborescence du syst\u00e8me de fichiers de l&rsquo;h\u00f4te). Nous pouvons alors avoir une id\u00e9e des commandes disponibles sur le futur syst\u00e8me <em>live<\/em>. Par exemple, je vais v\u00e9rifier le fonctionnement de GCC.<\/p>\n<pre>update-initramfs: Generating \/boot\/initrd.img-2.6.32-5-686\nupdate-initramfs: Generating \/boot\/initrd.img-2.6.32-5-486\nP: Begin interactive build...\nP: Pausing build: starting interactive shell...\n(live)root@SRVR:\/# <strong>gcc --version<\/strong>\ngcc (Debian 4.4.5-8) 4.4.5\nCopyright (C) 2010 Free Software Foundation, Inc.\nThis is free software; see the source for copying conditions.  There is NO\nwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n(live)root@SRVR:\/#<\/pre>\n<p style=\"text-align: justify;\">C&rsquo;est le moment ad\u00e9quat pour v\u00e9rifier s&rsquo;il manque des commandes pour le futur syst\u00e8me, et modifier en cons\u00e9quence le script de construction. En ce qui me concerne, j&rsquo;ai modifi\u00e9 la ligne <code>packages<\/code> du script (<a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-09-02\/script-livekey-2.sh\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-09-02\/script-livekey-2.sh\" target=\"_blank\"><code>script-livekey-2.sh<\/code><\/a>) ainsi&nbsp;:<\/p>\n<pre>    --packages \"bison eclipse exuberant-ctags flex gcc gdb gedit gettext g++ qemu libncurses5-dev make minicom vim\"  <\/pre>\n<p style=\"text-align: justify;\">Nous pouvons quitter ce shell \u00ab\u00a0chroot\u00e9\u00a0\u00bb pour continuer la construction de l&rsquo;image.<\/p>\n<pre>(live)root@SRVR:\/# <strong>exit<\/strong>\nlogout\nP: Deconfiguring file \/etc\/kernel-img.conf\nP: Deconfiguring file \/etc\/apt\/sources.list\n[...]\nBuilding dependency tree\nReading state information... Done\nP: Deconfiguring file \/etc\/hostname\nP: Deconfiguring file \/bin\/hostname\nP: Deconfiguring file \/etc\/resolv.conf\nP: Deconfiguring file \/etc\/hosts\nP: Begin unmounting filesystems...\n[livekey]# <strong>ls -l<\/strong>\ntotal 1105980\ndrwxr-xr-x  6 root root       4096 2011-09-02 12:17 binary\n-rw-r--r--  1 root root 1132462080 2011-09-02 12:18 binary-hybrid.iso\n-rw-r--r--  1 root root       2162 2011-09-02 12:17 binary.list\n-rw-r--r--  1 root root      31490 2011-09-02 12:17 binary.packages\ndrwxr-xr-x  6 root root       4096 2011-09-02 12:17 cache\ndrwxr-xr-x 20 root root       4096 2011-09-02 12:18 chroot\ndrwxr-xr-x  2 root root       4096 2011-09-02 11:14 config\n-rwxr-xr-x  1 root root        396 2011-09-02 11:13 script-livekey-1.sh\n[livekey]#<\/pre>\n<p style=\"text-align: justify;\">Une fois la construction termin\u00e9e, nous obtenons un fichier image <code>binary-hybrid.iso<\/code> que l&rsquo;on peut soit graver un DVD, soit transf\u00e9rer sur une cl\u00e9 USB. C&rsquo;est cette derni\u00e8re option que je choisis pendant la mise au point. J&rsquo;ins\u00e8re donc une cl\u00e9 USB de 8Go, dont la partition <code>\/dev\/sdg1<\/code> se trouve mont\u00e9e automatiquement. Avant d&rsquo;\u00e9crire sur la cl\u00e9, il faut donc d\u00e9monter cette partition, puis nous effectuons un transfert direct sur le p\u00e9riph\u00e9rique bloc repr\u00e9sentant la cl\u00e9 (<code>\/dev\/sdg<\/code> chez moi). Attention \u00e0 bien v\u00e9rifier le nom du p\u00e9riph\u00e9rique sur <strong>votre<\/strong> syst\u00e8me.<\/p>\n<pre>[livekey]# <strong>umount \/dev\/<span style=\"color: #800000;\">sdg1<\/span><\/strong>\n[livekey]# <strong>dd if=binary-hybrid.iso of=\/dev\/<span style=\"color: #800000;\">sdg<\/span> bs=4M<\/strong>\n270+0 enregistrements lus\n270+0 enregistrements \u00e9crits\n1132462080 octets (1,1 GB) copi\u00e9s, 236,551 s, 4,8 MB\/s\n[livekey]#<\/pre>\n<p style=\"text-align: justify;\">On peut alors ins\u00e9rer la cl\u00e9 sur une machine de test, et d\u00e9marrer dessus. Plusieurs points posent probl\u00e8me, que je vais aborder l&rsquo;un apr\u00e8s l&rsquo;autre&nbsp;:<\/p>\n<ul>\n<li style=\"text-align: justify;\">Par d\u00e9faut la localisation est am\u00e9ricaine avec un clavier Qwerty, je d\u00e9sire disposer d&rsquo;une disposition Azerty du clavier.<\/li>\n<li style=\"text-align: justify;\">Il faut que je place quelque part sur mon syst\u00e8me <em>live<\/em> les archives pr\u00e9-t\u00e9l\u00e9charg\u00e9es des packages \u00e0 compiler durant la session de formation.<\/li>\n<li style=\"text-align: justify;\">L&rsquo;environnement Eclipse fonctionne, mais il n&rsquo;y a pas le <em>plug-in<\/em> CDT (<em>C\/C++ Development Tool<\/em>) pour la programmation en C. Le package <code>eclipse-cdt<\/code> qui impl\u00e9mente ce <em>plug-in<\/em> n&rsquo;existe pas dans la version Debian Squeeze mais seulement dans Sid.<\/li>\n<li style=\"text-align: justify;\">Les modifications apport\u00e9es par l&rsquo;utilisateur \u00e0 son environnement ou aux fichiers de son r\u00e9pertoire personnel ne perdurent pas d&rsquo;une ex\u00e9cution \u00e0 l&rsquo;autre.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h1>Localisation et clavier<\/h1>\n<p style=\"text-align: justify;\">Pour g\u00e9rer la localisation et la configuration du clavier, il suffit d&rsquo;indiquer les valeurs voulues sur la ligne de commande du <em>kernel<\/em>, avec les options <code>locales<\/code> et <code>keyboard-layouts<\/code>.<\/p>\n<p style=\"text-align: justify;\">Ceci s&rsquo;obtient facilement en ajoutant la ligne suivante dans les arguments de <code>lb config<\/code> :<\/p>\n<pre>   --bootappend-live \"locales=fr_FR.UTF-8 keyboard-layouts=fr\"  <\/pre>\n<p style=\"text-align: justify;\">Apr\u00e8s construction et red\u00e9marrage, l&rsquo;interface utilisateur de Gnome est bien en fran\u00e7ais et le clavier est configur\u00e9 en disposition Azerty.<\/p>\n<h1>Fichiers suppl\u00e9mentaires dans le syst\u00e8me<\/h1>\n<p style=\"text-align: justify;\">Je souhaite ajouter quelques archives pr\u00e9-t\u00e9l\u00e9charg\u00e9es dans le r\u00e9pertoire <code>\/usr\/local\/src<\/code> du syst\u00e8me <em>live<\/em>. Pour cela il faut les copier dans le r\u00e9pertoire&nbsp;:<\/p>\n<p><code>~\/livekey\/<strong>config\/chroot_local-includes\/<\/strong>usr\/local\/src\/<\/code><\/p>\n<p style=\"text-align: justify;\">Ceci sera r\u00e9alis\u00e9 dans la premi\u00e8re partie de mon script, avant la commande <code>lb config<\/code>.<\/p>\n<h1>Packages Debian suppl\u00e9mentaires<\/h1>\n<p style=\"text-align: justify;\">Pour ajouter un package ne se trouvant dans la distribution Squeeze, il faut le t\u00e9l\u00e9charger au pr\u00e9alable et le placer dans le r\u00e9pertoire<\/p>\n<p><code>~\/livekey\/<strong>config\/chroot_local-packages\/<\/strong><\/code><\/p>\n<p style=\"text-align: justify;\">C&rsquo;est ce que j&rsquo;ai fait avec le package <code>eclipse-cdt_6.0.2-1_i386.deb<\/code> t\u00e9l\u00e9charg\u00e9 depuis le <a title=\"http:\/\/packages.debian.org\/fr\/sid\/eclipse-cdt\" href=\"http:\/\/packages.debian.org\/fr\/sid\/eclipse-cdt\" target=\"_blank\">d\u00e9pot Sid<\/a>.<\/p>\n<p style=\"text-align: justify;\">Apr\u00e8s reconstruction et d\u00e9marrage, l&rsquo;environnement Eclipse de mon syst\u00e8me <em>live<\/em> est bien dot\u00e9 du <em>plug-in<\/em> CDT.<\/p>\n<h1>Persistance des donn\u00e9es utilisateur<\/h1>\n<p style=\"text-align: justify;\">Pour que la configuration et les donn\u00e9es de l&rsquo;utilisateur soient conserv\u00e9es d&rsquo;une session \u00e0 l&rsquo;autre, il faut les sauvegarder sur la cl\u00e9 USB que nous avons utilis\u00e9 pour d\u00e9marrer. Plusieurs solutions s&rsquo;offrent \u00e0 nous, mais je trouve que la plus simple est de disposer d&rsquo;une partition d\u00e9di\u00e9e sur la m\u00eame cl\u00e9, qui sera mont\u00e9e en guise de r\u00e9pertoire <code>\/home<\/code>. L&rsquo;avantage est que cette m\u00e9thode est pr\u00e9vue d&rsquo;avance et bien int\u00e9gr\u00e9e dans <em>Live Build<\/em>.<\/p>\n<p style=\"text-align: justify;\">Le principe consiste \u00e0 cr\u00e9er une seconde partition derri\u00e8re la premi\u00e8re, qui sera formatt\u00e9e avec un nom de volume <code>home-rw<\/code>. D&rsquo;autre part, l&rsquo;argument <code>persistant<\/code> sera ajout\u00e9 sur la ligne de commande du noyau. Lors du d\u00e9marrage, la partition sera identifi\u00e9e par son nom, et mont\u00e9e automatiquement dans le r\u00e9pertoire <code>\/home<\/code>.<\/p>\n<p style=\"text-align: justify;\">Nous modifions donc la ligne <code>boot-append-live<\/code> de <code>lb config<\/code> pour ajouter le mot-cl\u00e9 <code>persistent<\/code> ainsi&nbsp;:<\/p>\n<pre>   --bootappend-live \"locales=fr_FR.UTF-8 keyboard-layouts=fr <strong>persistent<\/strong>\" <\/pre>\n<p style=\"text-align: justify;\">Un probl\u00e8me se pose toutefois&nbsp;: les images ISO hybrides (susceptibles d&rsquo;\u00eatre grav\u00e9es sur CD\/DVD ou transf\u00e9r\u00e9es sur cl\u00e9 USB) ne contiennent pas de table de partition valide (elle sont indiqu\u00e9es comme r\u00e9cursives). Aussi n&rsquo;est-il pas possible de rajouter correctement de seconde partition. Pour que notre m\u00e9thode fonctionne, il faut modifier le format de l&rsquo;image, qui ne sera plus ISO (donc pas gravable sur DVD) mais compatible avec une image de disque dur (USB-HDD). On ajoute encore une ligne d&rsquo;option \u00e0 <code>lb config<\/code> :<\/p>\n<pre>   --binary-images \"usb-hdd\"      <\/pre>\n<p style=\"text-align: justify;\">Au final, mon script (<a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-09-02\/script-livekey-3.sh\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-09-02\/script-livekey-3.sh\" target=\"_blank\"><code>script-livekey-3.sh<\/code><\/a>) devient&nbsp;:<\/p>\n<pre>#! \/bin\/sh\n\nrm -rf config\n\n<em># Copier les archives pre-telechargees<\/em>\nmkdir -p config\/chroot_local-includes\/usr\/local\/src\/\ncp  linux-3.0.tar.bz2  config\/chroot_local-includes\/usr\/local\/src\/\n<em># ...<\/em>\n\n<em># Copier les packages supplementaires<\/em>\nmkdir -p config\/chroot_local-packages\/\ncp   eclipse-cdt_6.0.2-1_i386.deb   config\/chroot_local-packages\/\n<em># ...<\/em>\n\nlb clean\n\nlb config  \n   --binary-images \"usb-hdd\"            \n   --distribution \"squeeze\"             \n   --archive-areas \"main contrib\"       \n   --bootappend-live \"locales=fr_FR.UTF-8 keyboard-layouts=fr persistent\" \n   --packages-lists \"gnome-desktop\"       \n   --packages \"bison eclipse exuberant-ctags flex gcc gdb gedit gettext g++ qemu libncurses5-dev make minicom vim\"    \n   --clean                              \n   --memtest \"none\"                     \n   --syslinux-timeout 20                \n   --interactive \"false\"                \n\nlb build<\/pre>\n<p style=\"text-align: justify;\">On notera au passage que l&rsquo;option <code>--interactive<\/code> est maintenant \u00e0 <code>false<\/code>, car une fois la configuration au point, il n&rsquo;est plus besoin de faire de pause dans un shell <em>chroot\u00e9<\/em>.<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Ex\u00e9cutons le script, \u00e0 nouveau&nbsp;:<\/p>\n<pre>[livekey]# <strong>.\/script-livekey-3.sh<\/strong>\nP: Cleaning chroot\nP: Considering defaults defined in \/etc\/live\/build.conf\nP: Updating config tree\nP: Setting up cleanup function\nP: Begin caching bootstrap stage...\nP: Begin bootstrapping system...\nW: skipping bootstrap\nP: Begin caching bootstrap stage...\nP: Begin unmounting filesystems...\nP: Setting up cleanup function\nP: Begin caching chroot stage...\nP: Begin mounting \/dev\/pts...\n[...]\nP: Deconfiguring file \/bin\/hostname\nP: Deconfiguring file \/etc\/resolv.conf\nP: Deconfiguring file \/etc\/hosts\nP: Begin unmounting filesystems...\n[livekey]# <strong>ls -l <\/strong>\ntotal 1777476\ndrwxr-xr-x  6 root root       4096 2011-09-02 13:50 binary\n-rw-r--r--  1 root root 1875902464 2011-09-02 13:53 binary.img\n-rw-r--r--  1 root root       2162 2011-09-02 13:50 binary.list\n-rw-r--r--  1 root root      33566 2011-09-02 13:49 binary.packages\ndrwxr-xr-x  6 root root       4096 2011-09-02 13:16 cache\n[...]\n[livekey]#<\/pre>\n<p style=\"text-align: justify;\">Cette fois, l&rsquo;image est dans le fichier <code>binary.img<\/code>. Transf\u00e9rons-la sur la cl\u00e9 (attention \u00e0 nouveau au nom du p\u00e9riph\u00e9rique bloc&nbsp;!).<\/p>\n<pre>[livekey]# <strong>dd if=binary.img of=\/dev\/<span style=\"color: #800000;\">sdg<\/span> bs=4M<\/strong>\n447+1 enregistrements lus\n447+1 enregistrements \u00e9crits\n1875902464 octets (1,9 GB) copi\u00e9s, 421,45 s, 4,5 MB\/s<\/pre>\n<p style=\"text-align: justify;\">Puis ajoutons une partition \u00e0 la suite. J&rsquo;utilise pour cela <code>fdisk<\/code>, mais un r\u00e9sultat similaire serait obtenu avec <code>parted<\/code> ou <code>gparted<\/code>.<\/p>\n<pre>[livekey]# <strong>fdisk \/dev\/<span style=\"color: #800000;\">sdg<\/span><\/strong>\nGNU Fdisk 1.2.4\nCopyright (C) 1998 - 2006 Free Software Foundation, Inc.\nThis program is free software, covered by the GNU General Public License.\n[...]\nUsing \/dev\/sdg\nCommand (m for help): <strong>p<\/strong>\n\nDisk \/dev\/sdg: 7 GB, 7929169920 bytes\n255 heads, 63 sectors\/track, 964 cylinders\nUnits = cylinders of 16065 * 512 = 8225280 bytes\n\n   Device Boot      Start         End      Blocks   Id  System\n\/dev\/sdg1   *           1         229     1839411   83  Linux\nWarning: Partition 1 does not end on cylinder boundary.\nCommand (m for help): <strong>n<\/strong>\nPartition type\n   e   extended\n   p   primary partition (1-4)\n<strong>p<\/strong>\nFirst cylinder  (default 0cyl): <strong>230<\/strong>\nLast cylinder or +size or +sizeMB or +sizeKB  (default 963cyl): <strong><em>(Entr\u00e9e)<\/em><\/strong>\nCommand (m for help): <strong>p<\/strong>                                     \n\nDisk \/dev\/sdg: 7 GB, 7929169920 bytes\n255 heads, 63 sectors\/track, 964 cylinders\nUnits = cylinders of 16065 * 512 = 8225280 bytes\n\n   Device Boot      Start         End      Blocks   Id  System\n\/dev\/sdg1   *           1         229     1839411   83  Linux\nWarning: Partition 1 does not end on cylinder boundary.\n\/dev\/sdg2             230         964     5895855   83  Linux\nCommand (m for help): <strong>w<\/strong>\nInformation: Don't forget to update \/etc\/fstab, if necessary.\nWriting all changes to \/dev\/sdg.\n[livekey]#<\/pre>\n<p style=\"text-align: justify;\">Enfin formattons notre nouvelle partition. Le syst\u00e8me de fichier <em>ext2<\/em> est tr\u00e8s bien adapt\u00e9 pour les cl\u00e9s USB&nbsp;; il faut penser \u00e0 nommer la partition formatt\u00e9e <code>home-rw<\/code>.<\/p>\n<pre>[livekey]# <strong>mkfs.ext2 \/dev\/<span style=\"color: #800000;\">sdg<\/span>2 -L home-rw<\/strong>\nmke2fs 1.41.14 (22-Dec-2010)\n\u00c9tiquette de syst\u00e8me de fichiers=home-rw\nType de syst\u00e8me d'exploitation\u00a0: Linux\nTaille de bloc=4096 (log=2)\n[...]\nLe syst\u00e8me de fichiers sera automatiquement v\u00e9rifi\u00e9 tous les 30 montages ou\napr\u00e8s 180 jours, selon la premi\u00e8re \u00e9ventualit\u00e9. Utiliser tune2fs -c ou -i\npour \u00e9craser la valeur.\n[livekey]#<\/pre>\n<p style=\"text-align: justify;\">Apr\u00e8s red\u00e9marrage, on peut modifier certains param\u00e8tres de configuration du syst\u00e8me (fond d&rsquo;\u00e9cran, etc.) et d&rsquo;ajouter des fichiers dans notre r\u00e9pertoire personnel. Ces \u00e9l\u00e9ments seront persistants d&rsquo;une ex\u00e9cution \u00e0 l&rsquo;autre.<\/p>\n<h1>Conclusion<\/h1>\n<p style=\"text-align: justify;\">Il est facile de disposer avec <em>Debian Live Build<\/em> d&rsquo;un environnement de travail ajust\u00e9 et persistant sans toucher aux disques durs des syst\u00e8mes sur lesquels on l&rsquo;ex\u00e9cute. Ceci permet bien s\u00fbr de disposer d&rsquo;un poste de travail mobile et autonome, mais permet \u00e9galement de palier les contraintes d&rsquo;administration lorsqu&rsquo;on intervient dans une entreprise ext\u00e9rieure sans apporter de mat\u00e9riel (session de formation, r\u00e9union improvis\u00e9e, d\u00e9monstration chez un client, etc.)<\/p>","protected":false},"excerpt":{"rendered":"<p>Je vais &ecirc;tre amen&eacute; &agrave; pr&eacute;senter tr&egrave;s prochainement une session de formation professionnelle sur Linux temps-r&eacute;el et embarqu&eacute; dans une entreprise o&ugrave; l&rsquo;administrateur syst&egrave;me ne veut pas installer Gnu\/Linux sur les postes de formation&nbsp;! N&rsquo;ayant pas les comp&eacute;tences pour installer une partition Linux, il ne tol&egrave;re que le boot sur syst&egrave;mes live (CD ou Cl&eacute; [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,8],"tags":[],"class_list":["post-1033","post","type-post","status-publish","format-standard","hentry","category-formations","category-linux-2"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1033","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=1033"}],"version-history":[{"count":1,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1033\/revisions"}],"predecessor-version":[{"id":3261,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/1033\/revisions\/3261"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=1033"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=1033"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=1033"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}