LoginSignup
0
0

More than 5 years have passed since last update.

自分でrpmbuildしたhttpd-develをyum installできない(/usr/local/bin/perlがないと言われる)

Posted at

環境・前提

  • OSはCentOS 6.8。
  • ソースからrpmbuildしたhttpd-devel 2.4.23をyum installしようとしたが「/usr/local/bin/perlが必要」と言われinstallに失敗。
  • ローカル環境には /usr/local/bin/perl は存在する(/usr/bin/perl のシンボリックリンク)。ローカル環境にないと言われているのではなく、yumのinstall済みパッケージに /usr/local/bin/perl を提供すると言っているやつがいないということのよう。
  • yum deplist httpd-devel で依存するものを調べると、CentOS レポジトリの httpd-devel 2.2系は同じperlパッケージを要求するがパスは /usr/bin/perl になっている。
  • ググると rpm --nodeps で依存性を無視してinstallするという手順が見つかったが、それだと何か気持ち悪い。
  • rpmbuild のどこかの過程で perl のパスを規定しているはず。specファイルでうまく環境変数を規定するか、または何らかのパッチをつくって当てれば何とかなるはず。

結論

  • $SOURCE/build/install-bindist.sh.in を見ると環境変数 PATH の各ディレクトリをスキャンし perl5 か perl がないかを探していた。
  • 最初に見つかったものをパスとして定義するので、PATH の中で /usr/local/bin が /usr/bin より先にあると /usr/local/bin/perl がセットされてしまうよう1
  • spec ファイルの configure するステップの直前で PATH 変数中の /usr/local/bin を一番後ろに持って行く処理を入れて rpmbuild し署名すると、問題なく yum install できるようになった。
httpd.spec
前略
# 現在のPATHをバックアップ
PATHBAK=$PATH
# /usr/local/bin: を見つけたら除去し、末尾に :/usr/local/bin をくっつける
PATH=`echo $PATH | sed -e 's/^\(.*\)\(\/usr\/local\/bin:\)\(.*\)/\1\3:\2/'`
%configure \
中略

%post
# Register the httpd service
/sbin/chkconfig --add httpd
/sbin/chkconfig --add htcacheclean
# 一応PATHを戻しておく
PATH=$PATHBAK
後略
$ pwd
/home/user/rpmbuild/SPECS
$ rpmbuild -ba httpd.spec
$ rpm --resign httpd-{,-devel,-manual,-tools}-2.4.23-n.x86_64.rpm
 ※ n は httpd.spec で規定した release 番号、x86_64 部分はアーキテクチャに依存
$ cd /var/www/html/rpmrepo/RPMS/x86_64
$ createrepo .
$ yum clean all
$ yum install httpd-devel
 ※ httpd が既に install されている場合、httpd-devel は同じバージョンの httpd
  を要求するので先に update しておく必要あり
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0