Text
Page: 1
Debianパッケージング
アップロード編
おすすめのアップロードツールはどれか?
Kentaro Hayashi
ClearCode Inc.
2023年1月 東京エリア・関西合同Debian勉強会
Page: 2
スライドは Rabbit Slide
Showにて公開済みです
Debianパッケージング アップロード編
https://slide.rabbit-shocker.org/authors/kenhys/
tokyodebian-dputng-howto-202301/
Page: 3
本日の内容
Debianパッケージのアップロードの機会
各種アップロードツールの紹介
dput,dpug-ng,dupload
おすすめのツールについて
Page: 4
Debianパッケージのアッ
プロードの機会
パッケージのメンテナンス
コントリビューターによるアップロード
例: mentors.d.nへのアップロードなど
DM/DD: 既存のパッケージのメンテナンス
DD:新規パッケージのスポンサー
例: ftp-masterへのスポンサーアップロードなど
Page: 5
アップロードに用いられる
ツール
dput (圧倒的に利用者が多い)
dupload (dput-ngよりは使われている)
https://www.debian.org/doc/manuals/maint-guide/
upload.ja.html
https://www.debian.org/doc/manuals/developers-
reference/tools.ja.html#package-uploaders
dput-ng (一部の人が使っている)
Page: 6
dputのインストール動向
https://qa.debian.org/popcon.php?package=dput
Page: 7
duploadのインストール動
向
https://qa.debian.org/popcon.php?package=dupload
Page: 8
dput-ngのインストール動
向
https://qa.debian.org/popcon.php?package=dput-ng
Page: 9
dputとは
ほぼデファクトスタンダードのアップロードツール
devscriptsのrecommendsでインストールされる
packaging-devの依存でインストールされる
~/.dput.cfでユーザーごとにカスタマイズ
PPAにアップロードするときとか
Page: 10
dput-ngとは(1)
https://dput.readthedocs.io/en/latest/
dputとの設定ファイルの互換性を維持しつつも方向性が
異なるプロジェクト
フックの仕組みでチェック機能を拡張可能
例: 3rdパーティーが開発したチェッカーを利用できる
独自書式の設定ファイルで挙動を柔軟に変えることもで
きる
DMのパーミッションの操作もできる(dcutの機能強化)
Page: 11
dput-ngとは(2)
dputと併用はできない
dput-ngをインストールするとdputは削除される
ドキュメントはdputよく知っている前提
利用可能なフックの説明はなく、実装についてのページ
がある
https://dput.readthedocs.io/en/latest/library/hooks/
index.html
dput(1)もしくはdput(5)の参照おすすめ
Page: 12
dirtを使ってフックを調べ
る
dirt listコマンドが利用できる
% dirt list
WARNING: This command is not completed yet. Interface and behavior changes are expected in future releases
pre-upload hooks:
required-fields: check whether a field is present and non-empty in the changes file
checksum: verify checksums before uploading
protected-distribution: warn before uploading to distributions where a special policy applies
lintian: runs lintian before the upload
gpg: check GnuPG signatures before the upload
allowed-distribution: check whether a local profile permits uploads to the target distribution
suite-mismatch: check the target distribution for common errors
supported-distribution: check whether the target distribution is currently supported (using distro-info)
check-debs: makes sure the upload contains a binary package
post-upload hooks:
impatient: Tell me when dinstall will pick this up
Page: 13
duploadとは
dput,dput-ngと同様にアップロードするためのもの
dput,dput-ngよりは機能が少なめ
設定(.dupload.conf)に従ってアナウンスメールを送信す
る機能あり
.uploadがあればスキップしたり、チェックサムの確認機
能ぐらい
Page: 14
利用可能なチェックを比較
する
dputで利用可能なチェック: 7
dput-ngで利用可能なチェック: 10
duploadで利用可能なチェック: (省略)
Page: 15
dputで利用可能なチェック
(1)
Unique upload
アップロードしたときのログがあればアップロードを中
断する
Required package files
必要なファイルが含まれていないときにアップロードを
中断する
Successful local install
パッケージをインストールした状態でないときにアップ
ロードを中断する(既定で無効)
Page: 16
dputで利用可能なチェック
(2)
Cryptographic signature
GPG署名していないときにアップロードを中断する(既定
で有効)
Package files content match
サイズやハッシュ値が一致していないときにアップロー
ドを中断する(既定で有効)
Page: 17
dputで利用可能なチェック
(3)
Distribution name is permitted for the remote host
アップロード先が許容しないdistributionの場合にアップ
ロードを中断する(サーバー側設定に依存)
Lintian success
lintianが失敗したときにアップロードを中断する(既定で
無効)
Page: 18
dput-ngで利用できるフッ
ク (1)
allowed-distribution
プロファイルに応じてアップロードしてもよいかチェッ
クする
例: debian/changelogでUNRELEASEDのままアップロード
しようとしたら止める
check-debsフック
ソース or バイナリどちらが含まれるべきかチェックす
る
例: PPAにバイナリパッケージをアップロードしようとする
とエラー
Page: 19
dput-ngで利用できるフッ
ク (2)
checksumフック
アップロード前のパッケージのチェックサムがあってい
るかをチェックする
gpgフック
アップロード前にGnuPGで署名してあるかをチェックす
る
署名していなかったら署名をうながし、アップロードでき
る
Page: 20
dput-ngで利用できるフッ
ク (2)
impatientフック
次にdinstallが実行されるまでの時間を通知する
lintianフック
アップロード前にlintianを実行する
Page: 21
dput-ngで利用できるフッ
ク (3)
protected-distributionフック
特別なポリシーが適用されるところへのアップロード前
に警告する
例: testing-proposed-updates, proposed-updates,
oldstable, stable, testing, stable-security, oldstable-
security, testing-securityなどにアップロードしようとした
ときに確認が求められる
Page: 22
dput-ngで利用できるフッ
ク (4)
required-fieldsフック
指定された項目があるかをチェックする
例:.changesファイルにプロファイルで定義したrequired-
fieldsに指定されたものが含まれていないと警告する
Page: 23
dput-ngで利用できるフッ
ク (4)
suite-mismatchフック
changelogと.changesのディストリビューションが一致
しない場合、警告する
例: unstableでexperimentalが混在しているとき
supported-distributionフック
.changesのDistributionがサポートされていないときに警
告する
例: サポートの有無はpython3-distro-infoを使って/usr/
share/distro-info/debian.csvを参照する
Page: 24
サンプルとして利用できる
フック
bd-blacklist
Build-Dependsに対象が含まれていたら失敗する
clojure-arno-tester
メンテナーがarno@debian.orgだったら失敗する
twitter
アップロード後にtweetする
Page: 25
各種ツールの機能比較 (1)
提供コマン
ド
設定ファイ
ル
dupload
dupload dput
dput,dcut
~/.dupload.
conf ~/.dput.cf
or
~/.config/
dput/
dput.cf
dput-ng
dput,dcut,
dirt
~/.dput.cf
or 独自
Page: 26
各種ツールの機能比較 (2)
dupload
フックの追
加実装
対応プロト
コル
メール連携
dput
dput-ng
非対応 非対応 対応
ftp,http,ht
tps,scp,scp
b,rsync,co
py
対応 ftp,http,ht
tps,scp,rsy
nc,local ftp,http,ht
tps,scp,loc
al
非対応 非対応
Page: 27
各種ツールの機能比較 (3)
dupload
DMの権限
操作
非対応
dput
非対応
dput-ng
dcut追加
機能
Page: 28
dcutによるDMの権限操作
dput-ng版ではdcutでDMの許可を変更できる
% dcut dm \
--uid 66DEF15282990C2199EFA801A8A128A8AB1CEE49 \
--allow zarchive
Uploading commands file to
ftp.upload.debian.org (incoming: /pub/UploadQueue/)
Picking DM Andrea Pappacoda
(Tachi's main key) <andrea@pappacoda.it>
with fingerprint 66DEF15282990C2199EFA801A8A128A8AB1CEE49
Uploading kenhys-1673679146.dak-commands to ftp-master
Page: 29
dput-ngでのプロファイル
の考え方
dputと互換性のないフォーマット(JSON)について
メタ情報を拡張したものがプロファイル
例: debianというメタ情報からmentors-ftpプロファイルを
派生
基本的な設定をメタ情報として定義し、サイトごとの設
定をプロファイルで指定して上書きするイメージ
Page: 30
dput-ngでのプロファイル
設定例 (1)
https://mentors.debian.net/intro-maintainers/
FTPの場合に~/.dput.cfに設定する内容
[mentors-ftp]
fqdn = mentors.debian.net
login = anonymous
progress_indicator = 2
passive_ftp = 1
incoming = /pub/UploadQueue/
method = ftp
allow_unsigned_uploads = 0
# Allow uploads for UNRELEASED packages
allowed_distributions = .*
Page: 31
dput-ngでのプロファイル
設定例 (2)
/etc/dput.d/profiles/mentors.json
{
}
"-hooks": [
"check-debs",
"allowed-distribution"
],
"allowed_distributions": ".*",
"fqdn": "mentors.debian.net",
"incoming": "/pub/UploadQueue/",
"login": "anonymous",
"meta": "debian",
"method": "ftp"
Page: 32
dput-ngでのプロファイル
設定例 (3)
継承元の/etc/dput.d/metas/debian.json定義
{
}
"allow_dcut": true,
"allowed-distribution": {
"codename-groups": [
"general", "backport", "rm-managed"
]
},
"codenames": "debian",
"hooks": [
"allowed-distribution",
"protected-distribution",
"checksum",
"suite-mismatch",
"gpg"
],
...(省略)...
Page: 33
結局、どれを使うのがよい
のか? (1)
dupload
メール連携が使いたい
シンプルな機能で十分派
チェック機能は少なめ
Page: 34
結局、どれを使うのがよい
のか? (2)
dput
メジャーなものを使いたい派
チェックはdputのもので十分派
DMの権限変更もしたい
Page: 35
結局、どれを使うのがよい
のか? (3)
dput-ng
チェック機能を強化したい派
アップロード時に署名もまとめて実行したい
DMの権限変更もしたい
rsyncでアップロード必須
Page: 36
さいごに
dputとdput-ng、設定ファイルの互換性あるものの機
能性に違いあり
アップロード時に署名もできるのでdput-ngオススメ
Page: 37
参考資料 (1)
https://manpages.debian.org/unstable/dput/
index.html
dput(1)
dcut(1)
dput.cf(5)
Page: 38
参考資料 (2)
https://manpages.debian.org/unstable/dput-ng/
index.html
dput(1)
dput(5) dput-ngの独自設定フォーマットについて知るの
によい
dcut(1) dmサブコマンドの使い方について
dput.cf(5)