make package fails in chroot: tar: getvfsbyname failed: No such
file or directory
Tim Kientzle
tim at kientzle.com
Sun Aug 19 20:01:59 UTC 2012
On Aug 19, 2012, at 12:17 PM, Garrett Cooper wrote:
> On Sun, Aug 19, 2012 at 9:45 AM, Tim Kientzle <tim at kientzle.com> wrote:
>>
>> On Aug 12, 2012, at 6:20 AM, Paul Schenkeveld wrote:
>>
>>> Hi,
>>>
>>> I have a wrapper script that builds packages in a chroot environment
>>> which happily runs on release 6 thru 9 and earlier 10 but fails with:
>>>
>>> tar: getvfsbyname failed: No such file or directory
>>>
>>> on a recent -CURRENT.
>>
>> libarchive does do an initial getvfsbyname() when you ask it
>> to traverse a directory tree so that it can accurately handle later
>> requests about mountpoints and filesystem types. This code
>> is admittedly a little intricate.
>
> The problem most likely is the fact that all mountpoints are
> exposed via chroot, thus, if it's checking to see if a mountpoint
> exists, it may exist outside of the chroot.
>
I reviewed the code to refresh my memory. Some
of what I said before was not quite right.
Libarchive's directory traversal tracks information about
the filesystem type so that clients such as bsdtar can
efficiently skip synthetic filesystems (/dev or /proc) or
network filesystems (NFS or SMB mounts).
The net effect is something like this:
For each file:
stat() or lstat() or fstat() the file
look up dev number in an internal cache
if the dev number is new:
fstatfs() the open fd to get the FS name
getvfsbyname() to identify the FS type
Unless there's a logic error in libarchive itself, this
would suggest that somehow fstatfs() is returning
a filesystem type that getvfsbyname() can't
identify.
Paul:
What filesystem are you using?
What does "mount" show?
Does it work outside the chroot?
Tim
More information about the freebsd-current
mailing list