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_wince
build_vxworks
build_unix
build_android
build_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_archive
db_checkpoint
db_deadlock
db_dump
db_hotbackup
db_load
db_log_verify
db_printlog
db_recover
db_replicate
db_stat
db_tuner
db_upgrade
db_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
…