That *is* the current version. -----Original Message----- From: Tim Bunce [mailto:[EMAIL PROTECTED]] Sent: Monday, February 25, 2002 4:04 PM To: Tim Bunce Cc: Jay Strauss; Singh, Kiranjit; [EMAIL PROTECTED] Subject: Re: Installing DBI on HP-UX
On Mon, Feb 25, 2002 at 05:49:57PM +0000, Tim Bunce wrote: > On Mon, Feb 25, 2002 at 08:46:48AM -0600, Jay Strauss wrote: > > Yes, yes > > > > Download and install DBI, DBD-Oracle (from perl.com) and request the latest > > version of the README.hpux > > But that's not really the latest as there's not been a DBD::Oracle release > for a while. > > So also check the dbi-user archives etc. > http://www.google.com/search?as_q=+README-hpux&num=50&btnG=Google+Search&as_ epq=DBD+Oracle+&as_oq=&as_eq=&lr=lang_en&as_ft=i&as_filetype=&as_qdr=all&as_ occt=any&as_dt=i&as_sitesearch=&safe=off In fact, here's the (probably) lastest one. Tim. =head1 INTRODUCTION Building a working dynamically linked version of the Oracle DBD driver on HPUX (11.00) has been a challenge for many. For months after taking a new job, where HPUX was the standard server environment, I had only been able to build a statically linked version of perl and the DBD-Oracle module on HPUX 11.00. Then Roger Foskett posted instructions for what turned out to be dynamic build. Rogers's post got me farther than I had previously gotten. In fact, after resolving some undefined symbol errors, I succeeded where for I had previously despaired of finding the time to hack out the right incantation. This F<README.hpux> describes the combined knowledge of a number of folks who invested many hours discovering a working set of build options. The instructions in this file, which include building perl from sources, will produce a working dynamically linked DBD-Oracle that can be used with mod_perl and Apache. Both Roger Foskett and I have been using the HP softbench c compiler normally installed in: /opt/softbench/bin/cc. F<Makefile.PL> has been modified to check for some of the conditions which, when met, we know will produce a working build. However, there are many variations of Oracle installations and features. Not all of these can be tested by any one of us, if you discover a way to make a variation which did not previous work, please submit patches to Makefile.PL to Tim Bunce, and patches to this README to Tim Bunce or me. The instructions herein, have compiled, linked cleanly, and tested cleanly using the HP softbench compiler, and Oracle 8.0.5 (32bit), and Oracle 8.1.6, 8.1.7 (64 bit). Oracle 8.1.5 will probably work as well. See appendices for my exact build configuration. =head1 First things First The reason you are even reading this file is because you want to connect to an Oracle database from your perl program. So before you start, install the Oracle client software (SQL*Net, Pro*C, SQL*Plus) upon the machine you intend to install Perl/DBI/DBD-Oracle. You DO NOT, I repeat, DO NOT need to install the Oracle database server on this machine. After you have installed the client software, TEST it: make sure you can connect to the target database using sqlplus (or any other Oracle supplied tool). The (gory) details of the install are beyond the scope of this document, some information can be found in the section "Compiling on a Client Machine" later in this document, or see your Oracle DBA. =head1 Build perl =head2 HP's default perl (probably no good) By default, HPUX 11.00 delivers perl 5.00503. This version of perl will probably not work. If you are reading this, you have probably discovered that something did not work. To get good version of the DBD-Oracle driver, we have to start with a perl that as been built with the correct compiler flags and shared libraries. =head2 Build and Install the right Perl Generally, in order to get a version of the DBD-Oracle driver that works on HPUX you need to build your own version of perl from sources. These instructions have been used to building a dynamically linked working DBD-Oracle driver that works with mod_perl and Apache. These instructions are based on perl 5.6.0 and 5.6.1. To this author's knowledge, they have not be tested on earlier versions of perl. It is important to build a B<non>-threaded perl, but linked with -lcl and -lpthread. Since Oracle on HP uses libpthread, everything that dynamically loads it (such as DBD-Oracle) must be built/linked with '-lpthread -lcl'. (When used with Apache, it and any associated modules these must also be built this way - otherwise all it does is core dump when loading DBD::Oracle). A good link that explains thread local storage problems is http://my1.itrc.hp.com/cm/QuestionAnswer/1,1150,0x0d0a6d96588ad4118fef009027 9cd0f9!0,00.html =head2 Configure Once you have downloaded and unpacked the perl sources (version 5.6.0 assumed here), you must configure Perl. For those of you new to building Perl from source, the Configure program will ask you a series of questions about how to build Perl. You may supply default answers to the questions when you invoke the Configure program by command line flags. We want to build a Perl that understands large files (over 2GB), and that is incompatible with v5.005 perl scripts (compiling with v5.005 compatibility causes mod_perl to complain about malloc pollution). At the command prompt type: cd Perl-5.6.0/ ./Configure -Ubincompat5005 -Duselargefiles As described in section "Building the right Perl", there are some modifications you must make during the Configure process When asked the question: What libraries to use? - Answer by prepending (i.e. at the beginning): -lcl -lpthread For example: What libraries to use? [-lnsl -lnm -lndbm -lmalloc -ldld -lm -lc -lndir -lcrypt -lsec] -lcl -lpthread -lnsl -lnm -lndbm -lmalloc -ldld -lm -lc -lndir -lcrypt -lsec When asked: Any additional cc flags? - Answer by prepending: +z For example: Any additional cc flags? [-D_HPUX_SOURCE -Aa] +z -D_HPUX_SOURCE -Aa Lastly, and this is optional, when asked: Do you want to install perl as /usr/bin/perl? [y] n You may or may not want to install directly in /usr/bin/perl, many persons on HP install Perl in /opt/perl<version>/bin/perl and put a symbolic link to /usr/bin/perl. Furthermore, you can supply the answer to this question by adding an additional switch to the invokation of Configure such as: Configure -Dprefix=/opt/perl After you have answered the above questions, accept the default values for all of the remaining questions. You may press <Enter> for each remaining question, or you may enter "& -d" (good idea) at the next question and the Configure will go into auto-pilot and use the Perl supplied defaults. BTW: If you add -lcl and -lpthread to the end of the list it will not work. I wasted a day and a half trying to figure out why I had lost the recipe, before I realized that this was the problem. The symptom will be that make test of perl itself will fail to load dynamic libraries. You can check in the generated 'config.sh' that the options you selected are correct. If not, modify config.sh and then re-run ./Configure with the '-d' option to process the config.sh file. =item Build & Install make make test make install If you are going to build mod_perl and Apache it as beed suggested that you modify Config.pm to the change the HPUX ldflags & ccdlflags in F</your/install/prefix/lib/5.6.0/PA-RISC2.0/Config.pm> as follows: ccdlflags='' cccdlflags='+z' ldflags=' -L/usr/local/lib' This is not necessary if you are not using mod_perl and Apache. =head1 Build and Install DBI cd DBI-1.18/ perl Makefile.PL make make test make install =head1 Build and Install DBD-Oracle-1.07 and later It is critical to setup your Oracle environmental variables. Many people do this incorrectly and spend days trying to get a working version of DBD-Oracle. Below are examples of a local database and a remote database (i.e. the database is on a different machine than your Perl/DBI/DBD installation) environmental variable setup. Example (local database): export ORACLE_USERID=<validuser/validpasswd> export ORACLE_HOME=<path to oracle> export ORACLE_SID=<a valid instance> export ORACLE_USERID=<validuser/validpasswd> export SHLIB_PATH=$ORACLE_HOME/lib Example (remote database): export ORACLE_USERID=<validuser/validpasswd> export ORACLE_HOME=<path to oracle> export ORACLE_SID=<a valid instance>@<valid tnsnames.ora entry> export ORACLE_USERID=<validuser/validpasswd> export SHLIB_PATH=$ORACLE_HOME/lib The standard mantra now works out of the box on HPUX: cd DBD-1.07/ #or more recent version perl Makefile.PL make make test make install # if all went smoothly If you have trouble, go though the instructions below, for hints of what might be wrong... and send me a note, describing your configuration, and what you did to fix it. =head1 Trouble Shooting =head2 "Unresolved symbol" In general, find the symbols, edit the Makefile, and make test. You'll have to modify the recipe accordingly, in my case the symbol "LhtStrCreate" was unresolved. 1) Find the symbols. a) The following ksh/bash code (courtesy of Roger) will search from $ORACLE_HOME and below for Symbols in files in lib directories. Save the following to a file called "findSymbol". >>>> CUT HERE <<<<< cd $ORACLE_HOME echo "\nThis takes a while, grepping a lot of stuff" echo " ignore the \"no symbols\" warnings\n" sym=$1; shift; libs="*.sl" for lib in $(find . -name $libs -print); do if nm -p $lib | grep -q $sym; then echo "found \"$sym\" in $lib" fi done >>>>> CUT HERE <<<< b) Run it (replace "LhtStrCreate" with your "Unresolved symbol"). For example, at my installation, findSymbols produced the following output: # chmod 755 findSymbols # ./findSymbol LhtStrCreate found "LhtStrCreate" in ./lib/libagtsh.sl found "LhtStrCreate" in ./lib/libclntsh.sl found "LhtStrCreate" in ./lib/libwtc8.sl 2) Edit the Makefile In the previous step your unresolved symbol was found in one or more library files. You will need to edit the OTHERLDFLAGS makefile macro, and add the missing libraries. When you add those library files to OTHERLDFLAGS you must convert the name from the actual name to the notation that OTHERLDFLAGS uses. libclntsh.sl becomes => -lclntsh libagtsh.sl becomes => -lagtsh libwtc8.sl becomes => -lwtc8 That is, you replace the "lib" in the name to "-l" and remove the ".sl" You can edit the Makefile in 2 ways: a) Do this: cat Makefile | sed 's/\(OTHERLDFLAGS.*$\)/\1 -lclntsh/' > Makefile.tmp mv Makefile.tmp Makefile b) Using vi, emacs... edit the file, find OTHERLDFLAGS, and add the above "-l" entries to the end of the line. For example the line: OTHERLDFLAGS = -L/opt/oracle/product/8.1.6/lib/... -lqsmashr Becomes: OTHERLDFLAGS = -L/opt/oracle/product/8.1.6/lib/... -lqsmashr -lclntsh 3) make test Perform a make test, if symbols are still unresolved repeat the editing of the Makefile and make test again. =head1 DBD-Oracle-1.06 You are strongly urged to upgrade. However here is what you may need to know to get it or work, if you insist on using an earlier version. Check the output that above command produces, to verify that -Wl,+n -W1,+s is b<NOT> present. and that -lqsmashr B<is> present. If the version of Makefile.PL does not include the patch produced at the time of this README.hpux, then the above conditions will likely not be met. You can fix this as follows: cat Makefile | sed 's/-Wl,+[sn]//' > Makefile.tmp mv Makefile.tmp Makefile =head1 Building on a Oracle Client Machine If you need to build or deliver the DBD-Oracle interface on or to a machine on which Oracle has not been installed you need take into consideration the following: =over =item 1) Oracle files are needed for DBD::Oracle to compile =item 2) Oracle files are needed for the compiled DBD to connect =item 3) ORACLE_HOME environment variable must be set =item 4) SHLIB_PATH environment variable must be set =back =head2 Compiling on a Client Machine This may seem obvious to some, but the Oracle software has to be present to compile and run DBD-Oracle. The best way to compile and install on a client machine, is to use the to use the oracle installer to install the oracle (client) software locally. Install SQL*Net, Pro*C and SQL*Plus. After this some tests with SQL*Net (tnsping at a minimum) are an good idea. Make sure you can connect to your remote database, and everything works with Oracle before you start bashing your head into the wall trying to get DBD-Oracle to work. If you do not have the Oracle installer handy, the follow hack has been know to work: Either open an NFS share from the oracle installation directory on the machine that has Oracle and point both of the above-mentioned env vars to that share, or alternatively copy the following four directories from your Oracle installation over to the machine on which you are compiling the DBD: drwxr-xr-x 3 oracle dba 3072 Jul 3 09:36 lib drwxr-xr-x 13 oracle dba 512 Jul 3 09:38 network drwxr-xr-x 7 oracle dba 512 Jul 2 19:25 plsql drwxr-xr-x 12 oracle dba 512 Jul 3 09:38 rdbms then point the above-mentioned env vars to the containing directory (good place to put them, if copying locally, is /usr/lib/oracle) In any case, the compiler needs to be able to find files in the above four directories from Oracle in order to get all the source code needed to compile properly. =head2 Required Runtime environment Again, use the Oracle installer to install the Oracle Client on the machine where your scripts will be running. If the Oracle installer is not available, the following hack should suffice: For running the compiled DBD in perl and connecting, you need only the files in the 'lib' folder mentioned above, either connecting to them through an NFS share on the Oracle machine, or having copied them directly onto the local machine, say, in /usr/lib/oracle . Make sure the env variable for ORACLE_HOME = /usr/lib/oracle and LD_LIBRARY_PATH includes /usr/lib/oracle . You can set the env var in your perl script by typing $ENV{'ORACLE_HOME'} = '/usr/lib/oracle'; =head1 Apache and mod_perl If you are not building this version of perl for Apache you can go on to build what ever other modules you require. The following instructions describe how these modules were built with the perl/DBD-Oracle built above: The following is what worked for Roger Foskett: =head1 Apache Web server cd apache_1.3.14/ LDFLAGS_SHLIB_EXPORT="" \ LDFLAGS="-lm -lpthread -lcl" \ CC=/usr/bin/cc \ CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" \ ./configure \ --prefix=/opt/www/apache \ --enable-shared=max \ --disable-rule=EXPAT \ --enable-module=info \ --enable-rule=SHARED_CORE The Expat XML parser is disabled as it conflicts with the Perl XML-Parser module causing core dumps. -lcl is needed to ensure that Apache does not coredump complaining about thread local storage make make install Once installed, ensure that the generated httpd.conf is properly configured, change the relvant lines to below (the default user/group caused problems on HP (the user 'www' may need to be created) User www Group other port 80 =head2 mod_perl cd mod_perl-1.24_01/ perl Makefile.PL \ NO_HTTPD=1 \ USE_APXS=1 \ WITH_APXS=/opt/www/apache/bin/apxs \ EVERYTHING=1 make make install =head2 htdig intranet search engine cd htdig-3.1.5/ CC='cc' CPP='aCC' \ ./configure \ --prefix=/opt/www/htdig \ --with-cgi-bin-dir=/opt/www/htdig/cgi-bin \ --with-image-dir=/opt/www/htdig/images =head1 CONTRIBUTORS The following folks contributed to this README: Lincoln A. Baxter <[EMAIL PROTECTED] or [EMAIL PROTECTED]> Jay Strauss <[EMAIL PROTECTED]> Roger Foskett <[EMAIL PROTECTED]> Weiguo Sun <[EMAIL PROTECTED]> Tony Foiani <[EMAIL PROTECTED]> Hugh J. Hitchcock <[EMAIL PROTECTED]> Heiko Herms <[EMAIL PROTECTED]> And probably others unknown to me. =head1 AUTHOR Lincoln A. Baxter IT Solutions Delivery, Fleet Credit Card Services [EMAIL PROTECTED] or [EMAIL PROTECTED] Office: 215.444.7973 =head1 Appendix A (Miscellaneous links which might be usefull) Thanks to Tony Foiani for these references: =head2 http://marc.theaimsgroup.com/?l=perl-dbi&m=96040350416305&w=2 This link discusses older version of the DBI/DBD interface, so most of the code examples are probably no longer relevant. This was written by Jeff Okamoto at HP (the author of the README.hpux in the perl sources). And has some useful insights. =head2 http://www.sas.com/service/techsup/unotes/SN/001/001875.html This is a not from from the SAS support people documenting the LhtStrInsert() and LhtStrCreate() undefined symbols errors, and how to fix them in the Oracle makefiles. =head2 http://www.mail-archive.com/dbi-users%40isc.org/msg13967.html My employers web sniffer does not allow me browser this link (www.mail) in the URL. So I have no idea how helpful this might be. It might even be a link to my own posts. =head1 Appendix B (Perl Configuration Dumps) The following to sections provide full dumps of perl -V for three versions of perl that were successfully built and linked on HPUX 11.00. =head2 Lincoln Baxter's DBD-Oracle-1.07 Configuration Platform: osname=hpux, osvers=11.00, archname=PA-RISC2.0 uname='hp-ux dhdb108 b.11.00 u 9000800 612309363 unlimited-user license ' config_args='' hint=previous, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef useperlio=undef d_sfio=undef uselargefiles=define usesocks=undef use64bitint=undef use64bitall=undef uselongdouble=undef Compiler: cc='cc', ccflags ='-D_HPUX_SOURCE -Aa -I/usr/local/include -DDEBUGGING -z', optimize='-O', cppflags='-D_HPUX_SOURCE -Aa -I/usr/local/include -DDEBUGGING -z' ccversion='', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=4321 d_longlong=undef, longlongsize=, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=4 alignbytes=8, usemymalloc=y, prototype=define Linker and Libraries: ld='ld', ldflags =' -Wl,+vnocompatwarnings -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib libs=-lcl -lpthread -lnsl -lnm -lndbm -ldld -lm -lc -lndir -lcrypt -lsec perllibs=-lcl -lpthread -lnsl -lnm -ldld -lm -lc -lndir -lcrypt -lsec libc=, so=sl, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_hpux.xs, dlext=sl, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-B,deferred ' cccdlflags='+z', lddlflags='-b +vnocompatwarnings -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: DEBUGGING USE_LARGE_FILES Built under hpux Compiled at Jul 15 2001 16:01:33 @INC: /home/baxtlinc/perl/lib /opt/perl/5.6.1-fccs-01/lib/5.6.1/PA-RISC2.0 /opt/perl/5.6.1-fccs-01/lib/5.6.1 /opt/perl/5.6.1-fccs-01/lib/site_perl/5.6.1/PA-RISC2.0 /opt/perl/5.6.1-fccs-01/lib/site_perl/5.6.1 /opt/perl/5.6.1-fccs-01/lib/site_perl =head2 Lincoln Baxter's DBD-Oracle-1.06 Configuration Platform: osname=hpux, osvers=11.00, archname=PA-RISC2.0 uname='hp-ux dhdb108 b.11.00 u 9000800 612309363 unlimited-user license ' config_args='-Dprefix=/temp_data/baxtlinc/perl -Ubincompat5005' hint=previous, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef useperlio=undef d_sfio=undef uselargefiles=define use64bitint=undef use64bitall=undef uselongdouble=undef usesocks=undef Compiler: cc='cc', optimize='-O', gccversion= cppflags='-D_HPUX_SOURCE -I/usr/local/include +z -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Ae' ccflags ='-D_HPUX_SOURCE -I/usr/local/include +z -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Ae' stdchar='unsigned char', d_stdstdio=define, usevfork=false intsize=4, longsize=4, ptrsize=4, doublesize=8 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, usemymalloc=y, prototype=define Linker and Libraries: ld='ld', ldflags =' -Wl,+vnocompatwarnings' libpth=/lib /usr/lib /usr/ccs/lib libs=-lnsl -lnm -lndbm -ldld -lm -lc -lndir -lcrypt -lsec -lcl -lpthread libc=, so=sl, useshrplib=true, libperl=libperl.sl Dynamic Linking: dlsrc=dl_hpux.xs, dlext=sl, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-B,deferred ' cccdlflags='+z', lddlflags='-b +vnocompatwarnings' Characteristics of this binary (from libperl): Compile-time options: USE_LARGE_FILES Built under hpux Compiled at Jan 9 2001 17:36:00 @INC: /temp_data/baxtlinc/perl/lib/5.6.0/PA-RISC2.0 /temp_data/baxtlinc/perl/lib/5.6.0 /temp_data/baxtlinc/perl/lib/site_perl/5.6.0/PA-RISC2.0 /temp_data/baxtlinc/perl/lib/site_perl/5.6.0 /temp_data/baxtlinc/perl/lib/site_perl . =head2 Roger Foskett's Configuration (works with Apache and mod_perl) Platform: osname=hpux, osvers=11.00, archname=PA-RISC2.0 uname='hp-ux titan b.11.00 u 9000800 103901567 unlimited-user license ' config_args='-Ubincompat5005' hint=recommended, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef useperlio=undef d_sfio=undef uselargefiles=define use64bitint=undef use64bitall=undef uselongdouble=undef usesocks=undef Compiler: cc='cc', optimize='-O', gccversion= cppflags='-D_HPUX_SOURCE -Aa -I/usr/local/include' ccflags =' +z -D_HPUX_SOURCE -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -Ae ' stdchar='unsigned char', d_stdstdio=define, usevfork=false intsize=4, longsize=4, ptrsize=4, doublesize=8 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, usemymalloc=y, prototype=define Linker and Libraries: ld='ld', ldflags =' -L/usr/local/lib' libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib libs=-lnsl -lnm -lndbm -lgdbm -ldld -lm -lc -lndir -lcrypt -lsec -lcl -lpthread libc=/lib/libc.sl, so=sl, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_hpux.xs, dlext=sl, d_dlsymun=undef, ccdlflags=' ' cccdlflags='+z', lddlflags=' -b +vnocompatwarnings -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: USE_LARGE_FILES Built under hpux Compiled at Dec 19 2000 19:17:00 @INC: /opt/www/perl5/lib/5.6.0/PA-RISC2.0 /opt/www/perl5/lib/5.6.0 /opt/www/perl5/lib/site_perl/5.6.0/PA-RISC2.0 /opt/www/perl5/lib/site_perl/5.6.0 /opt/www/perl5/lib/site_perl . Roger also provides a link to some threads containing some of his DBD-Oracle and HPUX11 trials... L<http://www.geocrawler.com/search/?config=183&words=Roger+Foskett> =head1 Appendix C (Why Dynamic Linking) Some one posted to the DBI email list the following question: What are the advantages of building a dynamically linked version? Being able to use threads? Or something besides that? The answer is there are too many to count, but here are several big ones: =item 1 Much smaller executables Only the code referenced gets loaded... this means faster execution times, and less machine resources (VM) used) =item 2 Modular addition and updating of modules. This is HUGE. One does not relink B<EVERYTHING, EVERY time> one changes or updates a module. =item 3 It eliminates Dynaloader warning (multiply defined). This occurs with the static build when perl is run with -w. I fixed this by removing -w from my #! lines, converting the the pragam "use warnings;". However, it was annoying, since all my scripts had -w in the #! line. =item 4 Its the default build Since almost every OS now supports dynamic linking, I believe that static linking is NOT getting the same level of vetting it maybe used to. Dynamicly linking is what you get by default, so its way better tested. =item 5 Its required for Apache and mod_perl.
