vine-users ML アーカイブ



[vine-users:070330] pam-0.77-38vl2(Re: Re: CD イメージからのインストー ルに一応成功)

  • From: FUKUHARA Makoto <makoto@xxxxxxxxxxxxxxxxxx>
  • Subject: [vine-users:070330] pam-0.77-38vl2(Re: Re: CD イメージからのインストー ルに一応成功)
  • Date: Fri, 04 Feb 2005 21:39:18 +0900
福原です.
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>