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 ».

Vus : 1407
Publié par Michauko : 64