Memo/Linux/rpm

http://dexlab.net/pukiwiki/index.php?Memo%2FLinux%2Frpm
 

rpm


rpmに含まれるファイルの表示

  • インストール前
    1. rpm -qlpi monit-5.25.1-1.el6.x86_64.rpm
  • インストール後
    1. rpm -ql monit

インストール先の変更

  1. rpm -i rpm -qpi example.rpm
  2. ...
  3. Relocations: (not relocatable)
  4. # 上記のrpmはインストール先を変更できない
  5.  
  6. # それ以外
  7. rpm -ivh --prefix=/usr/local/java example.rpm

ファイルサイズの大きいrpmを探す

  • ファイルサイズの降順で表示
    1. rpm -qa --qf '%{name} %{size}\n' | sort -k 2 -nr

fpmを使って tar.gzからrpmを簡単に作る

rpmを作るためにはSPECファイルを作る必要があるが面倒くさい。
1ファイルを/usr/local/bin/ にインストールする等であれば、fpm が便利。

  • Home · jordansissel/fpm Wiki · GitHub
    • ディレクトリやファイルにもuser/groupを設定するには、「 --directories」「--rpm-user」「--rpm-group」の設定が必要
    • ディレクトリのパーミッション変更「--rpm-defattrdir 750」
  • 概要
    • Makefileでは ./BUILDROOT 以下に実際に配置したいファイルレイアウトを構築する
      • ./BUILDROOT/usr/local/bin/example
    • CentOS6.x 64bitの場合: fileMakefile.20170120.zip
      1. make install
      2. make clean
      3. make build
      4.  
      5. # 出来たrpmの確認
      6. rpm -qpil <NAME.rpm>
      7.  
      8. # ローカルにインストール
      9. sudo yum localinstall <NAME.rpm>

マクロ値の確認

  • rpm --eval <macro name>
    1. cat /etc/rpm/macros.dist
    2. ...
    3. %centos 6
    4.  
    5. rpm --eval %centos
    6. 6
  • 一覧
    1. rpm --showrc

rpm, updateで更新履歴を表示

  • rpm
    1. rpm -q --changelog httpd
  • yumはupdate時に変更点だけを表示
    1. yum install yum-changelog
    2. yum --changelog update httpd
  • 表示には、rpm作成時に SPECファイルに %changelog セクションが必要
    %changelog
    * Tue Jan 01 2013 hoge
    - create rpm package

rpmの依存性を表示

  • インストール済みrpm
    1. rpm -qR [package]
  • ローカルrpm
    1. rpm -qpR [package.rpm]
    2.  
    3. rpm -qpR s3cmd-1.0.1-1.noarch.rpm
    4. /usr/bin/python  
    5. python(abi) = 2.4
    6. rpmlib(CompressedFileNames) <= 3.0.4-1
    7. rpmlib(PayloadFilesHavePrefix) <= 4.0-1

specファイル


specファイルで使える変数の表示

  1. $ rpm --showrc 2>&1 | more
  2.  
  3. $ rpm --showrc 2>&1 | grep /etc
  4.  
  5. -14: _sysconfdir        /etc
  6.  
  7. $ rpm --eval %_sysconfdir
  8. /etc

RPMで同一の複数のパッケージを削除

  • 以下のエラーが出ることがある
    $ sudo rpm -e mysql-5.0.77-4.el5_4.1
    $ エラー: "nss_ldap-226-10" は複数のパッケージを指定しています
  • 「--allmatches」オプションを付加する
    $ sudo rpm -e --allmatches mysql-5.0.77-4.el5_4.1

RPMビルド

  • RHEL/CentOS 7の場合、systemdに変わっているので、/etc/systemd/以下に設定ファイルを追加/変更した場合、「systemctl daemon-reload」が必要。SPECファイルの「%postun」に追加すると良い。
  • 例:CentOS 7: カレントユーザの ~/rpm でビルドする
    1. mkdir -p ~/rpm/{BUILD,SRPMS,SPECS,SOURCES,RPMS}
    2. cd rpm
    3. echo "%_topdir $HOME/rpm" > ~/.rpmmacros
    4.  
    5. # ビルド用パッケージをインストール
    6. sudo yum install rpm-build gcc flex openssl-devel pam-devel byacc
    7.  
    8. # srpmをインストール
    9. rpm ivh install https://www.insaneworks.co.jp/pub/el7/SRPMS/monit-5.25.1-1.el7.centos.src.rpm
    10.  
    11. # 必要ならカスタマイズ
    12. vim SPECS/monit.spec
    13.  
    14. # ビルド
    15. rpmbuild -bb SPECS/monit.spec
    16.  
    17. # インストール
    18. sudo rpm -Uvh ./RPMS/x86_64/monit-5.25.1-1.x86_64.rpm

ビルド時のrpmファイル名を変える

  • CentOS 7の場合、CentOS 6とパッケージ名の命名規則が変わる。
    1. # specファイルの記述
    2. Version: 5.25.1
    3. Release: 1%{dist}
    4.  
    5. # /etc/rpm/macros.dist の記述
    6. %centos_ver 7
    7. %centos 7
    8. %rhel 7
    9. %dist .el7.centos
    10. %el7 1
    11.  
    12. # 生成されるrpmファイル
    13. example.5.25.1-1.el7.centos.x86_64.rpm
    14.  
    15. # CentOS 6の場合
    16. example.5.25.1-1.el6.x86_64.rpm
  • example.5.25.1-1.el7.x86_64.rpm のようにしたい場合
    1. # specファイルの記述
    2. Release: 1.el%{rhel}

SRPM(ソースパッケージ)の取得

  • CentOS5.3の場合
  • yumdownloaderをインストール
    # yum -y install yum-utils
  • CentOS-Base.repoに追加
    # vi /etc/yum.repos.d/CentOS-Base.repo
    ----
    [base-srpnss_ldap-226-10 ~/.ssh/authorized_keysm]
    name=CentOS-$releasever - Base SRPM
    baseurl=http://mirror.centos.org/centos/$releasever/os/SRPMS/
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
    
    [updates-srpm]
    name=CentOS-$releasever - Updates SRPM
    baseurl=http://mirror.centos.org/centos/$releasever/updates/SRPMS/
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
    
    [extras-srpm]
    name=CentOS-$releasever - Extras SRPM
    baseurl=http://mirror.centos.org/centos/$releasever/extras/SRPMS/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
    ----
  • 「yumdownloader パッケージ名」で取得
    yumdownloader --source sqlite

コマンドが入っているRPMパッケージを探す

  • 例:GETコマンドが入っているrpmパッケージを探す
    1. $ which GET
    2. /usr/bin/GET
    3.  
    4. $ rpm -qf /usr/bin/GET
    5. perl-libwww-perl-5.805-1.1.1

rpm -qaで「rpmdbNextIterator?」エラーが出る場合

  • rpm -qaを実行すると、以下のメッセージが出る事がある。
    rpmのDBに不整合がある模様。
    エラー: rpmdbNextIterator: skipping h#    1786 Header V3 DSA signature: BAD, key ID db42a60e
  • 解決策は以下のコマンドを実行して、DBの再構築。エラーが出るが無視する。
    # mv /var/lib/rpm/__db.00? /tmp
    # rpm --rebuilddb
  • 2005-04-08追記
    Fedora coreRedhat9では、上記方法では直らない。
    そもそも「/var/lib/rpm/__db.00?」が存在しない。
    以下のように、「/var/lib/rpm/Pubkeys」を削除してから再構築すると、直るみたい。
    # mv /var/lib/rpm/Pubkeys /tmp/
    # rpm --rebuilddb

checkinstall自体のインストール

  • CentOS6.4 x86_64
  • File not found: "checkconfig.x86_64.patch" at page "Memo/Linux/rpm"[添付]
    1. yum install rpm-build.x86_64 gettext.x86_64 git.x86_64
    2.  
    3. cd /usr/local/src
    4. git clone http://checkinstall.izto.org/checkinstall.git
    5. cd checkinstall
    6.  
    7. # パッチを当てる
    8. patch -p1 < checkconfig.x86_64.patch
    9.  
    10. make
    11. make install
  • rpm化して上書き
    1. cd checkinstall
    2. checkinstall
    3.  
    4. cd
    5. rpm -ivh rpmbuild/RPMS/x86_64/checkinstall-20120813-1.x86_64.rpm

添付ファイル: fileMakefile.20170120.zip 107件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-22 (木) 14:34:26 (62d)