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
Total Access Count