第1回 open build service 道場

43
2012/09/07 第1回 Open Build Service道場 1 第 1 回 Open Build Service 道場 武山 文信 日本 openSUSE ユーザ会 Twitter: @ftake Facebook: takeyamaf M17N メンテナー

Upload: fuminobu-takeyama

Post on 13-Nov-2014

2.404 views

Category:

Documents


3 download

DESCRIPTION

 

TRANSCRIPT

2012/09/07 第1回 Open Build Service道場 1

第 1 回 Open Build Service 道場

武山 文信日本 openSUSE ユーザ会

Twitter: @ftakeFacebook: takeyamaf

M17N メンテナー

2012/09/07 第1回 Open Build Service道場 2

Open Build Service

通称 OBS● 旧 openSUSE Build Service

パッケージング支援の Web アプリケーション● とそのインスタンス : build.opensuse.org● Tizen でも使っている、自前の Build Service も作成可

2012/09/07 第1回 Open Build Service道場 3

パッケージング支援プラットフォーム

パッケージのクラウドビルド環境● ソースコードから rpm パッケージを作成● 仮想環境で x86 (32bit, 64bit), PPC, ARM, SH, ... に対応

パッケージの配布環境の提供● ビルドしたパッケージを公開

コラボレーション● パッケージのバージョン管理

– ファイルへの変更を記録

● 他の人の変更の取り込み

2012/09/07 第1回 Open Build Service道場 4

ユースケース

最新のパッケージを追いかけるユーザが使うついでにパッケージを更新して、他の人に提供● 「あれ libvorbis が古い。アップデートしておくか」

アプリケーションの開発者が各ディストリ向けにパッケージを配布

2012/09/07 第1回 Open Build Service道場 5

目次 1/2

OBS のモデル、 openSUSE と OBS● プロジェクト、パッケージ● ディストリビューション開発プロセス

– Factory, 開発リポジトリ・パッケージ

コラボレーション● パッケージの branch/submit, レビュー

パッケージ開発● osc コマンド、 spec ファイル● openSUSE のルール

2012/09/07 第1回 Open Build Service道場 6

目次 2/2 後編?

プロジェクト管理● リポジトリの設定

OBS サービス● スペックファイルの自動フォーマット

その他● パッチの作成● kiwi ビルド

2012/09/07 第1回 Open Build Service道場 7

OBS のモデルopenSUSE と OBS

2012/09/07 第1回 Open Build Service道場 8

openSUSE の OBS

build.opensuse.org● 誰でもアカウントを作成して使用可能● openSUSE 以外のディストリビューション向けのパッケージを開発

しても OK

Novell の共通アカウント● openSUSE の wiki や Bugzilla と共通

2012/09/07 第1回 Open Build Service道場 9

OBS の構成要素 2/2

パッケージ● 1 つのアプリケーションやライブラリに対応

– Upstream ( 開発元 ) の 1 つのソースアーカイブのことが多い

● 1 つの OBS パッケージから複数の RPM パッケージを作ることも– Mozc → mozc, mozc-gui-tools, ibus-mozc, …

● パッケージの中身– *.tar.bz2, spec ファイル、パッチ、 README.suse, etc.

RPM と deb をサポート● Deb を作る場合は patch と *.dsc が必要

2012/09/07 第1回 Open Build Service道場 10

OBS の構成要素 2/2

プロジェクト● 複数のパッケージのグループ● プロジェクト毎にリポジトリが作られる

2012/09/07 第1回 Open Build Service道場 11

openSUSE におけるプロジェクト

製品のためのプロジェクト● openSUSE:12.2

– 12.2 のリリースに含まれるバージョンのパッケージを収録

● Factory

パッケージ開発用のプロジェクト● M17N, mozilla, KDE, devel:language:ruby, ...

個人の作業スペースとして● home: ユーザー名

https://build.opensuse.org/project/list_public

2012/09/07 第1回 Open Build Service道場 12

開発プロジェクト

M17N, mozilla, KDE:Distro:Factory, ..

パッケージを作成・更新● 分野ごとにパッケージ毎に集められる● それぞれのパッケージメンテナーが集まる● 適当なタイミングで Factory へ転送する

一般ユーザからの submit を受け取る● 後述

2012/09/07 第1回 Open Build Service道場 13

自動バックポート 1/2

開発プロジェクトから最新のパッケージを取得可● バックポート :

新しいリリース向けの機能を以前のリリースに提供● 各 openSUSE バージョン毎にパッケージをビルドできる

– 12.2, 12.1, 11.4, SLES 11 SP2, …

依存する範囲が限定されている● 同じリポジトリにあるもの + 標準リポジトリ

– 一般的な設定では

● OS 全体を更新する必要は無い

2012/09/07 第1回 Open Build Service道場 14

自動バックポート 2/2

openSUSE には複数のリポジトリを同時に扱える仕組み● vendor の切り替え : 同じ vendor 間でしか update されない● SAT ソルバー : あるパッケージの vendor を変えたときに、依存するパッケージの vendor 変更を提案

開発プロジェクトからしか手に入らないものも多数● フォント , 各種ゲーム● 検索 & 1 click install は

– software.opensuse.org

2012/09/07 第1回 Open Build Service道場 15

OBS のクラウドビルド環境

openSUSE のインスタンスでは 300 ホスト以上が稼働中● 物理マシンが何台かは不明● 少し古い Opteron とかを考えると 300 / (6 * 2) = 25

– 最低で 300 / (16 * 4) ≒ 4 !?

常にパッケージをリポジトリ毎にビルド● 12.2, 12.1, SLES 11 SP, … を x86, i586, …● 依存するパッケージが更新されたら自動的にリビルド

2012/09/07 第1回 Open Build Service道場 16

Factory

次のリリースのためのプロジェクト● 各開発プロジェクトからパッケージが次々と submit (提出)される

RC のあたりでリリース用のプロジェクトにコピー● 例 ) Factory → openSUSE:12.2● Beta のデバッグでは Factory を追いかける

2012/09/07 第1回 Open Build Service道場 17

OBS の全体像

Factory

OBS プロジェクトmozilla M17N devel:...:ruby

openSUSE 12.2

各プロジェクトでパッケージを開発

リリースが近づくとコピー

適度なタイミングで submit

リポジトリを持つ12.2, 12.1, Factory

MozillaFirefox Mozc ruby19

Factory 12.2

ruby

2012/09/07 第1回 Open Build Service道場 18

Factory 関連 FAQ

Q: Factory のパッケージは安定しているか?● A: 時季による。リリース直前なら安定している

Q: あるパッケージの最新版を 12.2 で使いたい。どこからインストールすべき?● A: Factory ではなく、開発プロジェクトのリポジトリから● 理由 : Factory のパッケージは Factory にあるライブラリに依存

– 重要なライブラリをごっそり更新しなければならなくなる

2012/09/07 第1回 Open Build Service道場 19

OBS プロジェクトのリポジトリの場所

download.opensuse.org の下に● M17N:fonts なら

– download.opensuse.org/repositories/M17N:/fonts/openSUSE_12.x– 「 : 」が付いたサブプロジェクトはサブディレクトリの下にある

● OBS の各プロジェクトにもリポジトリへのリンクあり

Zypper から追加するときは● obs://M17N:fonts/openSUSE_12.x/ も使用可

2012/09/07 第1回 Open Build Service道場 20

コラボレーション

2012/09/07 第1回 Open Build Service道場 21

コラボレーション

バージョン管理● Git, SVN のようにパッケージ内のファイルの変更履歴を管理

– 何かあったときに元に戻せる– RPM の changelog とは違う

パッケージの submit● あるプロジェクトのパッケージの変更点を別のプロジェクトへ転送

2012/09/07 第1回 Open Build Service道場 22

パッケージの branch & submit

パッケージをコピーして変更し submit● GitHub の fork/join に近い

誰でも openSUSE 公式のパッケージ開発に参加可能

2012/09/07 第1回 Open Build Service道場 23

パッケージの開発シナリオ 1/4

インストールしたいパッケージの古いバージョンしか見つからなかった● ついでに、 OBS に新しいパッケージを提供しよう!

開発プロジェクトのパッケージを branch● Devel package for openSUSE:Factory と書いてある

– Factory に行って derived package のリンクをたどれば見つけられる

● 開発プロジェクトと Factory の 2 段階レビュー

2012/09/07 第1回 Open Build Service道場 24

パッケージの開発シナリオ 2/4

Web からブランチするのが楽● ログインしてから、ブランチしたいパッケージを開く

2012/09/07 第1回 Open Build Service道場 25

パッケージの開発シナリオ 3/4

Branch をするとホームリポジトリにコピーされる● home:branches: プロジェクト名 : パッケージ名

– プロジェクトが作られる

● *.tar.bz を差し替えたり色々←後述– osc コマンドを使う

オリジナルのパッケージへのリンクが張られる● オリジナルが変更されたときに通知

– Pull 操作で手元のパッケージとマージ

● オリジナルからの変更点を管理できる

2012/09/07 第1回 Open Build Service道場 26

パッケージの開発シナリオ 4/4

変更が終わったら元のプロジェクトへ submit する● 元のプロジェクトへ● Web または osc コマンドで

Submit request● 修正内容、ビルドの状態、コメントなどをまとめたレポート● Submit 先のメンテナーに通知が行く(メールが来ます)

– 編集権限がある人

2012/09/07 第1回 Open Build Service道場 27

メンテナーへのメールの内容From: submitした人のメアドSubject: [obs submit-request 132326] M17N/mozc: created byアカウント名To: [email protected]

home:アカウント名:branches:M17N/mozc -> M17N/mozc

https://build.opensuse.org/request/show/132326

Description: upstream update. scim-mozc is removed

changes files:----------------- mozc.changes+++ mozc.changes@@ -1,0 +2,8 @@+Sat Sep 1 14:41:35 UTC 2012 - [email protected]++- update to version 1.6.1187.102+ * scim_mozc is removed+ * 'Preference' button is added on the setup dialog of IBus+ * minor updates and refactoring

Submit するときに書いたコメント

変更点が diff 形式で

2012/09/07 第1回 Open Build Service道場 28

レビュー

Accept● そのプロジェクトのパッケージが置き換わる

Reject● レビューコメントを見てパッケージを修正して再 submit● または取り下げる (revoke)

レビューの観点● パッケージがルールに従って作られているか● ビルドができているか● メンテナー権限があれば自分でレビューできてしまう

2012/09/07 第1回 Open Build Service道場 29

パッケージの開発

2012/09/07 第1回 Open Build Service道場 30

パッケージの開発

基本的には osc コマンドを使う● Web からのファイルの編集は厳しいものが● $ sudo zypper install osc

– 新しいバージョンを使った方が良い。インストール前に :sudo zypper ar -R obs://openSUSE:Tools/openSUSE_12.2 tools

home リポジトリにブランチして開発● ブランチは Web からやるのが楽● コマンドで mozc をブランチするなら$ osc branch M17N mozc– どこにあるかを知っていないと

2012/09/07 第1回 Open Build Service道場 31

一応ひとこと

細かいことは osc コマンドのマニュアルを参照● サブコマンド一覧$ osc help

● サブコマンドの詳細$ osc help サブコマンド

● あとは man を

Subversion のコマンド体系によく似てます● checkout (co), commit (ci), update (up), add

2012/09/07 第1回 Open Build Service道場 32

Checkout: ローカルにファイルをコピー

例 : M17N の mozc を branch した場合● $ osc checkout home:UserName:branches:M17N:mozc● カレントディレクトリに

home:UserName:branches:M17N/mozc/ができて、ファイルがダウンロードされる

今後は mozc ディレクトリに cd して作業

2012/09/07 第1回 Open Build Service道場 33

パッケージの中身を編集

例 : 新しい tar.bz2 をダウンロード● ダウンロードしたファイルをパッケージに追加

– $ osc add ファイル名

● 古いアーカイブを削除– $ osc rm ファイル名– 通常の rm で消さないで!

Spec ファイルを編集する● RPM パッケージの情報とビルドのためのスクリプト● たいてい Version タグを変更するだけ

2012/09/07 第1回 Open Build Service道場 34

ビルドテスト

パッケージのビルドが通るかチェック

osc コマンドならクリーンな環境で簡単にビルド!● 依存するパッケージをシステムにインストールしなくて良い● Spec ファイルの BuildRequires が正しいかもチェック可● $ osc build openSUSE_12.2

– デフォルトでは chroot を使います。今後は LXC が良いかも?– KVM や Xen も使える– --local-package が必要な場合もある

非力なマシンではこのステップを飛ばしても良い

2012/09/07 第1回 Open Build Service道場 35

ビルドにこけた場合

ビルドログや、ビルド中のファイルを確認して修正

ビルドのディレクトリ● /var/tmp/buildroot● $ osc chroot

で仮想環境にログインできる

2012/09/07 第1回 Open Build Service道場 36

サーバーへアップロード

home プロジェクトにアップロード● osc commit

Commit が終わるとサーバー上でビルドが始まる

サーバーでビルドが終わるとパッケージが公開される● リポジトリが公開に設定されていれば

2012/09/07 第1回 Open Build Service道場 37

作成したパッケージを公開するには

Publish Flag を ON にする● Web リポジトリタブから変更するのが楽● ビルドする前に変えておくべし

プロジェクト単位 / パッケージ単位で設定可能

2012/09/07 第1回 Open Build Service道場 38

branch 元へ submit するときは

Web の sources タブ show diff から submit がおすすめ● Submit する前に diff を確認できる

自分の変更内容を changelog に書く● $ osc vc● ユーザーに何が変わったか分かるように

– 今後ルールが厳密化される予定

最低限のテストをして下さい● ビルドが通るか● インストールして動作するか

2012/09/07 第1回 Open Build Service道場 39

プロジェクトを新しく作るには

home の下にサブプロジェクトをいくつでも作成可● home:UserName:SubProject

ビルドするリポジトリを追加● openSUSE:12.2/standard

openSUSE:12.2 プロジェクトの standard リポジトリに置かれているパッケージをビルドに使う

● アーキテクチャ : x86_64, i586, ppc, armv7, sh, ..● Web から行うと楽

2012/09/07 第1回 Open Build Service道場 40

新しくパッケージを作る

空のパッケージを作成● $ osc mkpac foo

プロジェクトのディレクトリで実行

spec ファイルを新規作成● $ rpmdev-newspec

– rpmdevtools を devel:tools からインストール

ビルド時は● $ osc build –local-package

– リモートにファイルがまだ無いとき

2012/09/07 第1回 Open Build Service道場 41

openSUSE にコミットする場合の注意事項

openSUSE 独自のルール● Specfile guideline:

http://en.opensuse.org/openSUSE:Specfile_guidelines

Requires タグは基本的に使わない● BuildRequires から自動的に決まる

%changelog は使わない● $ osc vc

License タグは決まったフォーマットで● http://spdx.org/

2012/09/07 第1回 Open Build Service道場 42

資料など

公式のドキュメント● http://en.opensuse.org/Portal:Packaging

過去の資料● 「 openSUSE におけるパッケージ管理入門」

– OSC 2011 Tokyo/Fall● 「 openSUSE Build Service でパッケージメンテナーになろう!」

– 小江戸らぐ 2011 年 5 月オフ

● 「 openSUSE Build Service を使ってみよう」– openSUSE 勉強会 2010 年 10 月

2012/09/07 第1回 Open Build Service道場 43

openSUSE コミュニティのご案内

最近活発な SNS● Twitter: @opensuseja● Facebook: http://www.facebook.com/opensuseja

メーリングリスト● [email protected] 公式アナウンスなど

IRC● #opensuse-ja● 毎週土曜日 22 時から IRC 定例