Memo/Linux/rpm

https://dexlab.net:443/pukiwiki/index.php?Memo/Linux/rpm
 

rpm


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

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

インストール先の変更

rpm -qpi example.rpm
...
Relocations: (not relocatable)
# 上記のrpmはインストール先を変更できない

# それ以外
rpm -ivh --prefix=/usr/local/java example.rpm

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

  • ファイルサイズの降順で表示
    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
      make install
      make clean
      make build
      
      # 出来たrpmの確認
      rpm -qpil <NAME.rpm>
      
      # ローカルにインストール
      sudo yum localinstall <NAME.rpm>

マクロ値の確認

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

rpm, updateで更新履歴を表示

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

rpmの依存性を表示

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

specファイル


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

$ rpm --showrc 2>&1 | more

$ rpm --showrc 2>&1 | grep /etc

-14: _sysconfdir        /etc

$ rpm --eval %_sysconfdir
/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 でビルドする
    mkdir -p ~/rpm/{BUILD,SRPMS,SPECS,SOURCES,RPMS}
    cd rpm
    echo "%_topdir $HOME/rpm" > ~/.rpmmacros
    
    # ビルド用パッケージをインストール
    sudo yum install rpm-build gcc flex openssl-devel pam-devel byacc
    
    # srpmをインストール
    rpm ivh install https://www.insaneworks.co.jp/pub/el7/SRPMS/monit-5.25.1-1.el7.centos.src.rpm
    
    # 必要ならカスタマイズ
    vim SPECS/monit.spec
    
    # ビルド
    rpmbuild -bb SPECS/monit.spec
    
    # インストール
    sudo rpm -Uvh ./RPMS/x86_64/monit-5.25.1-1.x86_64.rpm

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

  • CentOS 7の場合、CentOS 6とパッケージ名の命名規則が変わる。
    # specファイルの記述
    Version: 5.25.1
    Release: 1%{dist}
    
    # /etc/rpm/macros.dist の記述
    %centos_ver 7
    %centos 7
    %rhel 7
    %dist .el7.centos
    %el7 1
    
    # 生成されるrpmファイル
    example.5.25.1-1.el7.centos.x86_64.rpm
    
    # CentOS 6の場合
    example.5.25.1-1.el6.x86_64.rpm
  • example.5.25.1-1.el7.x86_64.rpm のようにしたい場合
    # specファイルの記述
    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パッケージを探す
    $ which GET
    /usr/bin/GET
    
    $ rpm -qf /usr/bin/GET
    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"[添付]
    yum install rpm-build.x86_64 gettext.x86_64 git.x86_64
    
    cd /usr/local/src
    git clone http://checkinstall.izto.org/checkinstall.git
    cd checkinstall
    
    # パッチを当てる
    patch -p1 < checkconfig.x86_64.patch
    
    make
    make install
  • rpm化して上書き
    cd checkinstall
    checkinstall
    
    cd
    rpm -ivh rpmbuild/RPMS/x86_64/checkinstall-20120813-1.x86_64.rpm

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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (35d)