Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Aug 2012 13:01:56 -0700
From:      Tim Kientzle <tim@kientzle.com>
To:        Current FreeBSD <freebsd-current@freebsd.org>, Paul Schenkeveld <freebsd@psconsult.nl>
Cc:        Garrett Cooper <yanegomi@gmail.com>
Subject:   Re: make package fails in chroot: tar: getvfsbyname failed: No such file or directory
Message-ID:  <E2CBB30B-9366-429F-92B7-24677AA5E328@kientzle.com>
In-Reply-To: <CAGH67wRJ4cz1vbntk-PiZ0Z58AoYo1-rm5zAhwZeTQzhU_0YQw@mail.gmail.com>
References:  <20120812132047.GA33526@psconsult.nl> <AC39BA73-E244-4A15-9E07-62CE0433B733@kientzle.com> <CAGH67wRJ4cz1vbntk-PiZ0Z58AoYo1-rm5zAhwZeTQzhU_0YQw@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On Aug 19, 2012, at 12:17 PM, Garrett Cooper wrote:

> On Sun, Aug 19, 2012 at 9:45 AM, Tim Kientzle <tim@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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E2CBB30B-9366-429F-92B7-24677AA5E328>