第 1 回 Open Build Service 道場                        武山 文信                   日本 openSUSE ユーザ会                       Twitter:...
Open Build Service     通称 OBS      ●   旧 openSUSE Build Service     パッケージング支援の Web アプリケーション      ●   とそのインスタンス : build.ope...
パッケージング支援プラットフォーム     パッケージのクラウドビルド環境      ●   ソースコードから rpm パッケージを作成      ●   仮想環境で x86 (32bit, 64bit), PPC, ARM, SH, ... ...
ユースケース     最新のパッケージを追いかけるユーザが     使うついでにパッケージを更新して、他の人に提供      ●   「あれ libvorbis が古い。アップデートしておくか」     アプリケーションの開発者が各ディストリ向...
目次 1/2     OBS のモデル、 openSUSE と OBS      ●   プロジェクト、パッケージ      ●   ディストリビューション開発プロセス          –   Factory, 開発リポジトリ・パッケージ  ...
目次 2/2 後編?     プロジェクト管理      ●   リポジトリの設定     OBS サービス      ●   スペックファイルの自動フォーマット     その他      ●   パッチの作成      ●   kiwi ビル...
OBS のモデル             openSUSE と OBS2012/09/07    第1回 Open Build Service道場   7
openSUSE の OBS     build.opensuse.org      ●   誰でもアカウントを作成して使用可能      ●   openSUSE 以外のディストリビューション向けのパッケージを開発          しても ...
OBS の構成要素 2/2     パッケージ      ●   1 つのアプリケーションやライブラリに対応          –   Upstream ( 開発元 ) の 1 つのソースアーカイブのことが多い      ●   1 つの OB...
OBS の構成要素 2/2     プロジェクト      ●   複数のパッケージのグループ      ●   プロジェクト毎にリポジトリが作られる2012/09/07         第1回 Open Build Service道場   10
openSUSE におけるプロジェクト     製品のためのプロジェクト      ●   openSUSE:12.2          –   12.2 のリリースに含まれるバージョンのパッケージを収録      ●   Factory   ...
開発プロジェクト     M17N, mozilla, KDE:Distro:Factory, ..     パッケージを作成・更新      ●   分野ごとにパッケージ毎に集められる      ●   それぞれのパッケージメンテナーが集まる...
自動バックポート 1/2     開発プロジェクトから最新のパッケージを取得可      ●   バックポート :          新しいリリース向けの機能を以前のリリースに提供      ●   各 openSUSE バージョン毎にパッケー...
自動バックポート 2/2     openSUSE には複数のリポジトリを同時に扱える仕組み      ●   vendor の切り替え : 同じ vendor 間でしか update されない      ●   SAT ソルバー : あるパッ...
OBS のクラウドビルド環境     openSUSE のインスタンスでは 300 ホスト以上が稼働中      ●   物理マシンが何台かは不明      ●   少し古い Opteron とかを考えると 300 / (6 * 2) = 25...
Factory     次のリリースのためのプロジェクト      ●   各開発プロジェクトからパッケージが次々と submit (提出)          される     RC のあたりでリリース用のプロジェクトにコピー      ●   ...
OBS の全体像     Factory                                    openSUSE 12.2                             リリースが近づくとコピー            ...
Factory 関連 FAQ     Q: Factory のパッケージは安定しているか?      ●   A: 時季による。リリース直前なら安定している     Q: あるパッケージの最新版を 12.2 で使いたい。どこから     インス...
OBS プロジェクトのリポジトリの場所     download.opensuse.org の下に      ●   M17N:fonts なら          –   download.opensuse.org/repositories/M...
コラボレーション2012/09/07   第1回 Open Build Service道場   20
コラボレーション     バージョン管理      ●   Git, SVN のようにパッケージ内のファイルの変更履歴を管理          –   何かあったときに元に戻せる          –   RPM の changelog とは違...
パッケージの branch & submit     パッケージをコピーして変更し submit      ●   GitHub の fork/join に近い     誰でも openSUSE 公式のパッケージ開発に参加可能2012/09/0...
パッケージの開発シナリオ 1/4     インストールしたいパッケージの     古いバージョンしか見つからなかった      ●   ついでに、 OBS に新しいパッケージを提供しよう!     開発プロジェクトのパッケージを branch ...
パッケージの開発シナリオ 2/4     Web からブランチするのが楽      ●   ログインしてから、ブランチしたいパッケージを開く2012/09/07         第1回 Open Build Service道場   24
パッケージの開発シナリオ 3/4     Branch をするとホームリポジトリにコピーされる      ●   home:branches: プロジェクト名 : パッケージ名          –   プロジェクトが作られる      ●  ...
パッケージの開発シナリオ 4/4     変更が終わったら元のプロジェクトへ submit する      ●   元のプロジェクトへ      ●   Web または osc コマンドで     Submit request      ●  ...
メンテナーへのメールの内容  From: submit した人のメアド  Subject: [obs submit-request 132326] M17N/mozc: created by アカウント名  To: ftake@geeko.jp...
レビュー     Accept      ●   そのプロジェクトのパッケージが置き換わる     Reject      ●   レビューコメントを見てパッケージを修正して再 submit      ●   または取り下げる (revoke)...
パッケージの開発2012/09/07   第1回 Open Build Service道場   29
パッケージの開発     基本的には osc コマンドを使う      ●   Web からのファイルの編集は厳しいものが      ●   $ sudo zypper install osc          –   新しいバージョンを使った...
一応ひとこと     細かいことは osc コマンドのマニュアルを参照      ●   サブコマンド一覧          $ osc help      ●   サブコマンドの詳細          $ osc help サブコマンド   ...
Checkout: ローカルにファイルをコピー     例 : M17N の mozc を branch した場合      ●   $ osc checkout home:UserName:branches:M17N:mozc      ● ...
パッケージの中身を編集     例 : 新しい tar.bz2 をダウンロード      ●   ダウンロードしたファイルをパッケージに追加          –   $ osc add ファイル名      ●   古いアーカイブを削除   ...
ビルドテスト     パッケージのビルドが通るかチェック     osc コマンドならクリーンな環境で簡単にビルド!      ●   依存するパッケージをシステムにインストールしなくて良い      ●   Spec ファイルの BuildR...
ビルドにこけた場合     ビルドログや、ビルド中のファイルを確認して修正     ビルドのディレクトリ      ●   /var/tmp/buildroot      ●   $ osc chroot          で仮想環境にログイン...
サーバーへアップロード     home プロジェクトにアップロード      ●   osc commit     Commit が終わるとサーバー上でビルドが始まる     サーバーでビルドが終わるとパッケージが公開される      ●  ...
作成したパッケージを公開するには     Publish Flag を ON にする      ●   Web リポジトリタブから変更するのが楽      ●   ビルドする前に変えておくべし     プロジェクト単位 / パッケージ単位で設定...
branch 元へ submit するときは     Web の sources タブ show diff から submit がおすすめ      ●   Submit する前に diff を確認できる     自分の変更内容を change...
プロジェクトを新しく作るには     home の下にサブプロジェクトをいくつでも作成可      ●   home:UserName:SubProject     ビルドするリポジトリを追加      ●   openSUSE:12.2/st...
新しくパッケージを作る     空のパッケージを作成      ●   $ osc mkpac foo          プロジェクトのディレクトリで実行     spec ファイルを新規作成      ●   $ rpmdev-newspec...
openSUSE にコミットする場合の注意事項     openSUSE 独自のルール      ●   Specfile guideline:          http://en.opensuse.org/openSUSE:Specfile...
資料など     公式のドキュメント      ●   http://en.opensuse.org/Portal:Packaging     過去の資料      ●   「 openSUSE におけるパッケージ管理入門」          ...
openSUSE コミュニティのご案内     最近活発な SNS      ●   Twitter: @opensuseja      ●   Facebook: http://www.facebook.com/opensuseja     ...
Upcoming SlideShare
Loading in …5
×

第1回 Open Build Service 道場

2,684 views

Published on

第1回 Open Build Service 道場

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

×