ククログ

株式会社クリアコード > ククログ > Open Build Serviceを利用してパッケージを公開する方法

Open Build Serviceを利用してパッケージを公開する方法

はじめに

自由なソフトウェアを開発・配布する際、パッケージを作成し、独自にリポジトリを公開するということがあります。 導入障壁を下げ、より多くの人に使ってもらいやすくするという意味では有用です。 その反面、aptやdnfコマンドでパッケージをインストールできるようにするために、リポジトリの公開まですべて自前で頑張ろうとするのはなかなか大変です。

そこで、パッケージの作成や配布のサービスを提供しているOpen Build Serviceのインスタンスを利用する方法を紹介します。(本記事は、debやrpmといったパッケージをビルドしてみたことがある人を想定しています)

Open Build Serviceとは

Open Build Serviceとは、主要なディストリビューション向けにパッケージの作成や配布のサービスを提供するためのソフトウェアです。 ディストリビューションの1つであるopenSUSEの開発に利用されています。

実際のサービスはopenSUSE Build Serviceとして運用されています。 また、自分でOpen Build Serviceのインスタンスを立てることもできるようになっています。1

openSUSE Build Serviceは個人向けにも開放されているので、実際に試してみたときのあれこれを2023年4月のDebian勉強会にて発表しました。 当日の資料はRabbit Slide Showにて公開しています。

openSUSE Build Serviceを利用するには

openSUSE Build Serviceを利用するには次の手順を踏みます。

  • アカウントを作成する
  • 対応するディストリビューションを決める
  • プロジェクトのメタ情報を設定する
  • プロジェクトのフラグ情報を設定する(必要に応じて)
  • パッケージのメタ情報を設定する
  • ソースパッケージをコミットする

ここまでできたらあとはパッケージのインストール手順を案内すればよいです。 実際に利用できるようにする方法は後述します。

アカウントを作成する

Sign Upよりアカウントを作成します。 ここで作成したアカウントはopenSUSE Management ToolといったopenSUSEの他のサービスでも利用できます。

アカウントを作成したら、home:(ユーザー名)というプロジェクトを利用できるようになります。

oscコマンドを利用できるようにする

openSUSE Build Serviceをコマンドラインから操作するためにoscというツールがあります。 Debian系では、同名のパッケージとしてインストールできます。

$ sudo apt install -y osc

インストールできたら、次のようにしてプロジェクトをチェックアウトしてみましょう。

$ osc checkout home:(ユーザー名)

初回のチェックアウトでアカウント情報を入力することになります。

oscの設定は~/.config/osc/oscrcに保存されます。

対応するディストリビューションを設定する

この段階では、まだどのディストリビューション向けのプロジェクトにするかを設定できていません。

チェックアウトしたプロジェクトのディレクトリに移動たら、次のコマンドを実行してそのための情報を設定します。

$ osc meta prj home:(ユーザー名)

エディタが起動するので、次のようなメタ情報を設定します。

<project name="home:(ユーザー名)">
<title/>
<description/>
<person userid="(ユーザー名)" role="maintainer"/>
<repository name="bullseye">
  <path project="Debian:11" repository="standard"/>
  <path project="Debian:11" repository="update"/>
  <arch>x86_64</arch>
  <arch>i586</arch>
  <arch>aarch64</arch>
</repository>
</project>

<repository>タグのname属性でリポジトリ名を指定します。ここで指定した名前が、後述するリポジトリの公開の際に使われます。

<path>でどのディストリビューションのリポジトリを参照するかを指定します。 対応アーキテクチャは<arch>で指定します。2

プロジェクトのフラグ情報を設定する(必要に応じて)

AlmaLinux:8などのようにAppStreamのモジュールとして各種パッケージが提供されている場合(dnf module listで対象を確認できる)、既定でモジュールは有効になっていません。

そのため、該当するパッケージをspecのBuildRequires:に指定していると、パッケージを見つけられずunresolvable扱いとなります。

unresolvable扱いでは、パッケージのビルドがはじまりません。ウェブサイト側ではnothing provides: xxxxとそっけないメッセージがでるだけです。

プロジェクトのフラグを設定するには、次のコマンドを実行します。

$ osc meta prjconf home:(ユーザー名)

例えば、ruby 3.1を有効にするには次のようにします。3

ExpandFlags: module:ruby-3.1

パッケージのメタ情報を設定する

サンプルとしてhelloパッケージをビルドしてみましょう。 そのためにはパッケージのメタ情報を次のコマンドで設定します。

$ osc meta pkg hello-2.11

エディタが起動するので、次のようにパッケージのメタ情報を記述します。

<package name="hello-2.10" project="home:kenhys">
  <title>Hello 2.10</title>
  <description/>
</package>

その後、osc updateを実行すると対応するhello-2.10ディレクトリが作成されます。

ソースパッケージをコミットする

パッケージのメタ情報が設定できたら、次はソースパッケージをコミットします。

rpmの場合

rpmの場合、specファイルとソースアーカイブを次のようにしてコミットします。

$ cd hello-2.10
$ osc add hello.spec
$ osc add hello-2.10.tar.gz
$ osc commit -m "Add 2.10"
debの場合

debの場合、dsc等ソースパッケージ一式を次のようにしてコミットします。

$ cd hello-2.10
$ osc add hello_2.10-1.dsc
$ osc add hello_2.10.orig.tar.gz
$ osc add hello_2.10.debian.tar.xz
$ osc commit -m "Add 2.10"

なお、osc-plugin-dputパッケージをインストールしてあれば、osc dput hello_2.10-1.dscを実行することで上記と同様の結果が得られます。

公開リポジトリからaptやdnfコマンドでパッケージをインストールできるようにする

パッケージのビルドがすべて滞りなく行えたら、しばらくすると公開リポジトリへと反映されます。

rpmの場合

プロジェクトでAlmaLinux:8に対応するリポジトリ名almalinux8を設定してある場合、既定で.repoファイルが https://download.opensuse.org/repositories/home:/(ユーザー名)/almalinux8/ に公開されるので、/etc/yum.repo.dに配置すればよいです。4

$ cd /etc/yum.repo.d
$ sudo curl -L -O https://mirrorcache-jp.opensuse.org/ \
  repositories/home:/(ユーザー名)/almalinux8/home:(ユーザー名).repo

これで、dnf installなどとして、パッケージを公開リポジトリからインストールできるようになります。

debの場合

プロジェクトでDebian:11に対応する対応するリポジトリ名bullseyeを設定してある場合、既定でRelease.keyが公開されているので、次のようにしてキーリング 5 に変換します。

$ curl -L -O \
  https://mirrorcache-jp.opensuse.org/repositories/home:/(ユーザー名)/bullseye/Release.key
$ gpg --no-default-keyring --keyring ./archive-hello-keyring.gpg --import Release.key
$ sudo mv archive-hello-keyring.gpg /usr/share/keyrings/

そして、変換したキーリングを例えば/etc/apt/sources.list.d/hello.listに指定して、公開リポジトリへの参照を設定します。

deb [signed-by=/usr/share/keyrings/archive-hello-keyring.gpg] http://mirrorcache-jp.opensuse.org/repositories/home:(ユーザー名)/(ディストリビューション) /

これで、apt installなどとして、パッケージを公開リポジトリからインストールできるようになります。

おわりに

今回は、openSUSE Build Serviceを利用してパッケージを公開する方法を紹介しました。 ソースパッケージを準備するところまでできていれば6、比較的簡単にリポジトリを公開するところまで実現できることがわかります。

個人のプロジェクトで各種ディストリビューション向けのパッケージを提供できるようにするやりかたのみ説明していますが、 個人のプロジェクトとしてではなく、独立したソフトウェア開発ベンダー(ISV)としてプロジェクトを作成してもらうこともできます。7

  1. https://openbuildservice.org/download/ よりアプライアンス用途のISOイメージが提供されています。

  2. どんなディストリビューションに対応しているかは、osc distsコマンドを実行すると得られます。 osc repositories Debian:11を実行すると、<path><arch>に指定できる内容がわかります。

  3. https://openbuildservice.org/help/manuals/obs-user-guide/cha.obs.prjconfig.html

  4. ミラーを標準で利用できるようになっており、日本の場合は、mirrorcache-jp.opensuse.orgです。ミラーへの反映は1日程度かかるので、パッケージ開発中に頻繁にコミットしているような場合には、すぐに反映されないことに注意が必要です。

  5. パッケージになされた署名の検証に用いるためのものです。ダウンロードされたパッケージが信頼できるものなのかどうかをチェックできます。

  6. ソースパッケージを準備するところが大変だという話もありますが、今回の記事からは説明を簡略化するため割愛しました。

  7. isv:配下のネームスペースにプロジェクトを作成できます。ただし通常のワークフローではないため、OBSの管理チームに作業してもらう必要があります。