はじめに
自由なソフトウェアを開発・配布する際、パッケージを作成し、独自にリポジトリを公開するということがあります。 導入障壁を下げ、より多くの人に使ってもらいやすくするという意味では有用です。 その反面、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
-
https://openbuildservice.org/download/ よりアプライアンス用途のISOイメージが提供されています。 ↩
-
どんなディストリビューションに対応しているかは、
osc dists
コマンドを実行すると得られます。osc repositories Debian:11
を実行すると、<path>
や<arch>
に指定できる内容がわかります。 ↩ -
https://openbuildservice.org/help/manuals/obs-user-guide/cha.obs.prjconfig.html ↩
-
ミラーを標準で利用できるようになっており、日本の場合は、mirrorcache-jp.opensuse.orgです。ミラーへの反映は1日程度かかるので、パッケージ開発中に頻繁にコミットしているような場合には、すぐに反映されないことに注意が必要です。 ↩
-
パッケージになされた署名の検証に用いるためのものです。ダウンロードされたパッケージが信頼できるものなのかどうかをチェックできます。 ↩
-
ソースパッケージを準備するところが大変だという話もありますが、今回の記事からは説明を簡略化するため割愛しました。 ↩
-
isv:配下のネームスペースにプロジェクトを作成できます。ただし通常のワークフローではないため、OBSの管理チームに作業してもらう必要があります。 ↩