Compilation et installation de SQLite 3 sur Sun Solaris 10 x86

Logo

Introduction

SQLite 3 est un moteur de base de données relationnelles accessible par le langage SQL et qui s’interface très simplement avec des langages comme C++, PHP, Tcl/Tk ou encore Python. L’intégralité d’une base de données SQLite est sockée dans un fichier unique indépendant de la plateforme, mais elle peut être également uniquement en mémoire (In Memory Database).

Même si les transactions sont par exemple supportées et que le verrouillage et la journalisation ont été améliorés avec la version 3.0, il faut toutefois bien garder à l’esprit qu’il ne s’agit pas pas d’une base de données client serveur pouvant supporter une concurrence de transactions élevées.

Pour leurs fonctionnements internes, aujourd’hui SQLite 3 est embarqué dans de nombreux produits : Google Chrome, Smartphones, Apache Subversion…

Nécessaire pour le fonctionnement interne d’Apache Subversion, cet article présente la compilation de SQLite 3 sur une plateforme Sun Solaris 10 X86 64 bits avec SunStudio 12.1. Pour plus d’informations sur l’installation des compilateurs SunStudio 12.1 : Installation de Sun Studio 12 sur Sun Solaris 10 X86 pour les compilations.

2 particularités lors de la construction :

  • La librairie readline 6.2 64 bits est activée pour bénéficier du rappel des commandes SQL. Pour plus d’informations sur la compilation de GNU Readline sur Sun Solaris 10 X86 : Compilation de GNU Readline sur Sun Solaris 10 X86 .
  • Les extensions optionnelles des indexes R*Tree et FTS (Full Text Search) sont ajoutées à la compilation.

Téléchargement

SQLite 3 est disponible en téléchargement sous la forme d’une archive compressée (sqlite-autoconf-3.x.y.z.tar.gz) à cette adresse : SQLite Download. C’est la version amalgame (amalgamation) avec autoconf qu’il faut choisir : la version amalgame regroupe tout le code C de SQLite 3 en un seul fichier sqlite3.c, il est fortement déconseillé de choisir les sources contenant les fichiers source individuels.

Ici c’est la version 3.7.7.1 de SQLite 3 qui est téléchargée. L’archive compressée sqlite-autoconf-3070701.tar.gz est transférée avec ftp sur la machine cible dans le répertoire /Software/tools/temp puis décompressée et désarchivée avec les utilitaires gunzip et tar :

% cd /Software/tools/temp
% gunzip -c sqlite-autoconf-3070701.tar.gz | tar xvf -

Le code source est alors désarchivé avec la commande tar dans le sous répertoire ./sqlite-autoconf-3070701.

Préparation de l’environnement pour la compilation de SQLite 3 avec SunStudio 64 bits

Environnement pour les compilateurs

La variable $PATH est mise à jour avant la compilation pour référencer /usr/ccs/bin, répertoire qui contient les binaires ld et ar, indispensables pour la génération des liens et les création des librairies *.a.

% PATH=/usr/ccs/bin:$PATH
% export PATH

Si les liens de SunStudio n’ont pas été installés dans /usr/bin lors de l’installation, la variable $PATH doit référencer également le répertoire <répertoire de sunstudio 12.1>/bin pour trouver les compilateurs.

% PATH=/opt/sunstudio12.1/bin:$PATH
% export PATH

Comme il s’agit d’une compilation en 64 bits, la variable d’environnement $CFLAGS est créée et mise à jour à -m64 :

% CFLAGS=-m64
% export CFLAGS

Environnement pour la librairie Readline 6.2

La librairie Readline 6.2 64 bits est installée dans le répertoire non standard /Software/tools/misc/lib. La variable $LDFLAGS est modifiée pour référencer ce répertoire :

% LDFLAGS="-L/Software/tools/misc/lib $LDFLAGS"
% export LDFLAGS 

Lorsque la librairie Readline n’est pas détectée, le script de configuration renvoie le message suivant :

checking for library containing readline... no
checking for readline... no

La variable $CFLAGS doit également être modifiée pour inclure le répertoire /Software/tools/misc/include qui contient les fichiers entête readline.h et history.h pour la librairie Readline 6.2 :

% CFLAGS="-I/Software/tools/misc/include $CFLAGS"
% export CFLAGS

Dans le cas contraire, la compilation avec make tombe en échec :

"shell.c", line 45: cannot find include file: <readline/readline.h>
"shell.c", line 46: cannot find include file: <readline/history.h>

Environnement pour l’activation des extensions R*Tree et FTS3/FTS4 (Full Text Search)

L’extension des indexes R*Tree est activée avec l’option de compilation -DSQLITE_ENABLE_RTREE=1 dans la variable $CPPFLAGS :

% CPPFLAGS="-DSQLITE_ENABLE_RTREE=1 $CPPFLAGS"
% export CPPFLAGS

L’extension des indexes FTS3/FTS4 (Full Text Search) est activée avec les options de compilation -DSQLITE_ENABLE_FTS3 et -DSQLITE_ENABLE_FTS3_PARENTHESIS dans la variable $CPPFLAGS :

% CPPFLAGS="-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS $CPPFLAGS"
% export CPPFLAGS

Configuration et compilation

Une fois l’environnement préparé (variables $PATH, $CFLAGS, $CPPFLAGS, $LDFLAGS, $LD_LIBRARY_PATH), la configuration de la compilation peut être déclenchée avec le script configure.

L’option --help renvoie les options de configuration (la sortie de l’option --help est allégée pour la lisibilité, seules les options qui nous intéressent sont consignées).

% cd /Software/tools/temp/sqlite-autoconf-3070701

% ./configure --help

`configure' configures sqlite 3.7.7.1 to adapt to many kinds of systems.

Usage: ./configure [OPTION]... [VAR=VALUE]...

 ...

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, `make install' will install all the files in
`/usr/local/bin', `/usr/local/lib' etc.  You can specify
an installation prefix other than `/usr/local' using `--prefix',
for instance `--prefix=$HOME'.

 ...
  --enable-readline       use readline in shell tool (yes, no) [default=yes]
 ...

L’option --prefix est spécifiée ici afin de délocaliser l’installation de sqlite 3.7.7.1 en dehors des répertoires systèmes /usr. L’installation est réalisée dans le répertoire /Software/tools/sqlite/sqlite-3 : --prefix=/Software/tools/sqlite/sqlite-3 (DIR).

L’historique des commandes avec la librairie readline 6.2 est activée avec l’option --enable-readline

La ligne de configuration de la compilation est donc la suivante dans cet exemple pratique :

% cd /Software/tools/temp/sqlite-autoconf-3070701

% ./configure --prefix=/Software/tools/sqlite/sqlite-3
                --enable-readline

L’environnement étant bien préparé (variables $PATH, $CFLAGS, $CPPFLAGS, $LDFLAGS, $LD_LIBRARY_PATH), la configuration se déroule sans problème.

La compilation et l’installation de SQLite 3.7.7.1 sont réalisées avec les commandesmake et make install qui s’exécutent également sans problème :

% cd /Software/tools/temp/sqlite-autoconf-3070701
% make
% make install

Architecture de SQLite

Dans la suite de cet article, DIR correspond au répertoire d’installation de SQLite 3 (/Software/tools/sqlite/sqlite-3). À la fin de la compilation, l’arborescence créée pour SQLite 3 est la suivante :

  • DIR/bin
  • DIR/include
  • DIR/lib
  • DIR/share

Le répertoire DIR/include contient tous les fichiers d’entête *.h (headers) pour SQLite 3 : sqlite3.h, sqlite3ext.h, etc. Ce répertoire doit être inclus dans les options de compilation des programmes développés avec la couche SQLite 3.

Le répertoire DIR/bin contient l’utilitaire de requêtes sqlite3.

Les librairies dynamiques et statiques SQLite 3 sont classiquement installées dans le répertoire DIR/lib (libsqlite3.so, libsqlite3.a…).

Tests

Les librairies clientes SQLite3 peuvent dès lors être utilisées après avoir référencé DIR/bin (/Software/tools/sqlite/sqlite-3/bin) dans la variable $PATH et DIR/lib (/Software/tools/sqlite/sqlite-3/lib) dans la variable $LD_LIBRARY_PATH :

% export PATH=/Software/tools/sqlite/sqlite-3/bin:$PATH
% export LD_LIBRARY_PATH=/Software/tools/sqlite/sqlite-3/lib:$LD_LIBRARY_PATH

Si la couche SQLite 3 (binaire et librairies) a été compilée avec Oracle Berkeley DB 5.x (--enable-sql_compat), le binaire sqlite3 et la librairie libsqlite3.so existent également dans la distribution Berkeley DB : vérifier lors de cette étape la précédence dans les variables $PATH et $LD_LIBRARY_PATH.

Une base de données SQLite physique est créée ou ouverte simplement en donnant à sqlite3 le nom du fichier

% sqlite3 test.db
SQLite version 3.7.7.1 2011-06-28 17:39:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table spa (id int not null);
sqlite> insert into spa values (1);
sqlite> select * from spa;
1
sqlite> .quit

La création d’une base SQLite3 en mémoire avec sqlite3 est réalisée avec la commande ATTACH DATABASE et le mot clé ':memory:' :

% sqlite3
SQLite version 3.7.7.1 2011-06-28 17:39:05
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> ATTACH DATABASE ':memory:' AS aux1;
sqlite> create table spa (id int not null);
sqlite> insert into spa values (1);
sqlite> select * from spa;
1
sqlite> .quit

La base de données en mémoire n’existe que pour la connexion courante et est détruite à la déconnexion.