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/gzip /usr/local/bin/zdiff /usr/local/bin/zforce /usr/local/bin/zgrep /usr/local/bin/zmore /usr/local/bin/znew /usr/local/info/gzip.info /usr/local/man/man1/gzexe.1 /usr/local/man/man1/gzip.1 /usr/local/man/man1/zdiff.1 /usr/local/man/man1/zforce.1 /usr/local/man/man1/zgrep.1 /usr/local/man/man1/zmore.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) 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 << 実行できない、おかしい。 (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 * patch のコンパイル $ wd /usr/local/source/patch;ld COPYING ChangeLog EXTERN.h INSTALL INTERN.h Makefile Makefile.bak Makefile.in NEWS README alloca.c backupfile.c backupfile.h common.h config.h config.h.in config.status configure configure.in getopt.c getopt.h getopt1.c inp.c inp.h patch.c patch.man patchlevel.h pch.c pch.h rename.c util.c util.h version.c version.h Makefile 修正 ---------------------------------------------------------- |# Generated automatically from Makefile.in by configure. |# Makefile for GNU patch. | |#### Start of system configuration section. #### |srcdir = . |VPATH = . |CC = cc |INSTALL = /usr/bin/install -c |INSTALL_PROGRAM = $(INSTALL) |INSTALL_DATA = $(INSTALL) -m 644 |LIBS = |CFLAGS = -g |LDFLAGS = -g |prefix = /usr/local |exec_prefix = $(prefix) |bindir = $(exec_prefix)/bin |# Where to put the manual pages. |mandir = $(prefix)/man/man1 |# Extension (not including `.') for the manual page filenames. |manext = 1 |#### End of system configuration section. #### | |SHELL = /bin/sh | | |.c.o: |# $(CC) -c -DHAVE_CONFIG_H -I. $(CPPFLAGS) $(CFLAGS) $< | $(CC) -c -DHAVE_CONFIG_H -I/sys5.3/usr/include $< 注.修正箇所。 | | /sys5.3/usr/include の dirent.h を使う。bsd4.3 には入っていない。 $ /usr/local/bin/gmake << gmkae は GNU の make。 cc -c -DHAVE_CONFIG_H -I/sys5.3/usr/include backupfile.c | cc -g backupfile.o getopt.o getopt1.o inp.o patch.o pch.o util.o version.o -o patch $ make install /usr/bin/install -c patch /usr/local/bin/patch /usr/bin/install -c -m 644 ./patch.man /usr/local/man/man1/patch.1