openSUSE:Build Service における製品定義の考え方
目次
製品定義について
製品定義は、製品を構築する際に必要となるすべての情報を集約して配置する場所です。製品はパッケージの集合を定義するほか、追加の情報を設定することもできます。製品は完結したオペレーティングシステムという形態のほか、特定の製品からの拡張 (アドオン) として構築することもできます。また、 1 つの製品で複数の形態 ("フレーバー") を用意することもできます。
製品はたとえば "openSUSE 11.1" ディストリビューションなどのことを指します。このディストリビューションには、 DVD (1 層) のほか、 DVD (2 層) や FTP ネットワークインストールなどの形態があります。また、追加の言語に対応するためのアドオンや、非フリーの拡張が含まれるアドオンなども、別途の製品として定義されています。
これらすべての製品やフレーバーは、製品定義を利用して製品を定義しています。
製品定義の内容
製品定義には、 Build Service がメディアを構築できるようにするため、それぞれ下記に示す情報を設定する必要があります。
一般的な製品情報
一般的な製品情報は、すべてのフレーバーやハードウエア/アーキテクチャに含まれる情報で、たとえば製品名やバージョン、現在の開発状態 (アルファ版、ベータ版、 RC 版など) を指定します。
また一般的な製品情報には、使用しているパッケージリポジトリの一覧も含まれています。これはつまり、複数の製品メディアが同じパッケージプールを利用していて、異なるプロジェクトから提供されるパッケージを回避するようにしていることを意味します。
これに加えて、アーキテクチャやパッケージに対する組み合わせ、固有の条件なども定義しています。
設定オプションは、それらが使用される段階 (ステージ) ごとにまとめられています。これはメディアの作成時のほか、インストール処理やインストール後のシステムで使用されるものがあります。
メディアの定義
製品は複数の形態で配布されることがあります。それぞれの形態は製品のフレーバーと呼びます。 フレーバーは複数のメディアセットとすることもできますし、それぞれ定義したアーキテクチャセットごとに 1 つでもかまいません。
メディアの定義には、メディア内に収録されているリポジトリ内のパッケージの定義が含まれています。 パッケージの定義はグループごとに分割することができ、これらのグループはメディア間で共有したり、製品定義間でも共有したりすることができます。
グループまたはパッケージには、下記のオプションを指定することができます:
- 特定のアーキテクチャからパッケージを取得すべきであるなどの条件指定
- このフレーバーに対して複数のメディアを必要としている場合、メディア内に強制的に入れておくべきパッケージの指定
また、 Build Service ではデバッグ用のパッケージやソースパッケージを収集して、必要なメディアに収録する機能も用意されています。
メディア内の追加のファイルは、メタパッケージから取り出して配置されます。これらのパッケージは、パッケージ内から取り出されてそのままの形でメディアに配置されます。
将来のリリースでは、自動的にグループファイルからパターンを作成する機能にも対応する予定ですが、現時点ではパターンはメタパッケージで管理します。
書式仕様
サンプルファイルは こちら をご覧ください。 TODO: create a dtd !
Build Service 内での製品定義の扱い
openSUSE Build Service では、製品定義を自動的に処理して、必要なメディアを構築することができます。
製品定義ファイルの保存方法
製品定義ファイルは "_product" という名前のパッケージに保存します。このパッケージは、製品定義ファイル自身が使用するリポジトリを指定することになるため、 Build Service 内の任意のプロジェクトで作成することができます。
また製品定義ファイルのファイル名は、定義内に書かれている名前に ".product" という拡張子を付けます。
Build Service における製品定義ファイルの処理方法
Build Service は、 _product パッケージ内に変更があるごとに製品コンバータを起動します。これにより、 _product 内には下記の追加パッケージを作成します:
- リリースパッケージの spec ファイル。これらは複数の RPM パッケージからなるもので、それぞれのフレーバー向けに作成され、インストール済みのシステムで製品を識別するために使用されます。
- それぞれのフレーバーおよびアーキテクチャセットに対する kiwi パッケージ。 kiwi パッケージは Build Service で通常どおり処理され、必要なイメージや ftp ツリーを作成します。
製品コンバータは obs-productconverter パッケージ内に含まれているもので、 Build Service サーバのインスタンスごとに個別に動作します。
イメージ構築のためのプロジェクト設定方法
TODO 注意: 既定では、 opensuse.org で動作する Build Service はイメージの作成を許可していません。
例
openSUSE:Factory プロジェクトが提供する現在のプロジェクトファイルが、例としては適切だろうと思われます。 openSUSE:Factory プロジェクトでは、より理解が進むようにするため、常に最新の環境に更新して、適切な箇所にコメントを入れるようにしています。
アドオン製品
アドオン製品の最小構成例は、下記のとおりです:
<?xml version="1.0" encoding="UTF-8"?> <productdefinition xmlns:xi="http://www.w3.org/2001/XInclude"> <products> <product id="openSUSE-Addon-MickeyMouse"> <vendor>Walt Disney</vendor> <name>openSUSE-Addon-MickeyMouse</name> <version>11.2</version> <release>0</release> <summary>openSUSE Big Ears Add-On</summary> <description> Your openSUSE installation will hear anything and giggle in an obtrusive way. </description> <buildconfig> <producttheme>openSUSE</producttheme> <betaversion>Alpha 1a</betaversion> </buildconfig> <installconfig> <datadir>suse</datadir> <descriptiondir>suse/setup/descr</descriptiondir> <releasepackage name="openSUSE-Addon-MickeyMouse-release" flag="EQ" version="11.2"/> <distribution>openSUSE-Addon-MickeyMouse</distribution> </installconfig> <runtimeconfig/> </product> </products> <repositories> <repository path="obs://openSUSE:Factory/standard"/> </repositories> <xi:include href="archsets.inc" /> <mediasets> <media type="cd" product="openSUSE-Addon-MickeyMouse" name="openSUSE-11.2-Alpha0-Addon-MickeyMouse" flavor="cd" sourcemedia="0" use_required="true" use_recommended="true" use_suggested="false"> <use group="DVD-selection" create_pattern="false" /> <archsets> <archset ref="x86_64" /> <archset ref="i586" /> </archsets> <archsets> <archset ref="ppc" /> </archsets> <metadata> <package name="skelcd-openSUSE" /> </metadata> </media> </mediasets> <group name="DVD-selection"> <packagelist> <package name="ear-enlarger"/> </packagelist> </group> </productdefinition>
完全なディストリビューション
条件
重複を避けるため、 "conditionals" (条件) を指定することができます:
<conditional name="baselibs_only_x86_64"> <platform onlyarch="x86_64" /> </conditional>
条件の指定は、他のコンテキスト内での "マクロ" とお考えください。