DDのおしごと

Sat, Jan 5, 2019  in debian debian , DD

倉敷さんのgoldencheetahパッケージの状況をヒアリング。

  • libusb0.1に依存しているが、libusb0.1はもう古いからDebianから消したいよねという動きがある。
  • でもgoldencheetah側としては「マルチプラットフォーム対応してるので、壊したくないよね」なのでlibusb1.0に動くのは消極的
  • libusb-compatという「libusb1.0のwrapperで0.1相当の動きをする」のがあるから、これを使えば?という流れはある。
    • ただし、goldencheetahでは「使うようにしよう」というPRが来ているものの実装はされてない感じ
    • Debian側もdeadからhalf-deadになるだけじゃね?というコメントもある。
      • 個人的にはhalf-deadならいいじゃん、と思うけど…
    • ちなみにlibusb-compatはDebianではパッケージになっていない
  • ついでの気晴らしにdebianディレクトリ以下をレビューしてmerge requestを送った。要点は以下の感じ
    • 最新のdh12に更新、不要になったファイルやオプションを消す
    • insecureなgitプロトコルやhttpをhttpsに置き換え
    • debian/watchはv4形式にして簡易に書ける
  • cosmetic changesなわけだけど、パッケージの「メンテナンス」ってそんなもんですよ、っと。これが最初の「パッケージング」だと色々と技術的にどう対処するか?の問題を解く感じになる。

めんてなのおしごと

Sat, Jan 5, 2019  in debian debian

“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を明示的に宣言させるほうが良くないかね?と思ったので質問してみた→やはりそのようだ。しかし、それを実装するとなると対応パッケージが多数になってしまうだろうという懸念がある模様。


  • 上記の変更その他を加えてos-autoinstパッケージをアップロードRCバグseverityを下げておいた。
  • debootstrapパッケージ、夏に作業して放置してたMergeRequestを変更を追加してMergeしたgit rebaseなんて初めて使ったぞ。反応を様子見してから月曜にでもアップロードするかな。

DDのおしごと

Fri, Jan 4, 2019  in debian debian , DD

倉敷さんがビルドマシンが家のNASで遅いという話をしていたので、CloudGarageさんの開発者支援制度でお借りしているホストを一台セットアップして渡した。外堀を埋める方向。



debootstrapは最低限のDebian環境の作成に使われるツール。pbuildercowbuilder(とその環境を使うpiuparts)などのツールの裏側でも動くし、dockerイメージの裏側もコイツ。ちなみに環境構築にはリポジトリから必要なパッケージを取得してくるので、それなりに時間がかかる(しかも最初はaptも使えないのでwgetで取得するんだぜ?)。うーむ。

で、どうやって時間を短縮するか?というと、以下のような選択肢がある。

  1. ローカルミラーをセットアップしてそれを参照する
  2. ローカルプロキシをセットアップしてそれを参照する
  3. ローカルキャッシュをセットアップしてそれを参照する
  • 1のミラーはまるっとDebianリポジトリをコピーするやり方。
    • クライアントが何十台、スペックによっては何百台とかあっても対応できる
    • どのパッケージでもLAN内にあるので取得が早い
    • でも、ミラーを構築するには最低でも数百GBのディスクを使うことになるし、更新も追随するとなるとそれなりにトラフィックが生じる
    • ぶっちゃけオーバースペックすぎる。牛刀をもって鶏頭を裂く、的な。
    • あと、必ずそのミラー参照するようになるので、Laptopで作って移動したときには面倒になるかも
    • 構築するならftpsync使おうね。他のツールはダメダメ。
  • 2のプロキシはsquidなどのサーバーを立てるやり方。
    • 取得したパッケージだけをキャッシュするのでディスク容量がミラーより格段に少なくて済む
    • ミラーと同様に複数のマシンからも参照可能
    • debootstrap 1.0.96からsquid-deb-proxy-clientをインストールしておくと、squid-deb-proxyで立ち上げたプロキシサーバーを自動的に参照するようになる。apt-cacherなどだと一々プロキシがどこにあるのかを指定しないといけないので、squid-deb-proxyマジおすすめ
  • 3のキャッシュは--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コードというアレなやつなので、環境依存が極小であり、どのバージョンでも動くよ。バグがあったら教えてくださいな。


めんてなのおしごと

Fri, Jan 4, 2019  in debian debian

Ultimate Debian DatabaseのBug search Cleaner viewから。

  • xfce4関連パッケージがメンテナアドレスがaliothの消滅に伴う無効化されたもので、experimentalでは直ってるというしょーもない状態だったので状況を調査。
    • どうやら4.13というupstreamではdevelopment releaseな奴でアップデートしたからunstableに放り込むのがためらわれてるようだ
    • fedoraとxubuntuはそれでも4.13リリースをぶち込んだ模様。
    • というのを踏まえて「どーする?」という質問を投げた→「わかってる、4.14がリリースされたらそれを入れる」という回答。んーしばらくは放置か…。
  • uglifyjsのFTBFS、experimentalでは直ってるよ、という話
    • semver(セマンティックバージョニング)でわかるように大幅に変更されてるから、依存関係で不具合でるんじゃね?という理由でexperimentalに隔離されているようだ
    • では、ということでお手軽にapr-rdependesで依存パッケージの確認
      • emscriptenは内部に古い古いuglifyjs持ってるみたい…
      • lavaはソース落としてみたけど、バージョン指定の情報は特に無し。
      • node-grunt-contrib-uglifyは新しいバージョンならサポートしてる
      • node-uglifyjs-webpack-pluginも新しいバージョンならサポートしてる
      • ruby-uglifierも新しいバージョンならサポートしている
    • というのを踏まえると、node-grunt-contrib-uglify、node-uglifyjs-webpack-plugin、ruby-uglifierを最新バージョンにしてexperimentalに上げる、がいいのかな。

  • powermockがJava9ではビルドできないけど、新しいupstreamバージョンならOKよ、という話
    • やってみようとしたらビルドシステムからまるっと変わっていて(maven→gradle)、どうしようかな、というところ。gradle全然使ったこと無いのよね…
      • Debian Wikiのページにあった。gradle-debian-helperパッケージをBuild-Dependsに加えて、debian/rulesdh $@ -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

  • os-autoinstをdh12に上げたらビルドがコケるように。あれ?
# 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のファイルが腐ってるというオチだったのだけど、絞り込むのも時間かかった…

  • Yubikey側の異常を疑って、testing環境で接続→問題なし(これでYubikeyが壊れた疑惑はなくなった)
  • 異常がでたdesktopのunstable環境の問題を疑って、別のunstable環境なマシンで接続→問題なし(設定が全くしていなかったのでちょっと戸惑った、これでunstableだと壊れてるというパッケージ側の問題は無い)
  • ユーザー環境の差異を疑って、テストユーザーを作って接続→問題なし(これでいつものユーザーのhome directoryの設定が問題だろうと絞り込めた)
  • とりあえずmv .gnupg bak.gnupgなどとして接続→問題なし(これで.gnupg以下のファイルのうちどれかがおかしい)
  • ひたすら旧ディレクトリから1つずつディレクトリやファイルをコピーする→絞り込めた

やれやれ。


今日は成果が得られなかった一日。


めんてなのおしごと

Thu, Jan 3, 2019  in debian debian

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が配布しなくなってた。


めんてなのおしごと

Wed, Jan 2, 2019  in debian debian

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しなおして対処)。

  • パッケージを分割した
  • インストールするkeyringをUbuntuのパッケージを参考にして変更した
  • debconfで質問される /etc/apt/trusted.gpg.d にsymlinkを張るkeyringをUbuntuのパッケージを参考に調整した
  • autopkgtestをまともなものにした
  • build時にもautopkgtest相当が動作するようにした

今回の変更はこんな感じか。パッケージ分割で新しいバイナリパッケージが増えるからNEW queue待ちに。どれだけかかるのかな。。

そしてアップロード後もエラーを踏む。

Source-only uploads to NEW are not allowed.

なんと、そうだったのか。最近はarch=allパッケージとかも手元でビルドしたバイナリではなくbuilddでビルドしたものを、と思ってgit-buildpackageのオプションで--git-pbuilder-options="--source-only-changes"などとしていたのが仇に。


  • 淡々とjcodingsパッケージをアップデート
  • grcompilerに投稿されてたパッチをマージ。自分の作った地雷を踏むという失態を。
    • upstreamが4.3を出してるのだけど、これをマージした所ビルドも通らない代物だったのでそのまま放置してたのを忘れてパッチを当ててビルドが通らないものとして悩んでしまった。一旦debian/4.2ブランチを作ってこっちに。
    • で、全部終わってpushしようとしたらrejectされる…って他のメンテナが変更を加えてた。変更をgit format-patchして一旦逃してから全削除→git cloneして当て直し。そしてメンテナの作業ミスを見つけて直すなども。やれやれ。

めんてなのおしごと

Tue, Jan 1, 2019  in debian debian

ubuntu-keyringパッケージの変更の続き。Ubuntu側と内容を合わせる形に変更で、パッケージを増やしたり。.installファイルの指定が微妙でインストールされるファイルが被ってしまう問題、[0-9]*で数字だけ指定されるかと思ったら、そうでなかった。。。

keyrings/ubuntu-keyring-[0-9]*[!a-z]-archive.gpg      usr/share/keyrings/

というようにした。


めんてなのおしごと

Mon, Dec 31, 2018  in debian debian , patch

  • 先日のMerge Requestに「amd64 specificで指定してるけど、これi386でも動くんじゃない?」というコメントがメンテナから来たのでx86指定に変更した→マージされました。
  • 昨日のruby-loofahパッケージの更新で脆弱性修正したのだが、Debian9 “stretch"では変更をbackportしないといけない(まぁ、Debian Security Advisoryを出すほどでもない=no-dsaと見なされる可能性もあるけど)。根本的な変更はword1個消すだけ+XSS対策の追加コードだけだったので、作業してセキュリティチームに連絡だけしといた。
  • なんかKernelで問題が起きてるぞ、これは意図的なのか?というバグレポートを横目で見たので、以前の省電力化Kernel configパッチの影響であり意図的なものだということだけを伝えるreplyをした(changelogにきちんと書いたんだがな…)。その際、大元のFedoraでの変更をしたRHの人にCC入れておいた。
  • ubuntu-keyringパッケージを最新に更新。もうちょっと待とうかとも思ったのだけど、testが壊れたものをアップロードしてたのと前のアップロードの鍵はチェックでfailする謎の状態だったので。
    • 次はUbuntu側とパッケージ名を合わせる変更を入れ込むかね…

めんてなのおしごと

Sun, Dec 30, 2018  in debian debian , RCbug

Debian10 “buster"リリースの障害となるRelease Criticalバグ一覧から簡単に直せそうなのを探して作業。