Retrouvez cet article dans : Linux Magazine 82
1 Mon troisième RIM-Linux
1.1 Un peu de cosmétique : bootsplash
achez ces logs que je ne saurais voir ! Bootsplash est un patch cosmétique qui permet d’avoir un beau boot graphique avec une barre de progression. Bootsplash, c’est un patch, mais aussi des utilitaires que nous allons compiler, Bootsplash permet d’avoir des animations illustrant les différentes phases de boot, mais nous n’irons pas jusque-là, nous nous contenterons d’une barre de progression et de messages textes. Il nous faudra ajouter la bibliothèquetar xjf bootsplash-3.2.tar.bz2
cd Utilities
make
cp splash ../../rootbase/sbin
cp fbtruetype ../../rootbase/sbin
strip ../../rootbase/sbin/{splash,fbtruetype}
cp -d /usr/lib/libfreetype.so* rootbase/usr/lib
strip rootbase/usr/lib/libfreetype.so*
Pour pouvoir utiliser Bootsplash, il faut démarrer en mode framebuffer (paramètre vecho "silent" > /proc/splashet
echo "verbose" > /proc/splashOn utilise en général deux images, l’une pour le mode
cp -a ./Configuration/bootsplash ./rootbase/etc/Afin que le kernel puisse afficher très tôt l’image
splash -s -f config-file > rootbase/bootsplashCela va créer un fichier
cd rootbase/etc/bootsplash ln -s $PWD/rimlinux /etc/bootsplash/rimlinuxDe cette façon, l’instruction complète que nous ajouterons à notre script de création de l’iso sera :
./bootsplash-3.2/Utilities/splash -s -f \ /etc/bootsplash/rimlinux/config/bootsplash-800x600.cfg > rootbase/bootsplashOn pourra utiliser le script fourni
echo "show x" > /proc/splashoù x représente un entier compris entre 0 et 65534, c’est aussi simple que ça. On peut aussi afficher un texte avec une taille et une couleur donnée avec
cp ./Configuration/rcS-iso3 rootbase/etc/init.d/rcS cp ./Configuration/setHardware-iso3.pl rootbase/sbin/setHardware.plNous modifierons également le fichier
Fig. 1 : Séquence de boot avec Bootsplash
1.2 Un script de configuration de plus : configHardware.pl
A la suite du script- Montage par
subfsdes CD-ROM/DVD et floppys - Montage en lecture seule des partitions locales si l’utilisateur en fait la demande.
- Configuration d’interface réseau par DHCP si l’utilisateur en fait la demande.
- Effacement des modules si l’utilisateur en fait la demande.
- Montage automatique des CD et floppys
# On obtient la liste des cds dans /proc/sys/dev/cdrom/info
@cdrominfo=`cat /proc/sys/dev/cdrom/info`;
chop @cdrominfo;
# La 3ème ligne contient
# drive name: hda sdb sdc etc
$tmp=$cdrominfo[2];
@liste_cdroms=split(/[\s\t]+/,$cdrominfo[2]);
shift @liste_cdroms; # drive
shift @liste_cdroms; # name:
foreach (@liste_cdroms)
{
#Create the mount point
system("mkdir -p /localmounts/cd/$_");
# Mount with subfs
system("mount /dev/$_ -t subfs /localmounts/cd/$_ -o fs=cdfss,ro");
}
Pour les floppys, on fait à peu près le même travail, mais on en obtient la liste en examinant # Pour les floppys on regarde /dev/fdx
# Ca ne marche pas avec les floppys usb -> TODO
@liste_flop=`cd /dev ; ls fd*`;
chop @liste_flop;
foreach (@liste_flop)
{
#Create the mount point
system("mkdir -p /localmounts/fd/$_");
# Mount with subfs
system("mount /dev/$_ -t subfs /localmounts/fd/$_ -o fs=floppyfss,rw");
}
- Montage automatique des partitions locales
#
# Montage des partitions locales en lecture seule
# on obtient la liste des partitions dans /proc/partitions
@listepart=`cat /proc/partitions`;
chop @listepart;
# parse the list
# take away first two lines
shift @listepart;
shift @listepart;
foreach (@listepart)
{
($nothing,$major,$minor,$size,$name)=split(/[\s\t]+/,$_);
if ( ($name =~/\d$/) && !( $name=~/^loop/) ) # This is a partition
{
# Create mountpoint
system("mkdir -p /localmounts/discs/$name");
# Mounting
system("mount /dev/$name /localmounts/discs/$name -o ro");
}
}
A noter que l’utilisateur peut lancer- Configuration réseau
udhcpc -i eth0Je n’ai pas fait d’interface de configuration réseau. Il faudra donc le faire à la main mais ce n’est pas très compliqué. Par exemple, on veut configurer
ifconfig eth0 192.168.0.145 netmask 255.255.255.0 route add default gw 192.168.0.253 echo “nameserver 192.168.0.252” > /etc/resolv.conf
- Effacement des modules
- En résumé
cp ./Configuration/configHardware.pl ./rootbase/sbin cp ./Configuration/localmount.pl ./rootbase/sbin
1.3 Montage de partages NFS
Afin de pouvoir monter des partages NFS, il faut lancer le programmecp /sbin/portmap rootbase/sbin/portmap strip rootbase/sbin/portmapOn pourra ensuite monter les partages NFS. Pour monter par exemple
mount machine1:/partage -t nfs /localmounts/nfs/machine1/partage
1.4 Montage de partages Windows avec samba
Pour les partages samba [2], nous allons avoir besoin deldd /usr/bin/smbmount [...] libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0x4014a000) libldap-2.2.so.7 => /usr/lib/libldap-2.2.so.7 (0x40150000) [...]On voit que samba a été compilé avec un support LDAP, un support kerberos. C’est vraiment trop pour nous qui souhaitons faire des montages simples de partages Windows... Eh oui, on est bon pour recompiler !
tar xzf samba-3.0.20b.tar.gz
cd samba-3.0.20b/source
./configure --without-ldap --without-winbind --without-utmp \
--without-sys-quota --with-smbmount --disable-cups
make
cp bin/{smbmnt,smbmount} ../../rootbase/usr/bin/
strip ../../rootbase/usr/bin/{smbmnt,smbmount}
Un smbmount //machine1/partage /localmounts/smb/machine1/partage \
-o username=alfred,password=alfred25
1.5 Un serveur XXX
1.5.1 Xserver : Buildit
Lorsque Keith Packard était encore dans le groupe XFree86, il avait développé Kdrive une version de X compacte, peu consommatrice en mémoire et ne nécessitant aucun fichier de configuration ni polices annexes pour démarrer. Compiler Kdrive était un peu pénible. Il fallait télécharger les sources de XFree86, modifier quelques fichiers de configuration après quelques heures laborieuses de recherche de documentation. Lors du changement de licence de XFree86, Keith Packard est parti en emmenant Kdrive dans son sac et c’est devenu le projet Xserver de freedesktop.org [3]. Xserver a été grandement amélioré par rapport au Kdrive de XFree86-4.2 que j’avais utilisé dans Womp. Il gère plus d’extensions, les polices TrueType avec l’extension Render, la transparence avec l’extension Composite, etc. Une grande amélioration est qu’il utilise les gnu autotools. Plus besoin detar xzf Xserver-cvs-17-10-2005.tar.gz cd Xserver-cvs-17-10-2005 ./BuilditLa compilation est relativement longue... Go take a coffee. Une fois terminée, nous avons dans
mkdir -p rootbase/usr/X11R6/lib/X11/locale
mkdir -p rootbase/usr/X11R6/lib/X11/fonts
ln -s ../X11R6/lib/X11 rootbase/usr/lib/X11
mkdir -p rootbase/usr/X11R6/bin
cp /opt/fdo/bin/Xvesa rootbase/usr/X11R6/bin
strip rootbase/usr/X11R6/bin/Xvesa
cp -d /opt/fdo/lib/*.so* rootbase/usr/X11R6/lib
strip rootbase/usr/X11R6/lib/*
cp /opt/fdo/share/X11/XErrorDB rootbase/usr/X11R6/lib/X11
cp /opt/fdo/share/X11/XKeysymDB rootbase/usr/X11R6/lib/X11
cp -a /usr/X11R6/lib/X11/locale/{C,iso8859-1} \
rootbase/usr/X11R6/lib/X11/locale
cp /usr/X11R6/lib/X11/locale/{compose.dir,locale.dir,locale.alias} \
rootbase/usr/X11R6/lib/X11/locale
cp -d /lib/libz.so* rootbase/lib
strip rootbase/lib/libz.so*
On pourra aussi copier cd rootbase/usr/X11R6/lib/X11/fonts tar xzf (chemin)/x11-fonts.tgzAu final, nous avons maintenant une installation de X qui prend... 3,1 Mo !
1.5.2 Xserver : Use it
Nous allons décrire sommairement le fonctionnement de ce serveur X. Au préalable, en lançant le serveur avec l’optionVBE version 3.0 (NVIDIA) DAC is fixed, controller is VGA compatible, RAMDAC causes snow Total memory: 32768 kilobytes [...] 0x0115: 800x600x24 TrueColor [8:8:8:8] 0x0117: 1024x768x16 TrueColor [5:6:5:0] 0x0118: 1024x768x24 TrueColor [8:8:8:8] [...]Attention ! Les modes affichés dépendent de la carte vidéo. Ce n’est pas parce que dans cet exemple 0x0117 représente le mode 1024x768 16 bits qu’il en sera de même avec une autre carte, il est nécessaire d’effectuer cette opération de listage des modes. Ensuite on lance le serveur en lui spécifiant le mode à utiliser :
Xvesa -mode 0x0117Si on a sur le réseau une machine acceptant les connexions Xdmcp(1), on peut d’ores et déjà se servir de notre RIM-Linux tel quel en tant que Terminal X en tapant :
(1) Il faut qu’un gestionnaire de connexion fonctionne, par exemple xdm,kdm ou gdm. Dans les distributions modernes, l’écoute des connexions distantes est souvent désactivé par défaut, l’activer est plus ou moins facile suivant la distribution. Pour kdm, le fichier kdmrc doit contenir Enable=true dans le groupe [Xdmcp].
Xvesa -mode 0x0117 -query machineOn obtiendra alors l’écran de connexion de la machine en question. Les autres arguments qui vont nous intéresser sont
Xvesa -ac -mode 0x0117 -shadow -mouse /dev/input/mice,5 -query machine
1.6 Gestionnaire de fenêtre : Boîte noire
Pour une utilisation en local et non en terminal X, il va nous falloir un gestionnaire de fenêtres. Il existe des gestionnaires de fenêtre très compacts et néanmoins fonctionnels. Parmi eux citons : swm [4], windowlab [5] et blackbox [6]. Les deux premiers sont très petits, moins de 100 ko ! On les utilisera pour des applications très contraintes en taille mémoire. Pour cet exemple, j’ai préféré utiliser blackbox qui allie une taille raisonnable et des fonctionnalités confortables. Nous utilisons dans la suite une méthode très simple permettant de faire des pseudo-packages, consistant à installer dans un répertoiretar xjf blackbox-0.70.0.tar.bz2 cd blackbox-0.70.0 ./configure make mv /usr/local /usr/local.sav mkdir /usr/local make install mv /usr/local /usr/local.blackbox mv /usr/local.sav /usr/localUn
libstdc++.so.5 libXft.so.2 libfontconfig.so.1 libexpat.so.0 libgcc_s.so.1Nous voyons que blackbox utilise le package
cp -a /etc/fonts rootbase/etc
cp /usr/bin/{fc-cache,fc-list,fc-match} rootbase/usr/bin
strip rootbase/usr/bin/{fc-cache,fc-list,fc-match}
cp -d /usr/lib/libfontconfig.so* rootbase/usr/lib
strip rootbase/usr/lib/libfontconfig.so*
mkdir rootbase/usr/X11R6/lib/X11/fonts/truetype
cp /usr/X11R6/lib/X11/fonts/truetype/luxi*.ttf rootbase/usr/X11R6/lib/X11/fonts/truetype
Copions maintenant les autres bibliothèques et blackbox lui-même.
cp -d /usr/lib/libstdc++.so.5* rootbase/usr/lib
strip rootbase/usr/lib/libstdc++.so.5*
cp -d /usr/X11R6/lib/libXft.so.2* rootbase/usr/X11R6/lib
strip rootbase/usr/X11R6/lib/libXft.so.2*
cp -d /usr/lib/libexpat.so* rootbase/usr/lib
strip rootbase/usr/lib/libexpat.so*
cp /lib/libgcc_s.so.1 rootbase/lib
strip rootbase/lib/libgcc_s.so.1
mkdir -p rootbase/usr/local/share
cp -a /usr/local.blackbox/share/blackbox rootbase/usr/local/share
mkdir -p rootbase/usr/local/bin
cp /usr/local.blackbox/bin/{blackbox,bsetroot} rootbase/usr/local/bin
strip rootbase/usr/local/bin/{blackbox,bsetroot}
On pourra personnifier le menu de blackbox dans rootbase/usr/local/share/blackbox/menu. Copiez le fichier fourni menu.blackbox.
cp ./Configuration/menu.blackbox rootbase/usr/local/share/blackbox/menu
1.7 Emulateur de terminal : rxvt-unicode
Toujours pour travailler en local, il nous faut un émulateur de terminal. On peut en recopier un depuis sa distribution ou en recompiler un, ce que je propose ici avectar xjf rxvt-unicode-5.7.tar.bz2 cd rxvt-unicode-5.7 ./configure --enable-rxvt-scroll --enable-mousewheel \ --with-name=rxvt --enable-xim --with-term=xterm \ --with-res-name=rxvt --with-res-class=Rxvt make cp src/rxvt ../rootbase/usr/bin strip ../rootbase/usr/bin/rxvt
1.8 Midnight Commander : un gestionnaire de fichiers en mode texte
Gnu Midnight Commander [9] est un gestionnaire de fichier en mode texte très performant, qui sera très utile pour effectuer des copies/transferts de fichiers sur les partitions locales, CD et montages réseau. Il comporte entre autres fonctionnalités un pager (tar xzf mc-4.6.1.tar.gz cd mc-4.6.1 ./configure --with-screen=ncurses --with-glib12 \ --without-ext2undel \ --without-gpm-mouse make mv /usr/local /usr/local.sav mkdir /usr/local make install mv /usr/local /usr/local.mc mv /usr/local.sav /usr/localIntégrons
cp -d /usr/local.mc/bin/{mc,mcedit,mcview,mcmfmt} rootbase/usr/local/bin
strip rootbase/usr/local/bin/{mc,mcmfmt}
cp -a /usr/local.mc/lib/mc rootbase/usr/local/lib
strip rootbase/usr/local/lib/mc/cons.saver
cp -a /usr/local.mc/share/mc rootbase/usr/local/share
rm rootbase/usr/local/share/mc/mc.hlp.*
rm rootbase/usr/local/share/mc/mc.menu.sr
rm rootbase/usr/local/share/mc/mc.hint.*
mkdir -p rootbase/usr/local/share/locale/fr/LC_MESSAGES
cp /usr/local.mc/share/locale/fr/LC_MESSAGES/mc.mo rootbase/usr/local/share/locale/fr/LC_MESSAGES
Nous avons également besoin de la Glib 1.2 (mkdir -p rootbase/opt/gnome/lib cp -d /opt/gnome/lib/libglib-1.2.so* rootbase/opt/gnome/lib strip rootbase/opt/gnome/lib/libglib-1.2.so* cp -d /opt/gnome/lib/libgmodule-1.2.so* rootbase/opt/gnome/lib strip rootbase/opt/gnome/lib/libgmodule-1.2.so* cp -d /opt/gnome/lib/libgthread-1.2.so* rootbase/opt/gnome/lib strip rootbase/opt/gnome/lib/libgthread-1.2.so*
1.9 Serveurs de son
Pour utiliser notre RIM-Linux en tant que terminal X avec le maximum de confort, il est intéressant de pouvoir rediriger le son vers notre terminal, de la même façon que l’on redirige l’affichage. Il n’y a malheureusement pas de méthode aussi standard que X pour effectuer cela. Il existe principalement 3 serveurs de son permettant cela :- artsd le serveur de son de KDE [10].
- esd le serveur de son de Enlightement et Gnome [11].
- nasd un serveur de son à vocation générale [12].
1.9.1 artsd
artsd est maintenant complètement intégré à KDE, mais il existe une version stand-alone que nous allons utiliser. Pour pouvoir compiler (du moins avec l’emplacement des headers de la glib sur ma distribution), il faut modifier le fichier#include <gmain.h>par
#include <glib/gmain.h>La compilation se fait ensuite classiquement :
cd arts-0.5.4 ./configure make mv /usr/local /usr/local.sav mkdir /usr/local make install mv /usr/local /usr/local.arts mv /usr/local.sav /usr/localIl ne reste plus qu’à l’intégrer dans notre rootbase :
cp /usr/local.arts/bin/artsd rootbase/usr/local/bin strip rootbase/usr/local/bin/artsd mkdir -p rootbase/usr/local/lib cp -d /usr/local.arts/lib/libsoundserver_idl.so* rootbase/usr/local/lib cp -d /usr/local.arts/lib/libkmedia2_idl.so* rootbase/usr/local/lib cp -d /usr/local.arts/lib/libartsflow.so* rootbase/usr/local/lib cp -d /usr/local.arts/lib/libartsflow_idl.so* rootbase/usr/local/lib cp -d /usr/local.arts/lib/libmcop_mt.so* rootbase/usr/local/lib cp -d /usr/local.arts/lib/libmcop.so* rootbase/usr/local/lib cp -d /usr/local.arts/lib/libartsc.so* rootbase/usr/local/lib cp -d /usr/local.arts/lib/libartscbackend.* rootbase/usr/local/lib strip rootbase/usr/local/lib/* cp -a /usr/local.arts/lib/mcop rootbase/usr/local/libIl nous faut aussi copier
cp -d /usr/lib/libaudiofile.so* rootbase/usr/lib strip rootbase/usr/lib/libaudiofile.so*Sur le terminal X (c’est-à-dire le RIM-Linux), on va lancer artsd de la façon suivante :
artsd -n -u -p 16000Sur la machine distante, on va définir la variable d’environnement
export ARTS_SERVER=192.168.0.192:16000Les applications utilisant arts (Xmms ou Mplayer par exemple) comme sortie se connecteront au serveur artsd sur le RIM-Linux.
1.9.2 esd
La compilation se fait classiquement.tar xjf esound-0.2.36.tar.bz2 cd esound-0.2.36 ./configure make mv /usr/local /usr/local.sav mkdir /usr/local make install mv /usr/local /usr/local.esd mv /usr/local.sav /usr/localOn copie dans notre
cp /usr/local.esd/bin/esd rootbase/usr/local/bin strip rootbase/usr/local/bin/esd cp -d /usr/local.esd/lib/libesd.so* rootbase/usr/local/lib strip rootbase/usr/local/lib/libesd.so*Sur le terminal X (c’est-à-dire le RIM-Linux), on va lancer esd de la façon suivante (notre esd ne fonctionne qu’avec alsa, bien qu’il soit censé fonctionner également avec OSS).
esd -public -tcp -port 16001Sur la machine distante, on va définir la variable d’environnement
export ESPEAKER=192.168.0.192:16001Les applications utilisant esd (Xmms ou Mplayer par exemple) comme sortie se connecteront au serveur esd sur le RIM-Linux.
1.9.3 nasd
nas se compile un peu différemment. Il n’utilise pas les autotools, mais le système d’auto-configuration de X11 bien que n’utilisant absolument pas X.tar xzf nas-1.7.src.tar.gz cd nas-1.7 xmkmf make WorldSi vous souhaitez compiler des applications avec le support natif nas, il faudra installer nas sur votre système en tapant
cd nas-1.7 cp server/nasd ../rootbase/usr/X11R6/bin strip ../rootbase/usr/X11R6/bin/nasd mkdir ../rootbase/etc/nas cp server/nasd.conf.eg ../rootbase/etc/nas/nasd.conf cp -d lib/audio/libaudio.so* ../rootbase/usr/X11R6/lib strip ../rootbase/usr/X11R6/lib/libaudio.so*Sur le terminal X (c’est-à-dire le RIM-Linux), on va lancer nasd de la façon suivante :
nasd :0 -aa -bLe port utilisé est spécifié avec un offset de 8000,
export AUDIOSERVER=192.168.0.192:0Si l’application a le support natif nas (mais il y en a assez peu), ce sera la même chose que précédemment. Par contre, pour les autres applications, il faudra utiliser une bibliothèque supplémentaire qui redirige le son oss sur nas (pour arts et esd, ce sont des programmes séparés artsdsp et esddsp qui effectuent cette opération). Du côté de la machine distante, il nous faudra compiler et installer audiooss :
tar xzf audiooss-1.0.0.tar.gz cd audiooss-1.0.0 xmkmf make make installAvant de lancer une application son, il faudra positionner la variable d’environnement
export LD_PRELOAD=/usr/X11R6/lib/libaudiooss.so.1.0:$LD_PRELOADCa ne fonctionne pas avec toutes les applications son, mais ça fonctionne entre autres avec Xmms utilisant oss comme pilote de sortie.
1.10 Navigateur grand luxe : Firefox
Pour l’installation de Firefox [13], nous allons utiliser simplement l’installateur de Firefox et l’installer directement dans notretar xzf firefox-1.0.7.installer.tar.gz cd firefox-installer ./firefox-installerSuivre les instructions habituelles en choisissant
gtk2 : /etc/opt/gnome/gtk-2.0 /etc/opt/gnome/gtk-2.0/gdk-pixbuf.loaders /etc/opt/gnome/gtk-2.0/gtk.immodules /opt/gnome/bin/gdk-pixbuf-query-loaders /opt/gnome/bin/gtk-query-immodules-2.0 /opt/gnome/bin/gtk-update-icon-cache /opt/gnome/share/locale/fr /opt/gnome/share/locale/fr/LC_MESSAGES /opt/gnome/share/locale/fr/LC_MESSAGES/gtk20-properties.mo /opt/gnome/share/locale/fr/LC_MESSAGES/gtk20.mo
atk : /opt/gnome/share/locale/fr /opt/gnome/share/locale/fr/LC_MESSAGES /opt/gnome/share/locale/fr/LC_MESSAGES/atk10.mo
glib2 : /opt/gnome/share/locale/fr /opt/gnome/share/locale/fr/LC_MESSAGES /opt/gnome/share/locale/fr/LC_MESSAGES/glib20.mo
pango : /etc/opt/gnome/pango /etc/opt/gnome/pango/pango.modules /etc/opt/gnome/pango/pangox.aliases /opt/gnome/bin/pango-querymodules
bibliothèques X11 : /usr/X11R6/lib/libXt.so.6 /usr/X11R6/lib/libXp.so.6 /usr/X11R6/lib/libXi.so.6 /usr/X11R6/lib/libXinerama.so.1 /usr/X11R6/lib/libXfixes.so.3 /usr/X11R6/lib/libXcursor.so.1 /usr/X11R6/lib/libSM.so.6 /usr/X11R6/lib/libICE.so.6
Je ne détaille pas toutes les opérations de copie et strip, qui ne devraient pas poser de problèmes. On copie les répertoires entiers avecOn créera également un lien symbolique danscp -a, et les fichiers aveccp -dpour conserver les liens symboliques, et on strippe les binaires et les bibliothèques.
cd rootbase/usr/local/bin ln -s ../firefox/firefoxOn pourra aussi ajouter par exemple le plugin Flash composé des fichiers
1.11 Multimédia : MPlayer
Mplayer [14] est un des meilleurs lecteurs multimédias sous Linux. Il est capable de lire à peu près tous les fichiers multimédias existants, dont une grande part sans l’ajout de fichiers de codecs supplémentaires. Codecs supplémentaires éventuels qu’il suffit de placer danstar xjf MPlayer-1.0pre7try2.tar.bz2 cd MPlayer-1.0pre7try2 ./configure --enable-gui --enable-largefiles --disable-lirc \ --disable-lircc --disable-tv --disable-live --disable-sdl \ --enable-runtime-cpudetection --disable-aa --disable-caca \ --disable-jpeg --disable-gif --disable-gl --disable-pnm \ --disable-dga --disable-tga --disable-mga \ --disable-directfb --disable-xv make mv /usr/local /usr/local.sav mkdir /usr/local make install mv /usr/local /usr/local.mplayer mv /usr/local.sav /usr/localUn
cp -d /usr/lib/libmad.so* rootbase/usr/lib cp -d /usr/lib/libdv.so* rootbase/usr/lib cp -d /usr/lib/libtheora.so* rootbase/usr/lib cp -d /usr/lib/libogg.so* rootbase/usr/lib cp -d /usr/lib/liblzo.so* rootbase/usr/lib cp -d /usr/lib/libdivxdecore.so* rootbase/usr/lib cp -d /usr/lib/libmp3lame.so* rootbase/usr/lib cp -d /usr/lib/libxvidcore.so* rootbase/usr/lib cp -d /usr/lib/libpng.so* rootbase/usr/lib cp -d /usr/lib/libcdda_interface.so* rootbase/usr/lib cp -d /usr/lib/libcdda_paranoia.so* rootbase/usr/lib strip rootbase/usr/lib/* cp -d /opt/gnome/lib/libgdk-1.2.so* rootbase/opt/gnome/lib cp -d /opt/gnome/lib/libgtk-1.2.so* rootbase/opt/gnome/lib strip rootbase/opt/gnome/lib/* cp -d /usr/X11R6/lib/libXxf86vm.so* rootbase/usr/X11R6/lib strip rootbase/usr/X11R6/lib/libXxf86vm.so*Puis l’installation de Mplayer :
cp -d /usr/local.mplayer/bin/{mplayer,gmplayer} rootbase/usr/local/bin
strip rootbase/usr/local/bin/mplayer
cp -a /usr/local.mplayer/lib/mplayer rootbase/usr/local/lib
strip rootbase/usr/local/lib/mplayer/vidix/*
mkdir -p rootbase/usr/local/share/mplayer/Skin
mkdir -p rootbase/usr/local/share/mplayer/font
mkdir -p rootbase/etc/mplayer
cd rootbase/usr/local/share/mplayer
ln -s ../../../X11R6/lib/X11/fonts/truetype/luximb.ttf subfont.ttf
Nous aurons également besoin d’un revêtement. Nous utiliserons cd rootbase/usr/local/share/mplayer/Skin tar xjf ../../../../../../Blue-1.4.tar.bz2 mv Blue default
1.12 Bonus : mplayerplug-in
Mplayerplug-in [15] est un excellent plugin pourtar xzf mplayerplug-in-3.11.tar.gz cd mplayerplug-in ./configure make strip *.so cp *.so ../rootbase/usr/local/firefox/plugins/ cp *.xpt ../rootbase/usr/local/firefox/plugins/Mplayerplug-in est de plus assez intelligent dans la gestion du son, puisqu’il teste la présence de différents serveurs de son, dans l’ordre :
1.13 Touche finale
Le script fourni,cp ./Configuration/startx.pl rootbase/usr/X11R6/bin
cp ./Configuration/mixer.pl rootbase/usr/binJ’ai ajouté également Vncviewer, dont je me sers assez souvent, directement de ma distribution ainsi que les bibliothèques supplémentaires nécessaires.
cp /usr/X11R6/bin/vncviewer rootbase/usr/X11R6/bin strip rootbase/usr/X11R6/bin/vncviewer cp -d /usr/X11R6/lib/libXaw.so.8* rootbase/usr/X11R6/lib cp -d /usr/X11R6/lib/libXmu.so* rootbase/usr/X11R6/lib cp -d /usr/X11R6/lib/libXpm.so* rootbase/usr/X11R6/lib cp -d /usr/lib/libjpeg.so.62* rootbase/usr/lib strip rootbase/usr/X11R6/lib/libXaw.so.8* strip rootbase/usr/X11R6/lib/libXmu.so* strip rootbase/usr/X11R6/lib/libXpm.so* strip rootbase/usr/lib/libjpeg.so.62*
1.14 Création de l’iso
Encore un peu de cosmétique avec Isolinux. Lorsque l’on boote, on a un écran noir avec un promptppmtolss16 < isolinux.ppm > isolinux.lssIl faut ensuite que nous fabriquions un fichier isolinux.msg contenant :
<CAN>isolinux.lss<newline>où
perl -e "printf(\"\cXisolinux.lss\n\");" > isolinux.msgPour finir, il va nous falloir modifier notre
cp Confifuration/isolinux-iso3/* cdrom_base/isolinuxLa création de l’iso se fait comme d’habitude. On utilisera le script
2 C’est beau mais c’est trop gros ! Let’s shrink !
Si on examine la taille de notre2.1 Compilation et utilisation des utilitaires squashfs
Nous n’avons pas encore compilé les utilitairescd squashfs2.2-r2/squashfs-tools makeCopiez le programme mksquashfs quelque part dans le chemin de recherche des exécutables (
mksquashfs repertoire1 repertoire2 ... destinationoù destination représente soit un périphérique réel, soit un fichier que l’on montera ensuite en tant que loop. A noter une différence de comportement sensible suivant que l’on ait un unique répertoire source ou plusieurs. Dans le cas d’un unique répertoire source, le squashfs résultant contiendra le contenu du répertoire en éliminant le nom de celui-ci, une sorte de chroot quoi. Dans le cas de plusieurs répertoires sources, le
2.2 Séparation du rootbase en deux parties
Nous allons donc couper en deux notre rootbase. Nous allons avoir deux répertoires :
Fig. 2 : Mécanisme de boot avec le squash
Dans un premier temps, renommons rootbase en rootbase-squash et créons un nouveau répertoire rootbase. De quoi avons-nous besoin strictement pour booter ? Eh bien tout simplement à quelque chose près ce que nous avions dans notre ridiculissime première iso plus quelques fichiers de configuration : Busybox, ses liens symboliques, le fichier inittab, les premiers fichiers du /dev, le fichier de démarrage /etc/init.d/rcS, les modules (qui sont compressés ça tombe bien), les utilitaires de modules, les bibliothèques utilisées par ces programmes, unionctl pour la gestion de l’union, quelques répertoires vides pour la structure et... ça devrait suffire. Le script suivant devrait faire le travail (do_split_rootbase.sh) :
#!/bin/sh
# On renomme rootbase en rootbase-squash
# et on crée un nouveau rootbase vide
mv rootbase rootbase-squash
mkdir rootbase
# On efface bootsplash, il sera recréé
# lors de la création de l’iso
rm rootbase-squash/bootsplash
# Repertoire point de montage pivot
mkdir rootbase/oldroot
# repertoires pour gestion squash+union
mkdir rootbase/rimmodules
mkdir rootbase/union
# Repertoires complets
mv rootbase-squash/{dev,proc,sys,tmp,var} \
rootbase
# Repertoires partiels
mkdir rootbase/{etc,bin,sbin,usr,lib}
mkdir rootbase/usr/{bin,sbin}
mv rootbase-squash/lib/modules rootbase/lib
mv rootbase-squash/lib/\
{ld-linux.so.2,libc.so.6,libcrypt.so.1,libm.so.6} \
rootbase/lib
mv rootbase-squash/etc/bootsplash rootbase/etc
mv rootbase-squash/etc/\
{fstab,group,hosts,inittab,networks} \
rootbase/etc
mv rootbase-squash/etc/\
{nsswitch.conf,passwd,profile,shadow} \
rootbase/etc
mv rootbase-squash/etc/init.d rootbase/etc
# programmes
mv rootbase-squash/sbin/\
{insmod,rmmod,lsmod,modprobe} \
rootbase/sbin
mv rootbase-squash/sbin/unionctl rootbase/sbin
# copie de busybox et de ses liens
find rootbase-squash/bin -lname *busybox \
-exec mv ‘{}’ rootbase/bin \;
find rootbase-squash/sbin -lname *busybox \
-exec mv ‘{}’ rootbase/sbin \;
find rootbase-squash/usr/bin -lname *busybox \
-exec mv ‘{}’ rootbase/usr/bin \;
find rootbase-squash/usr/sbin -lname *busybox \
-exec mv ‘{}’ rootbase/usr/sbin \;
mv rootbase-squash/init rootbase
mv rootbase-squash/bin/busybox rootbase/bin
On a déplacé le répertoire cd rootbase/dev
for i in {0,1,2,3,4,5,6,7,8,9,10};
do mknod loop$i b 7 $i;
done
Enfin, le début de notre script #!/bin/sh # Mount squashed files # and move to union modprobe unionfs modprobe squashfs # We need proc for proper operation of # our squash mounts + union mount -n proc -t proc /proc # mount union with only root for the moment mount -n unionfs -t unionfs -o dirs=/=rw /.union # We look in /.rimmodules for squashed files, # mount it and add to the union for i in `ls /.rimmodules` do mkdir /.rimmodules/$i-mnt mount /.rimmodules/$i -o loop,ro \ -t squashfs /.rimmodules/$i-mnt /sbin/unionctl /.union --add --mode ro \ --after / /.rimmodules/$i-mnt done # umount proc before pivoting umount /proc # moving into union cd /.union /sbin/pivot_root . .oldroot cd / mount -n -aLe reste du script est identique à celui de l’iso 3. On commence par charger les modules
2.3 Création de l’iso
Pour la création de l’iso, nous utiliserons le script#!/bin/bash echo "Adding splash picture" ./bootsplash-3.2/Utilities/splash -s -f \ /etc/bootsplash/rimlinux/\ config/bootsplash-800x600.cfg > rootbase/bootsplash echo "Making rootbase-squash.rim" rm rootbase/.rimmodules/rootbase-squash.rim ./squashfs2.2-r2/squashfs-tools/mksquashfs \ rootbase-squash rootbase/.rimmodules/rootbase-squash.rim echo "Creating rootbase.gz from rootbase directory" cd rootbase find . -print | cpio -o -Hnewc | gzip > ../rootbase.gz echo "Copying rootbase.gz to cdrom_base" cd .. cp rootbase.gz cdrom_base/isolinux/ echo "Creating new iso" mkisofs -o rimlinux.iso -b isolinux/isolinux.bin \ -c isolinux/boot.cat -no-emul-boot \ -boot-load-size 4 -boot-info-table \ cdrom_base echo "Done"On notera qu’avant de créer le fichier
2.4 Tests de l’iso
Les fonctionnalités de cette quatrième et dernière iso sont les mêmes que celles de la troisième, à ceci près que la place occupée statiquement en mémoire est deux fois inférieure (35 Mo contre 68 Mo pour l’iso 3). Cela veut dire qu’on pourra s’en servir sur des machines avec moins de mémoire ou bien... ajouter encore plus de fonctionnalités !!2.5 To infinity and beyond... [16] ou comment on rejoint les live-CD ?
Avant de conclure cet article, une dernière remarque. Vu les techniques qu’on a utilisées à la fin, #!/usr/bin/perl
# Usage : use-livemodule.pl squash module
#
#
# Directory to inspect
$livemodule=shift @ARGV;
# First we need to know the last item on the union
@union=`unionctl / --list`;
$lastelement=pop @union;
$lastelement=~/[\s\t]*(.*)[\s\t]+\(.+\)/;
$lastelement=$1;
system(“mkdir /.rimmodules/$livemodule-mnt”);
system(“mount $livemodule -o loop,ro -t squashfs “/.
“/.rimmodules/$livemodule-mnt”);
system("unionctl / --add --mode ro --after ".
$lastelement" /.rimmodules/$livemodule-mnt");
script use-livedir.pl
#!/usr/bin/perl
# Usage : use-livedir.pl directory
#
# The specified directory must contain
# squashed files and only that -> no check
#
# All the files will be mounted and add to the union
#
# Directory to inspect
$dir=shift @ARGV;
print("Dir : $dir\n");
# First we need to know the last item on the union
@union=`unionctl / --list`;
$lastelement=pop @union;
$lastelement=~/[\s\t]*(.*)[\s\t]+\(.+\)/;
$lastelement=$1;
# Look in the specified directory
@listfiles=`ls $dir`;
chop @listfiles;
# make mountpoints, mount loop and add to union
foreach (@listfiles)
{
system("mkdir /.rimmodules/$_-mnt");
system("mount $dir/$_ -o loop,ro -t ".
"squashfs /.rimmodules/$_-mnt");
system("unionctl / --add --mode ro --after ".
$lastelement.” /.rimmodules/$_-mnt”);
}
Le premier script Conclusion
Voilà, nous arrivons au bout de cet article qui je l’espère vous aura intéressé. En le suivant, nous avons vu comment réaliser (de manière quick and dirty sous certains aspects, notamment dans la partie applicative) une mini-distribution fonctionnant entièrement en mémoire vive et comportant de nombreuses fonctionnalités. Cette mini-distribution n’avait pas d’autre fin que de servir de support à cet article, mais elle nous a permis de passer en revue de nombreux aspects sous-jacents d’un système Linux auxquels on ne touche pas vraiment quand on est simple utilisateur d’une distribution moderne où tout est fait pour nous simplifier la vie. Références :- [1] http://www.bootsplash.de/files/
- [2] http://www.samba.org/
- [3] http://www.freedesktop.org/wiki/Software_2fXserver
- [4] http://www.informatik.hu-berlin.de/~sperling/prog/swm.html
- [5] http://www.nickgravgaard.com/windowlab/
- [6] http://blackboxwm.sourceforge.net/
- [7] http://dist.schmorp.de/rxvt-unicode/
- [8] http://asic-linux.com.mx/~izto/checkinstall/
- [9] http://www.ibiblio.org/mc/
- [10] http://www.arts-project.org/doc/arts-0.5.4.html
- [11] http://ftp.gnome.org/pub/gnome/sources/esound/0.2/
- [12] http://radscan.com/nas.html
- [13] http://www.mozilla.org/firefox
- [14] http://www.mplayerhq.hu/
- [15] http://mplayerplug-in.sourceforge.net/
- [16] Buzz l’éclair dans Toy Story!
-
Retrouvez cet article dans : Linux Magazine 82





Donnez votre avis
Vous devez avoir ouvert une session pour écrire un commentaire.