Advertisement

More Related Content

Slideshows for you(20)

Similar to 第1回 Open Build Service 道場(20)

Advertisement

More from 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
  20. コラボレーション 2012/09/07 第1回 Open Build Service道場 20
  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
  29. パッケージの開発 2012/09/07 第1回 Open Build Service道場 29
  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
Advertisement