rpmで行こう!! rpmを使いたくなるといいなというお話

Post on 05-Jun-2015

1.913 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

1

http://fedora.jp/

RPMで行こう!!

RPMを使いたくなるといいなというお話

Fedora JP Project Tadashi Jokagi<jokagi@fedora.jp>

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

2

http://fedora.jp/

これは何の話?

● Fedora Coreで使用されているパッケージ管理システムRPMとそのメリット・デメリットと、RPMの作り方などのセミナーです。

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

3

http://fedora.jp/

セッションの流れ

● RPMって何?● tarballから直接ビルド・インストールとの違い

やメリット・デメリット● RPMフロントエンドについて(yum他)● 自分でRPMを作ろう● 自分でリポジトリを作ろう(yum)

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

4

http://fedora.jp/

このセッションで一番いいたいこと

● tarballを直接ビルドしてインストールするな● RPMを作ってインストールしろ!!

– なので他が薄いですがあしからず;-)

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

6

http://fedora.jp/

RPMを使うとどうよくなる?

● はじめにSPECファイルという形式でビルド手順を記述するので、二度目以降のビルドが楽になる

● インストールされるファイルを把握できる● 基本的に依存関係を正しく保ってくれる

– 正しく処理できない場合、多くはユーザーが悪い

● ファイルのインストールだけではなくシステムの制御も同時に行える

● パッケージの正当性を調べることができる

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

10

http://fedora.jp/

RPMのフロントエンド

● RPMを便利に管理するためのアプリケーション● 一度使い出すと、なくては困る人間が退化す

るアプリケーション

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

11

http://fedora.jp/

フロントエンドって何?

● リポジトリというRPMを集めたディレクトリから必要なRPMを入手できる– リモートサーバーでもOK

– 複数のリポジトリを同時に処理できる

● 依存関係もまとめて管理してくれる

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

12

http://fedora.jp/

フロントエンドって何?

● リポジトリ上の更新されたRPMをうまくアップデートしてくれる

● 自動実行しておくと勝手に最新になっていく– サーバー用途ではまったくすすめないが

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

16

http://fedora.jp/

リポジトリって何?

● 下記の情報を持つもの– RPMを集めたディレクトリ

– RPM毎の固有情報

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

17

http://fedora.jp/

GUIないの?

● あります● yum

– gyumが有名

– 私はそもそもLinuxでGUIを使わないのであまり知らない

● apt-rpm– Synapticが有名

– apt-rpmもGUIも使わないのでさらに知らない

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

18

http://fedora.jp/

gyumを使う

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

19

http://fedora.jp/

yumとapt-rpmどっちがいいの?

● yumのメリット– 標準でついてくる

– 標準で基本的な設定がされている

● yumのデメリット– メモリを多く消費する

– 若干重い

– 最低限の機能しかない

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

21

http://fedora.jp/

さてさて少し難しくなります

● そろそろRPMを作ってみましょう…

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

22

http://fedora.jp/

RPMってどうやって作るの?

● 必要なソースファイルなどを用意する● SPECファイルを用意する● rpmbuildコマンドでビルドを行う

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

23

http://fedora.jp/

SPECファイル

● RPMのビルド手順を記述したファイル● 内部でいくつかのセクションを持つ

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

24

http://fedora.jp/

セクションって何よ?

● 目的に応じた作業を記述する場所– グローバル関連(ID・packageセクション)

– ビルド関連(prep・buildセクション)

– パッケージ構築関連(clean・installセクション)

– パッケージ構成関連(filesセクション)

– インストール関連(pre・post・preun・postunセクション)

– 変更履歴関連(changelogセクション)

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

25

http://fedora.jp/

グローバル関連セクション

● RPMについての全体的な情報を記述する● IDセクション

– パッケージ名(Name)グループ(Group)

– バージョン番号(Version)リリース番号(Release)

– ソースファイル(Sources)パッチファイル(Patch)

– 依存関係(Requires)

– その他もろもろ

● Description– RPMの説明

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

26

http://fedora.jp/

グローバル関連セクション

● Packageセクション– サブパッケージの情報

– IDセクションとdescriptionセクションをいくつか記述する

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

28

http://fedora.jp/

ビルド関連セクション

● prepセクション– ビルドの準備を行う

– 大体はtarballの展開とパッチ当て

● buildセクション– 実際のビルドを行う

– 大体は./configure && make

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

30

http://fedora.jp/

パッケージ構成関連

● filesセクション– デフォルトとファイル・ディレクトリ毎にパーミッショ

ンやオーナーを指定できる

– 設定ファイルとしてマーキングできる

– サブパッケージが存在する場合、サブパッケージ毎にfilesセクションを記述する

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

31

http://fedora.jp/

インストール関連セクション

● pre・post– インストール・アップデート時に行う処理を記述す

– preはファイルがインストール処理される前に実行する処理

– postはファイルがインストール処理された後に実行する処理

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

32

http://fedora.jp/

インストール関連セクション

● preun・postun– アンインストール・アップデート時に行う処理を記

述する

– preはファイルがアンインストール処理される前に実行する処理

– postはファイルがアンインストール処理された後に実行する処理

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

33

http://fedora.jp/

インストール関連セクション

● アップデートとは実はアンインストールとインストールの組み合わせ– $1の値によってインストール・アンインストール・

アップデートを識別する

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

34

http://fedora.jp/

変更履歴関連

● 読んで字のごとく● いわゆるChangeLogを記述する

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

35

http://fedora.jp/

RPMを作りましょう

● とりあえず何か作りましょう– 何にしようかな…

– …

– zzz

– skfのRPMでも作りましょう

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

36

http://fedora.jp/

skfって何?

● nkf互換の漢字フィルター– 中国の文字コードも一部処理できるらしい

– 題材にするために使っただけであまり詳しく知りません(すみません…)

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

38

http://fedora.jp/

簡単なSPECファイル

● ビルド関連セクション● %prep%setup -q

%build./configure --prefix=%{_prefix}make

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

40

http://fedora.jp/

簡単なSPECファイル

● パッケージ構成関連セクション%files -f filelist%defattr(-,root,root,-)%doc *txt

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

41

http://fedora.jp/

SPECからRPMを作ってみる

● 変更履歴関連セクション%changelog* Sat Mar 26 2005 <jokagi@fedora.jp> - - Initial build.

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

42

http://fedora.jp/

実際に作成してみよう

● SOURCESディレクトリにソースを保存● SPECSディレクトリに先ほどのSPECを保存● rpmbuild -ba skf.specでビルドを開始

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

43

http://fedora.jp/

作成したRPMをインストール

# rpm -ihv skf-1.92b-1.i386.rpm

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

44

http://fedora.jp/

とりあえず作るだけなら簡単

● さっきのSPECファイルを雛形にすれば簡単なものはすぐにRPMにできる

● この程度なら実はchkinstallというものを使えば似たようなものが作れる

● 手を抜かずにfilesセクションを書くこと– 特に設定ファイルがあったり、サービスdaemon

だったり共有ライブラリなどの場合

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

46

http://fedora.jp/

覚えておきたいデフォルトマクロ

● マクロコマンド– %__rm %__mv %__cp – ファイルを操作するコマンドの擬似マクロコマンド

– %setup – tarballの展開と、展開先への移動をする擬似マクロコマンド

– %patch - パッチを適用する擬似マクロコマンド

– %configure – ./configureにありがちな引数を付加した擬似マクロコマンド

– %makeinstall - makeコマンドにありがちなインストール用引数を付加した擬似マクロコマンド

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

48

http://fedora.jp/

覚えておきたいデフォルトマクロ

● マクロ定数– %{SOURCE<NUMBER>} - ソースタグで指定した

ファイルのパス

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

49

http://fedora.jp/

自分でリポジトリを作ろう

● ここではyumのリポジトリを作ります● apt-rpmは使ってないのでパス!!

– 時間もないしね…(言い訳ですか

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

50

http://fedora.jp/

っで、そんなもの必要なの?

● こういう人はあると便利– 自作RPMを、複数台サーバーに適応している人

(例えばサーバー業者)

– 自作RPMをたくさんインターネットに公開している人

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

51

http://fedora.jp/

それでは作ります

● 作るのは簡単– RPMを一つのディレクトリに集めて

– データベースを作るだけ

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

52

http://fedora.jp/

作業ディレクトリを用意

$ mkdir -p /var/www/html/repos/RPMS/i386/

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

53

http://fedora.jp/

RPMをコピーしまくる

$ cp -a *.rpm \ /var/www/html/repos/RPMS/i386/.

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

54

http://fedora.jp/

データベースを作る

$ cd /var/www/html/repos/$ createrepo RPMS

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

55

http://fedora.jp/

それだけ?

● リポジトリ作成それだけなのです● 後はyumにそのリポジトリを指定するだけですぐに使えます

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

56

http://fedora.jp/

本当に使えるか試してみよう

● 先ほどのskfをyum経由でインストール– あらかじめrpm -e skfで削除しておく

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

58

http://fedora.jp/

ローカルのデータベースを更新

# yum list

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

59

http://fedora.jp/

yumでインストール

# yum install skf

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

60

http://fedora.jp/

時間あるかな?

● これ位はRPMを使うなら覚えておこう!!

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

63

http://fedora.jp/

インストール前

● RPMの情報を整形出力– rpm -qp –-queryformat “<format>” <rpm-file>

● 変更履歴出力– rpm -qp –changelog <rpm-file>

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

64

http://fedora.jp/

インストール後

● 基本的に「インストール前」から「-p」を抜くとインストール済みRPMが対象になる– ファイル名ではなくパッケージ名を指定すること

● ex)rpm -ql httpd

Tadashi Jokagi <jokagi@fedora.jp>, 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 <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

66

http://fedora.jp/

終り

● わざわざRPMを作るとここが便利ですよ– 共通言語的な作業手順書の作成(SPECファイル)

– インストール済みバージョンの管理

– 共有ライブラリ他との依存性の管理

– ファイルからインストールしたソフトウェアの逆引き

– 正確なアンインストール

– 単にファイルのコピー以上の処理

– RPMのインストール先ホストにgccがいらない

Tadashi Jokagi <jokagi@fedora.jp>, Fedora JP Project2005年3月26日

67

http://fedora.jp/

ご清聴ありがとうございました。

top related