Upload
tetsuya-morimoto
View
3.288
Download
0
Embed Size (px)
DESCRIPTION
about RPM Package Manager
Citation preview
曖昧 RPM 講座2010/5/29(SAT.) T2Y
アジェンダ
RPM とは
構造とバージョン
コマンドと関連ユーティリティ
RPM パッケージング
spec ファイルとソース RPM
yum リポジトリ
RHEL と Linux ディストリビュージョン
Red Hat 系ディストリビューション
RPM とは
RPM Package Manager
Red Hat Package Manager (以前?)
パッケージ本体は cpio 形式でアーカイブ
バイナリ RPM(RPMS) とソース RPM(SRPMS)
パッケージ情報は Berkeley DB に格納
RPM そのものはC 言語で開発
Java/Perl/Python/Ruby バインディング
cpio 形式?tar 同様、複数ファイルを1つにまとめるアーカイブ
RPM の構造(大体こんな感じ)
/var/lib/rpm
/usr/bin/python/usr/bin/pydoc/usr/bin/python-config/usr/lib/python2.6/BaseHTTPServer.py/usr/lib/python2.6/ …/usr/share/doc/python/2.6.2/LICENSE/usr/share/doc/python/2.6.2/README/usr/share/man/man1/python.1.bz2
ヘッダ情報
cpio archive
RPM パッケージrpmdb
# rpm2cpio
# rpm -q
# rpm -i/-U
# rpmbuildspec
ファイル
RPM のバージョン(1)
RPM のメンテナ Jeff Johnson(元 Red Hat)-> rpm5.org 設立へ
Red Hat 退社後も独自にメンテナンスを継続
再生への道を歩み始めたRPM開発 http://sourceforge.jp/magazine/07/02/20/0049233
RPMがrpm5.orgで"再出発" http://sourceforge.jp/magazine/07/06/19/014239
rpm-4.4.2 RHEL5(CentOS5)
Suse/Mandriva/Turbolinux など独自メンテ
RPM のバージョン(2)
RPM5 Stable: 5.2.x, Current 5.3?
コードベースのリファクタリング
機能 移植性の向上(プラットホーム/コンパイラ)
LZMA/XAR(XML Archive)のサポート
SQLite のサポート
spec ファイルのカスタムタグ
Fedora13/RHEL6 beta rpm-4.8.0
RPM の四方山話
rpmdb が壊れたー(> <)
昔(RH8, RH9)はよく壊れたもんだ、、、
/var/lib/rpm/__db.xxx のキャッシュを削除すれば直るかも?(場合によっては rpm –rebuilddb)
… タイトル付けたのに他になかった、、、
rpm コマンド(1)
# rpm -q rpmrpm-4.4.2.3-18.el5
# rpm -q --qf "%{name}-%{version}-%{release}¥n" rpmrpm-4.4.2.3-18.el5
# cat .rpmmacros
%_query_all_fmt %%{epoch}:%%{name}-%%{version}-%%{release}.%%{arch}
# rpm -q rpm(none):rpm-4.4.2.3-18.el5.x86_64
クエリフォーマットのカスタマイズ
rpm コマンド(2)
# rpm -ql bc/usr/bin/bc/usr/bin/dc/usr/share/doc/bc-1.06…
# rpm -q --dump bc/usr/bin/bc 73408 1170191017 cf850a96f48201ce8ed3c4d8eebef728 0100755 root root 0 0 0 X/usr/bin/dc 39608 1170191017 70a963cb04ecf28673568ae8ae2e24c7 0100755 root root 0 0 0 X/usr/share/doc/bc-1.06 4096 1170191017 00000000000000000000000000000000 040755 root root 0 0 0 X…
ファイル情報を出力する
rpm コマンド(3)
python パッケージが提供する機能# rpm -q --provides python...python = 2.4.3-27.el5
機能 “python” を要求するパッケージ# rpm -q --whatrequires pythonrhpl-0.194.1-1authconfig-5.3.21-6.el5yum-3.2.22-20.el5.centos...
依存関係(provides/require)を調べる
python パッケージが要求する機能# rpm -q --requires python/bin/sh/usr/bin/env…
機能 “/bin/sh” を提供するパッケージ# rpm -q --whatprovides "/bin/sh"bash-3.2-24.el5
rpm コマンド(4)
rpm パッケージが require している機能を提供するパッケージを調べる# rpm -q --requires rpm | sed s"/[<> ].*//"g | xargs -i rpm -q --whatprovides --qf"%{provides}: %{name}-%{version}-%{release}¥n" {} | sort –uANSI_X3.110.so: glibc-2.5-42config(bash): bash-3.2-24.el5config(coreutils): coreutils-5.97-23.el5…
rpm パッケージが require している機能を提供するパッケージの依存チェーンを辿る# cmd="rpm -q --requires rpm"; for i in $(seq 0 2); do cmd="$cmd | cut -d' ' -f1 | xargs rpm -q --whatprovides | xargs rpm -q --requires | sort -u"; done; eval $cmd | grep pythonpython(abi) = 2.4
依存チェーンを辿る
rpm2cpio コマンド
# mkdir work; cd work# rpm2cpio ../bc-1.06-21.src.rpm | cpio -divbc-1.06-info_exp_bessel.patchbc-1.06-readline42.patchbc-1.06-s390.patchbc-1.06.tar.bz2bc.spec469 blocks# lsbc-1.06-info_exp_bessel.patchbc-1.06-readline42.patchbc-1.06-s390.patchbc-1.06.tar.bz2bc.spec
rpm パッケージを展開する
RPM API(1)
rpm-python (python バインディング) がお奨め rpm-python を利用する主なパッケージ Anaconda (インストーラ)
yum (アップデータ)
system-config-xxx (管理ツール)
rpm プログラミング with python を読み砕く http://d.hatena.ne.jp/t2y-1979/20080705/1215185168
http://d.hatena.ne.jp/t2y-1979/20080711/1215757916
http://d.hatena.ne.jp/t2y-1979/20080821/1219321380
Fedora wiki の構成が変更されて原文がどっかに行っちゃった、、、
RPM API(2)
その他の言語バインディング
rpm-libs (C 言語)
rpm/rpm-build パッケージ以外は使われていない?
perl-rpm
http://search.cpan.org/dist/Perl-RPM/
ruby-rpm
http://sourceforge.jp/projects/freshmeat_ruby-rpm/
Java-rpm?
そんなのあったっけ?
RPM API(3) -バージョン比較-
RPM のAPI を使用しなければならない
1.2-1
1.2.1-1 (RPM 的にはこれが最も高い)
1.2a-1
Pilot python Fl.4 -rpm version compare-
http://blog.miraclelinux.com/asianpen/2009/03/pilot-python-fl.html
rpm モジュールを使用したサンプル
RPM パッケージング
パッケージング + リポジトリ構築
spec ファイルを作成する
ビルド環境を構築する
yum リポジトリを作成、更新する
Debian GNU/Linux上でRPMパッケージ・Yumリポジトリを作って公開する方法: milter managerを例にして by ククログ
http://www.clear-code.com/blog/2010/3/3.html
chroot 環境を作るのに rinse が便利そう?
rpmbuild コマンド
詳細は man rpmbuild を参照
spec ファイルの検証ができる# rpmbuild --nobuild bc.spec
%prep を実行する(ソースを展開してパッチが当たるかテスト)# rpmbuild -bp bc.spec
バイナリ RPM とソース RPM をビルドする# rpmbuild -ba bc.spec# rpmbuild -bs bc.spec (ソース RPM のみビルド)# rpmbuild -bb bc.spec (バイナリ RPM のみビルド)
ビルドツリーやソースの削除# rpmbuild --clean bc.spec || --rmsource bc.spec
トリガースクリプトの仕様(1)
spec ファイルでRPM パッケージのインストール(アンインストール)時に特別な処理を実行する %pre : インストール前に実行 %post : インストール後に実行 %preun : アンインストール前に実行 %postun : アンインストール後に実行
環境変数 $1 で制御する “rpm -i” : %pre, %post に対して $1 = 1 “rpm -U” : %pre, %post に対して $1 = 2
: %preun, %postun に対して $1 = 1 “rpm -e” : %preun, %postun に対して $1 = 0
トリガースクリプトの仕様(2)
(たぶん歴史的に)仕様が複雑になってる
rpm-4.4 以降は %pretrans, %posttrans が使えるようになったらしい
http://rpm5.org/docs/api/triggers.html
http://fedoraproject.org/wiki/Packaging/ScriptletSnippets#Syntax
トリガースクリプトの使用例
なるべくシンプルに使った方が良い
%post : インストール後に実行
初期化設定、サービス追加、サーバ再起動
%postun : アンインストール後に実行
ここでサーバ再起動はやらない方が良いかも
なるべくやらない方が良いこと
設定ファイルを書きかえる
シンボリックリンクを張り替える
http://vinelinux.org/manuals/making-rpm-9.html
トリガースクリプトの弊害(1)
インストール時にシステムの環境情報から設定ファイルを生成する
Debug Hacks 番外編(2) - RPM コマンドでは
分からないファイルのパッケージを調べる -
http://blog.miraclelinux.com/asianpen/2009/04/debug-hacks-2--.html
トリガースクリプトの弊害(2)
RPM パッケージのアップグレードは以下の順番で実行される1. 全ての %pretrans を実行2. 新パッケージをインストール
1. %triggerprein を実行2. %pre を実行3. %post を実行
3. 旧パッケージをアンインストール1. %preun を実行2. %postun を実行3. %triggerpostun を実行
4. 任意のパッケージの %triggerpostun を実行5. 全ての %posttrans を実行
bind パッケージに悪いお手本があるよ
パッケージアップデータ
yum(Yellow dog Updater Modified)
Yellow Dog Linux (PPC) のために開発された
Red Hat 系のデファクトスタンダード?
Red Hat : up2date(独自開発)
Suse : YaST(独自開発)
Asianux : axtu(独自開発)
MiracleLinux : mlupdater(独自開発)
どうして yum を使わないの?- yum 本体に認証の仕組みがない- 使い勝手がディストリビューションの差別化につながる
yum コマンド(1)
ネットワーク経由でインストールやアップデートも簡単# yum install python# yum -y update python (-y を付けると自動的にアップグレード)
リポジトリ内を検索# yum search python
パッケージのヘッダ情報を表示# yum info pythonリポジトリ内の全パッケージリストを表示# yum listインストール済のパッケージリストを表示# yum list installed
yum しか知らなくても大丈夫?
yum コマンド(2)
# yum deplist rpmLoaded plugins: fastestmirrorLoading mirror speeds from cached hostfile* addons: ftp.iij.ad.jp* base: ftp.iij.ad.jp* extras: ftp.iij.ad.jp* updates: ftp.iij.ad.jpFinding dependencies: package: rpm.x86_64 4.4.2.3-18.el5dependency: librpm-4.4.so()(64bit)provider: rpm-libs.x86_64 4.4.2.3-18.el5
dependency: logrotateprovider: logrotate.x86_64 3.7.4-9
依存関係を調べるのも yum の方が簡単?
yumdownloader コマンド
RPM パッケージをダウンロードする# yumdownloader bc# yumdownloader --source bc※CentOS でソースをダウンロードするには/etc/yum.repos.d/CentOS-Base.repo ファイルにソース RPMS のダウンロード設定を追加する必要がある
yum-utils もインストールしておきたい
拡張リポジトリ(1)
yum で使用するパッケージを追加できる
/etc/yum.repos.d/ に設定ファイルを置く
拡張リポジトリは “enabled=0” をセットして、通常は使用しないようにした方が良い
CentOS なら EPEL がお奨め
https://fedoraproject.org/wiki/EPEL/Japanese
http://d.hatena.ne.jp/t2y-1979/20090711/1247299328
オプションで使用するリポジトリを明示的に指定# yum search --enablerepo=epel python
拡張リポジトリ(2)
yum のデータ通信は http プロトコル
リポジトリはWeb サーバさえがあれば、簡単に作成できる
特定ユーザ向けにリポジトリへの認証を行うには別の細工が必要
リポジトリの正当性は認証ではなく、個々のパッケージの署名確認?
RHEL の国内サーバシェア
日本ではとにかく RHEL が強い
国内 Linux サーバ市場シェアの84%以上?
IDC Japan 調査レポート
http://www.idcjapan.co.jp/Report/Software/j9360105.html
http://itpro.nikkeibp.co.jp/article/NEWS/20091110/340333/?SS=imgview&FD=-1342976709&ST=oss
Red Hat 系ディストリ
Fedora
Red Hat Enterprise Linux (Fedora ベース)
Oracle Enterprise Linux (RHEL ベース)
Asianux/MiracleLinux (RHEL ベース)
CentOS (RHEL クローン)
Scientific Linux (RHEL クローン)
Mandriva Linux
Momonga Linux
Vine Linux
ディストリの目的(1)
Fedora
コミュニティ主導
Red Hat 社はスポンサー
最新パッケージの統合、レビュー、テスト
迅速な技術革新を試みる
リリースサイクルは6ヶ月
メンテナンス期間は13ヶ月
http://ja.wikipedia.org/wiki/Fedora
ディストリの目的(2)
RHEL(Red Hat Enterprise Linux)
Fedora の実績をベースに開発
Red Hat 社が商用サポート
安定性とアップデートの互換性を重視する
ISV/IHV のCertification が多い
リリースサイクルは18~24ヶ月
メンテナンス期間は7年間
http://ja.wikipedia.org/wiki/Red_Hat_Enterprise_Linux
ディストリの目的(3)
CentOS
Community ENTerprise Operating System
RHELのソースをリビルド
Red Hat 社は無関係
RHEL のCertification がおそらく動く
リリース/メンテナンス期間は RHEL と同じ
RHEL リリース後、約1ヶ月程度でリリース
http://ja.wikipedia.org/wiki/CentOS