木村です。
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でマウントするこ とにしました。
--- 木村 康浩