4
4

More than 5 years have passed since last update.

checkinstallで rpm パッケージの作成がエラーになる場合の対処

Posted at

rpm パッケージを手軽に作成するために checkinstall は非常に便利ですが、現行の checkinstall にはインストール対象にファイルに対するシンボリックリンクが含まれるとrpmパッケージが作成できなくなる不具合がある様です。

この不具合は rpm パッケージ用の spec ファイルを生成する際にターゲットがディレクトリかシンボリックリンクなら %dir と出力しているために発生しています。
例えば libhoge.so.X.Ylibhoge.so にシンボリックリンクした場合などで libhoge.so がディレクトリ扱いとなってしまうために rpm の作成でエラーとなってしまいます。

そこで /usr/sbin/checkinstall に以下のパッチを適用する事でシンボリックリンク先がディレクトリの場合のみ %dir を出力する様にします。

*** /usr/sbin/checkinstall  2014-05-21 12:29:30.000000000 +0900
--- /tmp/checkinstall   2014-05-22 10:52:39.060456955 +0900
***************
*** 2428,2434 ****
  # Prepare directories to be included in the .spec file
  mv ${TMP_DIR}/newfiles ${TMP_DIR}/newfiles.tmp
  cat ${TMP_DIR}/newfiles.tmp | while read line; do
!    [ -d "${BUILD_DIR}/${line}" -o -L "${BUILD_DIR}/${line}" ] && echo -n "%dir " >> ${TMP_DIR}/newfiles
     echo "\"/${line}\"" >> ${TMP_DIR}/newfiles
  done

--- 2428,2435 ----
  # Prepare directories to be included in the .spec file
  mv ${TMP_DIR}/newfiles ${TMP_DIR}/newfiles.tmp
  cat ${TMP_DIR}/newfiles.tmp | while read line; do
!    [ -d "${BUILD_DIR}/${line}" ] && echo -n "%dir " >> ${TMP_DIR}/newfiles
!    [ -L "${BUILD_DIR}/${line} -a -d `ls -l ${BUILD_DIR}/${line} | awk '$0=$NF'` ] && echo -n "%dir" >> ${TMP_DIR}/newfiles
     echo "\"/${line}\"" >> ${TMP_DIR}/newfiles
  done

シンボリックリンクがネストしている場合などでは正しく動作しないのであくまでも暫定的なパッチとなりますが、取りあえず rpm パッケージを作成したい場合は有用だと思います。

4
4
0

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
4
4