hollyなwiki


仕事で使えそうな(使ってる)rpmねた

rpmねた

詳しく載ってるとこ

よく使うオプションの組み合わせ

ひとつひとつはあんまりよくわかってなかったりするけど。
動作保障とかは抜きにしてとにかくインストールとかアンインストールとかしたい場合はnodeps/force/nomd5を組み合わせるとたいがいはいける。

インストール

インストールできるかテスト
rpm -i --test パッケージファイル
普通にインストール
rpm -ivh パッケージファイル
古いパッケージをインストール
rpm -ivh --oldpackage パッケージファイル
依存性を無視してをインストール
rpm -ivh --nodeps パッケージファイル
強制的にインストール
replacepkgs/replacefiles/oldpackageを指定した場合と同じ
rpm -ivh --force パッケージファイル
パッケージのMD5を検査しないでインストール
rpm -ivh --nomd5 パッケージファイル

アップデート

アップデート。無ければインストール
rpm -Uvh パッケージファイル
アップデート。無ければ何もしない
rpm -Fvh パッケージファイル

アンインストール

普通に削除
rpm -e パッケージ名

rpmの情報表示

一覧表示
rpm -qa

インストールした日付順に表示

rpm -q --last

インストール済みパッケージの詳細情報を表示

rpm -qi パッケージ名

パッケージがインストールしたファイル一覧を表示

rpm -ql パッケージ名

特定のコマンドが、どのパッケージによりインストールされたか調べる

rpm -q --whatprovides コマンド

あるファイルが、どのパッケージによりインストールされたか調べる

rpm -qf ファイル名

パッケージが破損、改ざんされていないか調べる

rpm --checksig --nogpg パッケージファイル

パッケージによりインストールされるファイルの一覧

rpm -qpl パッケージファイル

パッケージファイルに必要なrpm一覧

rpm -qpR パッケージファイル

SRPMをインストール


たまに必要なことがあったりするので。

インストール

とりあえずpostfixを例に。SMTP認証できるようにしたpostfixをいれる(今のpostfixは普通のrpmでそうなってるよ。あくまで参考に)
 rpm -ivh postfix-2.3.6-1.src.rpm                                      [~]
   1:postfix-2.3.6-1    ########################################### [100%]

SPECファイル編集

makeのオプションなどを変更する
SPECディレクトリに移動
/usr/src/redhat/SPECSにSPECファイルがあるのでまず移動する
cd /usr/src/redhat/SPECS
編集
とりあえず適当に
vi postfix.spec
 %build # %buildセクションに追加
    .
    .
    .
 make makefiles CCARGS="${CCARGS} -I/usr/include/sasl" AUXLIBS="${AUXLIBS} -L%{sasl_lib_dir} -lsasl2" # 追加
 make makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl" AUXLIBS="-L/usr/lib -lsasl2"
 make DEBUG="" OPT="$RPM_OPT_FLAGS"

rpmパッケージ作成

まずはテスト
 # install までが上手く行くかのテスト( %prep, %build, %installが実行される)
 rpmbuild -bi postfix.spec 
 # ちなみに、make までが上手く行くかのテスト( %prep, %buildが実行される) 
 rpmbuild -bc postfix.spec
パッケージ作成
/usr/src/redhat/RPMS/i386 に作成される
 # バイナリパッケージ作成
 rpmbuild -bb postfix.spec
 # バイナリとソースパッケージ作成(両方ほしいのなら)
 rpmbuild -ba postfix.spec
インストール
# i386に無い場合もあるのでその場合はRPMS直下のその他のディレクトリを探す
rpm -ivh /usr/src/redhat/RPMS/i386/postfix-2.3.6-1_smtpauth.i386.rpm

yum除外

既存のrpmパッケージでインストールできるものに手を加えた形になるので、yum updateなどをすると当然手を加えた部分は消えてしまうので、yum updateからは除外するように/etc/yum.confに以下の設定を追加しておく
exclude=postfix*

rpmrebuild

RPMのDBファイルが壊れた時とか(今までの人生で一回だけ経験)

DBファイル削除

削除がこわいならどこかにバックアップを取っておいてもいいかと
 rm -f /var/lib/rpm/_db.0*

再構築

 rpm --rebuilddb
ちなみに初期化はinitdbとする(これは使ったことなし)
 rpm --initdb

確認

終了コードが0か確認する
 rpm -qa
 echo $?
 yum list
 echo $?

checkinstall

ソースからrpm作るときのツール。rpmbuildでもできるけど、SPECファイルがないとエラーになるらしいので、軟弱な人はこっちを使う

インストール

バージョンはその時の最新のものをいれる
wget http://asic-linux.com.mx/%7Eizto/checkinstall/files/rpm/checkinstall-1.6.1-1.i386.rpm
rpm -ivh checkinstall-1.6.1-1.i386.rpm
Preparing...                ########################################### [100%]
   1:checkinstall           ########################################### [100%]

使い方

Makefileがある状態にしておかないとだめらしいので、何かしらのアプリケーションをconfigureしてMakefileが存在する状態にしておく。
※rpmにするのでインストール先を/usr/localなどではなく/usrにしたい場合はMakefileをあらかじめ編集しておく
  1. BUILDPREFIX :=
  2. PREFIX := /usr/local
  3. EXEC_PREFIX := /usr/local
  4. DESTDIR :=
  5. BIN_DIR := /usr/local/bin
  6. LIB_DIR := /usr/local/lib
  7. INCLUDE_DIR := /usr/local/include
  8. DATA_DIR := /usr/local/share
  9. DOC_DIR := /usr/local/share/doc
  10. VERSION_DIR = /parrot/1.0.0
とあるので、このあたりを適当に編集する

checkinstall
The package documentation directory ./doc-pak does not exist.
Should I create a default set of package docs? [y]:y ←「y」を入力して[Enter]キーを押す
(省略)
Please choose the packaging method you want to use.
Slackware [S], RPM [R] or Debian [D]?r ←「r」を入力して[Enter]キーを押す

Please write a description for the package.
End your description with an empty line or EOF.
>> ←[Enter]キーを押す

This package will be built according to these values:

1 -  Summary: [ Package created with checkinstall 1.6.1 ]
2 -  Name:    [ parrot ]
3 -  Version: [ 1.0.0 ]
4 -  Release: [ 1 ]
5 -  License: [ GPL ]
6 -  Group:   [ Applications/System ]
7 -  Architecture: [ i386 ]
8 -  Source location: [ parrot-1.0.0 ]
9 -  Alternate source location: [  ]
10 - Requires: [  ]
11 - Provides: [ parrot ]


Enter a number to change any of them or press ENTER to continue
(省略)
**********************************************************************

 Done. The new package has been saved to

 /usr/src/redhat/RPMS/i386/parrot-1.0.0-1.i386.rpm
 You can install it in your system anytime using:

      rpm -i parrot-1.0.0-1.i386.rpm

**********************************************************************
例ではCentOSでparrotのパッケージが無かったので作った時のメモ。ちなみにインストールしようとすると
error: unpacking of archive failed on file /bin/cat;4a96c3d3: cpio: MD5 sum mismatch
などと出ることがあるので、その場合は--nomd5オプションをつけてインストールするとよい

rpmforge

インストールしておくと何かと便利。http://dag.wieers.com/rpm/packages/rpmforge-releas... から最新版と思われるrpmをダウンロードする。

インストール

バージョンはその時の最新のものをいれる
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm

設定

インストールした時点で有効になるんだけど、必要な時だけ有効にしたいので、設定ファイルを修正する。
enabledという項目の値を0にする
sed -i.org -e "s/^\(enabled\) = 1/\1 = 0/" /etc/yum.repos.d/rpmforge.repo

使い方

yumを実行する時に--enablerepoオプションを使用する
yum --enablerepo=rpmforge list
などとするといい

EPEL

rpmforgeと同じく便利なんでいれとこう。あらかじめ自分のOSのアーキテクチャを調べておくこと

調べ方

uname -i
自分の環境ではi386とでる。

設定

enabledの値が1なので、0に変更しておく。/etc/yum.repos.d/epel.repoがインストールされる。
sed -i.org -e "s/^\(enabled\)=1/\1=0/" /etc/yum.repos.d/epel.repo

インストール

バージョンとかはそのときの最新版で。アーキテクチャに合わせてダウンロードすること
wget http://download.fedora.redhat.com/pub/epel/5/$(uname -i)/epel-release-5-3.noarch.rpm
rpm -ivh epel-release-5-3.noarch.rpm

使い方

yumを実行する時に--enablerepoオプションを使用する
yum --enablerepo=epel list
などとするといい

livna

同じく便利なんでいれとこう。http://rpm.livna.org/
wget http://rpm.livna.org/livna-release.rpm
rpm -ivh livna-release.rpm 
sed -i.org -e "s/^\(enabled\)=1/\1=0/" /etc/yum.repos.d/livna.repo

使い方

yumを実行する時に--enablerepoオプションを使用する
yum --enablerepo=livna list

ATrpms

同じく便利なんでいれとこう。http://atrpms.net/

設定

設定ファイルは自分で作成する
  cat <<EOL > /etc/yum.repos.d/atrpms.repo
[atrpms]
name=Redhat Enterprise Linux \$releasever - \$basearch - ATrpms
baseurl=http://dl.atrpms.net/el\$releasever-\$basearch/atrpms/stable
enabled=0
gpgcheck=1
gpgkey=http://atrpms.net/RPM-GPG-KEY.atrpms
EOL

# GPGkeyを取り込む
rpm --import http://atrpms.net/RPM-GPG-KEY.atrpms

使い方

yumを実行する時に--enablerepoオプションを使用する
yum --enablerepo=atrpms list

インストール

バージョンとかはそのときの最新版で。アーキテクチャに合わせてダウンロードすること
wget http://download.fedora.redhat.com/pub/epel/5/$(uname -i)/epel-release-5-3.noarch.rpm
rpm -ivh epel-release-5-3.noarch.rpm

使い方

yumを実行する時に--enablerepoオプションを使用する
yum --enablerepo=epel list
などとするといい

yum-security

セキュリティアップデート系とか

インストール

yum -y install yum-security

セキュリティアップデートのチェック

yum --security check-update

セキュリティアップデートの更新

yum --security update

yum-cron

yumupdatedのかわり

インストール

yum -y install yum-cron

chkconfig

yumupdatedが動いているようなら落として、chkconfigで起動しないようにしておく(消してしまうのもあり)。yum-cronを自動起動するように変更
chkconfig yumupdated off
chkconfig yum-cron on 
# 起動
/etc/rc.d/init.d/yum-cron start

yum-complete-transactionなんたらかんたらと出た場合

There are unfinished transactions remaining. You mightconsider running yum-complete-transaction first to finish themと出てしまった場合

インストール

yum-complete-transactionというコマンドがyum-utilsに含まれているのでそれをインストール
yum -y install yum-utils

実行する

途中状態になっているのをインストール/削除するんだと思う
yum-complete-transaction

yumでrpmファイルをダウンロードだけしたい場合

yum-utilsに付属しているyumdownloaderを使用する

rpmをダウンロード

binutilsというrpmをダウンロードしたい場合
yumdownloader binutils

srpmをダウンロード

srpmをダウンロードできるのが少ないけど
yumdownloader --source binutils
ほとんどダウンロードできないっぽい(例で出しているのもアウト)

rpm検索するサイト

rpmforgeとかatrpmsとかに無い場合 無い場合はしょうがないな

cpanflute

http://search.cpan.orgで公開されているモジュールをrpmに変換するツール。

インストール

yum -y --enablerepo=rpmforge install perl-RPM-Specfile

使い方

ローカルにtarballが前提っぽい。ためしにFile::Find::Ruleをrpmにしてみる
# ダウンロード
/usr/local/bin/cpanp d File::Find::Rule                                          [~]
[MSG] No '/root/.cpanplus/custom-sources' dir, skipping custom sources
Successfully fetched 'File::Find::Rule' to '/root/.cpanplus/authors/id/R/RC/RCLAMP/File-Find-Rule-0.30.tar.gz'
# RPM作成
cpanflute2 /root/.cpanplus/authors/id/R/RC/RCLAMP/File-Find-Rule-0.30.tar.gz
書き込み完了: ./perl-File-Find-Rule-0.30-8.src.rpm
実行中(--clean): /bin/sh -e /var/tmp/rpm-tmp.12412
+ umask 022
+ cd /tmp/plXK3FVpis
+ rm -rf File-Find-Rule-0.30
+ exit 0
SRPMが作成されるので、これをインストールすればよい。SRPMのインストールの仕方はSRPMをインストール参照
  • twitter
  • livedoor クリップ
  • はてなブックマーク
  • delicious
  • Yahoo! ブックマーク
  • niftyブックマーク
  • Buzzurl

Wiki内検索

Menu

ここは自由に編集できるエリアです。

Wikiをはじめる

マイページ