Empaqueter le client Oracle 11g sous Debian Jessie🔗
Introduction
A la suite de notre article sur l'installation manuelle du client Oracle 12c sous Debian, j'avais émis l'hypothèse de créer un ensemble de paquets facilement déployables sous Debian. Ce sera l'objet de cet article qui va nous plonger un peu dans la création de paquets Debian.
Pour commencer, je ne suis pas développeur Debian. Donc je ne suis pas un spécialiste de la chose (même si je m'entraîne régulièrement). Je vais donc faire des erreurs ou des choix qui ne seront pas appropriés. Mais mon objectif est d'obtenir des paquets Debian permettant d'installer facilement le client Oracle via dpkg.
Ensuite, sachez qu'à moins d'un coup de tonnerre dans le Landerneau, la licence du client Oracle ne permettra JAMAIS d'envisager son inclusion dans la distribution Debian (même dans non-free). Je ne pourrais non plus JAMAIS distribuer ces paquets prêts à l'emploi.
Enfin, distribuer des binaires purs déjà compilés dans un paquet Debian est un travail particulier. En effet, la majorité des paquets Debian (et donc des outils qui vont avec) sont créés à partir de sources qu'il faut compiler. Ici, nous avons juste un ensemble de fichiers qu'il s'agira de répartir comme il faut sur le système.
Vous êtes prévenus, passons à la suite…
Télécharger ce qu'il faut
Il vous faut:
- le client Oracle 11g nommé Instant Client.
- le SDK Oracle 11g qui est nécéssaire pour compiler le provider Oracle de QGIS ou d'autres bibliothèques telles que cx_Oracle.
- le binaire de SQLPlus 11g, le client SQL en ligne de commande d'Oracle. Il n'est pas nécéssaire pour la suite mais sa présence vous permettra de tester la connexion vers votre serveur Oracle Database.
Prenez soin de prendre la version adaptée à votre architecture (X86 32 ou 64 bits) et stockez ces archives dans le répertoire ~/projects/oracle/oic/
.
J'ai pris le client 11g pour des questions techniques (je vais compiler le client Oracle Spatial QGIS avec cette version) mais je pense qu'on peut faire le même travail pour la version 12c sans trop de souci.
Ce que nous allons produire
Pour ma part, j'ai choisi de créer trois paquets:
oracle-instantclient-11.2.0.4-1.deb
qui contiendra la base de l'installation, c'est à dire, tout ce qui se trouve dans le client Oracle basique, ses binaires comme ses bibliothèques partagées.oracle-instantclient-dev-11.2.0.4-1.deb
qui contiendra le SDK.oracle-sqlplus-11.2.0.4-1.deb
qui contiendra le binaire SQLPus.
Il y aura bien sûr une interdépendance entre les paquets. Plutôt que de tout mettre dans /opt, je vais installer l'ensemble des fichiers dans le système standard Debian mais en respectant les chemins qu'on peut trouver dans les paquets RPM fournis par Oracle. En effet, l'objectif est de se conformer le plus possible à la charte Debian tout en permettant à la majorité des programmes qui se basent sur Oracle de trouver les bibliothèques. De fait, la charte Debian interdit de mettre des fichiers dans /opt et dans /usr/local. Donc autant tout mettre au bon endroit directement. De plus, la désinstallation via apt permettra facilement de retirer l'ensemble des fichiers en cas de problème, sans pourrir le reste du système (enfin, si on travaille bien).
Un peu de théorie sur les paquets Debian
Pour mieux comprendre ce que nous allons faire, vous DEVEZ lire le guide du nouveau mainteneur Debian.
Dans la pratique, nous allons créer des paquets Debian simples qui ne font que copier des fichiers au bon endroit. C'est un type de paquet spécial mais assez facile à comprendre: il n'y a pas de phase de compilation.
Pour résumer, voici les éléments à intégrer avant de commencer:
- On créé un répertoire dédié à chaque paquet.
- Dans ce répertoire, on dézippe chaque archive du client Oracle selon le nom du paquet.
- On créé ensuite un répertoire
debian
à la racine du répertoire dédié. - Dans ce répertoire
debian
, on créé les fichiers nécessaires à la création du paquet. - Pour faire simple, on va surtout déclarer où placer les fichiers Oracle dans le système cible.
- Ensuite, nous allons utiliser les outils debian pour créer le paquet (via
dpkg-buildpackage
).
Avant de nous plonger dans le travail, créez les répertoires dédiés à l'empaquetage:
$ mkdir -p ~/projects/oracle/packaging/oracle-instantclient/debian $ mkdir -p ~/projects/oracle/packaging/oracle-sqlplus/debian $ mkdir -p ~/projects/oracle/packaging/oracle-instantclient-dev/debian $ cd ~/projects/oracle/packaging/oracle-instantclient && unzip ~/projects/oracle/oic/instantclient-basic-linux.x64-11.2.0.4.0.zip $ cd ~/projects/oracle/packaging/oracle-sqlplus && unzip ~/projects/oracle/oic/instantclient-sqlplus-linux.x64-11.2.0.4.0.zip $ cd ~/projects/oracle/packaging/oracle-instantclient-dev && unzip ~/projects/oracle/oic/instantclient-sdk-linux.x64-11.2.0.4.0.zip
Paquet oracle-instantclient-11.2.0.4-1.deb
Introduction
Les fichiers binaires sont dans le répertoire ~/projects/oracle/packaging/oracle-instantclient/instantclient_11_2
. Nous allons créer un ensemble de fichiers pour l'empaquetage Debian. Ces derniers sont dans ~/projects/oracle/packaging/oracle-instantclient/debian/
et je vais les présenter un par un…
Fichier control
Ce fichier permet de définir les informations de dépendances du paquet ainsi que le nom précis et les éléments qui se retrouveront dans les métadonnées du paquet. Voici son contenu adapté:
Source: oracle-instantclient Section: non-free/database Priority: extra Maintainer: Médéric Ribreux <mederic.ribreux@medspx.fr> Build-Depends: debhelper (>= 9.0.0~) Standards-Version: 3.9.6 Package: oracle-instantclient Architecture: amd64 Depends: ${misc:Depends}, libaio1 Description: Oracle Instant Client base package Instant Client allows you to run your applications without installing the standard Oracle client or having an ORACLE_HOME. OCI, OCCI, Pro*C, ODBC, and JDBC applications work without modification, while using significantly less disk space than before.
On voit que le paquet dépend notamment de libaio1 et j'ai indiqué un petit blabla pour plus d'informations.
Fichier changelog
Ce fichier permet de présenter les informations sur l'évolution du packaging ainsi que de préciser le numéro de version du paquet.
oracle-instantclient (11.2.0.4.0-1) unstable; urgency=low * Initial release. - Médéric Ribreux <mederic.ribreux@medspx.fr> Sun, 24 May 2015 12:37:54 +0100
Fichier compat
Ce fichier précise quelle est la version de système d'empaquetage que nous utilisons (dans notre cas, il s'agit de debhelper v9).
9
Fichier README.Debian
Ce fichier indique des informations sur le contenu du paquet. J'ai fait un petit blabla sur les autres utilitaires présent dans les binaires livrés par Oracle.
Oracle Instant Client for Debian -------------------------------- This package install the basic Oracle Instant Client on a Debian system. This package only install the libraries and the executable binaries into the Debian system. Ths package can only work for x86_64 systems as Oracle Corporation only provides binaries for this plateform. To use a tnsnames.ora file, you have to export the TNS_ADMIN environment variable on a per-user configuration. I suggest you use the following: $ mkdir ~/.oracle $ mv tnsnames.ora ~/.oracle/ $ echo "# TNSNAMES for Oracle" >> ~/.profile $ echo "export TNS_ADMIN=~/.oracle/" >> ~/.profile With this package, you will also find the following tools: * adcri: ADR Command Interpreter The ADR Command Interpreter (ADRCI) is a command-line tool that you use to manage Oracle Database diagnostic data. * genezi: Generate EZ Instantclient Instant Client (i.e. no sqlplus) from 10.2.0.3 up can run LD_LIBRARY_PATH=$ORACLE_HOME/lib genezi -v to get client version. * uidrvci: ADR related. E.g., uidrvci /u01/app/oracle/diag/rdbms/db_name/instance_name/trace getSchema INC_METER_SUMMARY, where INC_METER_SUMMARY is an .ams file under the trace/metadata subdir of the directory in the second arg. This getSchema command shows the table definition of v$incmeter_summary (summary of incident meters). Not sure what use this command really has.
Fichier rules
C'est le fichier le plus important: il indique comment compiler le paquet. Dans notre cas, il y juste des fichiers à copier donc le fichier rules est très simple. Il repose sur d'autres fichiers (install, docs, etc.) pour paramétrer quoi faire.
#!/usr/bin/make -f clean: dh_clean %: dh $@
Fichier install
Ce fichier indique quels sont les fichiers à copier et où doivent-ils être copiés. Dans notre cas, nous allons effectuer une installation directement dans le système d'exploitation pour nous conformer à la charte Debian. La majorité se retrouve dans /usr/lib/oracle/11.2/client64/lib mais il y a quelques binaires qui vont se retrouver dans /usr/bin. Enfin, les jar ont vocation à être dans /usr/share/java.
instantclient_11_2/adrci usr/lib/oracle/11.2/client64/bin instantclient_11_2/genezi usr/lib/oracle/11.2/client64/bin instantclient_11_2/uidrvci usr/lib/oracle/11.2/client64/bin instantclient_11_2/libclntsh.so.11.1 usr/lib/oracle/11.2/client64/lib instantclient_11_2/libocci.so.11.1 usr/lib/oracle/11.2/client64/lib instantclient_11_2/libnnz11.so usr/lib/oracle/11.2/client64/lib instantclient_11_2/libociei.so usr/lib/oracle/11.2/client64/lib instantclient_11_2/libocijdbc11.so usr/lib/oracle/11.2/client64/lib instantclient_11_2/ojdbc5.jar usr/lib/oracle/11.2/client64/lib instantclient_11_2/ojdbc6.jar usr/lib/oracle/11.2/client64/lib instantclient_11_2/xstreams.jar usr/lib/oracle/11.2/client64/lib oracle-instantclient.conf etc/ld.so.conf.d
Le répertoire /usr/lib/oracle/11.2/client64/
correspond à l'emplacement d'installation du paquet RPM officiel d'Oracle. C'est cet emplacement que nous allons utiliser car de nombreux programmes s'attendent à le trouver à cet endroit. C'est le cas de QGIS par exemple.
Par ailleurs, ces fichiers étants situés dans des emplacements non standards pour le linker dynamique, il faut ajouter un fichier dans /etc/ld.so.conf.d/
. Ce dernier permettra d'ajouter les bibliothèques présentes dans /usr/lib/oracle/11.2/client64/lib
dans le chemin de recherche du linker dynamique du système. C'est un peu crade (j'aurais pu mettre tout dans /usr/lib et /usr/bin) mais j'ai préferré suivre ce qui avait été fait pour le RPM tout en permettant de lancer sqlplus directement en ligne de commande, sans créer la variable d'environnement ORACLE_HOME. Le contenu du fihcier est présenté un peu plus bas…
Fichier docs
Ce fichier indique quels sont les fichiers de doc qui vont se retrouver dans /usr/share/doc/oracle-instantclient/
instantclient_11_2/BASIC_README
Fichier links
Ce fichier indique quels sont les liens symboliques à réaliser lors de l'installation du paquet. Pour notre part, nous devons créer le lien vers libclntsh.so (comme vu dans la procédure manuelle).
usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 usr/lib/oracle/11.2/client64/lib/libclntsh.so usr/lib/oracle/11.2/client64/lib/libocci.so.11.1 usr/lib/oracle/11.2/client64/lib/libocci.so
Fichier shlibs
Le paquet oracle-instantclient installe des binaires mais également des bibliothèques partagées. Sous Debian, il faut respecter certaines règles, notamment pour indiquer quelles sont les bibliothèques que le paquet installe. Cela permet aux autres paquets Debian qui vont utiliser ces bibliothèques de déterminer automatiquement quel sont les dépendances vers les paquets qui embarques ces bibliothèques partagées.
Voici le contenu du fichier:
libclntsh 11.1 oracle-instantclient (>= 11.2) libnnz11 11.1 oracle-instantclient (>= 11.2) libocci 11.1 oracle-instantclient (>= 11.2) libociei 11.1 oracle-instantclient (>= 11.2) libocijdbc11 11.1 oracle-instantclient (>= 11.2)
Chaque ligne indique le nom global de la bibliothèque partagée, suivi du numéro de version (11.1 tel que le SONAME l'indique). On trouve en fin de chaque ligne, le nom du paquet concerné.
A l'issue de l'installation, le contenu de ce paquet est déposé dans /var/lib/dpkg/info/oracle-instantclient.shlibs
.
C'est la manière la plus simple que j'ai trouvée pour indiquer les dépendances pour les bibliothèques partagées pour qu'elles puissent être identifiées par les programmes tiers. Il existe également la version avec les fichiers de symbôles mais c'est, de mon point de vue, plus compliqué à gérer.
Dans la pratique, lorsqu'on travaille avec les sources du programme, cette opération est réalisée quasiment automatiquement par les programmes de création de paquets Debian. Dans notre cas, nous n'avons que des binaires et nous devons créer cette information à la main.
Fichier copyright
Il s'agit du fichier qui précise les licences des différents composants du paquet, y compris les fichiers Debian. Il repose sur une norme précise. Pour ma part, j'ai ajouté la totalité de la licence Oracle (juste pour faire propre) d'où la taille du fichier.
Format-Specification: http://svn.debian.org/wsvn/dep/web/deps/dep5.mdwn?op=file&rev=135 Name: oracle-instantclient Maintainer: Médéric Ribreux <mederic.ribreux@medspx.fr> Source: http://medspx.fr Files: instantclient_11_2/* Copyright: 2013 Oracle Corporation License: Oracle Technology Network Development and Distribution License Terms for Instant Client Files: debian/* Copyright: 2015 Médéric Ribreux <mederic.ribreux@medspx.fr> License: GPL-2+ License: GPL-2+ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. . On Debian systems, the full text of the GNU General Public License version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. License: Oracle Technology Network Development and Distribution License Terms for Instant Client Export Controls on the Programs Selecting the "Accept License Agreement" button is a confirmation of your agreement that you comply, now and during the trial term, with each of the following statements: -You are not a citizen, national, or resident of, and are not under control of, the government of Cuba, Iran, Sudan, Libya, North Korea, Syria, nor any country to which the United States has prohibited export. -You will not download or otherwise export or re-export the Programs, directly or indirectly, to the above mentioned countries nor to citizens, nationals or residents of those countries. -You are not listed on the United States Department of Treasury lists of Specially Designated Nationals, Specially Designated Terrorists, and Specially Designated Narcotic Traffickers, nor are you listed on the United States Department of Commerce Table of Denial Orders. You will not download or otherwise export or re-export the Programs, directly or indirectly, to persons on the above mentioned lists. You will not use the Programs for, and will not allow the Programs to be used for, any purposes prohibited by United States law, including, without limitation, for the development, design, manufacture or production of nuclear, chemical or biological weapons of mass destruction. EXPORT RESTRICTIONS You agree that U.S. export control laws and other applicable export and import laws govern your use of the programs, including technical data; additional information can be found on Oracle®'s Global Trade Compliance web site (http://www.oracle.com/products/export). You agree that neither the programs nor any direct product thereof will be exported, directly, or indirectly, in violation of these laws, or will be used for any purpose prohibited by these laws including, without limitation, nuclear, chemical, or biological weapons proliferation. Oracle Employees: Under no circumstances are Oracle Employees authorized to download software for the purpose of distributing it to customers. Oracle products are available to employees for internal use or demonstration purposes only. In keeping with Oracle's trade compliance obligations under U.S. and applicable multilateral law, failure to comply with this policy could result in disciplinary action up to and including termination. Note: You are bound by the Oracle Technology Network ("OTN") License Agreement terms. The OTN License Agreement terms also apply to all updates you receive under your Technology Track subscription. The OTN License Agreement terms below supercede any shrinkwrap license on the OTN Technology Track software CDs and previous OTN License terms (including the Oracle Program License as modified by the OTN Program Use Certificate). Oracle Technology Network Development and Distribution License Agreement for Instant Client "We," "us," and "our" refers to Oracle America, Inc. "You" and "your" refers to the individual or entity that wishes to use the Programs from Oracle under this Agreement. "Programs" refers to the Software Products referenced below that you wish to download and use and Program documentation. "License" refers to your right to use the Programs and Program documentation under the terms of this Agreement. The substantive and procedural laws of California govern this Agreement. You and Oracle agree to submit to the exclusive jurisdiction of, and venue in, the courts of San Francisco, San Mateo, or Santa Clara counties in California in any dispute arising out of or relating to this Agreement. We are willing to license the Programs to you only upon the condition that you accept all of the terms contained in this Agreement. Read the terms carefully and select the "Accept" button at the bottom of the page to confirm your acceptance. If you are not willing to be bound by these terms, select the "Do Not Accept" button and the registration process will not continue. Software Product - Instant Client License Rights License. We grant you a non-exclusive right and license to use the Programs solely for your business purposes and development and testing purposes, subject to the terms of this Agreement. You may allow third parties to use the Programs, subject to the terms of this Agreement, provided such third party use is for your business operations only. Distribution License We grant you a non-exclusive right and license to distribute the Programs, provided that you do not charge your end users for use of the Programs. Your distribution of such Programs shall at a minimum include the following terms in an executed license agreement between you and the end user that: (1) restrict the use of the Programs to the business operations of the end user; (2) prohibit (a) the end user from assigning, giving, or transferring the Programs or an interest in them to another individual or entity (and if your end user grants a security interest in the Programs, the secured party has no right to use or transfer the Programs); (b) make the Programs available in any manner to any third party for use in the third party's business operations (unless such access is expressly permitted for the specific program license or materials from the services you have acquired); and (c) title to the Programs from passing to the end user or any other party; (3) prohibit the reverse engineering (unless required by law for interoperability), disassembly or decompilation of the Programs and prohibit duplication of the Programs except for a sufficient number of copies of each Program for the end user's licensed use and one copy of each Program media; (4) disclaim, to the extent permitted by applicable law, our liability for any damages, whether direct, indirect, incidental, or consequential, arising from the use of the Programs; (5) require the end user at the termination of the Agreement, to discontinue use and destroy or return to you all copies of the Programs and documentation; (6) prohibit publication of any results of benchmark tests run on the Programs; (7) require the end user to comply fully with all relevant export laws and regulations of the United States and other applicable export and import laws to assure that neither the Programs, nor any direct product thereof, are exported, directly or indirectly, in violation of applicable laws; (8) do not require us to perform any obligations or incur any liability not previously agreed to between you and us; (9) permit you to audit your end user's use of the Programs or to assign your right to audit the end user's use of the Programs to us; (10) designate us as a third party beneficiary of the end user license agreement; (11) include terms consistent with those contained in the sections of this Agreement entitled "Disclaimer of Warranties and Exclusive Remedies," "No Technical Support," "End of Agreement," "Relationship Between the Parties," and "Open Source"; and (11) exclude the application of the Uniform Computer Information Transactions Act. You may allow your end users to permit third parties to use the Programs on such end user's behalf for the purposes set forth in the end user license agreement, subject to the terms of such agreement. You shall be financially responsible for all claims and damages to us caused by your failure to include the required contractual terms set forth above in each end user license agreement between you and an end user. We are a third party beneficiary of any end user license agreement between you and the end user, but do not assume any of your obligations thereunder, and you agree that you will not enter into any end user license agreement that excludes us as a third party beneficiary and will inform your end users of our rights. If you want to use the Programs for any purpose other than as expressly permitted under this Agreement you must contact us to obtain the appropriate license. We may audit your use of the Programs. Program documentation is either shipped with the Programs, or documentation may be accessed online at http://www.oracle.com/technetwork/indexes/documentation/index.html. You agree to: (a) defend and indemnify us against all claims and damages caused by your distribution of the Programs in breach of this Agreement and/or failure to include the required contractual provisions in your end user agreement as stated above; (b) keep executed end user agreements and records of end user information including name, address, date of distribution and identity of Programs distributed; (c) allow us to inspect your end user agreements and records upon request; and, (d) enforce the terms of your end user agreements so as to effect a timely cure of any end user breach, and to notify us of any breach of the terms. Ownership and Restrictions We retain all ownership and intellectual property rights in the Programs. You may make a sufficient number of copies of the Programs for the licensed use and one copy of the Programs for backup purposes. You may not: -use the Programs for any purpose other than as provided above; -charge your end users for use of the Programs; -remove or modify any Program markings or any notice of our proprietary rights; -assign this agreement or give the Programs, Program access or an interest in the Programs to any individual or entity except as provided under this agreement; -cause or permit reverse engineering (unless required by law for interoperability), disassembly or decompilation of the Programs; -disclose results of any Program benchmark tests without our prior consent. Export You agree that U.S. export control laws and other applicable export and import laws govern your use of the Programs, including technical data; additional information can be found on Oracle's Global Trade Compliance web site located at http://www.oracle.com/products/export/index.html. You agree that neither the Programs nor any direct product thereof will be exported, directly, or indirectly, in violation of these laws, or will be used for any purpose prohibited by these laws including, without limitation, nuclear, chemical, or biological weapons proliferation. Disclaimer of Warranty and Exclusive Remedies THE PROGRAMS ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. WE FURTHER DISCLAIM ALL WARRANTIES, EXPRESS AND IMPLIED, INCLUDING WITHOUT LIMITATION, ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. IN NO EVENT SHALL WE BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR DAMAGES FOR LOSS OF PROFITS, REVENUE, DATA OR DATA USE, INCURRED BY YOU OR ANY THIRD PARTY, WHETHER IN AN ACTION IN CONTRACT OR TORT, EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. OUR ENTIRE LIABILITY FOR DAMAGES HEREUNDER SHALL IN NO EVENT EXCEED ONE THOUSAND DOLLARS (U.S. $1,000). No Technical Support Our technical support organization will not provide technical support, phone support, or updates to you or end users for the Programs licensed under this agreement. Restricted Rights If you distribute a license to the United States government, the Programs, including documentation, shall be considered commercial computer software and you will place a legend, in addition to applicable copyright notices, on the documentation, and on the media label, substantially similar to the following: NOTICE OF RESTRICTED RIGHTS "Programs delivered subject to the DOD FAR Supplement are 'commercial computer software' and use, duplication, and disclosure of the programs, including documentation, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement. Otherwise, programs delivered subject to the Federal Acquisition Regulations are 'restricted computer software' and use, duplication, and disclosure of the programs, including documentation, shall be subject to the restrictions in FAR 52.227-19, Commercial Computer Software-Restricted Rights (June 1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065." End of Agreement You may terminate this Agreement by destroying all copies of the Programs. We have the right to terminate your right to use the Programs if you fail to comply with any of the terms of this Agreement, in which case you shall destroy all copies of the Programs. Relationship Between the Parties The relationship between you and us is that of licensee/licensor. Neither party will represent that it has any authority to assume or create any obligation, express or implied, on behalf of the other party, nor to represent the other party as agent, employee, franchisee, or in any other capacity. Nothing in this Agreement shall be construed to limit either party's right to independently develop or distribute software that is functionally similar to the other party's products, so long as proprietary information of the other party is not included in such software. Open Source "Open Source" software - software available without charge for use, modification and distribution - is often licensed under terms that require the user to make the user's modifications to the Open Source software or any software that the user 'combines' with the Open Source software freely available in source code form. If you use Open Source software in conjunction with the Programs, you must ensure that your use does not: (i) create, or purport to create, obligations of us with respect to the Oracle Programs; or (ii) grant, or purport to grant, to any third party any rights to or immunities under our intellectual property or proprietary rights in the Oracle Programs. For example, you may not develop a software program using an Oracle Program and an Open Source program where such use results in a program file(s) that contains code from both the Oracle Program and the Open Source program (including without limitation libraries) if the Open Source program is licensed under a license that requires any "modifications" be made freely available. You also may not combine the Oracle Program with programs licensed under the GNU General Public License ("GPL") in any manner that could cause, or could be interpreted or asserted to cause, the Oracle Program or any modifications thereto to become subject to the terms of the GPL. Entire Agreement You agree that this Agreement is the complete agreement for the Programs and licenses, and this Agreement supersedes all prior or contemporaneous Agreements or representations. If any term of this Agreement is found to be invalid or unenforceable, the remaining provisions will remain effective. Last updated: 01/24/08 Should you have any questions concerning this License Agreement, or if you desire to contact Oracle for any reason, please write: Oracle America, Inc. 500 Oracle Parkway, Redwood City, CA 94065 Oracle may contact you to ask if you had a satisfactory experience installing and using this OTN software download.
Fichier sources/format
Il s'agit du fichier qui précise le type de paquet Debian. Dans notre cas, c'est un paquet natif.
3.0 (native)
Fichier oracle-instantclient/oracle-instantclient.conf
Il s'agit du fichier permettant au linker dynamique de trouver les bibliothèques partagées d'Oracle car elles ne sont pas situées dans /usr/lib
.
Il doit être placé dans la racine du répertoire d'empaquetage (avant debian
):
# Oracle Instant Client libraries /usr/lib/oracle/11.2/client64/lib
Création du paquet
Nous allons utiliser dpkg-buildpackage pour créer le paquet:
$ cd ~/projects/oracle/packaging/oracle-instantclient $ dpkg-buildpackage -b -us -uc
Voici l'explication des options:
-b
indique que nous souhaitons créer uniquement le paquet binaire et non le paquet source.-us
indique que nous ne souhaitons pas signer le paquet source.-uc
indique que nous ne souhaitons pas signer le paquet .changes.
La construction du paquet devrait remonter quelques avertissements, notamment des symbôles non utilisés dans la bibliothèque libocci.so
. Ce n'est pas grave, cela signifie que dpkg-shlibdeps n'a pas été capable de trouver ces symbôles dans d'autres bibliothèques pour déterminer les dépendances du paquet.
A l'issue de la création du paquet, vous devriez disposer du fichier ~/projects/oracle/packaging/oracle-instantclient_11.2.0.4.0-1_amd64.deb
que vous pourrez installer via dpkg
avec le compte root.
Paquet oracle-sqlplus-11.2.0.4-1.deb
Introduction
Le principe est le même que pour le paquet précédent. Je ne vais détailler que les fichiers qui changent.
Fichier control
Source: oracle-sqlplus Section: non-free/database Priority: extra Maintainer: Médéric Ribreux <mederic.ribreux@medspx.fr> Build-Depends: debhelper (>= 9.0.0~) Standards-Version: 3.9.6 Package: oracle-sqlplus Architecture: amd64 Depends: ${misc:Depends}, oracle-instantclient (=11.2.0.4.0-1) Description: Oracle Instant Client SQLPlus utility Oracle SQLPlus is a command line sql utility. You can use it to send SQL commands and scripts to Oracle Database servers.
Fichier install
instantclient_11_2/sqlplus usr/lib/oracle/11.2/client64/bin instantclient_11_2/libsqlplus.so usr/lib/oracle/11.2/client64/lib instantclient_11_2/libsqlplusic.so usr/lib/oracle/11.2/client64/lib instantclient_11_2/glogin.sql usr/lib/oracle/11.2/client64/lib
On place tout dans le même répertoire que pour le paquet précédent. Mais comme j'aime bien disposer de la commande sqlplus sans taper son chemin complet, nous allons créer un lien symbolique pour pallier à ce problème.
Fichier links
usr/lib/oracle/11.2/client64/bin/sqlplus usr/bin/sqlplus
Et voilà, sqlplus
est disponible depuis le shell directement.
Fichier changelog
oracle-sqlplus (11.2.0.4.0-1) unstable; urgency=low * Initial release. -- Médéric Ribreux <mederic.ribreux@medspx.fr> Sun, 24 May 2015 12:37:54 +0100
Fichier docs
instantclient_11_2/SQLPLUS_README
Création du paquet
On utilise également dpkg-buildpackage
et on obtient le paquet adéquat.
Paquet oracle-instantclient-dev-11.2.0.4-1.deb
Introduction
Même punition, il faut procéder de la même manière que pour le paquet oracle-instantclient, en supprimant le fichier links.
Fichier control
Source: oracle-instantclient-dev Section: non-free/database Priority: extra Maintainer: Médéric Ribreux <mederic.ribreux@medspx.fr> Build-Depends: debhelper (>= 9.0.0~) Standards-Version: 3.9.6 Package: oracle-instantclient-dev Architecture: amd64 Depends: ${misc:Depends}, oracle-instantclient (=11.2.0.4.0-1) Description: Oracle Instant Client Development package This package allow development for third parties software based upon Oracle Instant Client. It provides the necessary headers to compile software that requires Oracle Database access.
Fichier changelog
oracle-instantclient-dev (11.2.0.4.0-1) unstable; urgency=low * Initial release. -- Médéric Ribreux <mederic.ribreux@medspx.fr> Sun, 24 May 2015 12:37:54 +0100
Fichier install
instantclient_11_2/sdk/include/*.h usr/include/oracle/11.2/client64 instantclient_11_2/sdk/ottclasses.zip usr/lib/oracle/11.2/client64/lib instantclient_11_2/sdk/demo/* usr/share/oracle/11.2/client64 instantclient_11_2/sdk/ott usr/share/oracle/11.2/client64
Fichier docs
instantclient_11_2/sdk/SDK_README
Fichier rules
#!/usr/bin/make -f clean: dh_clean %: dh $@
Placer le fichier tnsnames.ora
Nous disposons maintenant de paquets prêts à l'emploi mais il reste un dernier acte de configuration manuelle: le fichier tnsnames.ora. Difficile quand on conçoit un paquet de placer ce fichier. Faut-il le rendre disponible pour tout le système ou seulement pour l'utilisateur ?
Mon choix est cependant limité par le binaire fourni par Oracle. En effet, le client Oracle dans son ensemble (SQLPlus aussi) ne retrouve le fichier tnsnames.ora qu'en fonction d'une variable d'environnement (TNS_ADMIN ou ORACLE_HOME). Or, nous n'avons rien indiqué dans notre paquet pour créer ces variables d'environnement. De plus, je n'aime pas ajouter de nouvelles variables d'environnement pour tout le système.
Le système le plus simple et le plus propre que j'ai trouvé consiste à créer un répertoire .oracle
dans votre répertoire home, à placer le fichier tnsnames.ora
dedans et à définir la variable d'environnement TNS_ADMIN
au niveau de votre ~/.profile
. D'un côté, on permet à plusieurs utilisateurs différents de disposer de fichier tnsnames différents. De plus, par défaut, aucun utilisateur ne peut utiliser ce fichier sans action préalable ce qui me paraît plus intéressant d'un point de vue sécurité (ce n'est pas énorme mais c'est mieux que rien que d'empêcher un compte n'ayant pas forcément besoin du client Oracle de ne pas connaître les emplacements des serveurs de base de données).
Voici la manipulation:
$ mkdir ~/.oracle $ mv tnsnames.ora ~/.oracle/ $ echo "# TNSNAMES for Oracle" >> ~/.profile $ echo "export TNS_ADMIN=~/.oracle/" >> ~/.profile
Je l'ai indiquée dans le README.Debian du paquet oracle-instantclient
.
Pourquoi .profile
et non .bashrc
. La réponse est assez simple: déclarer la variable dans .profile permet à tous les scripts non-interactifs qui sont lancés avec le shell *sh* de bénéficier de cette variable. C'est le cas du lanceur de QGIS par exemple. De plus, avec .profile
, la variable est également disponible pour Bash. Que demande le peuple ?
Conclusion
Un simple:
dpkg -i oracle-instantclient_11.2.0.4.0-1_amd64.deb oracle-instantclient-dev_11.2.0.4.0-1_amd64.deb oracle-sqlplus_11.2.0.4.0-1_amd64.deb
, suivi d'une initialisation de variable client (TNS_ADMIN), vous permettra d'installer le client Oracle, SQLPlus et le SDK sous forme de paquets Debian. C'est très pratique si vous devez installer ce client sur un grand nombre de serveurs par déploiement piloté (ou par des scripts).
Maintenant que nous avons les bases, il reste à voir comment créer les paquets Debian de QGIS en produisant le provider Oracle. Ce sera l'objet d'un prochain article…
Encore une fois, je ne suis pas un développeur Debian et ces paquets sont un peu spéciaux. J'ai sans doute fait des erreurs et peut-être que vous aurez besoin d'aller un peu plus loin. Dans ce cas, n'hésitez pas à lire la charte Debian et le guide du nouveau mainteneur Debian pour "hacker" plus loin !