Installation de LXR sous Ubuntu

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 :

LXR screensshot

LXR screensshot

Cet article est fortement inspiré de celui-ci : http://egemengozoglu.com/blog/2011/07/lxr-installation-on-ubuntu-10-10/

Publicité

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s