10-7. フリ−ソフトのインスト−ル '97〜 (1) Solaris 2.5.1 での注意 * /opt ディレクトリの扱い このディレクトリは Solaris のオプション・ソフトやフリ−ソフトを入れるために一応 ある。しかし容量が非常に少ない。GNU のソフトを入れたりすると、とたんに一杯になる。 /opt ディレクトリは Solaris の純正ソフトを入れるだけにした方がよい。GNU ソフトは どこか他の空いているところに入れるしかないか。どこに入るかは一目瞭然だが、しかし なんて細かくパ−ティションが分かれているのだ。たまらんぞ。 Apollo は普通パ−ティ ションは分けない。いわば1個パ−ティションになっている。この方が扱いやすいぞ。分 けようと思えばできるが、これまで分けたことがない。分ける必要がなかったのである。 # df -k ファイルシステム Kバイト 使用済 使用可 使用率 マウント場所 /dev/dsk/c0t3d0s0 31239 13246 14873 48% / /dev/dsk/c0t3d0s6 327711 229469 65472 78% /usr /proc 0 0 0 0% /proc fd 0 0 0 0% /dev/fd /dev/dsk/c0t3d0s5 96031 28782 57649 34% /var /dev/dsk/c0t3d0s7 1208734 142296 945568 14% /export/home /dev/dsk/c0t3d0s4 163863 135780 19893 88% /opt swap 164076 12 164064 1% /tmp # cd /opt << まあとりあえず、/opt にソフトを入れるとする。 # mkdir local /usr/local に入ったかのようにリンクを張っておく。 # cd /usr # ln -s /opt/local * フリ−ソフトをコンパイルする時の注意 コンパイルするためにはCコンパイラがいる。バイナリの GNU gcc がないとすれば、 純 正のCコンパイラを購入して、インスト−ルしておく必要がある。 それに Solaris の標 準パスは make がある /usr/ccs/bin を含んでいない。 cc は /opt/SUNWspro/bin/cc に ある。これらを PATH に含むように設定する。 # echo $PATH /usr/openwin/bin:/usr/sbin:/usr/bin << openwin/bin はコンパイルには関係ない。 # setenv PATH /usr/ccs/bin:/opt/SUNWspro/bin:$PATH or # setenv PATH /usr/ccs/bin:/opt/SUNWspro/bin:/usr/sbin:/usr/bin GNU のソフトはたいてい ./configure でコンパイル環境をチェックして、 そのマシンに 応じた Makefile を作成する。それで make をかければ実行モジュ−ル等ができるように なっている。インスト−ルは make install とやれば /usr/local/bin にモジュ−ルをコ ピ−する。もしコンパイルに失敗したら、ソ−スを最初から展開するのが一番確実である。 または次のようなコマンドがたいがい使えるので、これらでオブジェクトを消去したりし て再度 make をかける。必ず全部揃っているわけではないみたい。 # make uninstall << インスト−ルしたのを削除する。 # make distclean << 上と同じだと思うが。 # make clean << インスト−ル前のオブジェクト等を消去する。 * インスト−ルするフリ−ソフト # cd /opt/local/source;ls -al -rw-r--r-- 1 root other 798720 .. gzip-1.2.4.tar -rw-r--r-- 1 root other 595378 .. make-3.75.tar.gz -rw-r--r-- 1 root other 71541 .. patch-2.1.tar.gz -rw-r--r-- 1 root other 287239 .. bison-1.25.tar.gz -rw-r--r-- 1 root other 7134021 .. gcc-2.7.2.2.tar.gz -rw-r--r-- 1 root other 992815 .. sendmail.8.8.5.tar.gz -rw-r--r-- 1 root other 627144 .. w3c-httpd-3.0A.tar.gz sendmail は ftp.iij.ad.jp /pub/network/sendmail から、それ以外は /pub/GNU からと ってくる。gzip は gzip-1.2.4.tar.gz もあるが、これは今とってきても解凍ができない。 CERN httpd は iij には無いみたいだ。ftp.spin.ad.jp にある。sendmail のコンパイル は別章を見て頂きたい。 # ftp ftp.spin.ad.jp Name (ftp.spin.ad.jp:root): anonymous Password: << 自分のメ−ルアドレスを入れるのが決まり。 ftp> cd pub/WWW/CERN-httpd ftp> dir -rw-r--r-- 1 archive 1 952445 Jul 14 1996 w3c-httpd-3.0A.tar.Z -rw-r--r-- 1 archive 1 627144 Jul 14 1996 w3c-httpd-3.0A.tar.gz ftp> binary 200 Type set to I. << binary モ−ドでファイル転送する。 ftp> get w3c-httpd-3.0A.tar.gz ftp> bye * インスト−ル後の状態 # cd /opt/local;ls -F bin/ lib/ sparc-sun-solaris2.5.1/ include/ man/ info/ share/ # ls bin << /usr/local/bin ディレクトリでもある。 bison gcc zcat make patch * Solaris 用バイナリ・モジュ−ル [ Solaris 2.6 で ] `21/02 次のところにいつの間にかバイナリ・モジュ−ルが置かれていた。インスト−ルするには Solaris 専用の pkgadd というコマンドを使ってやるらしい。試してみて下さい。 http://sunsite.sut.ac.jp/sun/solrais-binaries/sparc 00README.packages ftp://sunsite.sut.ac.jp/sun-info/solaris-binaries/sparc 00README.packages qpopper.2.2.SPARC.Solaris.2.5.pkg.tgz GNUgcc.2.7.2.2.SPARC.Solaris.2.5.pkg.tgz GNUgcc.2.7.2.1.SPARC.Solaris.2.5.1.pkg.tgz GNUzip.1.2.4.SPARC.Solaris.2.5.pkg.tar GNUpatch.2.1.SPARC.Solaris.2.5.pkg.tgz この他 perl, xv, dhcpd など GNUbison.1.25.SPARC.Solaris.2.5.pkg.tgz たいがいのものは揃っている。 上記のところから GNUzip..pkg.tar というのを /usr/local/source にダウンロ−ドした。 そして tar で展開すると、/usr/local/source/GNUzip というディレクトリができる。後 は # pkgadd -d. GNUzip とやるだけ、ここの GNUzip は tar で展開してできたディレク トリ名である。pkgadd の実行は1分もかからない、何もすることはない簡単だった。 # tar xvf GNUzip.1.2.4.SPARC.Solaris.2.6.pkg.tar # pkgadd -d. GNUzip << -d . とピリオドを離しても一緒。 中のパッケージインスタンス を処理しています。 GNU zip 1.2.4 SPARC Solaris 2.6 (sparc) 1.2.4 GNU ## パッケージ情報を処理しています。 ## システム情報を処理しています。 ## ディスク領域を確認しています。 ## すでにインストールされているパッケージとの衝突がないか調べています。 ## setuid/setgid を行うプログラムを検査しています。 This package contains scripts which will be executed with super-user permission during the process of installing this package. Do you want to continue with the installation of [y,n,?] y << y 入れる。 GNU zip 1.2.4 SPARC Solaris 2.6 を としてインストールしています。 ## preinstall スクリプトを実行しています。 ## 第 1 部 (全 1 部) をインストールしています。 /usr/local/bin/gzexe | /usr/local/bin/znew /usr/local/info/gzip.info /usr/local/man/man1/gzexe.1 | /usr/local/man/man1/znew.1 [ クラス を確認しています。] 当初ここでは /usr/local/source /usr/local/bin/gunzip <リンクされたパス名> ディレクトリしか作ってなかった。 /usr/local/bin/zcat <リンクされたパス名> pkgadd をやると自動的に bin デ /usr/local/bin/zcmp <リンクされたパス名> ィレクトリなどができた。 /usr/local/man/man1/gunzip.1 <リンクされたパス名> /usr/local/man/man1/zcat.1 <リンクされたパス名> /usr/local/man/man1/zcmp.1 <リンクされたパス名> Installation of was successful. # ls /usr/local/bin gunzip gzexe gzip zcat zcmp zdiff zforce zgrep zmore znew # ls -F /usr/local bin/ info/ lib/ man/ source/ * Solaris 用バイナリ・モジュ−ル [ Solaris 9 で ] `28/10 InterScan7をインスト−ルするのに、幾つかOSにモジュ−ルが入っていることが条件だ った。それで入っているかどうか確認した。確認するやり方は2つ、pkginfo コマンドで 見るとの直接ディレクトリを見るのである。 # pkginfo | egrep -i SUNWlibC system SUNWlibC Sun Workshop Compilers Bundled libC system SUNWlibCf SunSoft WorkShop Bundled libC (cfront version) system SUNWlibCx Sun WorkShop Bundled 64-bit libC # ls /var/sadm/pkg/SUNWlibC << SUNWlibCf, SUNWlibCx ディレクトリもある。 install pkginfo save http://ftp.kddlabs.co.jp/Sun/sunfreeware/sparc/9/ から PostgreSQL 8.3.3 をダウン ロ−ドしてきて、pkg コマンドでインスト−ルした例。 最初 Sun のサイトを探したのが PostgreSQL 8.3.x の Solaris 9 用のバイナリはなかった。gzip は GNU の圧縮コマンド、 これでカレントディレクトリに postgresql-8.3.3-sol9-sparc-local ができる。 そして pkgadd をやって最後 のインストールに成功しました。と出ればOK。 # gzip -d postgresql-8.3.3-sol9-sparc-local.gz << GNU のコマンドで解凍する。 # pkgadd -d postgresql-8.3.3-sol9-sparc-local << /usr/local/pgsql/ 以下に入る。 # pkginfo | egrep -i postgresql << pkginfo | grep postgre でも同じ。 application SMCpgsql postgresql # pkgrm SMCpgsql << 入れたパッケ−ジを削除する。 次のパッケージは現在インストールされています: # pkgrm postgresql ではだめ。 SMCpgsql postgresql (sparc) 8.3.3 このパッケージを削除しますか [y,n,?,q] q << y を押すと /usr/local/pgsql/ 以下 が消える。 (2) GNU ソフトのインスト−ル Solaris * gunzip のインスト−ル ( 以下 Solaris 2.5.1 へのインスト−ル ) # tar xvf gzip-1.2.4.tar # cd gzip-1.2.4 # ./configure checking for gcc | creating Makefile # make cc -c -DSTDC_HEADERS=1 -DHAVE_UNISTD_H=1 -DDIRENT=1 gzip.c | cc -o gzip gzip.o zip.o deflate.o trees.o .. unlzh.o getopt.o rm -f gunzip zcat ln gzip gunzip << これらハ−ドリンクしている。 ln gzip zcat << 同じファイルサイズ 124192 byte で、gunzip, gzip, zcat という3つのモジュ−ルがで きる。名前が違うだけで同じ機能かと思えるが、違っている。 zcat が一番使いでがある。 Solaris にはOS標準の zcat があるので、いっそ置き換えてしまうか、gzcat と名前を 変えて使う。/usr/local/bin にコピ−しておこう。make install はここでは使わない。 # zcat file.tar.gz | tar xvf - # gunzip file.tar.gz << file.tar に解凍するのみ。| tar xvf - はダメ。 # gzip ooo.tar.gz << オプションをつけないといかんみたい。 gzip: ooo.tar.gz already has .gz suffix -- unchanged # /usr/bin/zcat ooo.tar.gz << OS標準の zcat。gz を認識しない。使えない。 ooo.tar.gz.Z: ファイルもディレクトリもありません。 * make のインスト−ル # zcat make-3.75.tar.gz | tar xvf - << 上記の zcat を /usr/local/bin にコピ # cd make-3.75 −したとする。 # ./configure loading cache ./config.cache checking whether make sets ${MAKE}... ./configure: make: not found no checking for gcc... no checking for cc... cc | creating Makefile # make cd glob; make libglob.a | ar rv libglob.a glob.o fnmatch.o a - glob.o a - fnmatch.o ar: libglob.a を作成中です。 ar: libglob.a に書き込み中です。 : libglob.a cc -DHAVE_CONFIG_H -DLIBDIR=\"/usr/local/lib\" -DINCLUDEDIR=\"/usr/local/include\" -c -I. -I. -I./glob -g getloadavg.c cc commands.o .. glob/libglob.a getloadavg.o -L/usr/local/lib .. -o make.new mv -f make.new make # make install /bin/sh ./mkinstalldirs /usr/local/bin /usr/local/info /usr/local/man/man1 mkdir /usr/local/bin mkdir /usr/local/info mkdir /usr/local/man mkdir /usr/local/man/man1 cd glob; make libglob.a `libglob.a' is up to date. ./install-sh -c make /usr/local/bin/make.new chgrp sys /usr/local/bin/make.new && chmod g+s /usr/local/bin/make.new rm -f /usr/local/bin/make.old mv /usr/local/bin/make /usr/local/bin/make.old mv: /usr/local/bin/make にアクセスできません。 *** Error code 2 (ignored) mv /usr/local/bin/make.new /usr/local/bin/make if [ -r ./make.info ]; then dir=.; else dir=.; fi; \ for file in ${dir}/make.info*; do \ name="`basename $file`"; \ ./install-sh -c -m 644 $file \ `echo /usr/local/info/make.info | sed "s,make.info\$,$name,"`; \ done if /bin/sh -c 'install-info --version' >/dev/null 2>&1; then \ if [ -r ./make.info ]; then dir=.; else dir=.; fi; \ install-info --infodir=/usr/local/info $dir/make.info; \ else true; fi ./install-sh -c -m 644 ./make.man /usr/local/man/man1/make.1 * patch のインスト−ル # cd patch-2.1 # ./configure checking for gcc | creating Makefile creating config.h # make cc -c -DHAVE_CONFIG_H -I. -g backupfile.c cc -c -DHAVE_CONFIG_H -I. -g getopt.c cc -c -DHAVE_CONFIG_H -I. -g getopt1.c cc -c -DHAVE_CONFIG_H -I. -g inp.c cc -c -DHAVE_CONFIG_H -I. -g patch.c cc -c -DHAVE_CONFIG_H -I. -g pch.c cc -c -DHAVE_CONFIG_H -I. -g util.c cc -c -DHAVE_CONFIG_H -I. -g version.c cc -g backupfile.o getopt.o getopt1.o inp.o patch.o .. version.o -o patch # make install cp patch /usr/local/bin/patch cp ./patch.man /usr/local/man/man1/patch.1 * bison のインスト−ル コンパイラ・コンパイラという代物。これがないと gcc がコンパイルできない場合があ るらしい。よくわからないけど、一応入れておく。 # cd bison-1.25 # ./configure creating cache ./config.cache checking for gcc... cc | creating Makefile # make | cc -g -o bison LR0.o allocate.o .. warshall.o version.o getopt.o getopt1.o rm -f bison.s1 sed -e "/^#line/ s|bison|/usr/local/share/bison|" < ./bison.simple > bison.s1 # make install sh ./mkinstalldirs /usr/local/bin /usr/local/share /usr/local/info .. mkdir /usr/local/share rm -f /usr/local/bin/bison cd /usr/local/share; rm -f bison.simple bison.hairy rm -f /usr/local/man/man1/bison.1 /usr/local/info/bison.info* ./install-sh -c bison /usr/local/bin/bison ./install-sh -c -m 644 bison.s1 /usr/local/share/bison.simple ./install-sh -c -m 644 ./bison.hairy /usr/local/share/bison.hairy cd .; for f in bison.info*; \ do ./install-sh -c -m 644 $f /usr/local/info/$f; done ./install-sh -c -m 644 ./bison.1 /usr/local/man/man1/bison.1 # make uninstall << インスト−ルしたのを削除する。 rm -f /usr/local/bin/bison cd /usr/local/share; rm -f bison.simple bison.hairy rm -f /usr/local/man/man1/bison.1 /usr/local/info/bison.info* * gcc のインスト−ル # cd gcc-2.7.2.2 こんなようにやる。めんどくさいよ。 # ./configure This appears to be a sparc-sun-solaris2.5.1 system. Using `./config/sparc/sparc.c' to output insns. Using `./config/sparc/sparc.md' as machine description file. Using `./config/sparc/sol2.h' as target machine macro file. Using `./config/sparc/xm-sol2.h' as host machine macro file. Merged sparc/x-sysv4. Merged sparc/t-sol2. Merged c++ fragment(s). Created `./Makefile'. Merged sparc/x-sysv4. Merged sparc/t-sol2. Created `cp/Makefile'. Links are now set up to build a native compiler for sparc-sun-solaris2.5.1. # make LANGUAGES=c | cc -DIN_GCC -DSVR4 -g obstack.o ` case "cc" in "cc") echo "alloca.o" ;; esac ` -o c++filt cxxmain.o underscore.o getopt.o getopt1.o これで正常終了。 # make stage1 << すぐ終わる。 # make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2" << O2 の O はオ−。 # make stage2 << すぐ終わる。 # make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2" # make compare << すぐ終わる。 # make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="c" | chmod a-x /usr/local/man/man1/cccp.1 cd .; makeinfo gcc.texi sh: makeinfo: コマンドが見つかりません。 *** Error code 1 make: Fatal error: Command failed for target `gcc.info' # cp xgcc /usr/local/bin/gcc << やらなくてもいい?。 * g++ と binutils のバ−ジョンの注意 `21/10 電子メ−ルのユ−ザ支援ということで、 POP3 のパスワ−ド変更とメ−ル転送の設定を検 討していた。ちょうと、そのようなプログラムを松阪大学の奥村先生が作られていたので 使わせて頂こうとやってみた。C++で記述されていて、一応 Linux用だった。そのまま Solaris 2.6 にもってきてコンパイルしたら、以下のようなエラ−が出てしまった。数十 行のプログラムでしかないのだが。as コマンドは /usr/ccs/bin/as ので、Solaris 純正 のを使おうとしていた。g++ のバ−ジョンは 2.95.2 である。 Coblat Qube3 でも試しに やったところ、問題なくコンパイルできた。 Qube3 に入っていたのは g++ は同じバ−ジ ョン、as は /usr/bin/as であり GNU assembler version 2.9.5 だった。 # g++ forward.cc /usr/ccs/bin/as: "/var/tmp/ccaZj5tN.s", line 3792: error: can't compute .. GNU as を ftp://sunsite.sut.ac.jp/sun-info/solaris-binaries/sparc に探したが、こ こにはなかった。/sun-info/Solaris/SOURCES を見たら3っつソ−スがあった。それでと りあえず binutils-2.9.1.tar.gz をインスト−ルしてみた。入った GNU asのバ−ジョン は 2.9.1、コンパイルは先と同じエラ−が出た。 仕方ないので binutils-2.11.2.tar.gz をそのまま上書きするようにインスト−ルした。その前にディスクの容量を確保すること にした。gcc のパッケ−ジを展開した /usr/local/source/GNUgcc がかなり食っていたの で、これを消去することにした。これら pkgadd でインスト−ルした後、再コンパイルす る際にはいるが、それ以外は特に必要はない。 GNU binutils には addr2line, ar, as, gprof, ld, nm, objcopy, objdump, ranlib, size, strings, strip が含まれている。nlmconv はハテナ。 # ftp sunsite.sut.ac.jp ftp> cd /sun-info/Solaris/SOURCES ftp> ls *binuti* -r--r--r-- .. 9934295 Jul 16 16:03 binutils-2.11.2.tar.gz 約10メガ -r--r--r-- .. 4514143 May 17 1999 binutils-2.7.tar.gz -r--r--r-- .. 5694541 May 17 1999 binutils-2.9.1.tar.gz # cd /usr/local/source 容量を確保するため GNUgcc デ # tar cBf - GNUgcc | (cd /var/KATOU; tar xBpfv - ) ィレクトリを、別にそのまま退 # rm -r GNUgcc 避させ消去した。61392 Kbytes これによって空いた。 # /bin/csh # setenv PATH /usr/local/bin:/usr/ccs/bin:$PATH # zcat binutils-2.11.2.tar.gz | tar xvf - # cd binutils-2.11.2 # ./configure # make; make install << マシンをリブ−トしなくても as, ld を認識する。 # as -v << /usr/local/bin/ に入った。 GNU assembler version 2.11.2 (sparc-sun-solaris2.6) using BFD version 2.11.2 # ld -v << /usr/local/bin/ に入った。 GNU ld version 2.11.2 (with BFD 2.11.2) # g++ -v Reading specs from /usr/local/lib/gcc-lib/sparc-sun-solaris2.6/2.95.2/specs gcc version 2.95.2 19991024 (release) # cd /usr/local/apache/cgi-bin # g++ forward.cc -lcrypt << 松阪大学の奥村先生が作られたプログラム。 (3) GNU ソフトのインスト−ル INDY * bison のインスト−ル ( 以下 INDY IRIX 5.3 へのインスト−ル ) '99/11 時点での bison の配布バ−ジョンである。 Apache と PHP3 を INDY にインスト −ルしていたところ bison がないよと出てきた。それで急遽 bison を、しかも新しいの をインスト−ルすることにした。gcc は 2.7.2.3、make はOSのを使った。 % ftp ftp.iij.ad.jp ftp> cd pub/GNU/bison -r--r--r-- 1 root wheel 287239 May 11 1996 bison-1.25.tar.gz -r--r--r-- 1 root wheel 322381 Feb 11 1999 bison-1.26a.tar.gz -r--r--r-- 1 root wheel 324630 Feb 16 1999 bison-1.27.tar.gz -r--r--r-- 1 root wheel 420341 Jul 6 13:20 bison-1.28.tar.gz % zcat bison-1.28.tar.gz | tar xvf - で展開する。bison-1.28 に入って ./configure して make、make install する。特に問題はない。下はインスト−ル内容である。 /usr/local/bin/bison /usr/local/share/bison.simple, bison.hairy /usr/local/info/bison.info /usr/local/man/man1/bison.1 /usr/local/share/locale/de/LC_MESSAGES/bison.mo << de の他 es,fr,nl もあり。 * perl のインスト−ル % ftp ftp.iij.ad.jp '98/09 ftp> cd pub/GNU ftp> ls per*5* -r--r--r-- .. 2581811 Nov 12 1997 perl-5.004_04.tar.gz -r--r--r-- .. 3431570 Jul 29 03:13 perl-5.005.01.tar.gz -r--r--r-- .. 3491732 Sep 28 20:34 perl-5.005.02.tar.gz -r--r--r-- .. 129786 Jan 13 1996 perlref-5.001.2.tar.gz 以下は perl 5.004 をインスト−ルした様子。5.003 はバグがあるため、5.004 以降をイ ンスト−ルすること。ちなみに 4.x 代と 5.x 代では大きく変わっている。5.x 代はオブ ジェクト指向になっている。 % Configure | 何のためか知らないがホスト名 Figuring out host name... を聞いてくる。別に適当でも問 Your host name appears to be "host1". Right? [y] 題ないみたい。 % make % make test % make install % perl -v This is perl, version 5.004_04 built for IP22-irix Copyright 1987-1997, Larry Wall これで /usr/local/bin/perl がインスト−ルされる。ライブラリは /usr/local/lib/ に perl5 ディレクトリができて入る。 xxx.pm というのが Perl スクリプトで使える便利な パッケ−ジである。展開したソ−ス・ディレクトリの中にも使えそうなのがある。 % setenv COLUMNS 90 % ls -F ls /usr/local/lib/perl5 AnyDBM_File.pm File/ SelfLoader.pm cacheout.pl lib.pm AutoLoader.pm FileCache.pm Shell.pm chat2.pl locale.pm AutoSplit.pm FileHandle.pm Socket.pm complete.pl look.pl Benchmark.pm FindBin.pm Symbol.pm constant.pm newgetopt.pl Bundle/ Getopt/ Sys/ ctime.pl open2.pl CGI/ I18N/ Term/ diagnostics.pm open3.pl CGI.pm IO/ Test/ dotsh.pl ops.pm CPAN/ IO.pm Text/ dumpvar.pl overload.pm CPAN.pm IPC/ Tie/ exceptions.pl perl5db.pl Carp.pm Math/ Time/ fastcwd.pl pwd.pl Class/ NDBM_File.pm UNIVERSAL.pm find.pl shellwords.pl Config.pm Net/ User/ finddepth.pl sigtrap.pm Cwd.pm ODBM_File.pm abbrev.pl flush.pl stat.pl Devel/ Opcode.pm assert.pl ftp.pl strict.pm DirHandle.pm POSIX.pm auto/ getcwd.pl subs.pm DynaLoader.pm POSIX.pod autouse.pm getopt.pl syslog.pl English.pm Pod/ base.pm getopts.pl tainted.pl Env.pm SDBM_File.pm bigfloat.pl hostname.pl termcap.pl Exporter.pm Safe.pm bigint.pl importenv.pl timelocal.pl ExtUtils/ Search/ bigrat.pl integer.pm validate.pl Fcntl.pm SelectSaver.pm blib.pm less.pm vars.pm % ls -F /usr/local/source/perl5/perl5.004_04/eg ADB client* findtar myrup rmfrom sysvipc/ van/ README down* g/ nih scan/ travesty who cgi/ dus muck relink server* unuc* wrapsuid* changes findcp muck.man rename* shmkill uudecode % ls -F /usr/local/source/perl5/perl5.004_04/eg/cgi RunMeFirst* diff_upload.cgi javascript.cgi save_state.cgi clickable_image.cgi file_upload.cgi monty.cgi tryit.cgi cookie.cgi frameset.cgi multiple_forms.cgi wilogo.gif.uu crash.cgi index.html nph-clock.cgi customize.cgi internal_links.cgi popup.cgi * gcc のインスト−ル '99/05 時刻同期プログラムの NTP をコンパイルしようとしたら、 GNU C のバ−ジョンが悪いげ なことを言ってだめだった。確か gcc の 2.7.2 を入れておいたはずだがと思い確認して みたら 2.6 代だった。最近、といっても97年ぐらいからのフリ−ソフトは gcc 2.7 代 でないと、うまくコンパイルできない場合がある。 gcc を 2.7.2.3 にしたら、NTP のコ ンパイルはすんなり通りました。ラッキ−。Vサインです。 % gcc -v Reading specs from /usr/local/lib/gcc-lib/mips-sgi-irix5/2.6.3/specs gcc version 2.6.3 仕方ないので一応前にとってきておいた gcc 2.7.2.3 をインスト−ルし直すことにした。 上のようにやるのだが、どうも前にコンパイルを途中でやめたらしく、configure がちゃ んと通らない。いったん % make clean をしてきれいにしたら通った。 make は IRIX OS の /bin/make ではダメで、GNU の make を使う必要がある。 インスト−ルしていれば通 常 /usr/local/bin に入ってあるはずである。 上記では # cp xgcc /usr/local/bin/gcc とやって gcc をおいているが、 今回確認したら % make install ... でちゃんとおかれ ていた。一連の作業はだいたい30分から、旧式のマシンだと1時間程度かかる。 % gcc -v Reading specs from /usr/local/lib/gcc-lib/mips-sgi-irix5.3/2.7.2.3/specs gcc version 2.7.2.3 * おまけ 人の作ったプログラムをコンパイルするのはいいが、自分が開発するとなったらどうなる。 GNU のコンパイラを使って実際どうやってプログラム開発するのか。gcc のオプションと かどうやって付ければいいのか。案外分かりやすい情報は少ない。GNU のライセンスの解 釈の仕方もとても難しい、一応小生の理解するところを書いておく。 「Software Design」2001/02 *** これはいい特集をしてくれた *** > "特集2:UNIXプログラミングツ−ルをマスタ−せよ"、gcc, Imakefile, autoconf。 http://www.a2zsd.co.jp/~a2zsd217/book/autoconf/book1.html > 松原司牧氏 autoconf, automake の初心者向けの解説あり。 http://www.linux.or.jp/JM/INDEX/gnu.html > GNU Project で配布されているマニュアルの日本語訳。 http://www.gnu.org/japan/ > 日本語による GNU の情報サ−ビス。 [ GNU のライセンスとは ] gcc でつくったアプリは商用利用可能か?。どうですかね−。GNU というのは無償でソ− スを公開するというオ−プンソ−スが基本である。GNU のソ−スを一部でも使ったソフト は、全部のソ−スを公開することが求められる。gcc でコンパイルした商用ソフトという のは聞いたことがない。もっとも商用ソフトはバイナリになっているから分からないのだ が。適当なソフトを逆アセンブルでもして、調べてみるかな?。多分商用で売ることはで きない。GNU のライセンスは GPL と言って、かなり哲学的な内容になっている。 理解す るのはかなり骨が折れる話である。私もよく分かりません。GPL のバ−ジョンも幾つかあ るようだし。ライブラリを対象にした何とかライセンスもあるぞ。 分散オブジェクトの HORB の場合の話を。`02/03/10 にあった HORB シンポジウムで開発 に携わっている人が HORB のライセンスについて話ていた。 '99/02 にオ−プンソ−スラ イセンスにした、商用利用も可。ソ−スコ−ドを変更してそれをバイナリで配布する際に ライセンス料が必要と言っていた。ソ−スコ−ドを変更してもソ−ス込みならライセンス 料はいらないわけだ。つまりオ−プンソ−スというのは、皆でプログラムを活かして使っ ていきましょうという考え方である。ソ−スコ−ドを変更し、いろいろ便利な機能を入れ てバイナリで販売する、無償配布の場合でも同じことだと思うが、それがオ−プンでない ということになる。 (4) CERN httpd のインスト−ル ( Solaris 2.5.1 ) * ソ−スファイルを展開する # mkdir CERN # cp w3c-httpd-3.0A.tar CERN # cd CERN # tar xvf w3c-httpd-3.0A.tar # rm *.tar; ls -F All/ CERN Library/ README-SOCKS BUILD* COPYRIGH Makefile server_root/ BUILD.SH* Daemon/ README * コンパイル準備をする # ls /usr/local/bin << すでに gcc などを入れてある。 bison gcc zcat make patch ar コマンドがいる /usr/ccs/bin << コンパイルにはこれらのコマンドがいる。 make コマンドがいる /usr/local/bin << make は GNU の方が何かといい。 gcc コマンドがいる /usr/local/bin # setenv PATH /usr/local/bin:/usr/ccs/bin:/usr/sbin:/usr/bin # echo $PATH /usr/local/bin:/usr/ccs/bin:/usr/sbin:/usr/bin << PATH の順番も注意すること。 展開したディレクトリで ./BUILD とやると All/sun4-sol2/Makefile.include を読んで コンパイルを始める。このファイルで定義されている CC は gcc であり、 純正Cコンパ イラ cc を指定してもダメである。コンパイルに失敗する。コンパイルの際に必要なライ ブラリは 3.0A では、同時に Library/sun4-sol2/libwww.a としてできて、勝手にリンク するようになっている。 ./BUILD が順調に終了したら、Daemon/sun4-sol2/httpd_3.0A と CERN httpd の実行モジ ュ−ルできるので、/usr/local/bin にコピ−すればよい。 ./BUILD コマンドではインス ト−ルまではやらない。稼働設定は server_root/ 以下にコンフィグレ−ション・ファイ ルやアイコンがある。サ−バディレクトリとする場所にコピ−して、種々設定すればOK である。 * コンパイル&リンク # ./BUILD WWW build for machine type: sun4-sol2 ------ Building W3C Reference Library ------ Object files of libwww will go to directory Library/sun4-sol2 - creating | gcc -c -o ../../Library/sun4-sol2/HTParse.o -Wall -DSOLARIS -g -D__svr4__ .. | gcc -c -o ../../Library/sun4-sol2/HTErrorMsg.o -Wall -DSOLARIS -g -D__svr4__ .. ar r ../../Library/sun4-sol2/libwww.a .. httpd, htadm, htimage, cgiparse and cgiutils built successfully BUILD complete! WWW build for sun4-sol2 done. status = 0 # # cd Daemon; ls CVS Implementation sun4-sol2 # cd sun4-sol2; ls HTAAFile.o HTConfig.o HTRFC931.o HTWild.o htimage HTAAProt.o HTDaemonDIR.o HTRequest.o HTgc.o httpd HTAAServ.o HTGroup.o HTRetrieve.o HTims.o httpd_3.0A HTACL.o HTLex.o HTSInit.o Makefile HTAuth.o HTLoad.o HTSUtils.o cgiparse HTCache.o HTLog.o HTScript.o cgiutils HTCacheInfo.o HTPasswd.o HTUserInit.o htadm # ls -al httpd* lrwxrwxrwx 1 root other 10 .. httpd -> httpd_3.0A -rwxr-xr-x 1 root other 2119196 .. httpd_3.0A (5) Apollo でコンパイルしてみる * NCSA httpd をコンパイルする Apache うんぬん以前の話だが、 CERN httpd を Apollo SR10.4.0 でコンパイルしようと したができなかった。NCSA httpd ならどうかと思いやってみたところ何とか通った。 し かし時間関数がおかしいとワ−ニングが出た。実行モジュ−ルはできるので、デ−モンを 稼働してみるとどうも具合が悪い。 Apollo をシャットダウンする時にえらく時間がかか ったり、WWWブラウザからアクセスすると、だんだん時間が掛かるようになったりした。 そこでソ−スプログラムを少し修正してみた。make でも何のワ−ニングも出ず、 稼働も 安定するようになった。 < そのまま make した場合 > $ wd src $ /bin/make << Apollo の make コマンド。 | cc -c -g -DAPOLLO util.c (0043) *tz = (long *)_bky_timezone ; ******** Line 43 of "util.c": [Warning #078] Incompatible pointer and integer [tz, _bky_timezone] to the "=" operator. operands < プログラムの修正 > httpd.h -------------------------------------------------------------------------------- |/* |#if !defined(NEXT) && !defined(CONVEXOS) |#include |#define DIR_TYPE dirent |#else |#include |#define DIR_TYPE direct |#endif |*/ |#include << 上記を2行にした。 |#define DIR_TYPE direct | |/* char *rfc931(struct sockaddr_in *rmt_sin,struct sockaddr_in *our_sin); */ |char *rfc931(struct sockaddr *rmt_sin,struct sockaddr *our_sin); httpd.c -------------------------------------------------------------------------------- |/* if((setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one))) == -1) { */ | if((setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,(char*)&one,sizeof(one))) == -1){ | |/* setsockopt(csd,SOL_SOCKET,SO_LINGER,&sl,sizeof(sl)); */ | setsockopt(csd,SOL_SOCKET,SO_LINGER,(char*)&sl,sizeof(sl)); | |/* remote_logname = (!do_rfc931 ? NULL : rfc931((struct sockaddr *)&sa_client, | &sa_server)); |*/ | remote_logname = (!do_rfc931 ? NULL : rfc931((struct sockaddr *)&sa_client, | (struct sockaddr *)&sa_server)); util.c ------------------------------------------------------ |/* これが元々 | *tz = (long *)_bky_timezone ; *tz = -( *tz ) ; | if(t->tm_isdst) *tz += 3600; |#if defined(BSD) && !defined(AUX) && !defined(APOLLO) | *tz = t->tm_gmtoff; |#else | *tz = - timezone; | if(t->tm_isdst) *tz += 3600; |#endif */ | | *tz = 3600+540 ; << これだけにした。 | return t; |} < 参考プログラム > katou.c ------------------------------------------------ |#include |main() { | printf( "%s\n",_bky_timezone(-(60*9),0) ) ; |} $ /bin/cc -c katou.c $ /bin/cc -o katou katou.o;katou GMT+9:00 * sendmail-8.8.5 のコンパイル $ ls /usr/lib/*db* /usr/lib/libdbm.a << UNIX のデ−タベ−スを調べる。 $ cd sendmail-8.8.5/src $ cp Makefiles/Makefile.DomainOS . $ make -f Makefile.DomainOS << GNU の make を用いた。Makefile.DomainOS は 10.3.5 のだった。10.4.0 でもコンパイルできた。 Makefile.DomainOS ------------------------- | | |DBMDEF= -DNDBM << /usr/lib/libdbm.a しかない。 | | |#LIBS= -ldb |#LIBS= -lresolv << これがデフォルト。これだと ld warning:"resolv" |LIBS= -ldbm file not found .. とエラ−になる。 | | $ make -f Makefile.DomainOS << コンパイル。ワ−ニングは出るが cc -I. -A nansi -O -DNDBM -c alias.c 問題はない。最後のマニュアルを /usr/include/limits.h: 104: NZERO redefined 作るのはできないが、問題ない。 | $ make -f Makefile.DomainOS -n install << どうインスト−ルするか見るだけ。 install -o root -g kmem -m 6555 sendmail /usr/lib for i in /usr/ucb/newaliases /usr/ucb/mailq /usr/ucb/hoststat /usr/ucb/purgestat; do rm -f $i; ln -s /usr/lib/sendmail $i; done install -c -o root -g kmem -m 644 /dev/null \ /usr/lib/sendmail.st install -c -o root -g kmem -m 444 sendmail.hf /usr/lib 注.Apollo には kmem というグル−プはないので、ワ−ニングが出るが別に問題ない。 インスト−ル内容は分かっているので、手作業でやってもよい。その方が確実である。 $ ls -l /usr/lib/sendmail -rwsr-xr-x 1 root 162636 Apr 21 1992 /usr/lib/sendmail.org << 元の。 -r-sr-sr-x 1 root 361519 Mar 13 13:03 /usr/lib/sendmail << 新しいの。 newaliases と mailq コマンドは最初からあり、/usr/lib/sendmail にリンクされていた。 * nslookup コマンドのコンパイル Apollo DOMAIN のOSインスト−ルの時に、サンプルプログラムを入れるよう指示すると、 /domain_examples/tcp/nslookup/ にコマンドのソ−スプログラムが入る。makefile があ るので /bin/make とやると、lex commands.1 何たらかんたらでエラ−で止まってしまう。 $ /bin/cc -c commands.c とコンパイル、$ /bin/cc commands.o .. subr.o -o nslookup というように手作業でやれば実行モジュ−ルができる。 nslookup.help ファイルを /etc にコピ−しておけば、ヘルプが出るようになる。 * gzip と traceroute を入れる "University of Michigan Apollo Archive" の http://www.umich.edu/~archive/apollo/ にたくさんフリ−ソフトが入っている。gzip-1.2.4.tar.Z と traceroute.tar.gz を取っ てくる。結論、gzip はバイナリはそのまま使えた。traceroute にもバイナリが入ってい た、コマンドを打っても先に進まず使えない?と思ったが、1〜2分ぐらい時間がかかっ て出て来きた。traceroute のソ−スは SunOS 用で make やっても失敗した。makeかける と Apollo のカ−ネルのソ−ス・プログラムを変更しちゃうので、makeはしないこと。こ れやったのは2006年の4月、この時点でもちゃんと Apollo コンピュ−タのこうした サイトが残っているのは、ともかく驚きだった。 $ cd /usr/local/source/gzip $ uncompress gzip-1.2.4.tar.Z $ tar xvf gzip-1.2.4.tar << カレントディレクトリにソ−スとバイナリが展開される。 $ cp gunzip /usr/local/bin とりあえず gunzip と zcat を /usr/local/bin ディレ $ cp zcat /usr/local/bin クトリにコピ−しておく。 $ cd /usr/local/source/traceroute $ /usr/local/bin/gunzip traceroute.tar.gz $ /bin/tar xvf traceroute.tar $ /bin/ls -F Makefile ip_icmp.h traceroute* traceroute.c- traceroute.tar* README netinet/ traceroute.8 traceroute.hlp vj_traceroute/ ip_icmp.c raw_ip.c traceroute.c traceroute.o* $ cp traceroute /usr/local/bin << これが Apollo 用のバイナリ。 $ /bin/make ↓注意、このファイルが書き換えられる。 mv /usr/include/netinet/ip_icmp.h /usr/include/netinet/ip_icmp.h.old cp -p ./ip_icmp.h /usr/include/netinet cc -O -fsoft -DKERNEL -Dsun3 -I. -c ip_icmp.c -f option ignored on this processor ip_icmp.c: 16: Unable to find include file 'sys/systm.h'. ip_icmp.c: 17: Unable to find include file 'sys/mbuf.h'. ip_icmp.c: 18: Unable to find include file 'sys/protosw.h'. ip_icmp.c: 21: Unable to find include file 'sys/kernel.h'. ip_icmp.c: 30: Unable to find include file 'netinet/icmp_var.h'. ip_icmp.c: 31: Unable to find include file 'netinet/in_var.h'. ip_icmp.c: 435: warning- extra characters on #else. ip_icmp.c: 447: warning- extra characters on #endif. *** Exit 1 Stop. $ ld /usr/include/netinet/ -a { ここにリンク /bsd4.3/usr/include/netinet } sys type blocks current type uid used length attr rights name file unstruct 4 2911 P prwx- in.h file unstruct 4 942 P prwx- in_systm.h file unstruct 4 3372 P prwx- ip.h file unstruct 8 4099 P prwx- ip_icmp.h << 今回入った。 file unstruct 4 3427 P prwx- ip_icmp.h.old << 最初からの。 file unstruct 4 1383 P prwx- tcp.h file unstruct 4 474 P prwx- udp.h ------------------------------------------------------------------------------------ [ 付録 ] traceroute を Solaris 2.6 に入れる `24/08 * traceroute のバイナリを取って来た # pwd /usr/local/source # ftp sunsite.sut.ac.jp ftp> cd /pub/sun-info/solaris-binaries/sparc -r--r--r-- 1 other 16606 Mar 26 2000 traceroute.1.4a5.SPARC.32bit.Solaris.7.pkg.tgz -r--r--r-- 1 other 16579 Jan 27 2002 traceroute.1.4a5.SPARC.32bit.Solaris.8.pkg.tgz -r--r--r-- 1 other 16259 Mar 26 2000 traceroute.1.4a5.SPARC.Solaris.2.3.pkg.tgz -r--r--r-- 1 other 16251 Mar 26 2000 traceroute.1.4a5.SPARC.Solaris.2.4.pkg.tgz -r--r--r-- 1 other 16172 Mar 26 2000 traceroute.1.4a5.SPARC.Solaris.2.5.1.pkg.tgz -r--r--r-- 1 other 16190 Mar 26 2000 traceroute.1.4a5.SPARC.Solaris.2.5.pkg.tgz -r--r--r-- 1 other 16544 Mar 26 2000 traceroute.1.4a5.SPARC.Solaris.2.6.pkg.tgz -r--r--r-- 1 other 12581 Dec 29 2002 traceroute.3.5.SPARC.64bit.Solaris.7.pkg.tgz ftp> get traceroute.1.4a5.SPARC.Solaris.2.6.pkg.tgz # /bin/csh # setenv PATH /usr/local/bin:/usr/ccs/bin:$PATH # zcat traceroute.1.4a5.SPARC.Solaris.2.6.pkg.tgz | tar xvf - x troute, 0 bytes, 0 tape blocks x troute/pkgmap, 349 bytes, 1 tape blocks x troute/pkginfo, 271 bytes, 1 tape blocks x troute/root, 0 bytes, 0 tape blocks x troute/root/usr, 0 bytes, 0 tape blocks x troute/root/usr/local, 0 bytes, 0 tape blocks x troute/root/usr/local/bin, 0 bytes, 0 tape blocks x troute/root/usr/local/bin/traceroute, 25172 bytes, 50 tape blocks x troute/root/usr/local/man, 0 bytes, 0 tape blocks x troute/root/usr/local/man/man8, 0 bytes, 0 tape blocks x troute/root/usr/local/man/man8/traceroute.8, 11503 bytes, 23 tape blocks x troute/install, 0 bytes, 0 tape blocks x troute/install/checkinstall, 496 bytes, 1 tape blocks # pkgadd -d . troute 中のパッケージインスタンス を処理しています。 traceroute 1.4a5 SPARC Solaris 2.6 (sparc) 1.4a5 Lawrence Berkeley National Laboratory Network Research Group ## checkinstall スクリプトを実行しています。 ## パッケージ情報を処理しています。 ## システム情報を処理しています。 2 個のパッケージパス名がすでに正しくインストールされています。 ## ディスク領域を確認しています。 ## すでにインストールされているパッケージとの衝突がないか調べています。 The following files are already installed on the system and are being used by another package: * /usr/local/man/man8 * - conflict with a file which does not belong to any package. Do you want to install these conflicting files [y,n,?,q] y ## setuid/setgid を行うプログラムを検査しています。 The following files are being installed with setuid and/or setgid permissions: /usr/local/bin/traceroute Do you want to install these as setuid/setgid files [y,n,?,q] y traceroute 1.4a5 SPARC Solaris 2.6 を としてインストールしています。 ## 第 1 部 (全 1 部) をインストールしています。 /usr/local/bin/traceroute /usr/local/man/man8/traceroute.8 [ クラス を確認しています。] Installation of was successful. 何かおかしい、トロイの木場でも入れられたか?。 # ./traceroute 192.168.1.100 ↓ traceroute: Warning: ckecksums disabled traceroute to 192.168.1.100 (192.168.1.100), 30 hops max, 40 byte packets * traceroute のソ−スからコンパイルした # ftp ftp.ee.lbl.gov ftp> ls tr* traceroute-1.4a12.tar.gz traceroute.tar.gz ftp> get traceroute.tar.gz 150 Opening ASCII mode data connection for traceroute.tar.gz (74917 bytes) # zcat traceroute.tar.gz | tar xvf - # cd traceroute-1.4a12 # ./configure creating cache ./config.cache checking host system type... sparc-sun-solaris2.6 checking target system type... sparc-sun-solaris2.6 checking build system type... sparc-sun-solaris2.6 checking for gcc... gcc # make # ./traceroute Version 1.4a12 Usage: traceroute [-dFInrvx] [-g gateway] [-i iface] [-f first_ttl] [-m max_ttl] [ -p port] [-q nqueries] [-s src_addr] [-t tos] [-w waittime] [-z pausemsecs] host [packetlen] # ./traceroute 192.168.1.100 Bus Error - core dumped << 実行できない、おかしい。