libdbd-oracle-perl sur Debian
J’ai besoin du module Oracle pour PERL. Fastoche, c’est le paquet « libdbd-oracle-perl ».
Manque de bol, il dépend d’un paquet virtuel (qui n’existe pas, rapport aux licences non-libres, Debian, et toute cette philosophie). Ledit paquet est « oracle-instantclient-basic ».
Pas de problème me direz-vous, c’est le genre de trucs qui traîne chez Oracle.
Oui oui, d’ailleurs je décris son installation dans un précédent article. Dommage, le paquet ainsi installé est nommé « oracle-instantclient11.1-basic » et non « oracle-instantclient-basic ».
Après un peu de Google, n’arrivant pas à forcer l’installation sans respecter la dépendance, j’ai choisi d’installer le module DBD::Oracle (de son petit nom) à la main depuis CPAN (la base des modules PERL pour les autistes adorant PERL
Et là encore, c'est douloureux. Je décris donc ici en bref les commandes à taper pour que ça se fasse tout seul.
Je considère que la doc mentionnée ci-dessus a été suivie, donc vous avez un client Oracle fonctionnel testé avec SQLPlus par exemple.
Let's go.
Symptômes
serveur:/# aptitude install libdbd-oracle-perl Lecture des listes de paquets... Fait Construction de l'arbre des dépendances Lecture des informations d'état... Fait Lecture de l'information d'état étendu Initialisation de l'état des paquets... Fait Lecture des descriptions de tâches... Fait Les paquets suivants sont CASSÉS : libdbd-oracle-perl 0 paquets mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de télécharger 392ko d'archives. Après dépaquetage, 995ko seront utilisés. Les paquets suivants ont des dépendances non satisfaites : libdbd-oracle-perl: Dépend: oracle-instantclient-basic qui est un paquet virtuel Impossible de trouver une solution à ces dépendances ! Abandon... Les paquets suivants sont CASSÉS : libdbd-oracle-perl 0 paquets mis à jour, 1 nouvellement installés, 0 à enlever et 0 non mis à jour. Il est nécessaire de télécharger 392ko d'archives. Après dépaquetage, 995ko seront utilisés. Il n'a pas été possible de résoudre ces dépendances. Vous pouvez les résoudre vous-même ou taper « n » pour quitter. Les paquets suivants ont des dépendances non satisfaites : libdbd-oracle-perl: Dépend: oracle-instantclient-basic qui est un paquet virtuel Faut-il résoudre ces dépendances manuellement ? [N/+/-/_/:/?]
J’avoue, je n’ai pas réussi à trouver comment forcer le truc – si c’est possible. Car là c’est bête, c’est qu’il ne cherche pas avec le bon nom, si je puis dire. Y’a bien un bug Debian ouvert, je crois, mais à part 2 mecs qui s’engueulent, je n’ai rien vu de constructif.
PERL : La partie totomatique
En tant que root, je lance l’installation de la couche DB de PERL :
serveur:~# perl -MCPAN -e shell
Dans ce shell « perl/cpan », je vérifie et constate que mon module DBI n’est pas installé :
cpan[1]> m DBI Module id = DBI ... INST_FILE (not installed)
Je l’installe :
cpan[2]> install DBI
S’en suit un long blabla, mais bon, ça s’installe (normalement :))
Ensuite, je teste la présence du module DBD::Oracle :
cpan[3]> m DBD::Oracle Module id = DBD::Oracle DESCRIPTION Oracle Driver for DBI CPAN_USERID DBIML (DBI Mailing Lists) CPAN_VERSION 1.26 CPAN_FILE T/TI/TIMB/DBD-Oracle-1.26.tar.gz UPLOAD_DATE 2010-10-11 DSLIP_STATUS MmcO? (mature,mailing-list,C,object-oriented,) MANPAGE DBD::Oracle - Oracle database driver for the DBI module INST_FILE (not installed)
Et je ne l’installe pas (car ça déconnera)… je me contente de le télécharger :
cpan[4]> get DBD::Oracle Running get for module 'DBD::Oracle' CPAN: Data::Dumper loaded ok (v2.121_14) 'YAML' not installed, falling back to Data::Dumper and Storable to read prefs '/root/.cpan/prefs' CPAN: Digest::SHA loaded ok (v5.45) CPAN: Compress::Zlib loaded ok (v2.012) Checksum for /root/.cpan/sources/authors/id/T/TI/TIMB/DBD-Oracle-1.26.tar.gz ok Scanning cache /root/.cpan/build for sizes ............................................................................DONE DBD-Oracle-1.26/ DBD-Oracle-1.26/Changes et blablablablablabla
On va le compiler juste après.
Environnement Oracle
D’abord, on positionne quelques variables (à adapter suivant votre cas)
serveur:~# export ORACLE_HOME=/usr/lib/oracle/11.1/client serveur:~# export PATH=$PATH:$ORACLE_HOME/bin serveur:~# export LD_LIBRARY_PATH=$ORACLE_HOME/lib
PERL : la partie manuelle
Puis je vais compiler à la main le bestiau :
serveur:~# cd ~/.cpan/build/<le rep qui va bien où on voit les sources du module> serveur:~# perl Makefile.PL serveur:~# make
Normalement c’est OK.
On peut tester grâce à une règle Makefile sympatique :
serveur:~# export ORACLE_USERID="user/pass@tns" serveur:~# make test PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t t/01base................# Test loading DBI, DBD::Oracle and version t/01base................ok t/10general.............ok 2/30 skipped: various reasons t/12impdata.............ok .... blablabla Repetitive connect/open/close/disconnect: 1 2 3 4 5 6 7 8 9 10 (~0.027 seconds each) test.pl complete.
Youhou
On l’installe et je vérifie que j’ai enfin le fichier Oracle.pm :
serveur:~# make install serveur:~# find /usr/local/lib/perl/ -name "Oracle.pm" /usr/local/lib/perl/5.10.0/DBD/Oracle.pm
Ayé, ça marche
Tout ça pour quoi au fait ??? ah oui, installer un p’tit plug-in 3rd-party pour Nagios, qui vérifie une palanquée d’indicateurs Oracle.
Oui, c’est probablement le prochain article à venir.
A part ça, je n’aime pas trop cette méthode car on installer un bout de PERL comme des cochons. Alors la logique des paquets Debian en prend forcément un coup. On verra ça à l’upgrade. Quitte à refaire la même chose avec « la version à jour du moment ».