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 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
@@ -0,0 +1,14 @@
1
+ # Tokyo Debian Lintian Howto 202112
2
+
3
+ ## How to show
4
+
5
+ % rabbit
6
+
7
+ ## How to install
8
+
9
+ % gem install rabbit-slide-kenhys-tokyodebian-lintian-howto-202112
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-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:
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,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: []