福原です. 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>