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*

rpmbuild

↑の項で出てきてたりもするが

インストール

環境によってはないので、インストール
yum install rpm-build

アーカイブからrpm

rpmに必要なファイルがspecファイルがtarballに含まれていれば、直接rpmを作成することができる
# rpmとsrpmを作成
rpmbuild -ta archive.tar.gz

# rpmのみ
rpmbuild -tb archive.tar.gz

# srpmのみ
rpmbuild -ts archive.tar.gz

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オプションをつけてインストールするとよい

64bit osの場合

こんなエラーが多発するので
ERROR: ld.so: object '/usr/local/lib/installwatch.so' from LD_PRELOAD cannot be preloaded: ignored.
以下のようにしておくこと
ln -s /usr/local/lib/installwatch.so /usr/local/lib64/installwatch.so

rpmrebuild

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

DBファイル削除

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

再構築

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

確認

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

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

rpm fusion

dribble、livna、freshrpms 3つが統合したものなので、livna単体ではしないようにする http://rpmfusion.org/
wget http://download1.rpmfusion.org/free/el/updates/testing/5/i386/rpmfusion-free-release-5-0.1.noarch.rpm
wget http://download1.rpmfusion.org/nonfree/el/updates/testing/5/i386/rpmfusion-nonfree-release-5-0.1.noarch.rpm
rpm -ivh rpmfusion-*.rpm
sed -i.org -e "s/^\(enabled\)=1/\1=0/g" /etc/yum.repos.d/rpmfusion-free-updates.repo
sed -i.org -e "s/^\(enabled\)=1/\1=0/g" /etc/yum.repos.d/rpmfusion-free-updates-testing.repo
sed -i.org -e "s/^\(enabled\)=1/\1=0/g" /etc/yum.repos.d/rpmfusion-nonfree-updates.repo
sed -i.org -e "s/^\(enabled\)=1/\1=0/g" /etc/yum.repos.d/rpmfusion-nonfree-updates-testing.repo

使い方

yumを実行する時に--enablerepoオプションを使用する
yum --enablerepo=rpmfusion-free-updates --enablerepo=rpmfusion-nonfree-updates 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
ほとんどダウンロードできないっぽい(例で出しているのもアウト)

group

group一覧

どんなgroupがあるのかとか
# 日本語ででるので、英語で見たい場合はLANG=Cすること
LANG=C yum grouplist
Installed Groups:
   Dialup Networking Support
   Editors
   Mail Server
   MySQL Database
   Network Servers
   PostgreSQL Database
   System Tools
   Web Server
   Yum Utilities
Available Groups:
   Administration Tools
   Authoring and Publishing
   Base
   Beagle
   Cluster Storage
   Clustering
   DNS Name Server
   Development Libraries
   Development Tools
   Emacs
   Engineering and Scientific
   FTP Server
   FreeNX and NX
   GNOME Desktop Environment
   GNOME Software Development
   Games and Entertainment
   Graphical Internet
   Graphics
   Horde
   Java
   Java Development
   KDE (K Desktop Environment)
   KDE Software Development
   KVM
   Legacy Network Server
   Legacy Software Development
   Legacy Software Support
   Mono
   News Server
   Office/Productivity
   OpenFabrics Enterprise Distribution
   Printing Support
   Ruby
   Server Configuration Tools
   Sound and Video
   Text-based Internet
   Tomboy
   Virtualization
   Windows File Server
   X Software Development
   X Window System
   XFCE-4.4
Done

**groupをインストール
=|BOX|
yum groupinstall $group

groupをアンインストール

yum groupremove $group

groupをアップデート

yum groupupdate $group

groupに所属しているパッケージ一覧

yum groupinfo $group

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をインストール参照

yum + chroot

こんなshellを実行すればとりあえずchroot環境を作成できる
#!/bin/sh

CHROOT=/chroot
proc=$CHROOT/proc
sys=$CHROOT/sys
etc=$CHROOT/etc
dev=$CHROOT/dev
var=$CHROOT/var

rm -fr $CHROOT
mkdir $CHROOT
for dir in $etc $dev $proc $sys $var; do
        mkdir $dir
done

for makedev in console null zero; do
    MAKEDEV -d $dev -x $makedev
done

cp -p /etc/resolv.conf $etc
cat <<EOL >$etc/fstab
/dev/sda1              /                       ext3    defaults        1 1
devpts                 /dev/pts                devpts  gid=5,mode=620  0 0
tmpfs                  /dev/shm                tmpfs   defaults        0 0
proc                   /proc                   proc    defaults        0 0
sysfs                  /sys                    sysfs   defaults        0 0
/dev/sda2              swap                    swap    defaults        0 0
EOL

mount --bind /proc $proc
mount --bind /sys $sys

yum clean all
cp -a /etc/yum* $etc
# $releaseverがnullになってしまうため、値をいれておく。/etc/redhat-releaseのバージョン参照。5.5なら5みたいな感じで
sed -i -e 's/$releasever/5/g' $etc/yum.repos.d/*.repo
yum -y --installroot=$CHROOT groupinstall "Base"

umount $proc
umount $sys

その他

メモ

nginxのrpm

nginx professional servicesからrepositoryを追加できるようにする
curl -LO http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm
rpm -ivh nginx-release-rhel-6-0.el6.ngx.noarch.rpm
sed -e 's/enable=1/enable=0/' /etc/yum.repos.d/nginx.repo
あとは↓でインストールできる
yum install --enablerepo=nginx nginx

postgresの最新のrpm

pgdg repositoryを使えるようにする。http://yum.pgrpms.org/reporpms/repoview/pgdg-cento...
curl -LO http://yum.pgrpms.org/reporpms/9.1/pgdg-centos-9.1-1.noarch.rpm
rpm -ivh pgdg-centos-9.1-1.noarch.rpm
使うときは
yum install --enablerepo=pgdg91 postgresql91 postgresql91-docs postgresql91-libs postgresql91-server
とすると最新のpostgresをrpmでインストールできる

libxslt-develをインストールしようとしてエラー

x86_64な環境で自分の場合
libgpg-error-devel-1.4-2.x86_64 from base has depsolving problems
  --> Missing Dependency: libgpg-error = 1.4-2 is needed by package libgpg-error-devel-1.4-2.x86_64 (base)
Error: Missing Dependency: libgpg-error = 1.4-2 is needed by package libgpg-error-devel-1.4-2.x86_64 (base)
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest
となった。libgpg-error-develがyumでは見つからないらしく、依存解決できない。atrpmにあったようなので
curl -LO http://dl.atrpms.net/el5-x86_64/atrpms/stable/libgpg-error-devel-1.6-10.el5.x86_64.rpm
rpm -ivh libgpg-error-devel-1.6-10.el5.x86_64.rpm
として解決する
タグ

Wiki内検索

Menu

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

管理人/副管理人のみ編集できます