Introduction
La base de données Berkeley DB est embarquée dans de multiples produits Open Source comme OpenLDAP (Annuaire LDAP) et Apache Tigris Subversion (gestion des sources).
Oracle Berkeley DB a beaucoup évolué depuis la version 4.5, version avant l’acquisition par Oracle de SleepyCat. Des fonctionnalités très riches ont été introduites jusqu’à la version 5.2, parmi les nouvelles fonctionnalités (et il y en a beaucoup d’autres) :
- Réplication.
- APIs SQL. Compatibiité avec sqlite 3.
- Possibilité de générer du code C à partir d’un code DDL SQL (
create table…) avecdb_sql_codegen. - Compatibilité Androïd.
- Pilote ADO.NET…
Cet article présente la compilation de BerkeleyDB 5.2 avec SunStudio 12.1 sous Sun Solaris 10 x86 en 64 bits, compilation réalisée dans le cadre de la mise en place d’une architecture OpenLDAP et Apache Tigris Subversion, 2 produits qui reposent sur BerkeleyDB. 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.
La création d’un serveur Berkeley DB 5.2 n’est pas abordée ici.
Téléchargement et préparation de l’environnement
Téléchargement
Oracle Berkeley DB 5.2 (11.2.5.2.28) est disponible en téléchargement sous la forme d’une archive compressée (db-5.2.28.tar.gz) à cette adresse : Oracle Berkeley DB Download. Malheureusement un compte sur le site Oracle doit être créé pour pouvoir réaliser le téléchargement. Ici c’est la version avec l’encryption AES qui est téléchargée.
L’archive compressée db-5.2.28.tar.gz est transférée avec ftp sur la machine
cible dans le répertoire /Software/tools/temp/berkeleydb puis décompressée et
désarchivée avec les utilitaires gunzip et tar :
% cd /Software/tools/temp/berkeleydb
% gunzip -c db-5.2.28.tar.gz | tar xvf -
Le code source est alors désarchivé avec la commande tar dans le sous
répertoire ./db-5.2.28.
Préparation de l’environnement pour la compilation d’Oracle BerkeleyDB 5.2.28 avec SunStudio 64 bits
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
Lorsque les APIs SQL Berkeley DB et Sqlite 3 sont compilées, respectivement
--enable-sql et --enable-sql_compat lors de la configuration, il est préférable
que la couche Tcl/Tk soit détectée à la configuration. Si Tcl/Tk n’est pas
détecté, des fonctionnalités par défaut sont désactivées dans les APIs SQL
(amalgame, tests de régression) et des avertissements sont renvoyés lors de la
configuration :
Warning: can't find tclsh - defaulting to non-amalgamation build.
../../dist/../lang/sql/sqlite/configure: line 12320: tclsh: command not found
...
checking for Tcl configuration... ../../dist/../lang/sql/sqlite/configure:
line 12911: tclsh: command not found
configure: WARNING: Can't find Tcl configuration definitions
configure: WARNING: *** Without Tcl the regression tests cannot be executed ***
configure: WARNING: *** Consider using --with-tcl=... to define location of Tcl ***
Aussi la variable $PATH est modifiée pour donner le chemin du répertoire des
binaires de Tcl/Tk 8.5.10 (tclsh…) :
% PATH=/Software/tools/misc/bin:$PATH
% export PATH
Pour plus d’informations sur la compilation de Tcl/Tk 8.5.10 sur Sun Solaris 10 X86 64 bits : Tcl/Tk 8.5.10,compilation et utilisation sur Sun Solaris 10 x86
Configuration et compilation
Une fois l’environnement préparé (variables $PATH, $CFLAGS), la
configuration de la compilation peut être déclenchée. Le scriptconfigure pour
Oracle Berkeley DB n’est pas à la racine comme il est d’usage mais dans le sous
répertoire ./dist.
Plusieurs sous répertertoires build_% vides sont présents :
build_wincebuild_vxworksbuild_unixbuild_androidbuild_windows
Il faut se positionner dans le sous répertoire propre à sa plateforme afin
que les fichiers produits par la compilation (*.o, Makefile, etc.) soient
générés dans celui-ci : ici build_unix
L’option --help renvoie les options de configuration (la sortie de l’option
--help est allégée pour la lisibilité).
% cd /Software/tools/temp/berkeleydb/db-5.2.28 % cd build_unix % ../dist/configure --help`configure' configures Berkeley DB 5.2.28 to adapt to many kinds of systems. Usage: ./dist/configure [OPTION]... [VAR=VALUE]... ... Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local/BerkeleyDB.5.2] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, `make install' will install all the files in `/usr/local/BerkeleyDB.5.2/bin', `/usr/local/BerkeleyDB.5.2/lib' etc. You can specify an installation prefix other than `/usr/local/BerkeleyDB.5.2' using `--prefix', for instance `--prefix=$HOME'. ... --enable-cxx Build C++ API. --enable-debug Build a debugging version. --enable-debug_rop Build a version that logs read operations. --enable-debug_wop Build a version that logs write operations. ... --enable-sql Build the SQL API. --enable-sql_compat Build a drop-in replacement sqlite3 library. --enable-jdbc Build BDB SQL JDBC library. --enable-amalgamation Build a SQL amalgamation instead of building files separately. --enable-sql_codegen Build the SQL-to-C code generation tool. ...
Les options sont riches et très nombreuses. Pour plus d’informations se référer au manuel du produit Oracle BerkeleyDB 5.2.
Plusieurs options sont spécifiées ici à la configuration :
% ../dist/configure --prefix=/Software/tools/berkeleydb/berkeleydb-5.2
--enable-sql_codegen
--enable-cxx
--enable-sql
--enable-sql_compat
--with-tcl=/Software/tools/misc/lib
| Option | Commentaire |
|---|---|
--prefix=/Software/tools/berkeleydb/berkeleydb-5.2 |
Pour délocaliser l’installation d’Oracle Berkeley DB 5.2 dans le
répertoire /Software/tools/berkeleydb/berkeleydb-5.2. |
--enable-cxx |
Construction des APIs C++ Berkeyley DB 5.2. |
--enable-sql_codegen |
Génération de l’exécutable db_sql_codegen, utilitaire très pratique
pour transformer du code DDL SQL (create table…) en code C.
Code C qui est par exemple utilisé par OpenLDAP. |
--enable-sql |
Activation des APIs BDB SQL pour les bases Berkeley DB (BDB -
Berkeley DB) et création de l’outil dbsql (nouveauté de la version
5.0). Les APIs BDB sont communes avec celles de sqlite 3 pour la
plupart des fonctionnalités, sauf celles propres à Berkeley DB. |
--enable-sql_compat |
Compilation de sqlite 3 : exécutable sqlite3, librairie
libsqlite3.so. Activation à réaliser avec prudence pour éviter des
conflits de versions de librairies si sqlite 3 existe ailleurs
(variable $PATH). |
--with-tcl=/Software/tools/misc/lib |
Répertoire dans lequel se trouve le script tclConfig.sh, script
définissant l’environnement Tcl/Tk. |
Les packages de debug n’ont pas été sélectionnés.
La compilation et l’installation d’Oracle Berkeley DB 5.2.28 sont réalisées
avec les commandes make et make install qui s’exécutent sans problème
particulier :
% cd /Software/tools/temp/berkeleydb/db-5.2.28
% cd build_unix
% make
% make install
Architecture d’Oracle Berkeley DB 5.2
Dans la suite de cet article, $DIR correspond au répertoire d’installation
d’Oracle Berkeley DB 5.2 (/Software/tools/berkeleydb/berkeleydb-5.2). À la fin
de la compilation, l’arborescence créée pour Oracle Berkeley DB 5.2 est la
suivante :
$DIR/bin$DIR/include$DIR/lib
Les fichiers d’entête *.h (headers) pour Oracle Berkeley DB 5.2 (db.h,
dbsql.h, db_cxx.h, sqlite3.h, etc.) sont installés dans le répertoire
$DIR/include. Ce répertoire doit être inclus dans les options de compilation des
programmes développés avec la couche Oracle Berkeley DB 5.2 comme Apache ou
encore OpenLDAP.
Le répertoire $DIR/bin contient les binaires et utilitaires pour gérer les
bases Berkeley DB, chaque utilitaire a un nom explicite :
db_archivedb_checkpointdb_deadlockdb_dumpdb_hotbackupdb_loaddb_log_verifydb_printlogdb_recoverdb_replicatedb_statdb_tunerdb_upgradedb_verify
Le répertoire $DIR/bin contient également les utilitaires interactifs pour
interroger des bases Berkeley DB :
dbsql: requêteur SQL avec les APIs BDB (Berkeley DB).db_sql_codegen: génération du code C à partir d’un code SQL DDL (create table…).sqlite3: requêteur SQL avec les APIs SQLite3.
Les librairies dynamiques et archives (*.so, *.a) sont installées
classiquement dans le répertoire $DIR/lib : libdb.so, libdb_cxx.so,
libdb_sql.so, libdb_tcl.so, libsqlite3.so…