Rabbit Slide Show

Tokyo Debian Open Build Service Howto 202304

2023-04-15

Description

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:配下にプ
ロジェクトを作成するのがおすすめ
プロジェクト作成までは時間がかかるのは覚悟すべし

Other slides

DebConf20 DebConf20
2020-08-25