Contenu connexe Similaire à 曖昧 RPM 講座 (20) Plus de Tetsuya Morimoto (17) 曖昧 RPM 講座2. アジェンダ
RPM とは
構造とバージョン
コマンドと関連ユーティリティ
RPM パッケージング
spec ファイルとソース RPM
yum リポジトリ
RHEL と Linux ディストリビュージョン
Red Hat 系ディストリビューション
3. RPM とは
cpio 形式?
tar 同様、複数ファイルを
RPM Package Manager 1つにまとめるアーカイブ
Red Hat Package Manager (以前?)
パッケージ本体は cpio 形式でアーカイブ
バイナリ RPM(RPMS) とソース RPM(SRPMS)
パッケージ情報は Berkeley DB に格納
RPM そのものは C 言語で開発
Java/Perl/Python/Ruby バインディング
4. RPM の構造(大体こんな感じ)
# rpm -i/-U
/var/lib/rpm
RPM パッケージ
rpmdb
ヘッダ情報 # rpm -q
/usr/bin/python
cpio archive
/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 # rpm2cpio
/usr/share/man/man1/python.1.bz2
spec
# rpmbuild ファイル
5. 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 など独自メンテ
6. RPM のバージョン(2)
RPM5
Stable: 5.2.x, Current 5.3?
コードベースのリファクタリング
機能
移植性の向上(プラットホーム/コンパイラ)
LZMA/XAR(XML Archive)のサポート
SQLite のサポート
spec ファイルのカスタムタグ
Fedora13/RHEL6 beta
rpm-4.8.0
7. RPM の四方山話
rpmdb が壊れたー(> <)
昔(RH8, RH9)はよく壊れたもんだ、、、
/var/lib/rpm/__db.xxx のキャッシュを削除すれ
ば直るかも?(場合によっては rpm –rebuilddb)
… タイトル付けたのに他になかった、、、
8. rpm コマンド(1)
クエリフォーマットのカスタマイズ
# rpm -q rpm
rpm-4.4.2.3-18.el5
# rpm -q --qf "%{name}-%{version}-%{release}¥n" rpm
rpm-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
9. 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
…
10. rpm コマンド(3)
依存関係(provides/require)を調べる
python パッケージが提供する機能 python パッケージが要求する機能
# rpm -q --provides python # rpm -q --requires python
... /bin/sh
python = 2.4.3-27.el5 /usr/bin/env
…
機能 “python” を要求するパッケージ
# rpm -q --whatrequires python 機能 “/bin/sh” を提供するパッケージ
rhpl-0.194.1-1 # rpm -q --whatprovides "/bin/sh"
authconfig-5.3.21-6.el5 bash-3.2-24.el5
yum-3.2.22-20.el5.centos
...
11. rpm コマンド(4)
依存チェーンを辿る
rpm パッケージが require している機能を提供するパッケージを調べる
# rpm -q --requires rpm | sed s"/[<> ].*//"g | xargs -i rpm -q --whatprovides --qf
"%{provides}: %{name}-%{version}-%{release}¥n" {} | sort –u
ANSI_X3.110.so: glibc-2.5-42
config(bash): bash-3.2-24.el5
config(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 python
python(abi) = 2.4
12. rpm2cpio コマンド
rpm パッケージを展開する
# mkdir work; cd work
# rpm2cpio ../bc-1.06-21.src.rpm | cpio -div
bc-1.06-info_exp_bessel.patch
bc-1.06-readline42.patch
bc-1.06-s390.patch
bc-1.06.tar.bz2
bc.spec
469 blocks
# ls
bc-1.06-info_exp_bessel.patch
bc-1.06-readline42.patch
bc-1.06-s390.patch
bc-1.06.tar.bz2
bc.spec
13. 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 の構成が変更されて原文がどっかに行っ
ちゃった、、、
14. 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?
そんなのあったっけ?
15. 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/pil
ot-python-fl.html
rpm モジュールを使用したサンプル
16. RPM パッケージング
パッケージング + リポジトリ構築
spec ファイルを作成する
ビルド環境を構築する
yum リポジトリを作成、更新する
Debian GNU/Linux上でRPMパッケージ・
Yumリポジトリを作って公開する方法:
milter managerを例にして by ククログ
http://www.clear-code.com/blog/2010/3/3.html
chroot 環境を作るのに rinse が便利そう?
17. 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
18. トリガースクリプトの仕様(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
19. トリガースクリプトの仕様(2)
(たぶん歴史的に)仕様が複雑になってる
rpm-4.4 以降は %pretrans, %posttrans が使え
るようになったらしい
http://rpm5.org/docs/api/triggers.html
http://fedoraproject.org/wiki/Packaging/Scriptle
tSnippets#Syntax
20. トリガースクリプトの使用例
なるべくシンプルに使った方が良い
%post : インストール後に実行
初期化設定、サービス追加、サーバ再起動
%postun : アンインストール後に実行
ここでサーバ再起動はやらない方が良いかも
なるべくやらない方が良いこと
設定ファイルを書きかえる
シンボリックリンクを張り替える
http://vinelinux.org/manuals/making-rpm-9.html
22. トリガースクリプトの弊害(2)
RPM パッケージのアップグレードは以下の
順番で実行される
1. 全ての %pretrans を実行
2. 新パッケージをインストール bind パッケージに
1. %triggerprein を実行 悪いお手本があるよ
2. %pre を実行
3. %post を実行
3. 旧パッケージをアンインストール
1. %preun を実行
2. %postun を実行
3. %triggerpostun を実行
4. 任意のパッケージの %triggerpostun を実行
5. 全ての %posttrans を実行
23. パッケージアップデータ
yum(Yellow dog Updater Modified)
Yellow Dog Linux (PPC) のために開発された
Red Hat 系のデファクトスタンダード?
Red Hat : up2date(独自開発)
Suse : YaST(独自開発)
Asianux : axtu(独自開発)
MiracleLinux : mlupdater(独自開発)
どうして yum を使わないの?
- yum 本体に認証の仕組みがない
- 使い勝手がディストリビューションの差別化につながる
24. yum コマンド(1)
yum しか知らなくても大丈夫?
ネットワーク経由でインストールやアップデートも簡単
# yum install python
# yum -y update python (-y を付けると自動的にアップグレード)
リポジトリ内を検索
# yum search python
パッケージのヘッダ情報を表示
# yum info python
リポジトリ内の全パッケージリストを表示
# yum list
インストール済のパッケージリストを表示
# yum list installed
25. yum コマンド(2)
依存関係を調べるのも yum の方が簡単?
# yum deplist rpm
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: ftp.iij.ad.jp
* base: ftp.iij.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
Finding dependencies:
package: rpm.x86_64 4.4.2.3-18.el5
dependency: librpm-4.4.so()(64bit)
provider: rpm-libs.x86_64 4.4.2.3-18.el5
dependency: logrotate
provider: logrotate.x86_64 3.7.4-9
26. yumdownloader コマンド
yum-utils もインストールしておきたい
RPM パッケージをダウンロードする
# yumdownloader bc
# yumdownloader --source bc
※ CentOS でソースをダウンロードするには
/etc/yum.repos.d/CentOS-Base.repo ファイルに
ソース RPMS のダウンロード設定を追加する必要がある
27. 拡張リポジトリ(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
28. 拡張リポジトリ(2)
yum のデータ通信は http プロトコル
リポジトリは Web サーバさえがあれば、
簡単に作成できる
特定ユーザ向けにリポジトリへの認証を
行うには別の細工が必要
リポジトリの正当性は認証ではなく、個々の
パッケージの署名確認?
29. RHEL の国内サーバシェア
日本ではとにかく RHEL が強い
国内 Linux サーバ市場シェアの84%以上?
IDC Japan 調査レポート
http://www.idcjapan.co.jp/Report/Software/j9360
105.html
http://itpro.nikkeibp.co.jp/article/NEWS/20091110
/340333/?SS=imgview&FD=-1342976709&ST=oss
30. 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
31. ディストリの目的(1)
Fedora
コミュニティ主導
Red Hat 社はスポンサー
最新パッケージの統合、レビュー、テスト
迅速な技術革新を試みる
リリースサイクルは6ヶ月
メンテナンス期間は13ヶ月
http://ja.wikipedia.org/wiki/Fedora
32. ディストリの目的(2)
RHEL(Red Hat Enterprise Linux)
Fedora の実績をベースに開発
Red Hat 社が商用サポート
安定性とアップデートの互換性を重視する
ISV/IHV の Certification が多い
リリースサイクルは18~24ヶ月
メンテナンス期間は7年間
http://ja.wikipedia.org/wiki/Red_Hat_Enterprise_L
inux
33. ディストリの目的(3)
CentOS
Community ENTerprise Operating System
RHELのソースをリビルド
Red Hat 社は無関係
RHEL の Certification がおそらく動く
リリース/メンテナンス期間は RHEL と同じ
RHEL リリース後、約1ヶ月程度でリリース
http://ja.wikipedia.org/wiki/CentOS