rabbit-slide-kenhys-tokyodebian-obs-howto-202304 2023.04.15.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f3bba6ae1282a22039beabe65bcc2cb42cee8a713341f8f917e7313d84e4d7bc
4
+ data.tar.gz: 751cffa90ff3ffd5e78df7eec6543e232b77c8cb8edeb2b6c8d7ca43dcf770e0
5
+ SHA512:
6
+ metadata.gz: 7223d582d2fd131f5cacea52783d56a9a640a874beb8be630df6e2c1e51123d0bc8acf41f3c03ac2fe13b2be04458038518f19038c8724eca3ca096b6620d615
7
+ data.tar.gz: 5a18e8f15d5fa86c75286cb372e9e05b7ae92ea2cc5235b65dc0ee173ed53bcef2932427e7ceef3723ec46f8ca105696f274983a67a790dceac8c77977662153
data/.rabbit ADDED
@@ -0,0 +1 @@
1
+ --size=1024,768 tokyodebian-obs-howto.md
data/README.md ADDED
@@ -0,0 +1,14 @@
1
+ # Tokyo Debian Open Build Service Howto 202304
2
+
3
+ ## How to show
4
+
5
+ % rabbit
6
+
7
+ ## How to install
8
+
9
+ % gem install rabbit-slide-kenhys-tokyodebian-obs-howto-202304
10
+
11
+ ## How to create PDF
12
+
13
+ % rake pdf
14
+
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ require "rabbit/task/slide"
2
+
3
+ # Edit ./config.yaml to customize meta data
4
+
5
+ spec = nil
6
+ Rabbit::Task::Slide.new do |task|
7
+ spec = task.spec
8
+ # spec.files += Dir.glob("doc/**/*.*")
9
+ # spec.files -= Dir.glob("private/**/*.*")
10
+ # spec.add_runtime_dependency("rabbit-theme-YOUR-THEME")
11
+ end
12
+
13
+ desc "Tag #{spec.version}"
14
+ task :tag do
15
+ sh("git", "tag", "-a", spec.version.to_s, "-m", "Publish #{spec.version}")
16
+ sh("git", "push", "--tags")
17
+ end
data/config.yaml ADDED
@@ -0,0 +1,25 @@
1
+ ---
2
+ id: tokyodebian-obs-howto-202304
3
+ base_name: tokyodebian-obs-howto
4
+ tags:
5
+ - rabbit
6
+ - debian
7
+ - obs
8
+ presentation_date: 2023-04-15
9
+ presentation_start_time:
10
+ presentation_end_time:
11
+ slideshare_id:
12
+ version: 2023.04.15.1
13
+ licenses:
14
+ - CC-BY-SA-4.0
15
+ slideshare_id: kenhys
16
+ speaker_deck_id:
17
+ vimeo_id:
18
+ youtube_id:
19
+ author:
20
+ markup_language: :md
21
+ name: Kentaro Hayashi
22
+ email: kenhys@gmail.com
23
+ rubygems_user: kenhys
24
+ slideshare_user:
25
+ speaker_deck_user: kenhys
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/theme.rb ADDED
@@ -0,0 +1,5 @@
1
+ @default_font = "Ubuntu"
2
+ @monospace_font = "Ubuntu"
3
+ include_theme("debian")
4
+ #@slide_show_span = 1300
5
+ @slide_show_loop = true
@@ -0,0 +1,426 @@
1
+ # Open Build Serviceを使ってみた話
2
+
3
+ subtitle
4
+ : 各種ディストリビューション向け\\nパッケージングへの活用
5
+
6
+ author
7
+ : Kentaro Hayashi
8
+
9
+ institution
10
+ : ClearCode Inc.
11
+
12
+ content-source
13
+ : 2023年4月 東京エリア・関西合同Debian勉強会
14
+
15
+ allotted-time
16
+ : 25m
17
+
18
+ theme
19
+ : .
20
+
21
+ # スライドはRabbit Slide Showにて公開済みです
22
+
23
+ * Debianパッケージング Open Build Service編
24
+ * <https://slide.rabbit-shocker.org/authors/kenhys/tokyodebian-obs-howto-202304/>
25
+
26
+ # 本日の内容
27
+
28
+ * Open Build Serviceを試す機会があったのでその紹介
29
+ * どんなことができるのか?
30
+ * どう使ったらいいのか?
31
+ * どういう用途におすすめなのか?(**個人の感想です**)
32
+
33
+ # Open Build Serviceとは
34
+
35
+ ![](images/openbuildservice.png){:relative-height="80"}
36
+
37
+ * <https://openbuildservice.org/>
38
+
39
+ # Open Build Serviceとは
40
+
41
+ * 公式サイトは <https://openbuildservice.org/>
42
+ * openSUSEの開発に利用されているソフトウェア
43
+ * 幅広い環境向けにパッケージのビルドサービスを提供できるのが特徴
44
+ * OBSのインスタンスが <https://build.opensuse.org/>
45
+
46
+ # build.opensuse.org
47
+
48
+ ![](images/buildopensuse.png){:relative-height="80"}
49
+
50
+ * <https://build.opensuse.org/>
51
+
52
+ # Open Build Serviceを知るには
53
+
54
+ * 第1回 Open Build Service道場
55
+ * <https://www.slideshare.net/ftake/1-open-build-service>
56
+ * 2012年の資料ではあるものの参考になるはず
57
+
58
+ # Open Build Serviceを知るには
59
+
60
+ * Open Build Service道場
61
+ * <https://www.slideshare.net/ftake/obs-dojoadv>
62
+ * パッケージの新規作成編 **作りかけバージョン**
63
+ * 2014年の資料
64
+
65
+ # どんなことができるのか?
66
+
67
+ * ✅debやrpmのビルドができる
68
+ * Debian, Ubuntu, Fedora, openSUSE
69
+ * ✅ビルドしたパッケージのリポジトリを公開できる
70
+
71
+ # 類似サービスとの違い
72
+
73
+ * packagecloud.io
74
+ * launchpad.net
75
+
76
+ # 類似サービスとの違い(1)
77
+
78
+ * <https://packagecloud.io>
79
+ * ✅リポジトリのホスティングを提供
80
+ * ❌パッケージのビルドは自前で行う必要がある
81
+
82
+ # 類似サービスとの違い(2)
83
+
84
+ * <https://launchpad.net>
85
+ * ✅リポジトリのホスティングを提供
86
+ * ✅パッケージのビルドもおまかせ
87
+ * ❌サポートされているUbuntuのリリースのみ
88
+
89
+ # Open Build Service
90
+
91
+ * 便利なところは?
92
+ * 気になるところは?
93
+
94
+ # 便利なところ(1)
95
+
96
+ * ✅RPM系だけでなく、Debもサポートしている
97
+ * ✅ソースパッケージをアップロードすると、あとはおまかせにできる
98
+ * ✅パッケージの署名用の鍵のメンテナンス不要
99
+
100
+ # 便利なところ(2)
101
+
102
+ * ✅ミラーを利用できる
103
+ * <https://en.opensuse.org/MirrorCache>
104
+ * ✅<https://mirrorcache.opensuse.org> を指定してあれば、適宜適切なミラーが自動的に選択される
105
+ * 日本の場合は <https://mirrorcache-jp.opensuse.org>
106
+ * ✅プロジェクトのroleを設定することで複数人でメンテナンスできる
107
+
108
+ # 便利なところ(3)
109
+
110
+ * ✅ソースパッケージまで準備しておけばあとはoscコマンドを使って自動化できる
111
+ * ✅バージョン名を付与したパッケージを作ることで複数バージョンを公開できる
112
+ * ✅いわゆる独立したプロジェクトとしてメンテナンスすることもできる(はず) **要確認**
113
+ * 個人のリポジトリは home:(ユーザー名)となる。公式扱いだと science:(xxx) みたいにできる
114
+
115
+ # 気になるところ(1)
116
+
117
+ * ❌<https://mirrorcache-jp.opensuse.org> へのミラーはそれほど早くない
118
+ * 1日くらいみておくとよい
119
+ * RPM系だと既定では <https://download.opensuse.org> への.repoがダウンロードできるようになっているので、ミラーを明示的に指定した場合にその影響を受ける
120
+
121
+ # 気になるところ(2)
122
+
123
+ * ❌ネットワークアクセスを必要とするパッケージには向かない
124
+ * OBSでパッケージをビルドするとき、ネットワークアクセスはできないのでそれを前提にしていると失敗する
125
+ * 事前に必要なもの一式をまとめてアーカイブを作成するなり対策が必要である
126
+ * ❌独自プロジェクトにするには手間と時間がかかる
127
+ * ❌対応していないものもある(例: AmazonLinux)
128
+
129
+ # OBSを利用するための準備
130
+
131
+ * 最初にすること
132
+ * home:プロジェクトの準備
133
+ * プロジェクトの設定
134
+ * プロジェクトのフラグ設定
135
+ * パッケージの設定
136
+ * 参考: <https://en.opensuse.org/openSUSE:Build_Service_Tutorial>
137
+
138
+ # 最初にすること
139
+
140
+ * <https://build.opensuse.org/> にアカウントを作成する
141
+ * 既定では `home:(ユーザー名)` プロジェクトが利用できる
142
+ * osc コマンドを利用できるようにする
143
+ * sudo apt install -y osc
144
+
145
+ # home:(ユーザー名)プロジェクトの準備
146
+
147
+ * osc checkout home:(ユーザー名)でプロジェクトをチェックアウトする(SVNっぽい感じ)
148
+ * 初回のチェックアウトでアカウント情報を入力することで~/.config/osc/oscrcが作られる
149
+ * `home:(ユーザー名)`というディレクトリがそのまま作成される
150
+
151
+ # プロジェクトの設定
152
+
153
+ * プロジェクトのメタ情報
154
+ * 対象ディストリビューションとひもづける
155
+
156
+ ```
157
+ osc meta prj home:(ユーザー名) --file=prj-meta.xml
158
+ ```
159
+
160
+ # プロジェクトのメタ情報
161
+
162
+ * リポジトリ名と依存ディストリビューションを指定
163
+
164
+ ```
165
+ <project name="home:(ユーザー名)">
166
+ <title/>
167
+ <description/>
168
+ <person userid="kenhys" role="maintainer"/>
169
+ <repository name="bullseye">
170
+ <path project="Debian:11" repository="update"/>
171
+ <path project="Debian:11" repository="standard"/>
172
+ <arch>x86_64</arch>
173
+ <arch>i586</arch>
174
+ <arch>aarch64</arch>
175
+ </repository>
176
+ </project>
177
+ ```
178
+
179
+ # プロジェクトのメタ情報
180
+
181
+ ![](images/obs-meta.png){:relative-height="80"}
182
+
183
+ * <https://build.opensuse.org/projects/home:(ユーザー名)/meta>
184
+
185
+ # リポジトリ一覧
186
+
187
+ ![](images/obs-repositories.png){:relative-height="80"}
188
+
189
+ * <https://build.opensuse.org/repositories/home:(ユーザー名)>
190
+
191
+
192
+ # ディストリビューションの対応
193
+
194
+ * どれくらいのディストリビューションに対応しているのか?
195
+
196
+ ```
197
+ $ osc dists
198
+ ```
199
+
200
+ # プロジェクトのフラグ
201
+
202
+ * 特定のディストリビューションで必要
203
+ * AlmaLinux:8などのようにAppStreamでモジュールとして各種パッケージが提供されている場合(dnf module listで対象を確認できる)、OBSでは既定でモジュールは有効になっていない
204
+ * AppStreamかつモジュールのパッケージをspecの`BuildRequires:`に指定するとunresolvableとなってビルドすらされない。
205
+ * nothing provides: xxxxとそっけないメッセージがでるだけ
206
+
207
+ # 特定のモジュールを有効にするには
208
+
209
+ * プロジェクトのフラグを設定する
210
+ * 例: osc meta prjconf home:kenhys --file prjconf.txt
211
+
212
+ ```
213
+ ExpandFlags: module:ruby-3.1
214
+ ```
215
+
216
+ * 参考: <https://openbuildservice.org/help/manuals/obs-user-guide/cha.obs.prjconfig.html>
217
+
218
+ # プロジェクトのフラグ
219
+
220
+ ![](images/obs-prjconf.png){:relative-height="80"}
221
+
222
+ * <https://build.opensuse.org/projects/home:(ユーザー名)/prjconf>
223
+
224
+ # パッケージごとにすること
225
+
226
+ * パッケージのメタ情報の設定
227
+ * 特定のディストリビューションに対応していない場合、パッケージごと無効にできる
228
+ * プロジェクトのメタデータで設定したリポジトリ名を指定する
229
+ * `<build>`のターゲットとして`<disable>`を指定する
230
+
231
+ ```
232
+ $ osc meta pkg hello-2.11 --file hello2.11-meta.xml
233
+ ```
234
+
235
+ # パッケージのメタ情報の例
236
+
237
+ ```
238
+ <package name="hello-2.11" project="home:kenhys">
239
+ <title>Hello 2.11</title>
240
+ <description/>
241
+ <disable repository="bullseye"/>
242
+ <disable repository="focal"/>
243
+ <disable repository="jammy"/>
244
+ </package>
245
+ ```
246
+
247
+ # パッケージのメタ情報の例
248
+
249
+ ![](images/obs-package-meta.png){:relative-height="80"}
250
+
251
+ * <https://build.opensuse.org/package/meta/home:(ユーザー名)/hello-2.11>
252
+
253
+ # OBSでパッケージをビルドする方法
254
+
255
+ * rpm編
256
+ * deb編
257
+
258
+ # .rpmのビルド方法
259
+
260
+ * SRPMから作成する方法
261
+ * PackageCloudから移行するなら、SRPMをインポートするのがお手軽
262
+ * .specと関連するソースアーカイブから作成
263
+
264
+ # SRPMを使う場合
265
+
266
+ * `home:(ユーザー名)` で次のコマンドを実行する
267
+
268
+ ```
269
+ $ osc importsrcpkg -n hello-2.10 hello-2.10.src.rpm
270
+ $ cd hello-2.10
271
+ $ osc add hello.spec
272
+ $ osc add hello-2.10.tar.gz
273
+ $ osc commit -m "Add 2.10"
274
+ ```
275
+
276
+ # .specや各種ソースアーカイブを使う場合
277
+
278
+ * osc metaでパッケージに関するメタ情報を追加し、アーカイブを追加する
279
+
280
+ ```
281
+ $ osc meta pkg home:(ユーザー名) hello-2.10 --file=hello2.10-meta.xml
282
+ $ osc update
283
+ $ cd hello-2.10
284
+ $ osc add (.specとか.tar.gzとか)
285
+ $ osc commit -m "Add 2.10"
286
+ ```
287
+
288
+ # パッケージのメタ情報設定
289
+
290
+ ```
291
+ <package name="hello-2.10" project="home:kenhys">
292
+ <title>Hello 2.10</title>
293
+ <description>GNU Hello</description>
294
+ </package>
295
+ ```
296
+
297
+ # .debのビルド方法
298
+
299
+ * .dsc, orig.tar.gz, debian.tar.xzを追加する
300
+
301
+ ```
302
+ $ cd hello-2.10
303
+ $ osc add hello_2.10-3.dsc
304
+ $ osc add hello_2.10-3.debian.tar.xz
305
+ $ osc add hello_2.10.orig.tar.gz
306
+ $ osc commit -m "Add 2.10"
307
+ ```
308
+
309
+ # 複数人でメンテナンスする場合
310
+
311
+ * roleをプロジェクトのメタ情報に含める
312
+
313
+ ```
314
+ <person userid="kenhys" role="maintainer"/>
315
+ <person userid="kou" role="maintainer"/>
316
+ ```
317
+
318
+ # ビルド状態の確認
319
+
320
+ ![](images/obs-build-results.png){:relative-height="80"}
321
+
322
+ * osc resultsでも確認できる
323
+
324
+ # リポジトリの利用方法
325
+
326
+ * .rpm
327
+ * .deb
328
+
329
+ # 例: AlmaLinux:8
330
+
331
+ ![](images/obs-almalinux8.png){:relative-height="80"}
332
+
333
+ * .repoが公開されているのでそれを利用
334
+
335
+ # rpmの場合
336
+
337
+ * /etc/yum.repo.dに配置する
338
+
339
+ ```
340
+ $ cd /etc/yum.repo.d
341
+ $ sudo curl -L -O https://mirrorcache-jp.opensuse.org/ \
342
+ repositories/home:/(ユーザー名)/(ディストリビューション)/home:(ユーザー名).repo
343
+ ```
344
+
345
+ # 例: Bullseye
346
+
347
+ ![](images/obs-bullseye.png){:relative-height="80"}
348
+
349
+ * Release.keyが公開されているのでそれを利用
350
+
351
+
352
+ # debの場合
353
+
354
+ * Release.keyが公開されているので、keyringに変換する
355
+
356
+ ```
357
+ $ curl -L -O \
358
+ https://mirrorcache-jp.opensuse.org/repositories/home:/(ユーザー名)/bullseye/Release.key
359
+ $ gpg --no-default-keyring --keyring ./archive-hello-keyring.gpg --import Release.key
360
+ $ sudo mv archive-hello-keyring.gpg /usr/share/keyrings/
361
+ ```
362
+
363
+ # debの場合(2)
364
+
365
+ * .listを追加してリポジトリへの参照を追加する
366
+
367
+ ```
368
+ # cat /etc/apt/sources.list.d/hello.list
369
+ deb [signed-by=/usr/share/keyrings/archive-hello-keyring.gpg] \
370
+ http://mirrorcache-jp.opensuse.org/repositories/home:(ユーザー名)/(ディストリビューション) /
371
+ ```
372
+
373
+ # ハマりポイント(1)
374
+
375
+ * OBSでパッケージのビルドがはじまらない
376
+ * ❌ メタデータに対象リポジトリが不足していると失敗します
377
+ * ✅ 不足しているメタデータを追加する
378
+ * ✅ 不足しているプロジェクトのフラグを追加する
379
+
380
+ # ハマりポイント(2)
381
+
382
+ * DockerではビルドできるのにOBSではビルドできない
383
+ * ❌ rootユーザーでのビルドを前提していると失敗します
384
+ * ✅ 一般ユーザーでビルドできるように修正する
385
+
386
+ # ハマりポイント(3)
387
+
388
+ * DockerではビルドできるのにOBSではビルドできない
389
+ * ❌ ネットワークアクセスしようとすると失敗します
390
+ * ✅ アーカイブあるいはパッチとして一式含める
391
+
392
+ # ハマりポイント(4)
393
+
394
+ * 複数バージョンを公開したいがビルドされなくなった
395
+ * ❌ バージョンつけずに複数ソースをコミットした
396
+ * ✅ バージョンつけてパッケージを管理する
397
+
398
+ * 例: helloディレクトリ配下に複数バージョンのソースをコミットすると正常にパッケージがビルドされなくなる
399
+
400
+ # ハマりポイント(5)
401
+
402
+ * homeじゃないプロジェクトの作成難易度が高い
403
+ * ✅<https://build.opensuse.org/project/new> で新規プロジェクトを作成できる
404
+ * ❌home:配下しか作成できない
405
+
406
+ * `science:`とか`server:mail`などのカテゴリがあるが、あくまでそちらはopenSUSEの開発で使われるプロジェクト向け
407
+ * 他の組織がビルドサービスを利用する場合には`isv:`配下にプロジェクトを作るのがおすすめ
408
+
409
+ # homeじゃないプロジェクトの作成難易度が高い問題
410
+
411
+ * ❌<https://build.opensuse.org/project/new> では上記に該当しないプロジェクトを作成する場合にはメールで連絡をとるように案内されているが、その連絡先は <noreply@opensuse.org> となっており、メールを受け付けるつもりがない
412
+
413
+ * ❌既知の問題 <https://github.com/openSUSE/open-build-service/issues/12356> だが修正されない
414
+
415
+ # homeじゃないプロジェクトの作成難易度が高い問題
416
+
417
+ * <admin@opensuse.org> に連絡すると <https://progress.opensuse.org/> にissueを作ってもらえたりするが opensuse-admin-obs にアサインしてもらえないと気づかれない
418
+ * OBSとはチームが別なので気づいてもらえるの待ち
419
+
420
+ # どんな用途に向くのか?
421
+
422
+ * 自分が書いたソフトウェアを様々なディストリビューション向けに一括で提供したい
423
+ * バージョンアップの頻度が高く各ディストリビューションのお作法にならってパッケージングがしんどい
424
+ * パッケージリポジトリの維持管理に手間をかけられない
425
+ * 自分がupstream authorなソフトウェアならisv:配下にプロジェクトを作成するのがおすすめ
426
+ * プロジェクト作成までは時間がかかるのは覚悟すべし
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rabbit-slide-kenhys-tokyodebian-obs-howto-202304
3
+ version: !ruby/object:Gem::Version
4
+ version: 2023.04.15.1
5
+ platform: ruby
6
+ authors:
7
+ - Kentaro Hayashi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-04-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rabbit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.2
27
+ description: ''
28
+ email:
29
+ - kenhys@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - ".rabbit"
35
+ - README.md
36
+ - Rakefile
37
+ - config.yaml
38
+ - images/buildopensuse.png
39
+ - images/obs-almalinux8.png
40
+ - images/obs-build-results.png
41
+ - images/obs-bullseye.png
42
+ - images/obs-meta.png
43
+ - images/obs-package-meta.png
44
+ - images/obs-prjconf.png
45
+ - images/obs-repositories.png
46
+ - images/openbuildservice.png
47
+ - pdf/tokyodebian-obs-howto-202304-tokyodebian-obs-howto.pdf
48
+ - theme.rb
49
+ - tokyodebian-obs-howto.md
50
+ homepage: https://slide.rabbit-shocker.org/authors/kenhys/tokyodebian-obs-howto-202304/
51
+ licenses:
52
+ - CC-BY-SA-4.0
53
+ metadata: {}
54
+ post_install_message:
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubygems_version: 3.3.26
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Tokyo Debian Open Build Service Howto 202304
73
+ test_files: []