第1回 open build service 道場
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道場 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道場 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道場 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道場 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道場 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 定例