open build service 道場―パッケージの新規作成編

19
2014-09-14 1 Open Build Service 道場 パッケージの新規作成編 作りかけバージョン Fuminobu TAKEYAMA (@ftake)

Upload: fuminobu-takeyama

Post on 11-Jul-2015

188 views

Category:

Technology


1 download

TRANSCRIPT

2014-09-14 1

Open Build Service 道場パッケージの新規作成編

作りかけバージョン

Fuminobu TAKEYAMA (@ftake)

2014-09-14 2

新規パッケージの作成

● 新しいサブプロジェクトも作成しましょう– 新しいパッケージを作成して、どこかのプロジェクトに取り込んでも

らいたい場合– home:xxxx を使わない

● コマンドラインは面倒なので Web UI で– Subprojects タブの Create subproject

2014-09-14 3

プロジェクトの初期設定

● リポジトリを追加● 必ず取り込んでもらう先のプロジェクトを追加する

– openSUSE 13.1 とか…ではなく● 単に配布するつもりなら、これで OK

– 追加したプロジェクトのパッケージがビルドに使われる● 例えば M17N 場合は

– M17N/openSUSE_13.1 他を追加する● M17N のパッケージ + openSUSE_13.1

2014-09-14 4

リポジトリの追加

● Add Repositories で pick one via advanced interface で順に追加する– 名前はビルド時に使う– M17N, openSUSE_Factory, i586, x86_64

● Name は openSUSE_Factory– M17N, openSUSE_13.1, i586, x86_64

● Name は openSUSE_13.1– M17N, openSUSE_12.3, i586, x86_64

● Name は openSUSE_12.3● M17N を含まない openSUSE_13.1 だけを追加することも可能

– 名前は衝突しないように工夫

2014-09-14 5

リポジトリ設定の Flag とは

● Build Flag– そのリポジトリ向けに実際にビルドするかどうか

● Publish Flag– download.opensuse.org でビルドが終わったパッケージを

公開するか● Debuginfo Flag

– デバッグシンボルが入った *-debuginfo / *-debugsourceパッケージを作成するかどうか

● Use for Build Flag– パッケージを他のプロジェクト内の他のパッケージをビルドするため

に使うかどうか(普通は常に ON )

2014-09-14 6

いよいよパッケージの作成

● プロジェクトのチェックアウト– $ osc co home:xxxx:yyyy

● 作成したプロジェクト名● 初めての人はパスワードを求められます● cd で xxxx:yyyy へ移動

● OBS パッケージの新規作成– $ osc mkpac hogehoge– Web UI でも OK だけど、 co が必要

2014-09-14 7

Spec ファイル新規作成

● テンプレから新規作成– $ rpmdev-newspec hogehoge– ディレクトリ内に hogehoge.spec ができる

rpmdev-newspec のインストール$ sudo zypper ar -c obs://devel:tools/openSUSE_13.1 devel_tools$ sudo zypper ref devel_tools$ sudo zypper install rpmdevtools

2014-09-14 8

spec ファイルのヘッダー

● Version: 1.0.0– # バージョンです

● Release: 0– 変更しないでください

● Summary: a very useful application– 説明を具体的に書いてください

● License: GPL-2.0+– 書き方には決まりがあります

● https://en.opensuse.org/openSUSE:Packaging_guidelines#Licensing● このページの表に書いてある書式

2014-09-14 9

spec ファイルのヘッダー

● Group: System/I18n/Japanese– 以下の中から適当なものを選びます

https://en.opensuse.org/openSUSE:Package_group_guidelines● Url: http://example.com/

– アップストリーププロジェクトの URL

2014-09-14 10

spec ファイルのヘッダー

● Source0: hoge-%{version}.tar.xz– ビルドに使用するソースファイル– %{version} は Version: タグの値で置き換えらる– hoge-1.0.0.tar.xz は OBS パッケージのディレクトリに

入っている必要あり● 注意

– Source0: http://example.com/hoge-%{version}.tar.xzのような指定も可能であるが、 URL が存在しないとエラーになる

● この場合もファイルはパッケージ内に含まれている必要あり

2014-09-14 11

spec ファイルのヘッダー

● BuildRequires: libfoo-devel >= 1.0BuildRequires: libbar-devel– ビルドに必要なパッケージを列挙します

● Requires:– インストール時に必要な依存関係(データ、依存するコマンド)– BuildRequires で指定したライブラリのパッケージは自動的に

Requires に追加されるので書いてはいけない● libfoo1 など

2014-09-14 12

%description, %prep

● %description– パッケージの長い説明

● %prep– 特に変更は必要なし– どのようにアーカイブを展開して cd するかを書く

● デフォルトは、展開して、 %{name}-%{version} へ cd

2014-09-14 13

%build, %install

● %build– どうやってビルドするかをシェルスクリプトのように書く– %configure は openSUSE で必要なオプションをつけて

./configure をしてくれます● %install

– ファイルをインストールために必要なコマンドを書く● (%clean)

– openSUSE では必要ない

2014-09-14 14

%files

● このパッケージが提供するファイル一覧を列挙する● %{_bindir}/hoge

– /usr/bin/hoge を追加する● %dir %{_datadir}/hoge/

– /usr/share/hoge ディレクトリを追加する● %dir %{_datadir}/hoge/*

– /usr/share/hoge 以下のすべてのファイルを追加● %doc

– 絶対パスの場合 : ドキュメントとしてファイルをパッケージに追加– 相対パスの場合 : /usr/share/packages/hoge/ にファイルを

コピーし、ドキュメントとして追加

2014-09-14 15

ライブラリの場合の注意

● インストール・アンインストール時に /sbin/ldconfig– %post -p /sbin/ldconfig– %postun -p /sbin/ldconfig

● インストール先は %{_libdir} で指定– ビルドターゲットに応じて変わる

● /usr/lib64 (x86_64)● /usr/lib (i586)

2014-09-14 16

更新履歴

● パッケージの内容を更新して、提出するときは更新履歴に追記する

● $ osc vc– %changelog の下には直接書かない– hoge.changes に書き込まれる

-------------------------------------------------------------------Mon Mar 24 19:00:00 UTC 2014 – [email protected]

- Initial package

2014-09-14 17

ソースファイルの登録

● OBS パッケージの中身はおよそ以下の通り– パッチが入る場合も

● osc add を使って登録する– $ osc add hoge-1.0.0.tar.xz– $ osc add hoge.spec– $ osc add hoge.changes

2014-09-14 18

ビルド

● ローカルビルド– $ osc build –-local-package openSUSE_13.1 x86_64

● 後ろの2つのオプションは省略すると ~/.oscrc に書かれた値が使われる

● 一度 commit するまで --local-package が必要● アップロード

– $ osc commit● オンラインの OBS サーバーにファイルを転送

2014-09-14 19

コミットの前に

● format_spec_file を実行して、 spec ファイルを整形する– $ osc service run format_spec_file

● 変更点を確認する– $ diff -u hoge.spec _service:format_spec_file:hoge.spec

● 変更点がなければファイルは出力されない– $ mv _service:format_spec_file:hoge.spec hoge.spec