福原です.
Project Vine と Vine-users ML 宛にしています.
pam-0.77-38vl2 に以下のような問題点があります.
1. RPM ファイルの /sbin/pam_console_apply が i386 命令以外を使っているようである
2. spec ファイルが glib-devel を要求しているが,glib2-devel が正しいようである
3. SRPM から RPM を作る途中でエラーになる
1. については次のようになります.
$ ldd /sbin/pam_console_apply
libpam.so.0 => /lib/libpam.so.0 (0x4001c000)
libc.so.6 => /lib/i686/libc.so.6 (0x40024000)
libdl.so.2 => /lib/libdl.so.2 (0x4015e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
$
[vine-users:070302] によれば,WinChip2 240MHz で Illegal instruction が出ると
いうことです.
原因としてまず考えたのが,pam-vl.spec の
CFLAGS="-fPIC $RPM_OPT_FLAGS" ; export CFLAGS
この行のために Make.Rules の CFLAGS に( /usr/lib/rpm/rpmrc からでしょうか )
-O2 -pipe -march=i386 -mcpu=i686
というものがつくということですが,違うようです.man gcc によれば
-mcpu=cpu-type
Tune to cpu-type everything applicable about the gen-
erated code, except for the ABI and the set of avail-
able instructions. The choices for cpu-type are i386,
i486, i586, i686, pentium, pentium-mmx, pentiumpro,
pentium2, pentium3, pentium4, k6, k6-2, k6-3, athlon,
athlon-tbird, athlon-4, athlon-xp, athlon-mp,
winchip-c6, winchip2 and c3.
While picking a specific cpu-type will schedule things
appropriately for that particular chip, the compiler
will not generate any code that does not run on the
i386 without the -march=cpu-type option being used.
i586 is equivalent to pentium and i686 is equivalent
to pentiumpro. k6 and athlon are the AMD chips as
opposed to the Intel ones.
ということですので,-mcpu=i686 でも i386 で動くバイナリになるはずです.
実際 CFLAGS="-fPIC -O2 -pipe" ; export CFLAGS としてコンパイルしてみましたが,
/lib/i686/libc.so.6 をリンクするのは変わりませんでした.
2. では glib-devel あり,glib2-devel 無しではコンパイルの途中でエラーになりました.
逆に glib-devel 無し,glib2-devel ありにして,pam-vl.spec の Requires で
glib を glib2 に,BuildPrereq の glib-devel を glib2-devel にしたらコンパイルの
途中のエラーはなくなりました.
3. は [vine-users:070302] で長南さんが書いておられますが,
長南洋一 wrote:
> # 以下に書くことは脱線気味ですが、rebuild 中にちょっと釈然としないことが
> # ありました。次のようなメッセージが出て、rebuild に失敗してしまうのです。
> #
> # + install -m755 -d /var/tmp/pam-0.77-root/lib/security
> # + /home/cyoichi/rpm/SOURCES/dlopen.sh -lpam -ldl /var/tmp/pam-0.77-root/lib/security/pam_access.so
> # /usr/bin/ld: cannot find -lpam
> # collect2: ld はステータス 1 で終了しました
> # /home/cyoichi/rpm/SOURCES/dlopen.sh: line 63: /tmp/dlopenweNOHw/dlopen: そのようなファイルやディレクトリはありません
> # + exit 1
> # エラー: /var/tmp/rpm-tmp.11970 の不正な終了ステータス (%install)
> #
> #
> # RPM ビルドエラー:
> # /var/tmp/rpm-tmp.11970 の不正な終了ステータス (%install)
> #
> # 「cannot find -lpam」と言っているので、libpam.so か何かが見つからない
> # らしい。libpam.so は pam-devel パッケージに入っている。そこで、
> # pam-devel パッケージを入れてから、rpm --rebuild を実行したら、
> # 「警告」がどっさりでましたが、一応成功しました。
> #
> # でも、pam-0.77-38vl2.src.rpm を rebuild すると、pam と pam-devel の
> # パッケージができるのでしょう。それなのに、pam-0.77-38vl2.src.rpm を
> # rebuild するために pam-devel が必要だというのは不思議な気がします。
> # そんなものなのでしょうか。
pam-vl.spec の
if ! $RPM_SOURCE_DIR/dlopen.sh -lpam -ldl ${module} ; then
この行を
if ! $RPM_SOURCE_DIR/dlopen.sh -L$RPM_BUILD_ROOT/%{_lib} -lpam -ldl ${module} ; then
このようにして,SOURCES/dlopen.sh の
-I*|-D*|-f*|-m*|-g*|-O*|-W*)
を
-I*|-L*|-D*|-f*|-m*|-g*|-O*|-W*)
としたら,RPM ファイル作成まで出来ました.
--
福原 <makoto@xxxxxxxxxxxxxxxxxx>