倉敷さんのgoldencheetah
パッケージの状況をヒアリング。
libusb0.1
に依存しているが、libusb0.1はもう古いからDebianから消したいよねという動きがある。goldencheetah
側としては「マルチプラットフォーム対応してるので、壊したくないよね」なのでlibusb1.0
に動くのは消極的goldencheetah
では「使うようにしよう」というPRが来ているものの実装はされてない感じlibusb-compat
はDebianではパッケージになっていないdh12
に更新、不要になったファイルやオプションを消すdebian/watch
はv4形式にして簡易に書ける“debhelper-compat (= 12)” is now releasedを読む。Rules-Requires-Root support when the field is set and dpkg-dev notifies debhelper that it supports the feature (requires dpkg-dev from Debian buster). Besides removing the need for (fake)root it can also remove about 3 invocations of debian/rules.
との記述。Rules-Requires-Root: no
のようにするとfakerootの起動とdebian/rulesの呼び出しが無くなって早くなるぜ、ということらしい。
試しにdpkg-dev
をBuild-Dependsにしてみたら
E: os-autoinst source: build-depends-on-build-essential-package-without-using-version dpkg-dev [build-depends: dpkg-dev]
あら。。。dpkg-dev 1.19.0
からサポートのようなので修正。しかし、ビルドにroot権限が必要なパッケージのほうが少なさそうだから、これはno
をデフォルトにしてRules-Requires-Root: yes
を明示的に宣言させるほうが良くないかね?と思ったので質問してみた→やはりそのようだ。しかし、それを実装するとなると対応パッケージが多数になってしまうだろうという懸念がある模様。
severity
を下げておいた。debootstrap
パッケージ、夏に作業して放置してたMergeRequestを変更を追加してMergeした。git rebase
なんて初めて使ったぞ。反応を様子見してから月曜にでもアップロードするかな。倉敷さんがビルドマシンが家のNASで遅いという話をしていたので、CloudGarageさんの開発者支援制度でお借りしているホストを一台セットアップして渡した。外堀を埋める方向。
debootstrap
は最低限のDebian環境の作成に使われるツール。pbuilder
やcowbuilder
(とその環境を使うpiuparts
)などのツールの裏側でも動くし、docker
イメージの裏側もコイツ。ちなみに環境構築にはリポジトリから必要なパッケージを取得してくるので、それなりに時間がかかる(しかも最初はapt
も使えないのでwget
で取得するんだぜ?)。うーむ。
で、どうやって時間を短縮するか?というと、以下のような選択肢がある。
ftpsync
使おうね。他のツールはダメダメ。squid
などのサーバーを立てるやり方。
debootstrap 1.0.96
からsquid-deb-proxy-client
をインストールしておくと、squid-deb-proxy
で立ち上げたプロキシサーバーを自動的に参照するようになる。apt-cacher
などだと一々プロキシがどこにあるのかを指定しないといけないので、squid-deb-proxy
マジおすすめ--cache-dir
オプションを使って、適当なところにキャッシュしておいたdebパッケージを参照するやり方。`
debootstrap 1.0.97
から実装済み。一台だけでやるならこれで十分。--cache-dir=/home/henrich/tmp/cachedir
というように、このオプションでは絶対パスで参照するのが必要。~/tmp/cachedir
の様な指定はできない。あと、リポジトリのミラーはdebootstrap 1.0.85
からdeb.debian.orgを参照するようになっている。これはFastly提供のCDNだけど、個人的には自分が運用しているdebian-mirror.sakura.ne.jpを使っている。これは異常があったらすぐ気付くように、というドッグフーディングの側面もあるが、利用者がそんなに多くないので快適だということもある。もっと使っていいのよ?
最後に、記述時の最新であるdebootstrap 1.0.112
はMr.FAIことThomas Lange
さんのハックによってパッケージ依存関係の最適化(これもapt
が使われてはいない)が図られているので、随分と時間が短縮されている。
結論:debootstrap 1.0.112以降を使おう。debootstrap
はshell script+embedded perlコードというアレなやつなので、環境依存が極小であり、どのバージョンでも動くよ。バグがあったら教えてくださいな。
Ultimate Debian DatabaseのBug search Cleaner viewから。
apr-rdependes
で依存パッケージの確認
gradle-debian-helper
パッケージをBuild-Dependsに加えて、debian/rules
でdh $@ -with buildsystem=gradle
…って間違ってるやん--buildsystem=gradle
だよね…。* What went wrong:
A problem occurred configuring root project 'powermock'.
> Could not resolve all files for configuration ':classpath'.
> Could not resolve org.springframework.build.gradle:propdeps-plugin:0.0.7.
Required by:
project :
> No cached version of org.springframework.build.gradle:propdeps-plugin:0.0.7 available for offline mode.
> No cached version of org.springframework.build.gradle:propdeps-plugin:0.0.7 available for offline mode.
> No cached version of org.springframework.build.gradle:propdeps-plugin:0.0.7 available for offline mode.
> No cached version of org.springframework.build.gradle:propdeps-plugin:0.0.7 available for offline mode.
> Could not resolve com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4.
Required by:
project :
> No cached version of com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4 available for offline mode.
> No cached version of com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4 available for offline mode.
> No cached version of com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4 available for offline mode.
> No cached version of com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4 available for offline mode.
> Could not resolve net.researchgate:gradle-release:2.4.0.
Required by:
project :
> No cached version of net.researchgate:gradle-release:2.4.0 available for offline mode.
> No cached version of net.researchgate:gradle-release:2.4.0 available for offline mode.
> No cached version of net.researchgate:gradle-release:2.4.0 available for offline mode.
> No cached version of net.researchgate:gradle-release:2.4.0 available for offline mode.
> Could not resolve com.github.jengelman.gradle.plugins:shadow:1.2.4.
Required by:
project :
> No cached version of com.github.jengelman.gradle.plugins:shadow:1.2.4 available for offline mode.
> No cached version of com.github.jengelman.gradle.plugins:shadow:1.2.4 available for offline mode.
> No cached version of com.github.jengelman.gradle.plugins:shadow:1.2.4 available for offline mode.
> No cached version of com.github.jengelman.gradle.plugins:shadow:1.2.4 available for offline mode.
> Could not resolve org.shipkit:shipkit:2.0.31.
Required by:
project :
> No cached version of org.shipkit:shipkit:2.0.31 available for offline mode.
> No cached version of org.shipkit:shipkit:2.0.31 available for offline mode.
> No cached version of org.shipkit:shipkit:2.0.31 available for offline mode.
> No cached version of org.shipkit:shipkit:2.0.31 available for offline mode.
> Could not resolve ru.vyarus:gradle-animalsniffer-plugin:1.4.1.
Required by:
project :
> No cached version of ru.vyarus:gradle-animalsniffer-plugin:1.4.1 available for offline mode.
> No cached version of ru.vyarus:gradle-animalsniffer-plugin:1.4.1 available for offline mode.
> No cached version of ru.vyarus:gradle-animalsniffer-plugin:1.4.1 available for offline mode.
> No cached version of ru.vyarus:gradle-animalsniffer-plugin:1.4.1 available for offline mode.
エラーに出ている足りないパッケージについて、適当にパッケージ名を付けてBuild-Depends
に指定。
pbuilder-satisfydepends-dummy : Depends: gradle-bintray-plugin which is a virtual package and is not provided by any available package
Depends: gradle-release which is a virtual package and is not provided by any available package
Depends: gradle-shadow which is a virtual package and is not provided by any available package
Depends: gradle-shipkit which is a virtual package and is not provided by any available package
Depends: gradle-animalsniffer-plugin which is a virtual package and is not provided by any available package
gradle-propdeps-plugin
はパッケージがあったので追加。gradle-animalsniffer-plugin
はhttps://github.com/xvik/gradle-animalsniffer-pluginかららしい。
animalsniffer
に依存している。libanimal-sniffer-java
パッケージがあるのでこれだな。「Use version 1.17 (toolVersion=1.17) if you need to run on java 9, but note that 1.17 can't be used on java 8 (and that's why it is not set by default)」
→Java11でbusterはリリースされるので1.17が必要libanimal-sniffer-java
は1.16なので、まずコイツのアップデートが必要…。$ apt-rdepends -r libanimal-sniffer-java
の結果は何もなかったので、ぶっ込んでも大丈夫じゃないかな。gradle-shipkit
はhttps://github.com/mockito/shipkitだなgradle-shadow
はhttps://github.com/johnrengelman/shadowgradle-release
はhttps://github.com/researchgate/gradle-releasegradle-bintray-plugin
はhttps://github.com/bintray/gradle-bintray-plugindh12
に上げたらビルドがコケるように。あれ?# root@hp:/build/os-autoinst-4.5.1527308405.8b586d5# find . -name '*.pm' -print
./debian/os-autoinst/usr/libexec/os-autoinst/consoles/sshXtermIPMI.pm
./debian/os-autoinst/usr/libexec/os-autoinst/consoles/vnc_base.pm
./debian/os-autoinst/usr/libexec/os-autoinst/consoles/localXvnc.pm
./debian/os-autoinst/usr/libexec/os-autoinst/consoles/sshX3270.pm
./debian/os-autoinst/usr/libexec/os-autoinst/consoles/sshVirtsh.pm
./debian/os-autoinst/usr/libexec/os-autoinst/consoles/virtio_terminal.pm
おいおい。何故か/usr/libexec
以下にインストールするようになっとるやん。man debhelper
で答えを探す…見つけた。
The build systems meson and autoconf no longer explicitly set the --libexecdir variable and thus relies on the build system default - which should be /usr/libexec (per FHS 3.0, adopted in Debian Policy 4.1.5).
ということで。どうやって直すかね。。。
YubikeyでSSH接続しようとしたら謎のエラーがでて焦る。結局、手元の~/.gnupg/private-keys-v1.d
のファイルが腐ってるというオチだったのだけど、絞り込むのも時間かかった…
mv .gnupg bak.gnupg
などとして接続→問題なし(これで.gnupg
以下のファイルのうちどれかがおかしい)やれやれ。
今日は成果が得られなかった一日。
ruby-netrcパッケージのバグのtriage。どうもテストケースがbuilddだと問題になるようだ(これは後に間違いだと気付く)。assert_equal File.join(Dir.pwd, '.netrc'), Netrc.default_path
が以下のような結果になる。
1) Failure:
TestNetrc#test_missing_environment [/<<PKGBUILDDIR>>/test/test_netrc.rb:203]:
--- expected
+++ actual
@@ -1,2 +1 @@
-# encoding: ASCII-8BIT
-"/<<PKGBUILDDIR>>/.netrc"
+"/build/.netrc"
<<PKGBUILDDIR>>
なんて変わった値が放り込まれてしまっている?…と思ったら、これは「builddでのログ出力で置き換えてるだけ」なのか。手元でビルドする時はcowbuilder
でやってしまっていたので、sbuild
環境を用意するのにも時間が…あれ?sbuild
でも普通にビルドできちゃった。というか、builddでも以前にビルド自体は出来てるのか…。はてな?
バグレポートを再度よく読み、テスト部分を再確認。
def test_missing_environment
nil_home = nil
ENV["HOME"], nil_home = nil_home, ENV["HOME"]
assert_equal File.join(Dir.pwd, '.netrc'), Netrc.default_path
ensure
ENV["HOME"], nil_home = nil_home, ENV["HOME"]
end
default_path
でgrep…。
def self.default_path
File.join(ENV['NETRC'] || home_path, netrc_filename)
end
あー、これだ。NETRC
が存在しない場合にhome_path
、つまりは上記のエラーになる環境では/build
が指定されてるのにもかかわらず、ビルドをしているDir.pwd
は別、ということだろうな。さて、どういうふうにして回避するかね…
p nil_home
p ENV["HOME"]
p Netrc.home_path
とすると
"/home/henrich"
nil
"/build/ruby-netrc-0.11.0"
が返る。あれ?予想と違う。home_path
は/build/ruby-netrc-0.11.0
なのか。ENV["HOME"]
がnil
であっても問題なし、ということを言いたいとすれば以下のようにするのが良さそう
--- a/test/test_netrc.rb
+++ b/test/test_netrc.rb
@@ -200,7 +200,7 @@
def test_missing_environment
nil_home = nil
ENV["HOME"], nil_home = nil_home, ENV["HOME"]
- assert_equal File.join(Dir.pwd, '.netrc'), Netrc.default_path
+ assert_equal File.join(Netrc.home_path, '.netrc'), Netrc.default_path
ensure
ENV["HOME"], nil_home = nil_home, ENV["HOME"]
end
でアップロードした。
ruby-eventmachineパッケージのFTBFSがpendingに10ヶ月ぐらいなったままなので質問した。→どうやらsegfaultするという問題があるらしい。うーむ。
os-autoinstを直せるかな、と思ってビルドするも
The following packages have unmet dependencies:
libopencv-imgcodecs3.2 : Depends: gdal-abi-2-3-0 which is a virtual package and is not provided by any available package
libvtk6.3 : Depends: gdal-abi-2-3-0 which is a virtual package and is not provided by any available package
げぇ。
Package: libgdal20
Version: 2.4.0+dfsg-1
Priority: optional
Section: libs
Source: gdal
Maintainer: Debian GIS Project <pkg-grass-devel@lists.alioth.debian.org>
Installed-Size: 20.2 MB
Provides: gdal-abi-2-4-0
こいつか…。Transition trackerを見る限り、ここ1時間でビルドされたりしてるので、今日はたまたまあたってしまった、という感じか。
fonts-monapoパッケージをアップデート。upstreamが配布しなくなってた。
ubuntu-keyringパッケージの変更の続き。build時にもファイルチェックをするようにしたり。shellscriptではtempdir=`mktemp -d`
のようにしてtempdirを指定したのだけど、makeでは$$tempdir
が空になるので、$(CURDIR)/debian/tmp
決め打ちで逃げた…どうやるのがいいんでしょうねぇ?
autopkgtest実施時にパッケージの分割・リネームの結果、パッケージリポジトリに該当のパッケージがなくてパッケージを引っ張ってこようとしてエラーとなるという予想外のエラー。気付くまでにまたしても時間を要した。とりあえずsudo cowbuilder --login --inputfile a.deb --inputfile b.deb --save-after-exec
としてchroot環境に入りapt install /buildd/a.deb /buildd/b.deb
などとしてローカル環境に加えて様子見→エラー解消。やれやれ。しかし、これを失念してその後でpiuparts
でパッケージチェックしたらdebconf関連ファイルがそのまま残ってるぞ、というエラーになって苦悶した(sudo cowbuilder --create
しなおして対処)。
/etc/apt/trusted.gpg.d
にsymlinkを張るkeyringをUbuntuのパッケージを参考に調整した今回の変更はこんな感じか。パッケージ分割で新しいバイナリパッケージが増えるからNEW queue待ちに。どれだけかかるのかな。。
そしてアップロード後もエラーを踏む。
Source-only uploads to NEW are not allowed.
なんと、そうだったのか。最近はarch=all
パッケージとかも手元でビルドしたバイナリではなくbuilddでビルドしたものを、と思ってgit-buildpackage
のオプションで--git-pbuilder-options="--source-only-changes"
などとしていたのが仇に。
git format-patch
して一旦逃してから全削除→git clone
して当て直し。そしてメンテナの作業ミスを見つけて直すなども。やれやれ。ubuntu-keyringパッケージの変更の続き。Ubuntu側と内容を合わせる形に変更で、パッケージを増やしたり。.install
ファイルの指定が微妙でインストールされるファイルが被ってしまう問題、[0-9]*
で数字だけ指定されるかと思ったら、そうでなかった。。。
keyrings/ubuntu-keyring-[0-9]*[!a-z]-archive.gpg usr/share/keyrings/
というようにした。
Debian10 “buster"リリースの障害となるRelease Criticalバグ一覧から簡単に直せそうなのを探して作業。