Text
Page: 1
Open Build Serviceを
使ってみた話
各種ディストリビューション向け
パッケージングへの活用
Kentaro Hayashi
ClearCode Inc.
2023年4月 東京エリア・関西合同Debian勉強会
Page: 2
スライドは Rabbit Slide
Showにて公開済みです
Debianパッケージング Open Build Service編
https://slide.rabbit-shocker.org/authors/kenhys/
tokyodebian-obs-howto-202304/
Page: 3
本日の内容
Open Build Serviceを試す機会があったのでその紹介
どんなことができるのか?
どう使ったらいいのか?
どういう用途におすすめなのか?(個人の感想です)
Page: 4
Open Build Serviceとは
https://openbuildservice.org/
Page: 5
Open Build Serviceとは
公式サイトは https://openbuildservice.org/
openSUSEの開発に利用されているソフトウェア
幅広い環境向けにパッケージのビルドサービスを提供でき
るのが特徴
OBSのインスタンスが https://build.opensuse.org/
Page: 6
build.opensuse.org
https://build.opensuse.org/
Page: 7
Open Build Serviceを知る
には
第1回 Open Build Service道場
https://www.slideshare.net/ftake/1-open-build-service
2012年の資料ではあるものの参考になるはず
Page: 8
Open Build Serviceを知る
には
Open Build Service道場
https://www.slideshare.net/ftake/obs-dojoadv
パッケージの新規作成編 作りかけバージョン
2014年の資料
Page: 9
どんなことができるのか?
debやrpmのビルドができる
Debian, Ubuntu, Fedora, openSUSE
ビルドしたパッケージのリポジトリを公開できる
Page: 10
類似サービスとの違い
packagecloud.io
launchpad.net
Page: 11
類似サービスとの違い (1)
https://packagecloud.io
リポジトリのホスティングを提供
パッケージのビルドは自前で行う必要がある
Page: 12
類似サービスとの違い (2)
https://launchpad.net
リポジトリのホスティングを提供
パッケージのビルドもおまかせ
サポートされているUbuntuのリリースのみ
Page: 13
Open Build Service
便利なところは?
気になるところは?
Page: 14
便利なところ (1)
RPM系だけでなく、Debもサポートしている
ソースパッケージをアップロードすると、あとはお
まかせにできる
パッケージの署名用の鍵のメンテナンス不要
Page: 15
便利なところ (2)
ミラーを利用できる
https://en.opensuse.org/MirrorCache
https://mirrorcache.opensuse.org を指定してあれ
ば、適宜適切なミラーが自動的に選択される
日本の場合は https://mirrorcache-jp.opensuse.org
プロジェクトのroleを設定することで複数人でメン
テナンスできる
Page: 16
便利なところ (3)
ソースパッケージまで準備しておけばあとはoscコ
マンドを使って自動化できる
バージョン名を付与したパッケージを作ることで複
数バージョンを公開できる
いわゆる独立したプロジェクトとしてメンテナンス
することもできる(はず) 要確認
個人のリポジトリは home:(ユーザー名)となる。公式扱
いだと science:(xxx) みたいにできる
Page: 17
気になるところ (1)
https://mirrorcache-jp.opensuse.org へのミラーは
それほど早くない
1日くらいみておくとよい
RPM系だと既定では https://download.opensuse.org へ
の.repoがダウンロードできるようになっているので、ミ
ラーを明示的に指定した場合にその影響を受ける
Page: 18
気になるところ (2)
独自プロジェクトにするには手間と時間がかかる
未対応のディストリビューションもある
例: AmazonLinux
Page: 19
OBSを利用するための準備
最初にすること
home:プロジェクトの準備
プロジェクトの設定
プロジェクトのフラグ設定
パッケージの設定
参考: https://en.opensuse.org/
openSUSE:Build_Service_Tutorial
Page: 20
最初にすること
https://build.opensuse.org/ にアカウントを作成する
既定では home:(ユーザー名) プロジェクトが利用できる
osc コマンドを利用できるようにする
sudo apt install -y osc
Page: 21
home:(ユーザー名)プロ
ジェクトの準備
osc checkout home:(ユーザー名)でプロジェクトを
チェックアウトする(SVNっぽい感じ)
初回のチェックアウトでアカウント情報を入力すること
で~/.config/osc/oscrcが作られる
home:(ユーザー名)というディレクトリがそのまま作成さ
れる
Page: 22
プロジェクトの設定
プロジェクトのメタ情報
対象ディストリビューションとひもづける
osc meta prj home:(ユーザー名) --file=prj-meta.xml
Page: 23
プロジェクトのメタ情報
リポジトリ名と依存ディストリビューションを指定
<project name="home:(ユーザー名)">
<title/>
<description/>
<person userid="kenhys" role="maintainer"/>
<repository name="bullseye">
<path project="Debian:11" repository="update"/>
<path project="Debian:11" repository="standard"/>
<arch>x86_64</arch>
<arch>i586</arch>
<arch>aarch64</arch>
</repository>
</project>
Page: 24
複数人でメンテナンスする
場合
roleをプロジェクトのメタ情報に含める
<person userid="kenhys" role="maintainer"/>
<person userid="kou" role="maintainer"/>
Page: 25
プロジェクトのメタ情報
https://build.opensuse.org/projects/home:(ユーザー名)/
meta
Page: 26
リポジトリ一覧
https://build.opensuse.org/repositories/home:(ユーザー
名)
Page: 27
ディストリビューションの
対応
どれくらいのディストリビューションに対応している
のか?
$ osc dists
Page: 28
プロジェクトのフラグ
特定のディストリビューションで必要
AlmaLinux:8などのようにAppStreamでモジュールとし
て各種パッケージが提供されている場合(dnf module list
で対象を確認できる)、OBSでは既定でモジュールは有効
になっていない
AppStreamかつモジュールのパッケージをspecの
BuildRequires:に指定するとunresolvableとなってビルド
すらされない。
nothing provides: xxxxとそっけないメッセージがでるだけ
Page: 29
特定のモジュールを有効に
するには
プロジェクトのフラグを設定する
例: osc meta prjconf home:kenhys –file prjconf.txt
ExpandFlags: module:ruby-3.1
参考: https://openbuildservice.org/help/manuals/obs-
user-guide/cha.obs.prjconfig.html
Page: 30
プロジェクトのフラグ
https://build.opensuse.org/projects/home:(ユーザー名)/
prjconf
Page: 31
パッケージごとにすること
パッケージのメタ情報の設定
特定のディストリビューションに対応していない場合、
パッケージごと無効にできる
プロジェクトのメタデータで設定したリポジトリ名を指定
する
<build>のターゲットとして<disable>を指定する
$ osc meta pkg hello-2.11 --file hello2.11-meta.xml
Page: 32
パッケージのメタ情報の例
<package name="hello-2.11" project="home:kenhys">
<title>Hello 2.11</title>
<description/>
<disable repository="bullseye"/>
<disable repository="focal"/>
<disable repository="jammy"/>
</package>
Page: 33
パッケージのメタ情報の例
https://build.opensuse.org/package/meta/home:(ユー
ザー名)/hello-2.11
Page: 34
OBSでパッケージをビルド
する方法
rpm編
deb編
Page: 35
.rpmのビルド方法
SRPMから作成する方法
PackageCloudから移行するなら、SRPMをインポートす
るのがお手軽
.specと関連するソースアーカイブから作成
Page: 36
SRPMを使う場合
home:(ユーザー名) で次のコマンドを実行する
$ osc importsrcpkg -n hello-2.10 hello-2.10.src.rpm
$ cd hello-2.10
$ osc add hello.spec
$ osc add hello-2.10.tar.gz
$ osc commit -m "Add 2.10"
Page: 37
.specや各種ソースアーカ
イブを使う場合
osc metaでパッケージに関するメタ情報を追加し、
アーカイブを追加する
$ osc meta pkg home:(ユーザー名) hello-2.10 --file=hello2.10-meta.xml
$ osc update
$ cd hello-2.10
$ osc add (.specとか.tar.gzとか)
$ osc commit -m "Add 2.10"
Page: 38
パッケージのメタ情報設定
<package name="hello-2.10" project="home:kenhys">
<title>Hello 2.10</title>
<description>GNU Hello</description>
</package>
Page: 39
.debのビルド方法
.dsc, orig.tar.gz, debian.tar.xzを追加する
$ cd hello-2.10
$ osc add hello_2.10-3.dsc
$ osc add hello_2.10-3.debian.tar.xz
$ osc add hello_2.10.orig.tar.gz
$ osc commit -m "Add 2.10"
Page: 40
ビルド状態の確認
osc resultsでも確認できる
Page: 41
リポジトリの利用方法
.rpm
.deb
Page: 42
例 : AlmaLinux:8
.repoが公開されているのでそれを利用
Page: 43
rpmの場合
/etc/yum.repo.dに配置する
$ cd /etc/yum.repo.d
$ sudo curl -L -O https://mirrorcache-jp.opensuse.org/ \
repositories/home:/(ユーザー名)/(ディストリビューション)/home:(ユーザー名).repo
Page: 44
例 : Bullseye
Release.keyが公開されているのでそれを利用
Page: 45
debの場合
Release.keyが公開されているので、keyringに変換す
る
$ 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/
Page: 46
debの場合(2)
.listを追加してリポジトリへの参照を追加する
# cat /etc/apt/sources.list.d/hello.list
deb [signed-by=/usr/share/keyrings/archive-hello-keyring.gpg] \
http://mirrorcache-jp.opensuse.org/repositories/home:(ユーザー名)/(ディストリビューション) /
Page: 47
ハマりポイント (1)
OBSでパッケージのビルドがはじまらない
メタデータに対象リポジトリが不足していると失敗
します
不足しているメタデータを追加する
不足しているプロジェクトのフラグを追加する
Page: 48
ハマりポイント (2)
DockerではビルドできるのにOBSではビルドできない
rootユーザーでのビルドを前提していると失敗します
一般ユーザーでビルドできるように修正する
Page: 49
ハマりポイント (3)
複数バージョンを公開したいがビルドされなくなった
バージョンつけずに複数ソースをコミットした
バージョンつけてパッケージを管理する
例: helloディレクトリ配下に複数バージョンのソース
をコミットすると正常にパッケージがビルドされなく
なる
Page: 50
ハマりポイント (4)
homeじゃないプロジェクトの作成難易度が高い
https://build.opensuse.org/project/new で新規プロ
ジェクトを作成できる
home:配下しか作成できない
science:とかserver:mailなどのカテゴリがあるが、あくま
でそちらはopenSUSEの開発で使われるプロジェクト向け
他の組織がビルドサービスを利用する場合にはisv:配下に
プロジェクトを作るのがおすすめ
Page: 51
homeじゃないプロジェク
トの作成難易度が高い問題
https://build.opensuse.org/project/new では上記に
該当しないプロジェクトを作成する場合にはメールで
連絡をとるように案内されているが、その連絡先は
noreply@opensuse.org となっており、メールを受け
付けるつもりがない
既知の問題 https://github.com/openSUSE/open-
build-service/issues/12356 だが修正されない
Page: 52
homeじゃないプロジェク
トの作成難易度が高い問題
admin@opensuse.org に連絡すると https://
progress.opensuse.org/ にissueを作ってもらえたりす
るが opensuse-admin-obs にアサインしてもらえない
と気づかれない
OBSとはチームが別なので気づいてもらえるの待ち
Page: 53
どんな用途に向くのか?
自分が書いたソフトウェアを様々なディストリビュー
ション向けに一括で提供したい
バージョンアップの頻度が高く各ディストリビュー
ションのお作法にならってパッケージングがしんどい
パッケージリポジトリの維持管理に手間をかけられな
い
自分がupstream authorなソフトウェアならisv:配下にプ
ロジェクトを作成するのがおすすめ
プロジェクト作成までは時間がかかるのは覚悟すべし