Compilation et installation d'Oracle Berkeley DB 5.2 sur Sun Solaris 10 x86

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...) avec db_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...