gate install 中に発生した問題集

このページは,2013 年度gate をinstall していた時に出てきたエラーなどである.
体裁を直すつもりはない!

問題

http://sango.ep.sci.hokudai.ac.jp/cgi-bin/gate-user-apply.cgi において,ユーザ登録申請テストを行ってみた時に出たエラーについて記す.
----- 1 -----
defined(%hash) is deprecated at /usr/lib/perl5/jcode.pl line 684.
(Maybe you should just omit the defined()?)
defined(%hash) is deprecated at /usr/lib/perl5/jcode.pl line 693.
(Maybe you should just omit the defined()?)

----- 2 -----
Legacy library open3.pl will be removed from the Perl core distribution in the next major release. Please install the separate libperl4-corelibs-perl package. It is being used at /usr/local/bin/gate-user-apply, line 16.

----- 3 -----
Warining : locked by another /usr/local/bin/gate-user-apply.
   I will sleep 2 seconds (or longer).
lock made by 2992, at 2013-09-26T07:20:42+0000

----- 4 -----
cannot opendir /home/gate/userdb/stable at /usr/local/lib/gate/gate-common.pl line 541, <STDIN> line 13.
cannot opendir /home/gate/userdb/defunct at /usr/local/lib/gate/gate-common.pl line 541, <STDIN> line 13.
cannot opendir /home/gate/userdb/pending at /usr/local/lib/gate/gate-common.pl line 541, <STDIN> line 13.
cannot open /home/gate/userdb/pending/testing

----- 1 -----

http://tottoco.tsuyushiba.com/Entry/20/ によると,以下のように書き直すことでエラーは出なくなる.
# emacs /usr/lib/perl5/jcode.pl
------

&init_z2h_euc unless defined %z2h_euc;  (684行目)
↓
&init_z2h_euc unless defined $z2h_euc_inited;


&init_z2h_sjis unless %z2h_sjis;  (693行目)
↓
&init_z2h_sjis unless defined $z2h_sjis_inited;

----- 2 -----

簡潔に言うと,
open3.pl が次のupdate で消えるから,libperl4-corelibs-perl を入れてね.
ということなので,libperl4-corelibs-perl をインストールする.
# aptitude update 
# aptitude install libperl4-corelibs-perl
以下の新規パッケージがインストールされます:
  libperl4-corelibs-perl
更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 1 個。
43.6 k バイトのアーカイブを取得する必要があります。展開後に 262 k バイトのディスク領域が新たに消費されます。
取得: 1 http://dennou-h.gfd-dennou.org/debian/ wheezy/main libperl4-corelibs-perl all 0.003-1 [43.6 kB]
Fetched 43.6 kB in 0秒 (1,222 kB/s)
以前に未選択のパッケージ libperl4-corelibs-perl を選択しています。
(データベースを読み込んでいます ... 現在 112306 個のファイルとディレクトリがインストールされています。)
(.../libperl4-corelibs-perl_0.003-1_all.deb から) libperl4-corelibs-perl を展開しています...
man-db のトリガを処理しています ...
libperl4-corelibs-perl (0.003-1) を設定しています ...
これでOK!

----- 3 -----

これは最初にユーザ登録を実行してエラーが生じた際, 処理が中途半端に終っ たことで /tmp 以下に作成されたロックファイル (lock-gate-user-apply) が 消去されずに残ったことが原因. ロックファイルを除去するとエラーは出 なくなる.
$ sudo -s (もしくは,$ su)
[sudo] password for mondo2:
root@sango:/home/mondo2# cd
root@sango:~# cd /tmp
root@sango:/tmp# ls
lock-gate-user-apply .....
root@sango:/tmp# rm lock-gate-user-apply
root@sango:/tmp# ls
...... (消えた)

----- 4 -----

web 上から登録申請を行なう際, gate のプログラムの実行は www-data ユーザ権限で動いるが,そのままでは /home/gate 以下にファイルを書き込むことができない.これを回避するため, 従来は perl-suid というパッケージをインストールしてきた. しかし Wheezy ではこのパッケージが存在なくなった(他人に成り代われるため,セキュリティ的に問題視されていた).

/usr/share/doc/perl/README.Debian を読むと, perl の 5.12 からperl-suid というコード自体がなくなってしまった, と記述されている.
perl-suid removed
=================

suidperl was removed upstream with 5.12, so the perl-suid package which
used to be distributed in Debian has been removed too. Possible alternatives
include using a simple setuid C wrapper to execute a perl script from a
hard-coded location, or using a more general tool like sudo.
これを解決するには古いバージョン(たとえば ver.5.10)のソースから Wheezy 上でバイナリをビルドする, 等の処置が必要になる.Wheezy におけるperl-suid パッケージについての問題は,Debian の公式ページにも記載されている.Debian -Wheezy で知っておくべき問題点(5.7)-
しかし,
小高さんが週末をつぶしてまで行ってくれた調査によると,Wheezy 環境下でperl-suid パッケージをビルドし,インストールしてもダメだったことが判明.
要はWheezy ではperl-suid は100% 動かない,ということである.
小高さんが行った調査は以下の通りである.
+ squeeze 版 perl のソースをダウンロードし, wheezy 環境で perl-suid パッケージをビルドし, インストールする.
 = 結果: ×(ビルド中のエラーがどうしても回避できない)

+ squeeze 版 perl-suid パッケージを依存関係を無視しインストール
 = 結果: ×(gate の動作に変化なし)
そこで今回(2013 年度)とった対策としては,以下のとおりである.
+ /home/gate/userdb のグループを www-data に変更
 = 結果: ○(gate は動作. ただしデータベースファイルの所有者が www-data になる)

・ログ

$ sudo -u gate -s -H
gate@sango:~$ ls -l (# ipdb, pipdb, userdb を確認.)
-----
drwxrws---  6 gate gate       4096  9月 25 18:30 ipdb
drwxrws---  5 gate gate       4096  9月 25 18:30 pipdb
drwxrws---  5 gate gate       4096  9月 28 16:18 userdb
-----

gate@sango:~$ chgrp -R www-data ipdb pipdb userdb 
-----
drwxrws---  6 gate www-data   4096  9月 25 18:30 ipdb
drwxrws---  5 gate www-data   4096  9月 25 18:30 pipdb
drwxrws---  5 gate www-data   4096  9月 28 16:18 userdb
-----

オプションの-R はファイル及びディレクトリを再帰的に操作するものであり,これらのディレクトリ以下のファイルやディレクトリも一緒にグループを変更してくれる.
これで,ユーザ申請はうまくいった.

問題その2

gateのrainbow へのインストール を参照に動作テストを行った.保証人であるgate ユーザの登録認証用パスワードを設定する.
$ sudo -s -u gate -H
gate$ cd ~gate
gate$ htpasswd -c ~gate/.gate gate
さて,いざテストで申請したものをgate の力を借りて認証しようとしたら,gate-user-accept.cgi で登録システム用パスワードが違います,,,,といわれる.
これは,wheezy にアップグレードした際に,htpasswd のデフォルトの暗号化方式が変わってしまったためである.
なので,
gate$ htpasswd -d -c ~gate/.gate gate
とすると,gate のデフォルトである暗号化方式でパスワードを読みに行ってくれる.
最終更新日: 2014/05/12 (渡辺 健介) フォーマット修正 Copyright © 2013 epcore