Tuesday, November 22, 2005

Installing Perl & Apache on Solaris 10

One of the first things you will want to setup on your new Solaris/OpenSolaris operating system is a web server, even though Solaris now comes with Perl and Apache installed by default, it is still worth installing your own version. New versions of Perl and Apache will always be ahead of the Solaris version, plus you will never damage the pre-installed version.

The procedure has been test on:
  • Solaris 10 3/05 SPARC & X86
  • Fully Patched
  • Installed Solaris Software Companion (/opt/sfw)
The following steps will install:
  • perl 5.8.7
  • basic perl modules used by apache
  • Apache 1.3.34 (Version 1 is still widely used)

Step 1) Setup environment vaiables (Using csh):
# setenv PATH \
    /usr/sfw/bin:/usr/local/bin:/usr/bin:/bin
# setenv PATH \
    ${PATH}:/usr/ccs/bin:/usr/sbin:/opt/sfw/bin:.
# setenv LD_LIBRARY_PATH \
    /usr/sfw/lib:/usr/local/lib:/opt/sfw/lib
Step 2) Configure and install perl (Install location will be /usr/local/perl587)
# gtar xfz perl-5.8.7.tar.gz
# cd perl-5.8.7
# rm -f config.sh Policy.sh
# sh Configure -Dcc='gcc -B/usr/ccs/bin/' \
    -Dprefix=/usr/local/perl587 -des
# make
# make test
# make install
# cd ..
# cp /usr/local/perl587/bin/perl /usr/local/bin

Step 3) Check perl has been install and is in your path.
# rehash
# which perl
/usr/local/bin/perl
# perl -V
Summary of my perl5 (revision 5 version 8 subversion 7) configuration:
Platform:
osname=solaris, osvers=2.10, archname=sun4-solaris
... a lot more stuff....
Step 4) Install some basic perl modules (down load from: http://search.cpan.org/)
# gtar xfz HTML-Tagset-3.04.tar.gz
# cd HTML-Tagset-3.04
# perl Makefile.PL
# make
# make test
# make install
# cd ..

# gtar xfz HTML-Parser-3.46.tar.gz
# cd HTML-Parser-3.46
# perl Makefile.PL
# make
# make test
# make install
# cd ..

# gtar xfz URI-1.35.tar.gz
# cd URI-1.35
# perl Makefile.PL
# make
# make test
# make install
# cd ..

# gtar xfz Compress-Zlib-1.41.tar.gz
# cd Compress-Zlib-1.41
# perl Makefile.PL
# make
# make test
# make install
# cd ..

# gtar xfz libwww-perl-5.803.tar.gz
# cd libwww-perl-5.803
# perl Makefile.PL -n
# make
# make test
# make install
# cd ..
Step 5) Set up mod_perl (Need to extract apache files first, since it updates them):
# gtar xfz apache_1.3.34.tar.gz
# gtar xfz mod_perl-1.29.tar.gz
# cd mod_perl-1.29
# perl Makefile.PL \
    APACHE_SRC=../apache_1.3.34/src \
    DO_HTTPD=1 USE_APACI=1 \
    PREP_HTTPD=1 EVERYTHING=1
# make
# make install
Step 6) Previous step did not compile apache. I prefer it that way:
# ./configure --prefix=/usr/local/Apache/1334 \
    --enable-module=info \
    --enable-module=most --enable-shared=max \
    --enable-module=status \
    --enable-module=so \
    --activate-module=src/modules/perl/libperl.a

# make
# make install
Step 7) We will pause here, since if you try to start the apache server you will get an error if this is on a SPARC platform.
# /usr/local/Apache/1334/bin/apachectl start

Syntax error on line 210 of /usr/local/Apache/1334/conf/httpd.conf:

Cannot load /usr/local/Apache/1334/libexec/mod_negotiation.so into server: ld.so.1: httpd: fatal: relocation error: file /usr/local/Apache/1334/libexec/mod_negotiation.so: symbol __floatdisf: referenced symbol not found
/usr/local/Apache/1334/bin/apachectl start: httpd could not be started

Step 8) SKIP to "step 9" if you are on a x86 platform.
# cd src/modules/proxy
# ld -G -o mod_proxy.so mod_proxy.lo \
    `gcc -print-libgcc-file-name`
# cd ../standard
# ld -G -o mod_negotiation.so mod_negotiation.lo \
    `gcc -print-libgcc-file-name`
# cd ../../..
# make
# make install
Step 9) Test that it all works
# /usr/local/Apache/1334/bin/apachectl start
http://localhost:8080
You will need to read other documention about configurations changes you can make to apache, but now you have a working version to use.

Hope it will helped some people and if there are any errors or commenst please be in contact.

24 comments:

  1. Anonymous9:50 pm

    Thank you very much for such clear set of instruction!

    ReplyDelete
  2. Hagen,

    Just compiled it on a SPARC with no real problems. Here is the information I used:

    # cat /etc/release
    Solaris 10 1/06 s10s_u1wos_19a SPARC
    # which gcc
    /usr/sfw/bin/gcc
    # echo $PATH
    /usr/sfw/bin:/usr/local/bin:/usr/bin:/bin:/usr/ccs/bin:/usr/sbin:/opt/sfw/bin:.
    # echo $LD_LIBRARY_PATH
    /usr/sfw/lib:/usr/local/lib:/opt/sfw/lib

    Hope this may help.

    Andrew

    ReplyDelete
  3. I have the sunfreeware gcc 3.4.6 installed and I get the below errors when I execute this command:

    sh Configure -Dcc='gcc -B/usr/ccs/bin/' \
    -Dprefix=/usr/local/perl587 -des

    Checking whether your C compiler can cast large floats to int32.
    In file included from try.c:7:
    /usr/include/signal.h:26:24: sys/signal.h: No such file or directory
    In file included from try.c:7:
    /usr/include/signal.h:88: error: syntax error before '*' token
    Checking whether your C compiler can cast negative float to unsigned.
    In file included from try.c:7:
    /usr/include/signal.h:26:24: sys/signal.h: No such file or directory
    In file included from try.c:7:
    /usr/include/signal.h:88: error: syntax error before '*' token
    vprintf() found.

    ReplyDelete
  4. Patti, I think you are missing files
    check /usr/include/sys/signal.h.
    It could be you are missing a few packages on you system.

    Andrew

    ReplyDelete
  5. Thanks. That took care of it. I just didn't see that file was missing.

    ReplyDelete
  6. Anonymous7:46 am

    I am getting base64.o and base64.c error when i try to run make command.
    what could be the reason??

    waiting for early response!!!

    ReplyDelete
  7. Anonymous4:50 pm

    I get this message qhen i run the command:
    sh Configure -Dcc='gcc -B/usr/ccs/bin/' -Dprefix=/usr/local/perl587 -des

    Which of these apply, if any? [solaris_2]
    Operating system name? [solaris]
    Operating system version? [2.10]
    Build Perl for SOCKS? [n]
    Use the PerlIO abstraction layer? [y]
    Build a threading Perl? [n]
    Build Perl for multiplicity? [n]
    Use which C compiler? [gcc -B/usr/ccs/bin/]
    Checking for GNU cc in disguise and/or its version number...
    Now, how can we feed standard input to your C preprocessor...
    Directories to use for library searches?
    [/usr/local/lib /usr/lib /usr/ccs/lib]
    What is the file extension used for shared libraries? [so]
    Try to use long doubles if available? [n]
    Checking for optional libraries...
    What libraries to use? [-lsocket -lnsl -lgdbm -ldb -ldl -lm -lc]
    What optimizer/debugger flag should be used? [-O]
    Any additional cc flags? [-fno-strict-aliasing -pipe -I/usr/local/include]
    Let me guess what the preprocessor flags are...
    Any additional ld flags (NOT including libraries)? [ -L/usr/local/lib]
    Checking your choice of C compiler and flags for coherency...
    I've tried to compile and run the following simple program:


    #include stdio.h
    int main() { printf("Ok\n"); return(0); }

    I used the command:

    gcc -B/usr/ccs/bin/ -o try -O -fno-strict-aliasing -pipe -I/usr/local/include -L/usr/local/lib try.c -lsocket -lnsl -lgdbm -ldb -ldl -lm -lc
    ./try

    and I got the following output:

    ld: fatal: library -ldb: not found
    ld: fatal: File processing errors. No output written to try
    collect2: ld returned 1 exit status
    I can't compile the test program.
    You have a BIG problem. Shall I abort Configure [y]
    Ok. Stopping Configure.
    bash-3.00# gcc
    gcc: no input files
    bash-3.00# gcc -B/usr/ccs/bin/
    gcc: no input files


    I have tried everything but i still have this message.

    Thanks

    ReplyDelete
  8. I think you are missing libdb which is part of BerkeleyDB (db-4.2.52) from http://sunfreeware.com

    On the other hand I would look at Cool Stack 1.2 at http://cooltools.sunsource.net/coolstack/

    This is what I use now.

    ReplyDelete
  9. Anonymous12:08 pm

    Really useful stuff. Thanks

    ReplyDelete
  10. Anonymous8:14 pm

    Thank you Andrew. Your instructions are great. It shows the time you have taken to simplify it for others. much appreciated. God Bless.

    ReplyDelete
  11. Anonymous7:26 am

    hi, even I got the same error previously

    ld: fatal: library -ldb: not found
    ld: fatal: File processing errors. No output written to try
    collect2: ld returned 1 exit status
    I can't compile the test program.
    You have a BIG problem. Shall I abort Configure [y]
    Ok. Stopping Configure.
    bash-3.00# gcc
    gcc: no input files
    bash-3.00# gcc -B/usr/ccs/bin/
    gcc: no input files

    then installed 4.2.52.NC-sol10-sparc-local patch from sunfreeware, now I get this issue

    ld: fatal: file /usr/lib/libdb.a: Number of symbolic links encountered during pa th name traversal exceeds MAXSYMLINKS
    ld: fatal: File processing errors. No output written to try
    collect2: ld returned 1 exit status
    I can't compile the test program.
    (The supplied flags or libraries might be incorrect.)

    You have a BIG problem. Shall I abort Configure [y]
    Ok. Stopping Configure.

    I couldn't resolve this issue

    ReplyDelete
  12. I have been trying to install the latest version of Perl (5.8.9) on my SPARC system. I went through that portion of the instructions several times and they seem to run except that the target folder and the executable do not seem to be generated.

    make test passes and make install places the man pages

    The only thing that I have seen that looks odd is:

    make: Warning: Both `makefile' and `Makefile' exist

    This message shows up several times during the process.

    ReplyDelete
  13. Jesse, Just ran steps 1 & 2 with no problems I did run as a normal user after creating /usr/local/perl589 as root
    Information (Solaris 10 10/08):
    # uname -a
    SunOS hermes 5.10 Generic_138888-01 sun4u sparc SUNW,Ultra-4
    # which make
    /usr/ccs/bin/make
    # /usr/sfw/bin/gcc -v
    gcc version 3.4.3

    root# mkdir /usr/local/perl589
    root# chown andrew /usr/local/perl589
    andrew% setenv PATH /usr/sfw/bin:/usr/local/bin:/usr/bin:/bin
    %setenv PATH ${PATH}:/usr/ccs/bin:/usr/sbin:/opt/sfw/bin:.
    % setenv LD_LIBRARY_PATH /usr/sfw/lib:/usr/local/lib:/opt/sfw/lib

    % gzip -dc perl-5.8.9.tar.gz | tar xf -
    % cd perl-5.8.9
    % sh Configure -Dcc='gcc -B/usr/ccs/bin/' -Dprefix=/usr/local/perl589 -des
    % make
    % make test
    % make install
    % /usr/local/perl589/bin/perl -v
    This is perl, v5.8.9 built for sun4-solaris

    Also, ignore the Make file error, since I get that.

    Have you tried downloading the binary from http://www.sunfreeware.com
    Andrew

    ReplyDelete
  14. Anonymous3:06 pm

    Can you please list all packages that needed to be installed from the Sol10 Companion CD in order to run these scripts as they rely on some packages (gcc, etc)
    Thanks

    ReplyDelete
  15. I did install all the Companion since it is the easy option, but having a closer look, I don't think many /opt/sfw packages is used, since the GCC I use is the /usr/sfw.

    Andrew

    ReplyDelete
  16. Anonymous2:20 pm

    Thanks a lot for this blog.
    with your help I could install Perl 5.10 to Solaris + DBI + DBD for Oracle-Perl connection

    Gusztav from Hungary

    ReplyDelete
  17. Anonymous4:44 pm

    Trying to install mod_perl-2.0.4 on Sun Solaris 10 x86 with following error:

    bash-3.00# perl Makefile.PL MP_APXS=/usr/local/apache2/bin/apxs

    bash-3.00# make
    cd "src/modules/perl" && make
    gcc -B/usr/ccs/bin/ -I/downloads/Perl Modules/mod_perl-2.0.4/src/modules/perl -I/downloads/Perl Modules/mod_perl-2.0.4/xs -I/usr/local/apache2/include -I/usr/local/apache2/include -I/usr/local/apache2/include -fno-strict-aliasing -pipe -I/usr/local/include -DPERL_USE_SAFE_PUTENV -I/usr/local/perl510/lib/5.10.0/i86pc-solaris/CORE -DMOD_PERL -DMP_COMPAT_1X -DSOLARIS2=10 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -D_LARGEFILE64_SOURCE -O -fPIC \
    -c mod_perl.c && mv mod_perl.o mod_perl.lo
    gcc: Modules/mod_perl-2.0.4/src/modules/perl: No such file or directory
    gcc: Modules/mod_perl-2.0.4/xs: No such file or directory
    *** Error code 1
    make: Fatal error: Command failed for target `mod_perl.lo'
    Current working directory /downloads/Perl Modules/mod_perl-2.0.4/src/modules/perl
    *** Error code 1
    make: Fatal error: Command failed for target `modperl_lib'
    bash-3.00#

    Any Idea's

    ReplyDelete
  18. Anonymous2:57 pm

    Anyone leaving instructions on the net should follow your example! Very clear and in particular the environment variables to set. Once I set the Korn shell then I was able to install Perl 5.8.7 "Threaded" and the DBI and DBD::Oracle modules. Thank you very much.

    Monosabio@aol.com

    ReplyDelete
  19. Thanks for giving these tips for the few, but faithful users of Solaris. I will read the other articles of your blog. Nice entry.

    ReplyDelete
  20. hi
    thanks for ur installation procedure
    I have installed it but when i give perl -v still its showing me older 5.6.1 version.
    if i set path temporarily it ll show 5.8.7 version...plz help me

    ReplyDelete
  21. Don't forget that your PATH has /usr/bin in it and perl is there and your scripts may have /usr/bin/perl on the first line:

    # which perl
    /usr/bin/perl
    # perl -v
    This is perl, v5.8.4
    Alter PATH see Step (1):
    # export PATH=/usr/local/bin:$PATH
    # which perl
    /usr/local/bin/perl
    # perl -v
    This is perl, v5.8.0

    ReplyDelete
  22. thnks for the reply...
    actually i am installing in solaris 9..... after setting path it temporarily refletcs newer version..but once i give exit...it ll not reflect... and in the meanwhile i deleted older version 5.6.1 also.. how to set the path permanntly?

    ReplyDelete
  23. Hi,
    I've compiled Apache2.2.14, 20 and 22 versions on Solaris10 x86 server with below configuration options. When I tried to run apache with proxy loadbalancer it is throwing core dump as below. Could some one please help why I'm getting core dump error only proxy loadbalancer instances.

    Configure options: -
    ./configure --prefix=/opt/httpd-2.2.22_32bit --enable-proxy --enable-rewrite --enable-mods-shared=all --enable-cache --enable-file-cache --enable-mem-cache --enable-cgid --enable-access --enable-auth --enable-imap --enable-deflate --with-mpm=worker --with-included-apr

    Proxy details in httpd.conf: -
    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
    LoadModule proxy_connect_module modules/mod_proxy_connect.so
    LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
    LoadModule proxy_http_module modules/mod_proxy_http.so

    RewriteRule ^/(.*) balancer://prd-admin/$1 [P,L]


    BalancerMember http://xxx.xxx.xxx.xxx:yyyy
    BalancerMember http://xxx.xxx.xxx.xxx:yyyy


    Error: -
    child pid 10628 exit signal Segmentation fault (11), possible coredump in /opt/httpd-2.2.22_32bit_MPM

    Note: - The apache instances are running in httpd.conf doesn't contain proxy loadbalancers.

    Many Thanks in advance for your help.

    Regards,
    Ramesh

    ReplyDelete
  24. Anonymous9:56 pm

    Thank you for the detailed instruction. While running the step 5, make, I got the following error messages:
    ■cd "src/modules/perl" && make
    ■cc -I/usr/local/src/mod_perl-2.0.7/src/modules/perl -I/usr/local/src/mod_perl-2.0.7/xs -I/usr/apache2/include -I/usr/apache2/include -I/usr/sfw/include -I/usr/apache2/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xarch=v8 -D_TS_ERRNO -I/usr/perl5/5.8.4/lib/sun4-solaris-64int/CORE -DMOD_PERL -DMP_COMPAT_1X -DSOLARIS2=10 -D_POSIX_PTHREAD_SEMANTICS -D_REENTRANT -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xO3 -xspace -xildoff -KPIC \
    ■-c mod_perl.c && mv mod_perl.o mod_perl.lo
    ■ld.so.1: gcc: fatal: libintl.so.8: open failed: No such file or directory
    ■Killed
    ■*** Error code 137
    ■make: Fatal error: Command failed for target `mod_perl.lo'
    ■Current working directory /usr/local/src/mod_perl-2.0.7/src/modules/perl
    ■*** Error code 1
    ■make: Fatal error: Command failed for target `modperl_lib'

    I have no idea about the error. Could you kindly help check? thank you in advance.

    Ray

    ReplyDelete