O. 前提
I. libresolv の入れ換え
[ 以下は、 SunOS4.1.4+JLE1.1.4 のシステムで、 /usr/lib/shlib.etc.jle に JLE版 の shared library のソースが /usr/lib/shlib.etc に 非JLE版 の shared library のソースが あることが前提となっています。 JLE版 の shared library は、 SunOS4.1.4+JLE1.1.4 では、 OS の CD-ROM のパッチに含まれているのでそれを展開してください。 SunOS4.1.4+JLE1.1.4 以外の SunOS4.1.X+JLE1.1.X システムの場合には、 ベンダーにお問い合わせください。 ] [ JLE なしのシステムの場合は、 HowToInstall.bind-4.9.3-P1-plus-nonJLE を参照してください。 [ SunOS4.1.4+JLE1.1.4 以外の SunOS4.1.X+JLE1.1.X システムの場合には、 基本的には、ライブラリの版番号が変わるだけだと思います。 ] [ なお、シェアードライブラリ版では、 _res が、なぜか、 _res_shlib という名前になっています。 _res を直接操作するプログラム wwfs などをコンパイルするときには、 -D_res=_res_shlib などを指定するなどして、対処してください。 ]
# mkdir -p /usr/local/src # cd /usr/local/src [ bind-4.9.3-P1.tar.Z bind-4.9.3-P1.SunOS4.shpat を # ftp ftp.tohoku.ac.jp ftp> bin ftp> cd /pub/net/bind/ ftp> get bind-4.9.3-P1.tar.Z ftp> get bind-4.9.3-P1.SunOS4.shpat 以上の手順で入手する。 ] # mkdir bind-4.9.3-P1 # chmod 775 bind-4.9.3-P1 # cd bind-4.9.3-P1 # zcat ../bind-4.9.3-P1.tar.Z | tar xvf - # sh ../bind-4.9.3-P1.SunOS4.shpat
# cd /usr/local/src/bind-4.9.3-P1 # more INSTALL # more README # more OPTIONS # make DST=sun4.dir links # cd sun4.dir # cd conf # mv options.h options.h,orig # cp options.h,orig options.h # chmod 644 options.h # vi options.h [ ふつうは変更の必要はない。 ] # cd .. # mv Makefile Makefile,orig # sed < Makefile,orig > Makefile \ -e '/^# *(sunos4.x)/,/^# (for details on shared library /s/^#\([^( ]\)/\1/' # chmod 644 Makefile # vi Makefile [ sunos4.x と指定してある場所が有効になっているのを確認する。 ] # cd man # mv Makefile Makefile,orig # sed < Makefile,orig > Makefile \ -e '/^# *(sunos4.x)/,/^$/s/^#\([^( ]\)/\1/' # chmod 644 Makefile # vi Makefile [ sunos4.x と指定してある場所が有効になっているのを確認する。 ] # cd ..
# make >&Make.log & # tail -f Make.log # rm -f /tmp/bind-4.9.3-P1-backup.sh # cat > /tmp/bind-4.9.3-P1-backup.sh <<"EOF" backup() { orig=$1; bkup=$2 if test -f $bkup; then /bin/rm -f $orig; else /bin/mv -f $orig $bkup; fi } backup /usr/lib/libresolv.a /usr/lib/libresolv_orig.a backup /usr/include/arpa/inet.h /usr/include/arpa/inet_orig.h backup /usr/include/arpa/nameser.h /usr/include/arpa/nameser_orig.h backup /usr/include/netdb.h /usr/include/netdb_orig.h backup /usr/include/resolv.h /usr/include/resolv_orig.h backup /usr/etc/in.named /usr/etc/in.named_orig backup /usr/etc/in.named-xfer /usr/etc/in.named-xfer_orig backup /usr/etc/nslookup /usr/etc/nslookup_orig backup /usr/share/man/man8/in.named.8c \ /usr/share/man/man8/in.named_orig.8c backup /usr/share/man/man8/nslookup.8c \ /usr/share/man/man8/nslookup_orig.8c backup /usr/share/man/man3/gethostbyname.3n \ /usr/share/man/man3/gethostbyname_orig.3n backup /usr/share/man/man3/resolver.3 \ /usr/share/man/man3/resolver_orig.3 backup /usr/share/man/man3/getnetent.3n \ /usr/share/man/man3/getnetent_orig.3n "EOF" # sh /tmp/bind-4.9.3-P1-backup.sh # make install >&Install.log & # tail -f Install.log
# ps ax | grep in.named # kill -KILL < in.namedのPID > # cd / # /usr/etc/in.named # /usr/bin/nslookup [ 127.0.0.1 や tohoku.ac.jp. などを調べてみる。 ]
# cd /usr/local/src/bind-4.9.3-P1/sun4.dir # make clean # cd /usr/local/src # rm -f bind-4.9.3-P1.tar.Z \ bind-4.9.3-P1.SunOS4.shpat
# cd /usr/local/src [ bind-4.9.3-P1-plus.SunOS4.shpat を # ftp ftp.tohoku.ac.jp ftp> bin ftp> cd /pub/net/bind/ ftp> get bind-4.9.3-P1-plus.SunOS4.shpat 以上の手順で入手する。 ] # cd bind-4.9.3-P1 # make DST=sun4-plus.dir links # cd sun4-plus.dir # sh ../../bind-4.9.3-P1-plus.SunOS4.shpat
# cd /usr/local/src/bind-4.9.3-P1/sun4-plus.dir # more ../INSTALL # more ../README # more ../OPTIONS # cd conf # mv options.h options.h,orig # cp options.h,orig options.h # chmod 644 options.h # vi options.h [ ふつうは変更の必要はない。 ] # cd .. # mv Makefile Makefile,orig # sed < Makefile,orig > Makefile \ -e '/^# *(sunos4.x)/,/^$/{' \ -e '/^# *(sunos4.x)/,/^# (for details on shared library /s/^#\([^( ]\)/\1/' \ -e '/^#SHRES = /s/#//' \ -e '/^# -- if you use Sun'\''s cc$/,/^$/s/^#\([^( ]\)/\1/' \ -e '}' # chmod 644 Makefile # vi Makefile [ sunos4.x と指定してある場所が有効になっているのを確認する。 ] # cd man # mv Makefile Makefile,orig # sed < Makefile,orig > Makefile \ -e '/^# *(sunos4.x)/,/^$/s/^#\([^( ]\)/\1/' # chmod 644 Makefile # vi Makefile [ sunos4.x と指定してある場所が有効になっているのを確認する。 ] # cd ..
# make > &Make.log & # tail -f Make.log # ln -s `pwd` /usr/lib/shlib.etc.jle/BIND # ln -s `pwd` /usr/lib/shlib.etc/BIND
# cd /usr/lib/shlib.etc.jle # mv awkfile awkfile,orig # sed < awkfile,orig > awkfile \ -e '8s?^.{?NF >=4 \&\& $3 >= 100 \&\& $5 ~ /^[0-9]+$/ {?' # chown root.staff awkfile # chmod 644 awkfile # mv Makefile Makefile,orig # sed < Makefile,orig > Makefile \ -e '/^OBJSORT=/s?objsort?./&?' \ -e '/^.ld -assert pure-text /s/$/ -ldl/' # chown root.staff Makefile # chmod 644 Makefile # cd /usr/lib/shlib.etc # mv awkfile awkfile,orig # sed < awkfile,orig > awkfile \ -e '8s?^.{?NF >=4 \&\& $3 < 100 \&\& $5 ~ /^[0-9]+$/ {?' # chown root.staff awkfile # chmod 644 awkfile # mv Makefile Makefile,orig # sed < Makefile,orig > Makefile \ -e '/^OBJSORT=/s?objsort?./&?' \ -e '/^.ld -assert pure-text /s/$/ -ldl/' # chown root.staff Makefile # chmod 644 Makefile
# mv /usr/lib/libc.a /usr/lib/libc_orig.a # mv /usr/5lib/libc.a /usr/5lib/libc_orig.a
# cd /usr/lib/shlib.etc.jle # mkdir libc_plus # cd libc_plus # ar x /usr/lib/libc_orig.a # rm __.SYMDEF # mv rpc_dtablesize. rpc_dtablesize.o # mv rpc_commondata. rpc_commondata.o # mv euc_gen_globals euc_gen_globals.o # mkdir BIND # cd BIND # ar x ../../BIND/res/libresolv_plus.a ar: ../../BIND/res/libresolv_plus.a does not exist 注)ar x ../../BIND/res/libresolv.a が正解ではないだろうか? ../../BIND/res/にはlibresolv.aしかなかった # rm __.SYMDEF # rm -f /tmp/dummy_funcs.list # nm *.o | \ sed -n -e '/_unneeded__/s/^.* ___\([a-z][a-z]*\)_unneeded__$/\1.o/p' \ -e '/___bindcompat_/s/^.* ___bindcompat_\([a-z][a-z]*\)$/\1.o/p' \ >/tmp/dummy_funcs.list # sh -c 'for f in `cat /tmp/dummy_funcs.list`; do mv $f $f-; done' # cd .. # mv -f BIND/*.o BIND/*.o- . # rmdir BIND # ar cru ../libc.a *.o 実行結果 ar: filename euc_gen_globals.o truncated to euc_gen_globals ar: filename rpc_commondata.o truncated to rpc_commondata. ar: filename rpc_dtablesize.o truncated to rpc_dtablesize. # ranlib ../libc.a # cd /usr/lib/shlib.etc.jle # mkdir libcs5_plus # cd libcs5_plus # ar x /usr/5lib/libc_orig.a # rm __.SYMDEF # mv rpc_dtablesize. rpc_dtablesize.o # mv rpc_commondata. rpc_commondata.o # mv euc_gen_globals euc_gen_globals.o # mkdir BIND # cd BIND # ar x ../../BIND/res/libresolv_plus.a ar: ../../BIND/res/libresolv_plus.a does not exist 注)ar x ../../BIND/res/libresolv.a が正解ではないだろうか? ../../BIND/res/にはlibresolv.aしかなかった # rm __.SYMDEF # rm -f /tmp/dummy_funcs.list # nm *.o | \ sed -n -e '/_unneeded__/s/^.* ___\([a-z][a-z]*\)_unneeded__$/\1.o/p' \ -e '/___bindcompat_/s/^.* ___bindcompat_\([a-z][a-z]*\)$/\1.o/p' \ >/tmp/dummy_funcs.list # sh -c 'for f in `cat /tmp/dummy_funcs.list`; do mv $f $f-; done' # cd .. # mv -f BIND/*.o BIND/*.o- . # rmdir BIND # ar cru ../libcs5.a *.o 実行結果 ar: filename euc_gen_globals.o truncated to euc_gen_globals ar: filename rpc_commondata.o truncated to rpc_commondata. ar: filename rpc_dtablesize.o truncated to rpc_dtablesize. # ranlib ../libcs5.a
# cd /usr/lib/shlib.etc.jle # install -c -m 0444 -o root -g staff libc.a /usr/lib/libc.a # install -c -m 0444 -o root -g staff libcs5.a /usr/5lib/libc.a # ranlib -t /usr/lib/libc.a # ranlib -t /usr/5lib/libc.a
# cd /usr/lib/shlib.etc.jle # rm -rf tmp # cd /usr/lib/shlib.etc.jle # mkdir tmp # cd tmp # ar x ../libc_pic.a # rm __.SYMDEF # mv rpc_dtablesize. rpc_dtablesize.o # mv rpc_commondata. rpc_commondata.o # mv euc_gen_globals euc_gen_globals.o # mkdir BIND # cd BIND # ar x ../../BIND/shres/sunos/libresolv_plus_pic.a ar: ../../BIND/shres/sunos/libresolv_plus_pic.a does not exist 注)ar x ../../BIND/shres/sunos/libresolv_pic.a が正解ではないだろうか? ../../BIND/shres/sunos/にはlibresolv._pic.aしかなかった # rm __.SYMDEF # rm -f /tmp/dummy_funcs.list # nm *.o | \ sed -n -e '/_unneeded__/s/^.* ___\([a-z][a-z]*\)_unneeded__$/\1.o/p' \ -e '/___bindcompat_/s/^.* ___bindcompat_\([a-z][a-z]*\)$/\1.o/p' \ >/tmp/dummy_funcs.list # sh -c 'for f in `cat /tmp/dummy_funcs.list`; do mv $f $f-; done' # cd .. # mv -f BIND/*.o BIND/*.o- . # rmdir BIND # rm gethostent.o # cd .. # make libc.so 実行結果 ld -assert pure-text `././objsort lorder-sparc tmp` -ldl -ldl /bin/ls /usr/lib/libc.so.* > TMP_FILE mv a.out libc.so.`cat TMP_FILE | awk -f awkfile` echo libc.so.`cat TMP_FILE | awk -f awkfile` built. libc.so.101.9.1 built. # mv tmp libc_plus.so # cd /usr/lib/shlib.etc.jle # mkdir tmp # cd tmp # ar x ../libcs5_pic.a # rm __.SYMDEF # mv rpc_dtablesize. rpc_dtablesize.o # mv rpc_commondata. rpc_commondata.o # mv euc_gen_globals euc_gen_globals.o # mkdir BIND # cd BIND # ar x ../../BIND/shres/sunos/libresolv_plus_pic.a ar: ../../BIND/shres/sunos/libresolv_plus_pic.a does not exist 注)ar x ../../BIND/shres/sunos/libresolv_pic.a が正解ではないだろうか? ../../BIND/shres/sunos/にはlibresolv._pic.aしかなかった # rm __.SYMDEF # rm -f /tmp/dummy_funcs.list # nm *.o | \ sed -n -e '/_unneeded__/s/^.* ___\([a-z][a-z]*\)_unneeded__$/\1.o/p' \ -e '/___bindcompat_/s/^.* ___bindcompat_\([a-z][a-z]*\)$/\1.o/p' \ >/tmp/dummy_funcs.list # sh -c 'for f in `cat /tmp/dummy_funcs.list`; do mv $f $f-; done' # cd .. # mv -f BIND/*.o BIND/*.o- . # rmdir BIND # rm gethostent.o # cd .. # make libcs5.so 実行結果 ld -assert pure-text `././objsort lorder-sparc tmp` -ldl -ldl /bin/ls /usr/5lib/libc.so.* > TMP_FILE mv a.out libc.so.`cat TMP_FILE | awk -f awkfile` echo libc.so.`cat TMP_FILE | awk -f awkfile` built. libc.so.102.9.1 built. # mv tmp libcs5_plus.so
# cd /usr/lib/shlib.etc # rm -rf tmp # cd /usr/lib/shlib.etc # mkdir tmp # cd tmp # ar x ../libc_pic.a # rm __.SYMDEF # mv rpc_dtablesize. rpc_dtablesize.o # mv rpc_commondata. rpc_commondata.o # mv xccs.multibyte. xccs.multibyte.o # mkdir BIND # cd BIND # ar x ../../BIND/shres/sunos/libresolv_plus_pic.a ar: ../../BIND/shres/sunos/libresolv_plus_pic.a does not exist 注)ar x ../../BIND/shres/sunos/libresolv_pic.a が正解ではないだろうか? ../../BIND/shres/sunos/にはlibresolv._pic.aしかなかった # rm __.SYMDEF # rm -f /tmp/dummy_funcs.list # nm *.o | \ sed -n -e '/_unneeded__/s/^.* ___\([a-z][a-z]*\)_unneeded__$/\1.o/p' \ -e '/___bindcompat_/s/^.* ___bindcompat_\([a-z][a-z]*\)$/\1.o/p' \ >/tmp/dummy_funcs.list # sh -c 'for f in `cat /tmp/dummy_funcs.list`; do mv $f $f-; done' # cd .. # mv -f BIND/*.o BIND/*.o- . # rmdir BIND # rm gethostent.o # cd .. # make libc.so ここでエラーが起こるので実行してはいけない 実行すると ld -assert pure-text `./objsort lorder-sparc tmp` -ldl /bin/ls /usr/compat/lib/libc.so.* > TMP_FILE /usr/compat/lib/libc.so.* not found mv a.out libc.so.`cat TMP_FILE | awk -f awkfile` echo libc.so.`cat TMP_FILE | awk -f awkfile` built. libc.so.0.0.1 built. 対処方法 # cd /usr/compat/lib/ # ln -s /usr/lib/libc.sa.1.9 # ln -s /usr/lib/libc.so.1.9 # cd /usr/lib/shlib.etc # mv awkfile awkfile.bug # mv awkfile,orig awkfile # make libc.so # mv tmp libc_plus.so # cd /usr/lib/shlib.etc # mkdir tmp # cd tmp # ar x ../libcs5_pic.a # rm __.SYMDEF # mv rpc_dtablesize. rpc_dtablesize.o # mv rpc_commondata. rpc_commondata.o # mv xccs.multibyte. xccs.multibyte.o # mkdir BIND # cd BIND # ar x ../../BIND/shres/sunos/libresolv_plus_pic.a ar: ../../BIND/shres/sunos/libresolv_plus_pic.a does not exist 注)ar x ../../BIND/shres/sunos/libresolv_pic.a が正解ではないだろうか? ../../BIND/shres/sunos/にはlibresolv._pic.aしかなかった # rm __.SYMDEF # rm -f /tmp/dummy_funcs.list # nm *.o | \ sed -n -e '/_unneeded__/s/^.* ___\([a-z][a-z]*\)_unneeded__$/\1.o/p' \ -e '/___bindcompat_/s/^.* ___bindcompat_\([a-z][a-z]*\)$/\1.o/p' \ >/tmp/dummy_funcs.list # sh -c 'for f in `cat /tmp/dummy_funcs.list`; do mv $f $f-; done' # cd .. # mv -f BIND/*.o BIND/*.o- . # rmdir BIND # rm gethostent.o # cd .. # make libcs5.so ここでエラーが起こるので実行してはいけない 実行すると ld -assert pure-text `./objsort lorder-sparc tmp` -ldl /bin/ls /usr/compat/5lib/libc.so.* > TMP_FILE /usr/compat/5lib/libc.so.* not found mv a.out libc.so.`cat TMP_FILE | awk -f awkfile` echo libc.so.`cat TMP_FILE | awk -f awkfile` built. libc.so.0.0.1 built. 対処方法 # cd /usr/compat/5lib/ # ln -s /usr/5lib/libc.sa.2.9 # ln -s /usr/5lib/libc.so.2.9 # cd /usr/lib/shlib.etc # make libcs5.so # mv tmp libcs5_plus.so
# setenv LD_LIBRARY_PATH /usr/lib/shlib.etc.jle:/usr/lib/shlib.etc # ldd /usr/bin/date 実行結果 -lc.101 => /usr/lib/shlib.etc.jle/libc.so.101.9.1 -ldl.1 => /usr/lib/libdl.so.1.0 # trace /usr/bin/date # ldd /usr/ucb/finger 実行結果 -lc.1 => /usr/lib/shlib.etc/libc.so.1.9.1 -ldl.1 => /usr/lib/libdl.so.1.0 # trace /usr/ucb/finger # unsetenv LD_LIBRARY_PATH
# set x=1 # cd /usr/lib/shlib.etc.jle # install -c -m 0755 -o root -g staff libc.so.101.9.$x /usr/lib/libc.so1019$x # install -c -m 0644 -o root -g staff /usr/lib/libc.sa.101.9 \ /usr/lib/libc.sa1019$x # install -c -m 0755 -o root -g staff libc.so.102.9.$x /usr/5lib/libc.so1029$x ここで /usr: write failed, file system is full が出てしまった。 # df /usr Filesystem kbytes used avail capacity Mounted on /dev/sd0g 81295 80747 0 110% /usr /usr/ucbを /homeに移し空きスペースを作ってから再度実行した # install -c -m 0644 -o root -g staff /usr/5lib/libc.sa.102.9 \ /usr/5lib/libc.sa1029$x # cd /usr/lib/shlib.etc # install -c -m 0755 -o root -g staff libc.so.1.9.$x /usr/lib/libc.so19$x # install -c -m 0644 -o root -g staff /usr/lib/libc.sa.1.9 \ /usr/lib/libc.sa19$x # install -c -m 0755 -o root -g staff libc.so.2.9.$x /usr/5lib/libc.so29$x # install -c -m 0644 -o root -g staff /usr/5lib/libc.sa.2.9 \ /usr/5lib/libc.sa29$x # mv /usr/lib/libc.so1019$x /usr/lib/libc.so.101.9.$x # mv /usr/lib/libc.sa1019$x /usr/lib/libc.sa.101.9.$x # mv /usr/5lib/libc.so1029$x /usr/5lib/libc.so.102.9.$x # mv /usr/5lib/libc.sa1029$x /usr/5lib/libc.sa.102.9.$x # mv /usr/lib/libc.so19$x /usr/lib/libc.so.1.9.$x # mv /usr/lib/libc.sa19$x /usr/lib/libc.sa.1.9.$x # mv /usr/5lib/libc.so29$x /usr/5lib/libc.so.2.9.$x # mv /usr/5lib/libc.sa29$x /usr/5lib/libc.sa.2.9.$x # ranlib -t /usr/lib/libc* # ranlib -t /usr/5lib/libc* [ not an archive: … といったエラーメッセージが、 すべての libc.so* ファイルに対して出力されるが、無視する。 ]s # ln -s /usr/lib/libc.s?.1.9.$x /usr/compat/lib/. # ln -s /usr/5lib/libc.s?.2.9.$x /usr/compat/5lib/. # unset x
# cd /usr/lib/shlib.etc.jle # rm -f TMP_FILE libc.so.* # rm -rf libc_plus.so libcs5_plus.so # cd /usr/lib/shlib.etc # rm -f TMP_FILE libc.so.* # rm -rf libc_plus.so libcs5_plus.so
# cd /usr/local/src/bind-4.9.3-P1/sun4-plus.dir # make clean # rm -f /usr/lib/shlib.etc.jle/BIND /usr/lib/shlib.etc/BIND # cd /usr/local/src # rm -f bind-4.9.3-P1-plus.SunOS4.shpat
# cat >/etc/host.conf <<EOF order nis,bind,hosts multi on reorder off ;trim your.domain.name EOF