[bind-4.9.3-P1-plus-nonJLE][戻る]

bind-4.9.3-P1-plus-JLE のインストール

by miyu "miyu@akiu.gw.tohoku.ac.jp"

O. 前提
I. libresolv の入れ換え

II. libc の入れ換え
O. 前提
[ 以下は、
  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 などを指定するなどして、対処してください。 ]
I. libresolv の入れ換え
0. ソースの展開
# 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
1. コンフィギュレーション
# 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 ..
2. コンパイルとインストール
# 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
3. テスト
# 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. などを調べてみる。 ]
4. 不要なファイルの消去
# 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
II. libc の入れ換え
0. ソースの展開
# 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
1. コンフィギュレーション
# 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 ..
2. コンパイルとインストール
# make > &Make.log &
# tail -f Make.log
# ln -s `pwd` /usr/lib/shlib.etc.jle/BIND
# ln -s `pwd` /usr/lib/shlib.etc/BIND
3. shlib.etc.jle および shlib.etc にパッチをあてる
# 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
4. 静的ライブラリの入れ換え
4.0 オリジナルのバックアップ
# mv /usr/lib/libc.a /usr/lib/libc_orig.a
# mv /usr/5lib/libc.a /usr/5lib/libc_orig.a
4.1 静的ライブラリの作成
# 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
4.2 静的ライブラリのインストール
# 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
4.3 作業ファイルの消去
# cd /usr/lib/shlib.etc.jle # rm -f libc.a libcs5.a # rm -rf libc_plus libcs5_plus
5. 動的ライブラリの入れ換え
5.1 動的ライブラリの作成 -- JLE版
# 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
5.2 動的ライブラリの作成 -- 非JLE版
# 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
5.3 動的ライブラリのテスト
# 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
5.4 動的ライブラリのインストール
# 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
5.5 作業ファイルの消去
# 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
6. 不要なファイルの消去
# 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
7. host.conf の作成
# cat >/etc/host.conf <<EOF
order nis,bind,hosts
multi on
reorder off
;trim your.domain.name
EOF