rabbit-slide-kenhys-tokyodebian-lintian-howto-202112 2021.12.18.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rabbit +1 -0
- data/README.md +14 -0
- data/Rakefile +17 -0
- data/config.yaml +25 -0
- data/pdf/tokyodebian-lintian-howto-202112-tokyodebian-lintian-howto.pdf +0 -0
- data/theme.rb +5 -0
- data/tokyodebian-lintian-howto.md +265 -0
- metadata +64 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e6e70a124f9d3c59429c75c86c9cc55c9ce72ecf1f5e96e57250ef01d6088e77
|
4
|
+
data.tar.gz: b26d1f1dfdab88609ba19b1174e8575ce8f2c3ca5fd3faef96a49ae2bba0b64f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 73c4de2aa73824e19c2d58542a07c8a839bb753a75242fa67c70e48d92cced068b422f5de6bee42a2f0dc9d55a3bbb2230b95ecd5bc3b9196e42b8158a89968b
|
7
|
+
data.tar.gz: 0cd5fd2ce0ec781ad390f07dce4919cc5a49851d1dc0e9d6db69af0e9bef74dc0593a6e8a5eb0db58d41231d2f4287f11599c48e65e785e7fecc49bd0cba3d29
|
data/.rabbit
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--size=1024,768 tokyodebian-lintian-howto.md
|
data/README.md
ADDED
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-lintian-howto-202112
|
3
|
+
base_name: tokyodebian-lintian-howto
|
4
|
+
tags:
|
5
|
+
- rabbit
|
6
|
+
- debian
|
7
|
+
- lintian
|
8
|
+
presentation_date: 2021-12-18
|
9
|
+
presentation_start_time:
|
10
|
+
presentation_end_time:
|
11
|
+
slideshare_id:
|
12
|
+
version: 2021.12.18.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:
|
Binary file
|
data/theme.rb
ADDED
@@ -0,0 +1,265 @@
|
|
1
|
+
# lintianに\\n新規ルールを\\n追加する方法
|
2
|
+
|
3
|
+
subtitle
|
4
|
+
: 2.11X.0対応版
|
5
|
+
|
6
|
+
author
|
7
|
+
: Kentaro Hayashi
|
8
|
+
|
9
|
+
institution
|
10
|
+
: ClearCode Inc.
|
11
|
+
|
12
|
+
content-source
|
13
|
+
: 2021年12月 東京エリア・関西合同Debian勉強会
|
14
|
+
|
15
|
+
allotted-time
|
16
|
+
: 20m
|
17
|
+
|
18
|
+
theme
|
19
|
+
: .
|
20
|
+
|
21
|
+
# スライドはRabbit Slide Showにて公開済みです
|
22
|
+
|
23
|
+
* lintianに新規ルールを追加する方法
|
24
|
+
* <https://slide.rabbit-shocker.org/authors/kenhys/tokyodebian-lintian-howto-202112/>
|
25
|
+
|
26
|
+
# 本日の内容
|
27
|
+
|
28
|
+
* lintianについて
|
29
|
+
* lintianのしくみ
|
30
|
+
* ルールの追加方法解説
|
31
|
+
* 実際に追加しながら学ぶ
|
32
|
+
|
33
|
+
# lintianについて
|
34
|
+
|
35
|
+
* /lɪntən/ <https://wiki.debian.org/Lintian>
|
36
|
+
* Debianパッケージをチェックするツール
|
37
|
+
* Debianポリシー違反を検出
|
38
|
+
* よくあるミスを検出 (+dfsgを+dsfgとtypoしているとか)
|
39
|
+
* よいパッケージングのやりかたを示す
|
40
|
+
|
41
|
+
# lintianについて
|
42
|
+
|
43
|
+
* salsaでメンテナンスされている
|
44
|
+
* <https://salsa.debian.org/lintian/lintian>
|
45
|
+
* Perlによる実装
|
46
|
+
* 実行例: lintian -EvIL +pedantic path/to/pkg_version_arch.changes
|
47
|
+
|
48
|
+
# lintianのしくみ
|
49
|
+
|
50
|
+
* パッケージをパース
|
51
|
+
* 各種検出ルールを適用する
|
52
|
+
* 問題のある箇所をtagとして検出
|
53
|
+
* 結果をまとめて出力する
|
54
|
+
|
55
|
+
# lintianの参考資料
|
56
|
+
|
57
|
+
* <https://wiki.debian.org/Teams/Lintian/HackersGuide>
|
58
|
+
* これは古くてあまり参考にならない
|
59
|
+
* <https://salsa.debian.org/lintian/lintian/-/blob/master/CONTRIBUTING.md>
|
60
|
+
* <https://salsa.debian.org/lintian/lintian/-/blob/master/doc/README.developers>
|
61
|
+
* perldoc README.developersすべし
|
62
|
+
|
63
|
+
# 注意事項
|
64
|
+
|
65
|
+
* lintian 2.11X.0をベースに説明します
|
66
|
+
* 結構アクティブに開発され、変更が入るため
|
67
|
+
|
68
|
+
# lintianのディレクトリ構成
|
69
|
+
|
70
|
+
* 大事なのは以下の3つ
|
71
|
+
* lib/ 検出するルールを実装
|
72
|
+
* t/ テストを追加する
|
73
|
+
* tags/ タグを定義する
|
74
|
+
|
75
|
+
# lintianのルール開発
|
76
|
+
|
77
|
+
* 検出するためのコードを書く
|
78
|
+
* lib/Lintian/Check/*
|
79
|
+
* テストを追加する
|
80
|
+
* t/recipes/checks/*
|
81
|
+
* tagを追加する
|
82
|
+
* tags/x/xxx.tag
|
83
|
+
|
84
|
+
# lintianで検出したいルール
|
85
|
+
|
86
|
+
* 判断に迷いがちなやつは機械的に検出したい
|
87
|
+
* 例: +dfsgか~dfsgどっちを使うか問題
|
88
|
+
* 例: +dfsgのrepack countどうあるべきか問題
|
89
|
+
|
90
|
+
# +dfsgか~dfsgどっちを使うか問題
|
91
|
+
|
92
|
+
* +dfsgが主流 (出典: UDDのsidのsource package調べ)
|
93
|
+
* +dfsg: 1974パッケージ
|
94
|
+
* ~dfsg: 109パッケージ
|
95
|
+
* 例: ghostscript 9.55.0~dfsg-3
|
96
|
+
|
97
|
+
# あえて~dfsgを使う理由
|
98
|
+
|
99
|
+
* upstreamが同一バージョンでリリースしなおした場合に便利
|
100
|
+
* upstream: ライセンス問題あるやつを公開(1.0)した🔥
|
101
|
+
* debian: 1.0~dfsg-1としてパッケージングした
|
102
|
+
* upstream: 同じバージョンで再リリースした
|
103
|
+
* debian: 1.0-1 > 1.0~dfsg-1 なので、1.0-1として再度パッケージングすればよい
|
104
|
+
* +dfsg使うと1.0+dfsg-1 > 1.0-1なのでアップグレードできない
|
105
|
+
|
106
|
+
# 結論: +dfsgか~dfsgどっちを使うか問題
|
107
|
+
|
108
|
+
* +dfsgで実用上は十分
|
109
|
+
* +dfsgに移行を促していくのがよいのでは
|
110
|
+
* debian-policyではなさそう
|
111
|
+
* developers-referenceにあるとよい?
|
112
|
+
* <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=499167>
|
113
|
+
* lintianがinfoレベルとしてチェックしてくれると気づきやすい
|
114
|
+
|
115
|
+
# +dfsgのrepack countどうあるべきか問題
|
116
|
+
|
117
|
+
* repack countもバラバラ(出典: UDDのsid source package調べ)
|
118
|
+
|
119
|
+
|
120
|
+
|repack countの付け方|パッケージ数|
|
121
|
+
|--|---:|
|
122
|
+
|+dfsg-1|~1400|
|
123
|
+
|+dfsgN-1|~400|
|
124
|
+
|+dfsg.N-1|~60|
|
125
|
+
|
126
|
+
* mentors.debian.netはなぜか+dfsg.N-1をオススメしている🤔
|
127
|
+
|
128
|
+
# 結論: repack countはどう付与するのがよいか?
|
129
|
+
|
130
|
+
* 初回は+dfsg-1スタイル
|
131
|
+
* 理由: ほぼ複数回repackすることはない
|
132
|
+
* 再度repackしないといけなくなったら、+dfsgN-1
|
133
|
+
* 例: 1.0+dfsg2-1
|
134
|
+
* 1.0+dfsg2-1 > 1.0+dfsg-1なので更新も問題ない
|
135
|
+
* lintianがinfoレベルとしてチェックしてくれると気づきやすい
|
136
|
+
|
137
|
+
# 実践編
|
138
|
+
|
139
|
+
* ~dfsgをlintianでチェックできるようにする
|
140
|
+
* 検出するためのコードを書く
|
141
|
+
* lib/Lintian/Check/*
|
142
|
+
* テストを追加する
|
143
|
+
* t/recipes/checks/*
|
144
|
+
* tagを追加する
|
145
|
+
* tags/x/xxx.tag
|
146
|
+
|
147
|
+
# ~dfsgをチェックする
|
148
|
+
|
149
|
+
* lib/Lintian/Check/Fields/Version.pm
|
150
|
+
|
151
|
+
```
|
152
|
+
--- a/lib/Lintian/Check/Fields/Version.pm
|
153
|
+
+++ b/lib/Lintian/Check/Fields/Version.pm
|
154
|
+
...
|
155
|
+
} elsif ($version =~ /\.dfsg/) {
|
156
|
+
$self->hint('dfsg-version-with-period', $version);
|
157
|
+
+
|
158
|
+
+ } elsif ($version =~ /~dfsg/) {
|
159
|
+
+ $self->hint('dfsg-version-with-tilde', $version);
|
160
|
+
+
|
161
|
+
} elsif ($version =~ /dsfg/) {
|
162
|
+
$self->hint('dfsg-version-misspelled', $version);
|
163
|
+
}
|
164
|
+
...
|
165
|
+
```
|
166
|
+
|
167
|
+
|
168
|
+
# ~dfsgのテストを追加する
|
169
|
+
|
170
|
+
* 主に以下の3つを追加する
|
171
|
+
* t/recipes/checks/fields/version/**tilde-dfsg/build-spec/fill-values**
|
172
|
+
* t/recipes/checks/fields/version/**tilde-dfsg/eval/desc**
|
173
|
+
* t/recipes/checks/fields/version/**tilde-dfsg/eval/hints**
|
174
|
+
|
175
|
+
# ~dfsgのテストを追加する
|
176
|
+
|
177
|
+
* t/.../tilde-dfsg/build-spec/fill-values
|
178
|
+
* パラメータ指定でテスト用パッケージをカスタマイズする
|
179
|
+
* t/.../tilde-dfsg/eval/desc
|
180
|
+
* テストがどのグループに属するかを指定する
|
181
|
+
* t/.../tilde-dfsg/eval/hints
|
182
|
+
* lintianでチェックしたときのメッセージ(自動生成する)
|
183
|
+
|
184
|
+
# t/.../tilde-dfsg/build-spec/fill-valuesの例
|
185
|
+
|
186
|
+
```
|
187
|
+
Testname: tilde-dfsg
|
188
|
+
Skeleton: upload-non-native
|
189
|
+
Version: 1.0~dfsg-1
|
190
|
+
Description: Check for dfsg with tilde (~) prefix
|
191
|
+
See-Also:
|
192
|
+
https://lists.debian.org/debian-devel/2021/10/msg00012.html
|
193
|
+
```
|
194
|
+
|
195
|
+
* Skeleton: で指定したパッケージの雛形を上書きする
|
196
|
+
|
197
|
+
# t/.../tilde-dfsg/eval/descの例
|
198
|
+
|
199
|
+
```
|
200
|
+
Testname: tilde-dfsg
|
201
|
+
Check: fields/version
|
202
|
+
```
|
203
|
+
|
204
|
+
* Testname: はevalの親ディレクトリ(fill-valuesと同じ)
|
205
|
+
* Check:はこのテストが所属するグループを指定する
|
206
|
+
|
207
|
+
# t/.../tilde-dfsg/eval/hintsの例
|
208
|
+
|
209
|
+
|
210
|
+
```
|
211
|
+
tilde-dfsg (source): dfsg-version-with-tilde 1.0~dfsg-1
|
212
|
+
```
|
213
|
+
|
214
|
+
* テスト実行時に自動生成する
|
215
|
+
|
216
|
+
# tags/d/dfsg-version-with-tilde.tagの例
|
217
|
+
|
218
|
+
```
|
219
|
+
Tag: dfsg-version-with-tilde
|
220
|
+
Severity: info
|
221
|
+
Check: fields/version
|
222
|
+
Explanation: The source version string contains a tilde like <code>~dfsg</code>.
|
223
|
+
It is probably in a form like <code>1.0~dfsg-1</code>.
|
224
|
+
...
|
225
|
+
See-Also:
|
226
|
+
https://lists.debian.org/debian-devel/2021/10/msg00012.html
|
227
|
+
```
|
228
|
+
|
229
|
+
* タグ名、重要度など詳細を記述する
|
230
|
+
|
231
|
+
# ~dfsgのhintを生成する
|
232
|
+
|
233
|
+
* ./private/runtests --onlyrun=check:fields/version
|
234
|
+
|
235
|
+
```
|
236
|
+
Building the test packages took 1 second.
|
237
|
+
|
238
|
+
# Hints do not match
|
239
|
+
#
|
240
|
+
# --- debian/test-out/eval/checks/fields/version/tilde-dfsg/hints.specified.calibrated
|
241
|
+
# +++ debian/test-out/eval/checks/fields/version/tilde-dfsg/hints.actual.parsed
|
242
|
+
# -
|
243
|
+
# +tilde-dfsg (source): dfsg-version-with-tilde 1.0~dfsg-1
|
244
|
+
#
|
245
|
+
```
|
246
|
+
|
247
|
+
# テストがパスすることを確認する
|
248
|
+
|
249
|
+
* 開発時は`--onlyrun`で実行するテストのグループをしぼるのがよい
|
250
|
+
|
251
|
+
```
|
252
|
+
$ ./private/runtests --onlyrun=check:fields/version
|
253
|
+
...
|
254
|
+
All tests successful.
|
255
|
+
Files=4, Tests=4, 2 wallclock secs ( 0.41 usr 0.12 sys + 4.25 cusr 1.02 csys = 5.80 CPU)
|
256
|
+
Result: PASS
|
257
|
+
```
|
258
|
+
|
259
|
+
# さいごに
|
260
|
+
|
261
|
+
* lintian 2.113.0のリリースに取り込まれました
|
262
|
+
* <https://salsa.debian.org/lintian/lintian/-/merge_requests/379> ~dfsgのチェック
|
263
|
+
* <https://salsa.debian.org/lintian/lintian/-/merge_requests/381> +dfsg.N-1のチェック
|
264
|
+
* <https://salsa.debian.org/lintian/lintian/-/merge_requests/380> +dfsg1-1のチェック
|
265
|
+
* けっこうあっさりマージしてもらえるのでフィードバックおすすめ
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rabbit-slide-kenhys-tokyodebian-lintian-howto-202112
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2021.12.18.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kentaro Hayashi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-12-04 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
|
+
- pdf/tokyodebian-lintian-howto-202112-tokyodebian-lintian-howto.pdf
|
39
|
+
- theme.rb
|
40
|
+
- tokyodebian-lintian-howto.md
|
41
|
+
homepage: https://slide.rabbit-shocker.org/authors/kenhys/tokyodebian-lintian-howto-202112/
|
42
|
+
licenses:
|
43
|
+
- CC-BY-SA-4.0
|
44
|
+
metadata: {}
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubygems_version: 3.1.6
|
61
|
+
signing_key:
|
62
|
+
specification_version: 4
|
63
|
+
summary: Tokyo Debian Lintian Howto 202112
|
64
|
+
test_files: []
|