Contenu connexe Similaire à 第1回 Open Build Service 道場 (20) Plus de Fuminobu Takeyama (20) 第1回 Open Build Service 道場1. 第 1 回 Open Build Service 道場
武山 文信
日本 openSUSE ユーザ会
Twitter: @ftake
Facebook: takeyamaf
M17N メンテナー
2012/09/07 第1回 Open Build Service道場 1
2. Open Build Service
通称 OBS
● 旧 openSUSE Build Service
パッケージング支援の Web アプリケーション
● とそのインスタンス : build.opensuse.org
● Tizen でも使っている、自前の Build Service も作成可
2012/09/07 第1回 Open Build Service道場 2
3. パッケージング支援プラットフォーム
パッケージのクラウドビルド環境
● ソースコードから rpm パッケージを作成
● 仮想環境で x86 (32bit, 64bit), PPC, ARM, SH, ... に対応
パッケージの配布環境の提供
● ビルドしたパッケージを公開
コラボレーション
● パッケージのバージョン管理
– ファイルへの変更を記録
● 他の人の変更の取り込み
2012/09/07 第1回 Open Build Service道場 3
4. ユースケース
最新のパッケージを追いかけるユーザが
使うついでにパッケージを更新して、他の人に提供
● 「あれ libvorbis が古い。アップデートしておくか」
アプリケーションの開発者が各ディストリ向けに
パッケージを配布
2012/09/07 第1回 Open Build Service道場 4
5. 目次 1/2
OBS のモデル、 openSUSE と OBS
● プロジェクト、パッケージ
● ディストリビューション開発プロセス
– Factory, 開発リポジトリ・パッケージ
コラボレーション
● パッケージの branch/submit, レビュー
パッケージ開発
● osc コマンド、 spec ファイル
● openSUSE のルール
2012/09/07 第1回 Open Build Service道場 5
6. 目次 2/2 後編?
プロジェクト管理
● リポジトリの設定
OBS サービス
● スペックファイルの自動フォーマット
その他
● パッチの作成
● kiwi ビルド
2012/09/07 第1回 Open Build Service道場 6
7. OBS のモデル
openSUSE と OBS
2012/09/07 第1回 Open Build Service道場 7
8. openSUSE の OBS
build.opensuse.org
● 誰でもアカウントを作成して使用可能
● openSUSE 以外のディストリビューション向けのパッケージを開発
しても OK
Novell の共通アカウント
● openSUSE の wiki や Bugzilla と共通
2012/09/07 第1回 Open Build Service道場 8
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道場 9
10. OBS の構成要素 2/2
プロジェクト
● 複数のパッケージのグループ
● プロジェクト毎にリポジトリが作られる
2012/09/07 第1回 Open Build Service道場 10
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道場 11
12. 開発プロジェクト
M17N, mozilla, KDE:Distro:Factory, ..
パッケージを作成・更新
● 分野ごとにパッケージ毎に集められる
● それぞれのパッケージメンテナーが集まる
● 適当なタイミングで Factory へ転送する
一般ユーザからの submit を受け取る
● 後述
2012/09/07 第1回 Open Build Service道場 12
13. 自動バックポート 1/2
開発プロジェクトから最新のパッケージを取得可
● バックポート :
新しいリリース向けの機能を以前のリリースに提供
● 各 openSUSE バージョン毎にパッケージをビルドできる
– 12.2, 12.1, 11.4, SLES 11 SP2, …
依存する範囲が限定されている
● 同じリポジトリにあるもの + 標準リポジトリ
– 一般的な設定では
● OS 全体を更新する必要は無い
2012/09/07 第1回 Open Build Service道場 13
14. 自動バックポート 2/2
openSUSE には複数のリポジトリを同時に扱える仕組み
● vendor の切り替え : 同じ vendor 間でしか update されない
● SAT ソルバー : あるパッケージの vendor を変えたときに、
依存するパッケージの vendor 変更を提案
開発プロジェクトからしか手に入らないものも多数
● フォント , 各種ゲーム
● 検索 & 1 click install は
– software.opensuse.org
2012/09/07 第1回 Open Build Service道場 14
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道場 15
16. Factory
次のリリースのためのプロジェクト
● 各開発プロジェクトからパッケージが次々と submit (提出)
される
RC のあたりでリリース用のプロジェクトにコピー
● 例 ) Factory → openSUSE:12.2
● Beta のデバッグでは Factory を追いかける
2012/09/07 第1回 Open Build Service道場 16
17. OBS の全体像
Factory openSUSE 12.2
リリースが近づくとコピー
Factory 12.2
適度なタイミングで submit OBS プロジェクト
mozilla 各プロジェクトで M17N devel:...:ruby
パッケージを開発
MozillaFirefox Mozc ruby ruby19
リポジトリを持つ
12.2, 12.1, Factory
2012/09/07 第1回 Open Build Service道場 17
18. Factory 関連 FAQ
Q: Factory のパッケージは安定しているか?
● A: 時季による。リリース直前なら安定している
Q: あるパッケージの最新版を 12.2 で使いたい。どこから
インストールすべき?
● A: Factory ではなく、開発プロジェクトのリポジトリから
● 理由 : Factory のパッケージは Factory にあるライブラリに依存
– 重要なライブラリをごっそり更新しなければならなくなる
2012/09/07 第1回 Open Build Service道場 18
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道場 19
21. コラボレーション
バージョン管理
● Git, SVN のようにパッケージ内のファイルの変更履歴を管理
– 何かあったときに元に戻せる
– RPM の changelog とは違う
パッケージの submit
● あるプロジェクトのパッケージの変更点を
別のプロジェクトへ転送
2012/09/07 第1回 Open Build Service道場 21
22. パッケージの branch & submit
パッケージをコピーして変更し submit
● GitHub の fork/join に近い
誰でも openSUSE 公式のパッケージ開発に参加可能
2012/09/07 第1回 Open Build Service道場 22
23. パッケージの開発シナリオ 1/4
インストールしたいパッケージの
古いバージョンしか見つからなかった
● ついでに、 OBS に新しいパッケージを提供しよう!
開発プロジェクトのパッケージを branch
● Devel package for openSUSE:Factory と書いてある
– Factory に行って derived package のリンクをたどれば見つけられる
● 開発プロジェクトと Factory の 2 段階レビュー
2012/09/07 第1回 Open Build Service道場 23
24. パッケージの開発シナリオ 2/4
Web からブランチするのが楽
● ログインしてから、ブランチしたいパッケージを開く
2012/09/07 第1回 Open Build Service道場 24
25. パッケージの開発シナリオ 3/4
Branch をするとホームリポジトリにコピーされる
● home:branches: プロジェクト名 : パッケージ名
– プロジェクトが作られる
● *.tar.bz を差し替えたり色々←後述
– osc コマンドを使う
オリジナルのパッケージへのリンクが張られる
● オリジナルが変更されたときに通知
– Pull 操作で手元のパッケージとマージ
● オリジナルからの変更点を管理できる
2012/09/07 第1回 Open Build Service道場 25
26. パッケージの開発シナリオ 4/4
変更が終わったら元のプロジェクトへ submit する
● 元のプロジェクトへ
● Web または osc コマンドで
Submit request
● 修正内容、ビルドの状態、コメントなどをまとめたレポート
● Submit 先のメンテナーに通知が行く(メールが来ます)
– 編集権限がある人
2012/09/07 第1回 Open Build Service道場 26
27. メンテナーへのメールの内容
From: submit した人のメアド
Subject: [obs submit-request 132326] M17N/mozc: created by アカウント名
To: ftake@geeko.jp
home: アカウント名 :branches:M17N/mozc -> M17N/mozc Submit するときに書いた
https://build.opensuse.org/request/show/132326 コメント
Description: upstream update. scim-mozc is removed
changes files:
-------------- 変更点が diff 形式で
--- mozc.changes
+++ mozc.changes
@@ -1,0 +2,8 @@
+Sat Sep 1 14:41:35 UTC 2012 - ftake@geeko.jp
+
+- 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
2012/09/07 第1回 Open Build Service道場 27
28. レビュー
Accept
● そのプロジェクトのパッケージが置き換わる
Reject
● レビューコメントを見てパッケージを修正して再 submit
● または取り下げる (revoke)
レビューの観点
● パッケージがルールに従って作られているか
● ビルドができているか
● メンテナー権限があれば自分でレビューできてしまう
2012/09/07 第1回 Open Build Service道場 28
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道場 30
31. 一応ひとこと
細かいことは osc コマンドのマニュアルを参照
● サブコマンド一覧
$ osc help
● サブコマンドの詳細
$ osc help サブコマンド
● あとは man を
Subversion のコマンド体系によく似てます
● checkout (co), commit (ci), update (up), add
2012/09/07 第1回 Open Build Service道場 31
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道場 32
33. パッケージの中身を編集
例 : 新しい tar.bz2 をダウンロード
● ダウンロードしたファイルをパッケージに追加
– $ osc add ファイル名
● 古いアーカイブを削除
– $ osc rm ファイル名
– 通常の rm で消さないで!
Spec ファイルを編集する
● RPM パッケージの情報とビルドのためのスクリプト
● たいてい Version タグを変更するだけ
2012/09/07 第1回 Open Build Service道場 33
34. ビルドテスト
パッケージのビルドが通るかチェック
osc コマンドならクリーンな環境で簡単にビルド!
● 依存するパッケージをシステムにインストールしなくて良い
● Spec ファイルの BuildRequires が正しいかもチェック可
● $ osc build openSUSE_12.2
– デフォルトでは chroot を使います。今後は LXC が良いかも?
– KVM や Xen も使える
– --local-package が必要な場合もある
非力なマシンではこのステップを飛ばしても良い
2012/09/07 第1回 Open Build Service道場 34
35. ビルドにこけた場合
ビルドログや、ビルド中のファイルを確認して修正
ビルドのディレクトリ
● /var/tmp/buildroot
● $ osc chroot
で仮想環境にログインできる
2012/09/07 第1回 Open Build Service道場 35
36. サーバーへアップロード
home プロジェクトにアップロード
● osc commit
Commit が終わるとサーバー上でビルドが始まる
サーバーでビルドが終わるとパッケージが公開される
● リポジトリが公開に設定されていれば
2012/09/07 第1回 Open Build Service道場 36
37. 作成したパッケージを公開するには
Publish Flag を ON にする
● Web リポジトリタブから変更するのが楽
● ビルドする前に変えておくべし
プロジェクト単位 / パッケージ単位で設定可能
2012/09/07 第1回 Open Build Service道場 37
38. branch 元へ submit するときは
Web の sources タブ show diff から submit がおすすめ
● Submit する前に diff を確認できる
自分の変更内容を changelog に書く
● $ osc vc
● ユーザーに何が変わったか分かるように
– 今後ルールが厳密化される予定
最低限のテストをして下さい
● ビルドが通るか
● インストールして動作するか
2012/09/07 第1回 Open Build Service道場 38
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道場 39
40. 新しくパッケージを作る
空のパッケージを作成
● $ osc mkpac foo
プロジェクトのディレクトリで実行
spec ファイルを新規作成
● $ rpmdev-newspec
– rpmdevtools を devel:tools からインストール
ビルド時は
● $ osc build –local-package
– リモートにファイルがまだ無いとき
2012/09/07 第1回 Open Build Service道場 40
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道場 41
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道場 42
43. openSUSE コミュニティのご案内
最近活発な SNS
● Twitter: @opensuseja
● Facebook: http://www.facebook.com/opensuseja
メーリングリスト
● opensuse-ja@opensuse.org 公式アナウンスなど
IRC
● #opensuse-ja
● 毎週土曜日 22 時から IRC 定例
2012/09/07 第1回 Open Build Service道場 43