木村と申します。 debuildコマンドを使ったパッケージのビルドについて質問させてください。
tmuxのカスタムパッケージを作ろうとしていて、その第一歩としてまずオリジ ナルのtmuxパッケージをビルドしてみました。「Debian パッケージングチュー トリアル」 (https://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.ja....) の10ページ目のdashの再構築の例を参考にして
1. sudo apt-get build-dep dash 2. sudo apt-get install devscripts fakeroot 3. mkdir -p ~/tmp/tmux 4. cd ~/tmp/tmux 5. apt-get source tmux 6. cd tmux* 7. debuild -us -uc
という順番でコマンドを実行したのですが、最後のdebuildが以下のようにエ ラーとなってしまいました。
---------------------------------------------------------------------- dh binary dh_testroot dh_prep dh_installdirs dh_auto_install make -j4 install DESTDIR=/home/yasu/tmp/tmux/tmux-3.1b/debian/tmux AM_UPDATE_INFO_DIR=no make[1]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' に入ります make[2]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' に入ります make[2]: 'install-data-am' に対して行うべき事はありません. /usr/bin/mkdir -p '/home/yasu/tmp/tmux/tmux-3.1b/debian/tmux/usr/bin' /usr/bin/install -c tmux '/home/yasu/tmp/tmux/tmux-3.1b/debian/tmux/usr/bin' make install-exec-hook make[3]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' に入ります if test xmdoc = xmdoc; then \ sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1 \ >./tmux.1.mdoc; \ else \ sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1| \ mawk -f ./mdoc2man.awk >./tmux.1.man; \ fi /usr/bin/mkdir -p /home/yasu/tmp/tmux/tmux-3.1b/debian/tmux/usr/share/man/man1 /usr/bin/install -c -m 644 ./tmux.1.mdoc \ /home/yasu/tmp/tmux/tmux-3.1b/debian/tmux/usr/share/man/man1/tmux.1 make[3]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' から出ます make[2]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' から出ます make[1]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' から出ます dh_installdocs chown: 'debian/tmux/usr/share/doc/tmux/README' の所有者を変更中: 無効な引数です chown: 'debian/tmux/usr/share/doc/tmux/example_tmux.conf' の所有者を変更中: 無効な引数です chown: 'debian/tmux/usr/share/doc/tmux' の所有者を変更中: 無効な引数です chown: 'debian/tmux/usr/share/doc' の所有者を変更中: 無効な引数です dh_installdocs: error: chown -R 0:0 debian/tmux/usr/share/doc returned exit code 1 make: *** [debian/rules:6: binary] エラー 25 dpkg-buildpackage: error: fakeroot debian/rules binary subprocess returned exit status 2 debuild: fatal error at line 1182: dpkg-buildpackage -us -uc -ui failed yasu@rolling-vm-debian1[1094]% ----------------------------------------------------------------------
最初はUnstableで実行したので、何かバグを踏んだのかと思いStableでも試し てみたのですが、結果は同じでした。それでいろいろ試してみたところ、場所 をNFS(正確にはautofs)でマウントしているホームディレクトリではなく、マ シンローカルのファイルシステム上のディレクトリに変更することによって、 debuildが正常に完了するようになりました。ただ、出来ればホームディレク トリの下で作業ができた方が嬉しいのですが、設定等でNFSでマウントしてい るディレクトリでもdebuildがエラーにならないようにすることは可能でしょ うか。
--- 木村 康浩
河本です。
以下のコマンドで失敗していると出ているので、NFSサーバで no_root_squash を指定すればよいかとも思いましたが、fakerootとの組み合わせの場合の動作まではわかりませんでした。 chown -R 0:0 debian/tmux/usr/share/doc
no_root_squash を指定する場合、セキュリティ的に気を付ける必要もありそうです。 https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/htm...
作業用のディレクトリを指定できるオプションがあったりしないですかね。
---------------------------------------------------------------------- 河本陽一 komoto.yoichi@kcc.co.jp
2020年7月17日(金) 11:16 Yasuhiro KIMURA yasu@utahime.org:
木村と申します。 debuildコマンドを使ったパッケージのビルドについて質問させてください。
tmuxのカスタムパッケージを作ろうとしていて、その第一歩としてまずオリジ ナルのtmuxパッケージをビルドしてみました。「Debian パッケージングチュー トリアル」 (https://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.ja....) の10ページ目のdashの再構築の例を参考にして
- sudo apt-get build-dep dash
- sudo apt-get install devscripts fakeroot
- mkdir -p ~/tmp/tmux
- cd ~/tmp/tmux
- apt-get source tmux
- cd tmux*
- debuild -us -uc
という順番でコマンドを実行したのですが、最後のdebuildが以下のようにエ ラーとなってしまいました。
dh binary dh_testroot dh_prep dh_installdirs dh_auto_install make -j4 install DESTDIR=/home/yasu/tmp/tmux/tmux-3.1b/debian/tmux AM_UPDATE_INFO_DIR=no make[1]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' に入ります make[2]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' に入ります make[2]: 'install-data-am' に対して行うべき事はありません. /usr/bin/mkdir -p '/home/yasu/tmp/tmux/tmux-3.1b/debian/tmux/usr/bin' /usr/bin/install -c tmux '/home/yasu/tmp/tmux/tmux-3.1b/debian/tmux/usr/bin' make install-exec-hook make[3]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' に入ります if test xmdoc = xmdoc; then \ sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1 \ >./tmux.1.mdoc; \ else \ sed -e "s|@SYSCONFDIR@|/etc|g" ./tmux.1| \ mawk -f ./mdoc2man.awk >./tmux.1.man; \ fi /usr/bin/mkdir -p /home/yasu/tmp/tmux/tmux-3.1b/debian/tmux/usr/share/man/man1 /usr/bin/install -c -m 644 ./tmux.1.mdoc \ /home/yasu/tmp/tmux/tmux-3.1b/debian/tmux/usr/share/man/man1/tmux.1 make[3]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' から出ます make[2]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' から出ます make[1]: ディレクトリ '/home/yasu/tmp/tmux/tmux-3.1b' から出ます dh_installdocs chown: 'debian/tmux/usr/share/doc/tmux/README' の所有者を変更中: 無効な引数です chown: 'debian/tmux/usr/share/doc/tmux/example_tmux.conf' の所有者を変更中: 無効な引数です chown: 'debian/tmux/usr/share/doc/tmux' の所有者を変更中: 無効な引数です chown: 'debian/tmux/usr/share/doc' の所有者を変更中: 無効な引数です dh_installdocs: error: chown -R 0:0 debian/tmux/usr/share/doc returned exit code 1 make: *** [debian/rules:6: binary] エラー 25 dpkg-buildpackage: error: fakeroot debian/rules binary subprocess returned exit status 2 debuild: fatal error at line 1182: dpkg-buildpackage -us -uc -ui failed yasu@rolling-vm-debian1[1094]%
最初はUnstableで実行したので、何かバグを踏んだのかと思いStableでも試し てみたのですが、結果は同じでした。それでいろいろ試してみたところ、場所 をNFS(正確にはautofs)でマウントしているホームディレクトリではなく、マ シンローカルのファイルシステム上のディレクトリに変更することによって、 debuildが正常に完了するようになりました。ただ、出来ればホームディレク トリの下で作業ができた方が嬉しいのですが、設定等でNFSでマウントしてい るディレクトリでもdebuildがエラーにならないようにすることは可能でしょ うか。
木村 康浩 _______________________________________________ debian-users mailing list debian-users@debian.or.jp https://lists.debian.or.jp/mailman/listinfo/debian-users
木村です。返信ありがとうございます。
From: 河本陽一 komoto.yoichi@kcc.co.jp Subject: [debian-users 00662] Re: NFS上でのdebuildがエラーになる Date: Fri, 17 Jul 2020 11:52:18 +0900
以下のコマンドで失敗していると出ているので、NFSサーバで no_root_squash を指定すればよいかとも思いましたが、fakerootとの組み合わせの場合の動作まではわかりませんでした。 chown -R 0:0 debian/tmux/usr/share/doc
no_root_squash を指定する場合、セキュリティ的に気を付ける必要もありそうです。 https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/htm...
実はNFSサーバはFreeBSDなので/etc/exportsの文法がLinuxのそれとは違うの ですが、FreeBSDでno_root_squashに相当するオプションは既に指定してあっ たりします。また試しにStableをNFSサーバに設定してUnstableでexportされ たファイルシステムをマウントしてその上でdebuildを実行してみたのですが、 この場合はStable側でno_root_squashを指定するか否かに関わらずdebuildは 成功しました。なので、どうもno_root_squashはこの件には関係無さそうです。 NFSv4を使っているので、ACLとかNFSv4特有のところに原因があったりするん でしょうか。
作業用のディレクトリを指定できるオプションがあったりしないですかね。
debuildのmanページを読んでみたのですが、どうもそういうオプションは無さ そうでした。
--- 木村 康浩
fakerootとNFSの問題にみえます。
検索してみたのですが、みつけられたのは、これぐらい。
https://github.com/hpcng/singularity/issues/4928
Fakeroot may not work correctly with some network filesystems not aware of user namespace mappings.
あと、関係あるかよくわからないもの。Kerberosが気になるけど、 問題の解決にはならないか。
https://forums.freebsd.org/threads/nfs-server-and-user-mapping.51122/ https://wiki.archlinux.jp/index.php/NFS
On Sun, 19 Jul 2020 19:20:54 +0900 (JST) KISE Hiroshi kise@fuyuneko.jp wrote:
fakerootとNFSの問題にみえます。
では仮説として debian/control ファイルで Rules-Requires-Root: no を 指定して fakeroot しないようにしてみるとか。
https://sources.debian.org/src/jdim/0.4.0-1/debian/control/%E3%80%80%E3%81%A... 感じで最初のブロックに指定します。
木村です。
From: Hideki Yamane henrich@iijmio-mail.jp Subject: [debian-users 00665] Re: NFS上でのdebuildがエラーになる Date: Sun, 19 Jul 2020 20:51:18 +0900
fakerootとNFSの問題にみえます。
では仮説として debian/control ファイルで Rules-Requires-Root: no を 指定して fakeroot しないようにしてみるとか。
https://sources.debian.org/src/jdim/0.4.0-1/debian/control/%E3%80%80%E3%81%A... 感じで最初のブロックに指定します。
これを試してみたところ、debuildが正常に完了するようになりました。
From: KISE Hiroshi kise@fuyuneko.jp Subject: [debian-users 00664] Re: NFS上でのdebuildがエラーになる Date: Sun, 19 Jul 2020 19:20:54 +0900 (JST)
検索してみたのですが、みつけられたのは、これぐらい。
https://github.com/hpcng/singularity/issues/4928
Fakeroot may not work correctly with some network filesystems not aware of user namespace mappings.
これをみてピンと来るものがあって、試しにautofsの設定を変更してNFSv3で マウントするようにしたところ、↑の変更を加えなくてもdebuildが成功する ようになりました。
それで再度NFSv4にしていろいろ試したり調べたりしたところ、どうやら以下 のようなことのようです。
1. ユーザやグループをNFSv3では数値(UID/GID)で取り扱うが、NFSv4では文字 列(ユーザ名/グループ名)で取り扱う 2. UID 0に相当するユーザ名はDebianでもFreeBSDでも同じ(root)だが、GID 0 に相当するグループ名は異なる(rootとwheel) 3. Fakerootを使うと、`chown root:root FileName`に相当する処理が行われ る(推測) 4. NFSv3を使っている場合、3の処理は「FileNameのUIDを0、GIDを0に変更」 としてNFSサーバに要求されるので、成功する(推測) 5. NFSv4を使っている場合、3の処理は「FileNameのオーナーをroot、グルー プをrootに変更」としてNFSサーバに要求されるが、NFSサーバ側にはroot というグループがないので、失敗する(推測)
例えば、NFSv4でマウントしている状態で、
yasu@rolling-vm-debian1[1069]% ls -l ~/tmp/hogehage -rw-r--r-- 1 yasu user 0 7月 20 00:48 /home/yasu/tmp/hogehage
なファイルに対して、
yasu@rolling-vm-debian1[1073]% sudo chown root ~/tmp/hogehage
は成功して
yasu@rolling-vm-debian1[1074]% ls -l ~/tmp/hogehage -rw-r--r-- 1 root user 0 7月 20 00:50 /home/yasu/tmp/hogehage
となりますが、
yasu@rolling-vm-debian1[1075]% sudo chgrp root ~/tmp/hogehage
は
yasu@rolling-vm-debian1[1075]% sudo chgrp root ~/tmp/hogehage chgrp: changing group of '/home/yasu/tmp/hogehage': Invalid argument
のようにエラーとなるので、多分↑の推測は正しいものと思います。
それでNFSv4を使いつづけるのなら、NFSサーバなFreeBSDの/etg/groupにroot をGID=0なグループとして追加する、というのが解決策となりますが、何とな くそれは気持ちが悪かったので、専用の作業用ディレクトリをNFSサーバ側で exportして、クライアント側ではそのディレクトリをNFSv3でマウントするこ とにしました。
--- 木村 康浩