More Related Content Similar to RPMで行こう!! RPMを使いたくなるといいなというお話
Similar to RPMで行こう!! RPMを使いたくなるといいなというお話 (20) RPMで行こう!! RPMを使いたくなるといいなというお話1. RPMで行こう!!
http://fedora.jp/
RPMを使いたくなるといいなというお話
Fedora JP Project Tadashi Jokagi
<jokagi@fedora.jp>
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 1
2. これは何の話?
http://fedora.jp/
● Fedora Coreで使用されているパッケージ管理
システムRPMとそのメリット・デメリットと、RPM
の作り方などのセミナーです。
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 2
3. セッションの流れ
http://fedora.jp/
● RPMって何?
● tarballから直接ビルド・インストールとの違い
やメリット・デメリット
● RPMフロントエンドについて(yum他)
● 自分でRPMを作ろう
● 自分でリポジトリを作ろう(yum)
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 3
4. このセッションで一番いいたいこと
http://fedora.jp/
● tarballを直接ビルドしてインストールするな
● RPMを作ってインストールしろ!!
– なので他が薄いですがあしからず;-)
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 4
5. RPMって何?
http://fedora.jp/
● Red Hat, Inc.が開発したパッケージ管理システ
ム
● RPM Package Managerの略
● 昔はRedhat Package Managerの略
● Red Hat, Inc. のjbjという人が現在のメンテ
ナー
● システムのパッケージ構成の管理とパッケー
ジファイルのメンテナンスを行う
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 5
6. RPMを使うとどうよくなる?
http://fedora.jp/
● はじめにSPECファイルという形式でビルド手
順を記述するので、二度目以降のビルドが楽
になる
● インストールされるファイルを把握できる
● 基本的に依存関係を正しく保ってくれる
– 正しく処理できない場合、多くはユーザーが悪い
● ファイルのインストールだけではなくシステム
の制御も同時に行える
● パッケージの正当性を調べることができる
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 6
7. RPMみたいなのって他にあるの?
http://fedora.jp/
● deb – Debian GNU/Linuxで用いられている形
式
● Portage – Gentoo GNU/Linuxで用いられる形
式
● Ports/Package – FreeBSDで用いられる形式
● Fink – Mac OS Xで用いられる形式(Apple製で
はない)
● pkg - Solarisで用いられる形式
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 7
8. RPMを使わないビルドとインストール
http://fedora.jp/
● ありがちパターン
$ gzip -dc foo-1.0.0.tar.gz | tar zxf -
$ cd foo-1.0.0
$ ./configure –prefix=/usr/local
$ make
$ su -
# cd .../foo-1.0.0
# make install
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 8
9. RPMを使ったビルドとインストール
http://fedora.jp/
● そんなに難しくない
$ rpmbuild --rebuild foo-1.0.0-1.src.rpm (case1)
$ rpmbuild -ta foo-1.0.0-tar.gz (case2)
$ rpmbuild -ba foo.spec (case3)
$ su -
# rpm -ihv .../foo-1.0.0-1.i386.rpm
●そもそもバイナリが既にあればビルドすら要らない
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 9
10. RPMのフロントエンド
http://fedora.jp/
● RPMを便利に管理するためのアプリケーション
● 一度使い出すと、なくては困る人間が退化す
るアプリケーション
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 10
11. フロントエンドって何?
http://fedora.jp/
● リポジトリというRPMを集めたディレクトリから
必要なRPMを入手できる
– リモートサーバーでもOK
– 複数のリポジトリを同時に処理できる
● 依存関係もまとめて管理してくれる
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 11
12. フロントエンドって何?
http://fedora.jp/
● リポジトリ上の更新されたRPMをうまくアップ
デートしてくれる
● 自動実行しておくと勝手に最新になっていく
– サーバー用途ではまったくすすめないが
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 12
13. RPMにはなにがあるの?
http://fedora.jp/
● Fedora Coreはyum・up2dateが標準パッケージ
管理システム
– Up2dateは元々Red Hat Linux・Red Hat Enterprise
Linux用
● Fedora Core標準ではないがapt-rpmも有名
– ただし事実上標準ともいえる
● その他のディストリビューション
– turbopkg(zabon) - Turbolinux
– YAST – SuSE
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 13
14. yumって何?
http://fedora.jp/
● Yellow dog Updater, Modifiedの略
● 公式サイトは
http://linux.duke.edu/projects/yum/
● 元々Yellowdog Linuxのアプリケーション
● pythonで記述されている
● CentOSもyumが使える(らしい)
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 14
15. apt-rpmって何?
http://fedora.jp/
● aptはAdvanced Package Toolの略
● 元々Debian GNU/Linuxのアプリケーション
– RPM管理なのでapt-rpmに名前が変わった
● apt-rpmの公式サイトは
http://apt4rpm.sourceforge.net/
● Vine Linuxのパッケージ管理システム
● 私はかたくなに使っていない(苦笑)
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 15
16. リポジトリって何?
http://fedora.jp/
● 下記の情報を持つもの
– RPMを集めたディレクトリ
– RPM毎の固有情報
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 16
17. GUIないの?
http://fedora.jp/
● あります
● yum
– gyumが有名
– 私はそもそもLinuxでGUIを使わないのであまり知
らない
● apt-rpm
– Synapticが有名
– apt-rpmもGUIも使わないのでさらに知らない
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 17
18. gyumを使う
http://fedora.jp/
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 18
19. yumとapt-rpmどっちがいいの?
http://fedora.jp/
● yumのメリット
– 標準でついてくる
– 標準で基本的な設定がされている
● yumのデメリット
– メモリを多く消費する
– 若干重い
– 最低限の機能しかない
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 19
20. yumとapt-rpmどっちがいいの?
http://fedora.jp/
● apt-rpmのメリット(yumと比較して)
– 多機能。とにかく必要なことはおおむねできる。
– yumに比べ、少メモリの消費と高速である
● apt-rpmのデメリット
– Vine Linux以外はapt-rpm自体の配布元が複数あ
り、衝突の発生がしやすい
● 問題が発生すると、「どのapt-rpm使ってるの?」から始
まる
– 同じくディストリビューションに特化したリポジトリで
ない場合が多く、ディストリビューションのRPMとの
衝突が起こることがある
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 20
21. さてさて少し難しくなります
http://fedora.jp/
● そろそろRPMを作ってみましょう…
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 21
22. RPMってどうやって作るの?
http://fedora.jp/
● 必要なソースファイルなどを用意する
● SPECファイルを用意する
● rpmbuildコマンドでビルドを行う
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 22
23. SPECファイル
http://fedora.jp/
● RPMのビルド手順を記述したファイル
● 内部でいくつかのセクションを持つ
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 23
24. セクションって何よ?
http://fedora.jp/
● 目的に応じた作業を記述する場所
– グローバル関連(ID・packageセクション)
– ビルド関連(prep・buildセクション)
– パッケージ構築関連(clean・installセクション)
– パッケージ構成関連(filesセクション)
– インストール関連(pre・post・preun・postunセクショ
ン)
– 変更履歴関連(changelogセクション)
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 24
25. グローバル関連セクション
http://fedora.jp/
● RPMについての全体的な情報を記述する
● IDセクション
– パッケージ名(Name)グループ(Group)
– バージョン番号(Version)リリース番号(Release)
– ソースファイル(Sources)パッチファイル(Patch)
– 依存関係(Requires)
– その他もろもろ
● Description
– RPMの説明
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 25
26. グローバル関連セクション
http://fedora.jp/
● Packageセクション
– サブパッケージの情報
– IDセクションとdescriptionセクションをいくつか記述
する
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 26
27. パッケージグループ
http://fedora.jp/
● /usr/share/doc/rpm-<version>/GROUPSに
記述されている
●
Amusements/Games Applications/Multimedia Documentation
Amusements/Graphics Applications/Productivity System Environment/Base
Applications/Archiving Applications/Publishing System Environment/Daemons
Applications/Communications Applications/System System Environment/Kernel
Applications/Databases Applications/Text System Environment/Libraries
Applications/Editors Development/Debuggers System Environment/Shells
Applications/Emulators Development/Languages User Interface/Desktops
Applications/Engineering Development/Libraries User Interface/X
Applications/File Development/System User Interface/X Hardware Support
Applications/Internet Development/Tools
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 27
28. ビルド関連セクション
http://fedora.jp/
● prepセクション
– ビルドの準備を行う
– 大体はtarballの展開とパッチ当て
● buildセクション
– 実際のビルドを行う
– 大体は./configure && make
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 28
29. パッケージ構築関連セクション
http://fedora.jp/
● installセクション
– 環境変数RPM_BUILD_ROOTの下に仮想ディレクト
リを構築する
– 仮想ディレクトリはほぼ実際にインストールされる
環境に近い状態を作る
– 大体はmake install DESTDIR=$
{RPM_BUILD_ROOT}
● cleanセクション
– 仮想ディレクトリを掃除
– 大体はrm -rf ${RPM_BUILD_ROOT}
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 29
30. パッケージ構成関連
http://fedora.jp/
● filesセクション
– デフォルトとファイル・ディレクトリ毎にパーミッショ
ンやオーナーを指定できる
– 設定ファイルとしてマーキングできる
– サブパッケージが存在する場合、サブパッケージ
毎にfilesセクションを記述する
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 30
31. インストール関連セクション
http://fedora.jp/
● pre・post
– インストール・アップデート時に行う処理を記述す
る
– preはファイルがインストール処理される前に実行
する処理
– postはファイルがインストール処理された後に実
行する処理
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 31
32. インストール関連セクション
http://fedora.jp/
● preun・postun
– アンインストール・アップデート時に行う処理を記
述する
– preはファイルがアンインストール処理される前に
実行する処理
– postはファイルがアンインストール処理された後に
実行する処理
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 32
33. インストール関連セクション
http://fedora.jp/
● アップデートとは実はアンインストールとインス
トールの組み合わせ
– $1の値によってインストール・アンインストール・
アップデートを識別する
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 33
34. 変更履歴関連
http://fedora.jp/
● 読んで字のごとく
● いわゆるChangeLogを記述する
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 34
35. RPMを作りましょう
http://fedora.jp/
● とりあえず何か作りましょう
– 何にしようかな…
– …
– zzz
–
– skfのRPMでも作りましょう
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 35
36. skfって何?
http://fedora.jp/
● nkf互換の漢字フィルター
– 中国の文字コードも一部処理できるらしい
– 題材にするために使っただけであまり詳しく知りま
せん(すみません…)
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 36
37. 簡単なSPECファイル
http://fedora.jp/
● グローバル関連セクション
Summary: skf is kanji filter and compatible nkf.
Name: skf
Version: 1.93b2
Release: 1
License: BSD
Group: Applications/Text
URL: http://skf.sourceforge.jp/
Source0: %{name}-%{version}b-1.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-
root
%description
skf is kanji filter and compatible nkf.
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 37
38. 簡単なSPECファイル
http://fedora.jp/
● ビルド関連セクション
● %prep
%setup -q
%build
./configure --prefix=%{_prefix}
make
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 38
39. 簡単なSPECファイル
http://fedora.jp/
● パッケージ構築関連セクション
%install
rm -rf ${RPM_BUILD_ROOT}
make install DESTDIR=${RPM_BUILD_ROOT}
rm -rf ${RPM_BUILD_ROOT}%{_docdir}/%{name}
rm -rf ${RPM_BUILD_ROOT}%{_prefix}/man
# file list without man
find ${RPM_BUILD_ROOT} -type f | sed "s;$
{RPM_BUILD_ROOT};;g" | grep -v "%{_mandir}" > filelist
# file list with man(gzipped)
find ${RPM_BUILD_ROOT}%{_mandir} -type f -exec echo {}.
gz ; | sed "s;${RPM_BUILD_ROOT};;g" >> filelist
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 39
40. 簡単なSPECファイル
http://fedora.jp/
● パッケージ構成関連セクション
%files -f filelist
%defattr(-,root,root,-)
%doc *txt
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 40
41. SPECからRPMを作ってみる
http://fedora.jp/
● 変更履歴関連セクション
%changelog
* Sat Mar 26 2005 <jokagi@fedora.jp> -
- Initial build.
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 41
42. 実際に作成してみよう
http://fedora.jp/
● SOURCESディレクトリにソースを保存
● SPECSディレクトリに先ほどのSPECを保存
● rpmbuild -ba skf.specでビルドを開始
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 42
43. 作成したRPMをインストール
http://fedora.jp/
# rpm -ihv skf-1.92b-1.i386.rpm
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 43
44. とりあえず作るだけなら簡単
http://fedora.jp/
● さっきのSPECファイルを雛形にすれば簡単な
ものはすぐにRPMにできる
● この程度なら実はchkinstallというものを使え
ば似たようなものが作れる
● 手を抜かずにfilesセクションを書くこと
– 特に設定ファイルがあったり、サービスdaemon
だったり共有ライブラリなどの場合
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 44
45. もうちょっとちゃんと作る
http://fedora.jp/
● ちゃんと作るとfilesセクションは手を抜けない
● 必要なファイルを列挙します
– 設定ファイルは%configなどでマーキングすること
%{_bindir}/skf
%{_mandir}/ja/man1/skf.1j.gz
%{_datadir}/skf/lib/*.stb
%{_datadir}/skf/lib/*.txt
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 45
46. 覚えておきたいデフォルトマクロ
http://fedora.jp/
● マクロコマンド
– %__rm %__mv %__cp – ファイルを操作するコマンドの
擬似マクロコマンド
– %setup – tarballの展開と、展開先への移動をする
擬似マクロコマンド
– %patch - パッチを適用する擬似マクロコマンド
– %configure – ./configureにありがちな引数を付加
した擬似マクロコマンド
– %makeinstall - makeコマンドにありがちなインス
トール用引数を付加した擬似マクロコマンド
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 46
47. 覚えておきたいデフォルトマクロ
http://fedora.jp/
● マクロ定数
– %{_prefix} – ベースになるインストール先(一般的に
/usr)
– %{_sysconfdir} – 設定ファイルのディレクトリ(一般
的に/etc)
– %{_bindir}・%{_sbindir} - 実行ファイルのインストール
先(一般的に%{_prefix}/{bin,sbin})
– %{_datadir} データを保存するディレクトリ(一般的
に%{_prefix}/{share})
– %{_mandir} マニュアルを保存するディレクトリ(一般
的に%{_prefix}/{share}/man)
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 47
48. 覚えておきたいデフォルトマクロ
http://fedora.jp/
● マクロ定数
– %{SOURCE<NUMBER>} - ソースタグで指定した
ファイルのパス
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 48
49. 自分でリポジトリを作ろう
http://fedora.jp/
● ここではyumのリポジトリを作ります
● apt-rpmは使ってないのでパス!!
– 時間もないしね…(言い訳ですか
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 49
50. っで、そんなもの必要なの?
http://fedora.jp/
● こういう人はあると便利
– 自作RPMを、複数台サーバーに適応している人
(例えばサーバー業者)
– 自作RPMをたくさんインターネットに公開している
人
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 50
51. それでは作ります
http://fedora.jp/
● 作るのは簡単
– RPMを一つのディレクトリに集めて
– データベースを作るだけ
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 51
52. 作業ディレクトリを用意
http://fedora.jp/
$ mkdir -p /var/www/html/repos/RPMS/i386/
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 52
53. RPMをコピーしまくる
http://fedora.jp/
$ cp -a *.rpm
/var/www/html/repos/RPMS/i386/.
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 53
54. データベースを作る
http://fedora.jp/
$ cd /var/www/html/repos/
$ createrepo RPMS
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 54
55. それだけ?
http://fedora.jp/
● リポジトリ作成それだけなのです
● 後はyumにそのリポジトリを指定するだけです
ぐに使えます
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 55
56. 本当に使えるか試してみよう
http://fedora.jp/
● 先ほどのskfをyum経由でインストール
– あらかじめrpm -e skfで削除しておく
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 56
57. yumの指定
http://fedora.jp/
● /etc/yum.repo.d/にmyrepos.repoとして作成
name=Fedora Core My Repository
baseurl=http://example.com/repos/
enabled=1
gpgcheck=0
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 57
58. ローカルのデータベースを更新
http://fedora.jp/
# yum list
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 58
59. yumでインストール
http://fedora.jp/
# yum install skf
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 59
60. 時間あるかな?
http://fedora.jp/
● これ位はRPMを使うなら覚えておこう!!
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 60
61. インストール・アップデート・アンイン
ストール http://fedora.jp/
● インストール
– rpm -i <rpm-filename>
– rpm -U <rpm-filename>
● アップデート
– rpm -F <rpm-filename>
– rpm -U <rpm-filename>
● アンインストール
– rpm -e <package-name>
● -i・-U・-Fは-hvを同時に指定するのが一般的
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 61
62. インストール前
http://fedora.jp/
● RPMの情報
– rpm -qip <rpm-file>
● RPMに含まれるファイル
– rpm -qlp <rpm-file>
● RPMが提供するもの
– rpm -qp –-provides <rpm-file>
● RPMの依存関係
– rpm -qp –-requires <rpm-file>
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 62
63. インストール前
http://fedora.jp/
● RPMの情報を整形出力
– rpm -qp –-queryformat “<format>” <rpm-file>
● 変更履歴出力
– rpm -qp –changelog <rpm-file>
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 63
64. インストール後
http://fedora.jp/
● 基本的に「インストール前」から「-p」を抜くとイ
ンストール済みRPMが対象になる
– ファイル名ではなくパッケージ名を指定すること
● ex)rpm -ql httpd
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 64
65. インストール後
http://fedora.jp/
● ファイルを保持するRPM名
– rpm -qf </dir/to/file>
● インストール済みRPM一覧
– rpm -qa <wildcard>
– rpm -qa –-last <wildcard> インストール順表示
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 65
66. 終り
http://fedora.jp/
● わざわざRPMを作るとここが便利ですよ
– 共通言語的な作業手順書の作成(SPECファイル)
– インストール済みバージョンの管理
– 共有ライブラリ他との依存性の管理
– ファイルからインストールしたソフトウェアの逆引き
– 正確なアンインストール
– 単にファイルのコピー以上の処理
– RPMのインストール先ホストにgccがいらない
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 66
67. http://fedora.jp/
ご清聴ありがとうございました。
2005年3月26日
Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project 67