曖昧 RPM 講座
2010/5/29(SAT.) T2Y
アジェンダ

 RPM とは
  構造とバージョン
  コマンドと関連ユーティリティ
 RPM パッケージング
  spec ファイルとソース RPM
  yum リポジトリ
 RHEL と Linux ディストリビュージョン
 ...
RPM とは
                                  cpio 形式?
                            tar 同様、複数ファイルを
 RPM Package Manager       1...
RPM の構造(大体こんな感じ)
                                        # rpm -i/-U
                                                     ...
RPM のバージョン(1)

 RPM のメンテナ
   Jeff Johnson(元 Red Hat)-> rpm5.org 設立へ
   Red Hat 退社後も独自にメンテナンスを継続
   再生への道を歩み始めたRPM開発
  ...
RPM のバージョン(2)

 RPM5
   Stable: 5.2.x, Current 5.3?
   コードベースのリファクタリング
   機能
     移植性の向上(プラットホーム/コンパイラ)
     LZMA/XA...
RPM の四方山話

 rpmdb が壊れたー(> <)
  昔(RH8, RH9)はよく壊れたもんだ、、、
  /var/lib/rpm/__db.xxx のキャッシュを削除すれ
  ば直るかも?(場合によっては rpm –rebuil...
rpm コマンド(1)

  クエリフォーマットのカスタマイズ

# rpm -q rpm
rpm-4.4.2.3-18.el5

# rpm -q --qf "%{name}-%{version}-%{release}¥n" rpm
rpm...
rpm コマンド(2)

   ファイル情報を出力する


# rpm -ql bc
/usr/bin/bc
/usr/bin/dc
/usr/share/doc/bc-1.06
…

# rpm -q --dump bc
/usr/bin/...
rpm コマンド(3)

   依存関係(provides/require)を調べる


python パッケージが提供する機能              python パッケージが要求する機能
# rpm -q --provides pyt...
rpm コマンド(4)

   依存チェーンを辿る

rpm パッケージが require している機能を提供するパッケージを調べる
# rpm -q --requires rpm | sed s"/[<> ].*//"g | xargs -...
rpm2cpio コマンド

   rpm パッケージを展開する
# mkdir work; cd work
# rpm2cpio ../bc-1.06-21.src.rpm | cpio -div
bc-1.06-info_exp_bess...
RPM API(1)

 rpm-python (python バインディング) がお奨め
  rpm-python を利用する主なパッケージ
    Anaconda (インストーラ)
    yum (アップデータ)
    sy...
RPM API(2)

 その他の言語バインディング
  rpm-libs (C 言語)
    rpm/rpm-build パッケージ以外は使われていない?
  perl-rpm
    http://search.cpan.org...
RPM API(3) -バージョン比較-

 RPM の API を使用しなければならない
   1.2-1
   1.2.1-1 (RPM 的にはこれが最も高い)
   1.2a-1
 Pilot python Fl.4 -rpm ...
RPM パッケージング

 パッケージング + リポジトリ構築
  spec ファイルを作成する
  ビルド環境を構築する
  yum リポジトリを作成、更新する
 Debian GNU/Linux上でRPMパッケージ・
 Yumリポ...
rpmbuild コマンド

  詳細は man rpmbuild を参照

spec ファイルの検証ができる
# rpmbuild --nobuild bc.spec

%prep を実行する(ソースを展開してパッチが当たるかテスト)
# ...
トリガースクリプトの仕様(1)

 spec ファイルでRPM パッケージのインス
 トール(アンインストール)時に特別な処理を
 実行する
    %pre : インストール前に実行
    %post : インストール後に実行
  ...
トリガースクリプトの仕様(2)

 (たぶん歴史的に)仕様が複雑になってる
    rpm-4.4 以降は %pretrans, %posttrans が使え
     るようになったらしい
    http://rpm5.org/doc...
トリガースクリプトの使用例

 なるべくシンプルに使った方が良い
  %post : インストール後に実行
    初期化設定、サービス追加、サーバ再起動
  %postun : アンインストール後に実行
    ここでサーバ再起動は...
トリガースクリプトの弊害(1)

 インストール時にシステムの環境情報か
  ら設定ファイルを生成する
 Debug Hacks 番外編(2) - RPM コマンドでは
  分からないファイルのパッケージを調べ
  る-
  http:/...
トリガースクリプトの弊害(2)

 RPM パッケージのアップグレードは以下の
 順番で実行される
 1.        全ての %pretrans を実行
 2.        新パッケージをインストール         bind パッケー...
パッケージアップデータ

 yum(Yellow dog Updater Modified)
   Yellow Dog Linux (PPC) のために開発された
   Red Hat 系のデファクトスタンダード?
 Red Hat ...
yum コマンド(1)

  yum しか知らなくても大丈夫?

ネットワーク経由でインストールやアップデートも簡単
# yum install python
# yum -y update python (-y を付けると自動的にアップグレ...
yum コマンド(2)

   依存関係を調べるのも yum の方が簡単?

# yum deplist rpm
Loaded plugins: fastestmirror
Loading mirror speeds from cached ...
yumdownloader コマンド

  yum-utils もインストールしておきたい

RPM パッケージをダウンロードする
# yumdownloader bc
# yumdownloader --source bc
※ CentOS...
拡張リポジトリ(1)

 yum で使用するパッケージを追加できる
 /etc/yum.repos.d/ に設定ファイルを置く
 拡張リポジトリは “enabled=0” をセットして、通常
   は使用しないようにした方が良い
 Ce...
拡張リポジトリ(2)

 yum のデータ通信は http プロトコル
 リポジトリは Web サーバさえがあれば、
  簡単に作成できる
 特定ユーザ向けにリポジトリへの認証を
  行うには別の細工が必要
  リポジトリの正当性は認証...
RHEL の国内サーバシェア

 日本ではとにかく RHEL が強い
  国内 Linux サーバ市場シェアの84%以上?




 IDC Japan 調査レポート
  http://www.idcjapan.co.jp/Report...
Red Hat 系ディストリ

 Fedora
   Red Hat Enterprise Linux (Fedora ベース)
     Oracle Enterprise Linux (RHEL ベース)
     Asianux/...
ディストリの目的(1)

 Fedora
   コミュニティ主導
   Red Hat 社はスポンサー
   最新パッケージの統合、レビュー、テスト
   迅速な技術革新を試みる
   リリースサイクルは6ヶ月
   メンテナンス...
ディストリの目的(2)

 RHEL(Red Hat Enterprise Linux)
   Fedora の実績をベースに開発
   Red Hat 社が商用サポート
   安定性とアップデートの互換性を重視する
   ISV/I...
ディストリの目的(3)

 CentOS
  Community ENTerprise Operating System
  RHELのソースをリビルド
  Red Hat 社は無関係
  RHEL の Certification が...
Upcoming SlideShare
Loading in …5
×

曖昧 RPM 講座

4,104 views

Published on

about RPM Package Manager

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,104
On SlideShare
0
From Embeds
0
Number of Embeds
139
Actions
Shares
0
Downloads
15
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

曖昧 RPM 講座

  1. 1. 曖昧 RPM 講座 2010/5/29(SAT.) T2Y
  2. 2. アジェンダ  RPM とは  構造とバージョン  コマンドと関連ユーティリティ  RPM パッケージング  spec ファイルとソース RPM  yum リポジトリ  RHEL と Linux ディストリビュージョン  Red Hat 系ディストリビューション
  3. 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. 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. 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. 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. 7. RPM の四方山話  rpmdb が壊れたー(> <)  昔(RH8, RH9)はよく壊れたもんだ、、、  /var/lib/rpm/__db.xxx のキャッシュを削除すれ ば直るかも?(場合によっては rpm –rebuilddb)  … タイトル付けたのに他になかった、、、
  8. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 19. トリガースクリプトの仕様(2)  (たぶん歴史的に)仕様が複雑になってる  rpm-4.4 以降は %pretrans, %posttrans が使え るようになったらしい  http://rpm5.org/docs/api/triggers.html  http://fedoraproject.org/wiki/Packaging/Scriptle tSnippets#Syntax
  20. 20. トリガースクリプトの使用例  なるべくシンプルに使った方が良い  %post : インストール後に実行  初期化設定、サービス追加、サーバ再起動  %postun : アンインストール後に実行  ここでサーバ再起動はやらない方が良いかも  なるべくやらない方が良いこと  設定ファイルを書きかえる  シンボリックリンクを張り替える  http://vinelinux.org/manuals/making-rpm-9.html
  21. 21. トリガースクリプトの弊害(1)  インストール時にシステムの環境情報か ら設定ファイルを生成する  Debug Hacks 番外編(2) - RPM コマンドでは 分からないファイルのパッケージを調べ る-  http://blog.miraclelinux.com/asianpen/2009/04/de bug-hacks-2--.html
  22. 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. 23. パッケージアップデータ  yum(Yellow dog Updater Modified)  Yellow Dog Linux (PPC) のために開発された  Red Hat 系のデファクトスタンダード?  Red Hat : up2date(独自開発)  Suse : YaST(独自開発)  Asianux : axtu(独自開発)  MiracleLinux : mlupdater(独自開発) どうして yum を使わないの? - yum 本体に認証の仕組みがない - 使い勝手がディストリビューションの差別化につながる
  24. 24. yum コマンド(1)  yum しか知らなくても大丈夫? ネットワーク経由でインストールやアップデートも簡単 # yum install python # yum -y update python (-y を付けると自動的にアップグレード) リポジトリ内を検索 # yum search python パッケージのヘッダ情報を表示 # yum info python リポジトリ内の全パッケージリストを表示 # yum list インストール済のパッケージリストを表示 # yum list installed
  25. 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. 26. yumdownloader コマンド  yum-utils もインストールしておきたい RPM パッケージをダウンロードする # yumdownloader bc # yumdownloader --source bc ※ CentOS でソースをダウンロードするには /etc/yum.repos.d/CentOS-Base.repo ファイルに ソース RPMS のダウンロード設定を追加する必要がある
  27. 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. 28. 拡張リポジトリ(2)  yum のデータ通信は http プロトコル  リポジトリは Web サーバさえがあれば、 簡単に作成できる  特定ユーザ向けにリポジトリへの認証を 行うには別の細工が必要  リポジトリの正当性は認証ではなく、個々の パッケージの署名確認?
  29. 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. 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. 31. ディストリの目的(1)  Fedora  コミュニティ主導  Red Hat 社はスポンサー  最新パッケージの統合、レビュー、テスト  迅速な技術革新を試みる  リリースサイクルは6ヶ月  メンテナンス期間は13ヶ月  http://ja.wikipedia.org/wiki/Fedora
  32. 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. 33. ディストリの目的(3)  CentOS  Community ENTerprise Operating System  RHELのソースをリビルド  Red Hat 社は無関係  RHEL の Certification がおそらく動く  リリース/メンテナンス期間は RHEL と同じ  RHEL リリース後、約1ヶ月程度でリリース  http://ja.wikipedia.org/wiki/CentOS

×