hollyさんのwiki

perlをsolarisにインストールするときのメモ。いろいろと苦労した結果、なんとかインストールできたので、記録しておく。ruby, pythonでもいろいろと同じようなのが出てきたので、みんな苦労しているんだということがわかっただけでも収穫である。

ちょっとした前提条件

Solarisのパッケージ管理システムでpkginを使っている。それでgccをインストール。arやndなどは/opt/local/binにインストールされる
pkgin install gcc-compiler gcc-tools
メジャーなのかよくわからないけどこういう状態。作業場所はcd /usr/local/src/perl-5.14.2とする

gccの場合

./Configure  -Dusedtrace -Duseshrplib -Dusethreads  -Duseithreads -Uusemymalloc -Duse64bitall -Dusemymalloc -Duseposix  -Duselargefiles -Dcc='gcc -m64 -B/usr/ccs/bin/' -Dprefix=/usr/local/perl-5.14.2 -Accflags=-fPIC -Dccdlflags="-Wl,-E" -Dlddlflags="-Wl,-E -G"
とするとmake途中でここにのっている問題にぶち当たる
fatal: relocation error: R_AMD64_PC32:
gccを使う場合は-Accflags=-fPICをつけるようにするといいと書いているところもあるけど結局は変わらず。普通の32bit modeだと何もおきない(gccの-m64、-Duse64bitallをはずす)。というわけで64bitにする必要がないのならperlbrewで普通にインストール可能

SolarisStudio

これを使えば問題なくインストールできそうだが、対話式でインストールする必要がありそう(-desはつけない)。もちろんdtraceを有効にしてインストール。使い方はよくわかってないけど。
SolarisStudioのことはここにまとめておいた
./Configure  -Dusedtrace -Duseshrplib -Dusethreads  -Duseithreads -Uusemymalloc -Duse64bitall -Dusemymalloc -Duseposix -Dcc='/usr/ocal/solarisstudio/bin/cc' -Dprefix=/usr/local/perl-5.14.2 -Dlibs="-lm -ldl -lsocket -lnsl -lpthread -lrt -lc" -Accflags=-Kpic

desをつけていないので全て対話形式になるが気になるところだけいうと

library path検索対象
Directories to use for library searches?
[/opt/local/lib /usr/gnu/lib /usr/lib /usr/ccs/lib] /lib/64 /usr/lib/64 /opt/local/lib/amd64  /opt/local/lib /usr/gnu/lib /usr/lib /usr/ccs/lib

library。まあ好きにしたらいいとは思うけど一応
What libraries to use? [-lsocket -lnsl -ldl -lm -lpthread -lc] -lsocket -lnsl -ldl -lm -lpthread -lc -lrt

libc.so path
Where is your C library? [/lib/libc.so] /lib/64/libc.so
これくらい。あとは
Shall I use /usr/bin/nm to extract C symbols from the libraries? [y]
などと聞かれるのでそのまま使うこと。binutilsを入れていると/opt/local/bin/nmを見てしまったりするので、くれぐれもインストールされている場合は削除すること。gcc-toolsが入っていればそもそも事足りる。

重要なのは-Kpicというフラグでoracleの人が書いていると思われるblogにそのことが書かれている。
あとはmake, make installをすればよい。一応makeの時点で生成されるperlとlibperl.so(-Duseshrplibを指定すると生成される)をそれぞれfileコマンドで確認すると
file ./perl
./perl:         ELF 64-bit LSB executable AMD64 Version 1 [SSE FXSR FPU], dynamically linked, not stripped

file ./libperl.so
libperl.so:     ELF 64-bit LSB dynamic lib AMD64 Version 1 [SSE2 SSE CMOV FPU], dynamically linked, not stripped
となっていることがわかる

perlbrewで利用できるようにするには

対話式インストールは無理っぽいのでとりあえず普通にインストールしてどうなるかを解析する。$HOME以下に以下のようになる

インストール情報など

  • ダウンロードはperl5/perlbrew/dists/perl-5.14.2.tar.bz2にされる
  • 展開はperl5/perlbrew/build/perl-5.14.2
  • インストール先はperl5/perlbrew/perls/perl-5.14.2/{lib,man,bin}

環境変数

PERLBREW_BASHRC_VERSION=0.41
PERLBREW_ROOT=/home/holly/perl5/perlbrew
PERLBREW_HOME=/home/holly/.perlbrew
PERLBREW_PATH=/home/holly/perl5/perlbrew/bin
perlbrew switchを実行するとなる
PERLBREW_PERL=perl-5.14.2 <- これが追加。$HOME/.perlbrew/initで定義されている
PERLBREW_ROOT=/home/holly/perl5/perlbrew
PERLBREW_HOME=/home/holly/.perlbrew
PERLBREW_MANPATH=/home/holly/perl5/perlbrew/perls/perl-5.14.2/man
PERLBREW_PATH=/home/holly/perl5/perlbrew/bin:/home/holly/perl5/perlbrew/perls/perl-5.14.2/bin

perl -V

Summary of my perl5 (revision 5 version 14 subversion 2) configuration:

  Platform:
    osname=solaris, osvers=2.11, archname=i86pc-solaris
    uname='sunos fc031070-2d68-012f-b921-002590346596.local 5.11 joyent_20111129t184432z i86pc i386 i86pc solaris '
    config_args='-de -Dprefix=/home/holly/perl5/perlbrew/perls/perl-5.14.2'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=undef, usemultiplicity=undef
    useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef
    use64bitint=undef, use64bitall=undef, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-fno-strict-aliasing -pipe -fstack-protector -I/opt/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DPERL_USE_SAFE_PUTENV',
    optimize='-O',
    cppflags='-fno-strict-aliasing -pipe -fstack-protector -I/opt/local/include'
    ccversion='', gccversion='4.5.2', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =' -fstack-protector -L/opt/local/lib -L/usr/gnu/lib '
    libpth=/opt/local/lib /usr/gnu/lib /usr/lib /usr/ccs/lib
    libs=-lsocket -lnsl -ldl -lm -lc
    perllibs=-lsocket -lnsl -ldl -lm -lc
    libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' '
    cccdlflags='-fPIC', lddlflags='-G -L/opt/local/lib -L/usr/gnu/lib -fstack-protector'


Characteristics of this binary (from libperl):
  Compile-time options: PERL_DONT_CREATE_GVSV PERL_MALLOC_WRAP
                        PERL_PRESERVE_IVUV PERL_USE_SAFE_PUTENV
                        USE_LARGE_FILES USE_PERLIO USE_PERL_ATOF
  Built under solaris
  Compiled at Feb  6 2012 02:57:17
  %ENV:
    PERLBREW_BASHRC_VERSION="0.41"
    PERLBREW_HOME="/home/holly/.perlbrew"
    PERLBREW_MANPATH="/home/holly/perl5/perlbrew/perls/perl-5.14.2/man"
    PERLBREW_PATH="/home/holly/perl5/perlbrew/bin:/home/holly/perl5/perlbrew/perls/perl-5.14.2/bin"
    PERLBREW_PERL="perl-5.14.2"
    PERLBREW_ROOT="/home/holly/perl5/perlbrew"
    PERLBREW_VERSION="0.41"
  @INC:
    /home/holly/perl5/perlbrew/perls/perl-5.14.2/lib/site_perl/5.14.2/i86pc-solaris
    /home/holly/perl5/perlbrew/perls/perl-5.14.2/lib/site_perl/5.14.2
    /home/holly/perl5/perlbrew/perls/perl-5.14.2/lib/5.14.2/i86pc-solaris
    /home/holly/perl5/perlbrew/perls/perl-5.14.2/lib/5.14.2

prefixさえ合わせれば、問題なさそうな感じ

install

cd ~/perl5/perlbrew/dists
# 開発版いれてみる
curl -LO http://search.cpan.org/CPAN/authors/id/B/BI/BINGOS/perl-5.15.7.tar.gz
cd ../build
tar xvfz ../dists/perl-5.15.7.tar.gz
タグ

Wiki内検索

Menu

ここは自由に編集できるエリアです。

管理人/副管理人のみ編集できます