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