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