Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
曖昧 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,496 views

Published on

about RPM Package Manager

Published in: Technology
  • Dating direct: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2Qu6Caa ❶❶❶
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

曖昧 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

×