dpkeyserv と libc6 のマッチングの問題 (2005/09/09)
debian package の libc6 のバージョンが 2.3.2.ds1 から 2.3.5 に upgrade されたときに,Wnn7 のライセンスサーバ dpkeyserv が動作しなくなりました.実際には,2.3.5 に upgrade された後にそのままにしておけば動作しますが,dpkeyserv を再起動させようとすると,Segmentation fault で落ちます.libc6 の 2.2.5 から 2.3.1 に upgrade された際にも同様なトラブルが生じたようですので,ネット検索すればいくつかの問題解決の仕方の目処はたちます.研究室のサーバでは,chroot での解決を選びました.
dpkeyserv は静的リンクバイナリですが,strace で追うと/lib/ld-linux.so.2 を読み込みます.その後,SIGSEGV で落ちます.
chroot を使って解決しました.dpkey7 のルートを作成します.そこに,以前の debian package である libc6_2.3.2.ds1-22_i386.deb を展開します.また,必要となるファイルをコピーしてきます.
# mkdir /var/dpkey7root # dpkg -x libc6_2.3.2.ds1-22_i386.deb /var/dpkey7root # cd /var/dpkey7root # cp /usr/sbin/dpkeyserv usr/sbin/. # mkdir -p etc/dpkey # cp /etc/{hosts,nsswitch.conf,protocols,services,resolv.conf} etc/. # cp /etc/dpkey/dpkeylist etc/dpkey/.
ここで,/var/dpkey7root をルートとして /usr/sbin/dpkeyserv を動作させます.具体的には,次のコマンドを実行します.
# chroot /var/dpkey7root /usr/sbin/dpkeyserv
dpkeyserv が動作し,Wnn7 が利用できました.そして,マシン再起動時にも自動的に dpkeyserv が起動するように,/etc/init.d/dpkey7 を修正します.次を追加します.
DPKEY_ROOT=/var/dpkey7root CMD_NAME=dpkeyserv
daemon start のため,次の行を変更します.start と restart の部分にそれぞれありますので,注意して下さい.オプションの --chroot に示されるディレクトリが --exec で指定された daemon のルートになります.
#start-stop-daemon --start --quiet --exec $DAEMON > /dev/null 2> /dev/null start-stop-daemon --start --quiet --chroot $DPKEY_ROOT --exec $DAEMON
daemon stop のため,次の行を変更します.stop と restart の部分にそれぞれありますので,注意して下さい.
#start-stop-daemon --stop -o --quiet --exec $DAEMON > /dev/null start-stop-daemon --stop --oknodo --quiet --name $CMD_NAME
以上の修正の後,dpkeyserv を再起動します.
# /etc/init.d/dpkey7 restart
これで,マシン再起動時に自動的に dpkeyserv が立ち上がるはずです.
梅原 大祐 / UMEHARA Daisuke umehara@kit.ac.jp Last modified: 2020/05/01 15:37