Si vous aimez le kernel et que vous voulez que les sources des différents versions du noyau soient a porté de main de vous, alors je vous conseille un soft qui s’appelle LXR, celui ci vous permettra d’avoir une navigation et des recherches aisés dans les sources du noyau.
Voici la procédure d’installation sur une machine Ubnutu 12.10, faut prévoir de l’espace si vous voulez installé plusieurs versions du kernel et pour plusieurs d’architectures, moi j’ai 4 versions de kernel et l’espace utilisé est de 10 GO a peu prés, parce qu’il y a la fois les sources des kernels et les indexations de tout le code dans une base de données (MySQL dans mon cas).
On aura donc besoin d’un serveur apache, une base MySQL, ctags (Pour indexer du code C), les modules Perl pour accéder a une base MySQL (LXR est ecrit en Perl).
sudo apt-get install apache2 mysql-server exuberant-ctags libdbi-perl libdbd-mysql-perl libfile-mmagic-perl libapache2-mod-perl2 swish-e
Récupérer les versions des kernels qui vous intéressent et dezipper les dans un répertoire de votre choix, dans mon cas ils sont dans $HOME/lxr_source :
toc@tocNewServer:~$ ll lxr_source/ total 16K drwxrwxr-x 23 toc toc 4,0K oct. 7 2012 2.6.32.60 drwxrwxr-x 23 toc toc 4,0K mars 28 20:06 3.0.71 drwxrwxr-x 23 toc toc 4,0K mars 28 20:12 3.4.38 drwxrwxr-x 23 toc toc 4,0K mars 28 20:19 3.8.5
Créer un répertoire pour les indexes (utilisé par le binaire swish), dans mon cas il est dans $HOME :
toc@tocNewServer:~$ ll swish/ total 653M -rw-r--r-- 1 toc toc 1,2M avril 1 01:00 2.6.32.60.index.prop -rw-r--r-- 1 toc toc 135M avril 1 01:00 2.6.32.60.index -rw-rw-r-- 1 toc toc 951K avril 1 01:00 2.6.32.60.filenames -rw-r--r-- 1 toc toc 1,4M avril 1 05:44 3.0.71.index.prop -rw-r--r-- 1 toc toc 161M avril 1 05:44 3.0.71.index -rw-rw-r-- 1 toc toc 1,2M avril 1 05:44 3.0.71.filenames -rw-r--r-- 1 toc toc 1,5M avril 1 11:58 3.4.38.index.prop -rw-r--r-- 1 toc toc 169M avril 1 11:58 3.4.38.index -rw-rw-r-- 1 toc toc 1,3M avril 1 11:58 3.4.38.filenames -rw-r--r-- 1 toc toc 1,6M avril 1 18:52 3.8.5.index.prop -rw-r--r-- 1 toc toc 179M avril 1 18:52 3.8.5.index -rw-rw-r-- 1 toc toc 1,4M avril 1 18:52 3.8.5.filenames
Récupérer la version de LXR que vous voulez a partir d’ici : http://sourceforge.net/projects/lxr/
une fois récupéré dezipper l’archive et déplacer la vers /usr/local/share/lxr :
toc@tocNewServer:~/TARS$ tar xvf lxr-0.9.10.tgz toc@tocNewServer:~/TARS$ mv lxr-0.9.10 /usr/local/share/lxr
On va a présent créer la base MySQL pour LXR :
cd /usr/local/share/lxr mysql -u root -p # Apres ca vous entrer dans l'invite de commande de MySQL mysql> CREATE USER 'lxr'@'localhost' identified by 'PASSWORD'; -- création du user lxr avec le mot de pass "PASSWORD" mysql> \. initdb-mysql -- Ce fichier va créer la base 'lxr' et les tables qui vont bien (lxr_files, lxr_symbols, lxr_indexes, lxr_releases, lxr_usage, lxr_status, lxr_declarations) mysql> quit; Bye toc@tocNewServer:~$
Vous pouvez vous assurez que les tables ont bien été crées avec les commandes :
toc@tocNewServer:~$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 80 Server version: 5.5.31-0ubuntu0.12.04.2 (Ubuntu) Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use lxr; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +------------------+ | Tables_in_lxr | +------------------+ | lxr_declarations | | lxr_files | | lxr_indexes | | lxr_releases | | lxr_status | | lxr_symbols | | lxr_usage | +------------------+ 7 rows in set (0.00 sec) mysql> quit; Bye toc@tocNewServer:~$
On se déplace vers notre dossier lxr, si ce n’est pas le cas (en tant que root, ça facilitera la vie, comme y a pas mal de conf a faire):
root@tocNewServer:~# cd /usr/local/share/lxr
On copie un fichier de conf du répertoire templates dans la racine du dossier lxr :
root@tocNewServer:/usr/local/share/lxr#cp templates/lxr.conf .
Nous allons modifier ce fichier comme suit :
On commente les lignes :
#, 'glimpsebin' => '/usr/local/bin/glimpse' #, 'glimpseindex' => '/usr/local/bin/glimpseindex'
On mets les bonnes adresse de l’url, celles qui permettent l’accès aux sources des kernels :
'baseurl' => 'http://192.168.1.97/lxr' # Put your URL here # baseurl_aliases allows other URLs to be used to reach the site # comment this out if you do not want any aliases , 'baseurl_aliases' => [ 'http://localhost/lxr' , 'http://192.168.1.97/lxr' ]
Indiquez l’endroit ou se trouve les sources des kernels a indexer :
, 'sourceroot' => '/home/toc/lxr_source'
Le titre a afficher dans la page web :
# The name to display for this source tree , 'sourcerootname' => 'Linux Kernels'
Les versions des kernels (Dans mon cas c’est : 2.6.32.60, 3.0.71, 3.4.38 et 3.8.5) :
, 'range' => [qw(2.6.32.60 3.0.71 3.4.38 3.8.5)]
La version du kernel a afficher par défaut :
, 'default' => '3.8.5'
Les infos pour accéder a la base :
, 'dbpass' => 'PASSWORD' , 'dbuser' => 'lxr'
Et en fin le répertoire ou se trouveront les indexes :
, 'swishdir' => '/home/toc/swish/'
ensuite on lance le script qui va bosser sur l’indexation de tout ça :
./genxref --url=http://localhost/lxr --allversions
Laisser tourner pendant la nuit :).
On passe a la configuration d’apache, créer le fichier /etc/apache2/conf.d/lxrserver.conf et lui ajouter les lignes suivantes :
Alias /lxr /usr/local/share/lxr AllowOverride All
En suite :
toc@tocNewServer:~$cd /usr/local/share/lxr toc@tocNewServer:~$cp .htaccess_cgi .htaccess
C’est presque fini, il faut juste modifier la première ligne des fichiers (se trouvant dans /usr/local/share/lxr) : ident, diff, search et source :
#!/usr/bin/perl
a la place de :
#!/usr/bin/perl -T
Pour que la page d’accueil soit un peu sexy on va lui ajouter une image, moi j’utilise celle la :
wget http://lxr.linux.no/.static/gfx/lxray-large.png
placer ce fichier dans /usr/local/share/lxr/templates, et modifier le fichier /usr/local/share/lxr/templates/html-head.html en ajoutant :
</pre> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td valign="top"><img alt="Big Boat" src="templates/lxray-large.png" /></td> <td> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tbody> <tr> <td align="center"> <h1 class="main">The LXR Cross Referencer</h1> </td> </tr> <tr> <td class="banner" align="center">$banner</td> </tr> </tbody> </table> </td> <td align="right">
Relancer apache et accéder a vos kernels : url/lxr :
Cet article est fortement inspiré de celui-ci : http://egemengozoglu.com/blog/2011/07/lxr-installation-on-ubuntu-10-10/