sym links to absolute pathnames in /compat/linux

John E Hein jhein at timing.com
Tue May 1 20:11:51 UTC 2007


Eric Anderson wrote at 14:52 -0500 on May  1, 2007:
 > On 05/01/07 14:25, John E Hein wrote:
 > > Are sym links to absolute pathnames supposed to try to look
 > > in /compat/linux first?
 > > 
 > > /compat/linux/usr/bin/foo -> /bin/foo
 > > 
 > > I thought I recalled that Alexander said recently they _were_ supposed
 > > to look in /compat/linux first.  But I don't seem to have that
 > > behavior on the 6-stable box I'm using at the moment.
 > > 
 > > # ln -s /bin/foo /compat/linux/usr/bin/foo
 > > # ls -l /compat/linux/usr/bin/foo
 > > lrwxr-xr-x  1 root  wheel  8 May  1 19:17 /compat/linux/usr/bin/foo -> /bin/foo
 > > # cp -p /compat/linux/bin/ls /compat/linux/bin/foo
 > > # cp -p /bin/ls /bin/foo
 > > # /compat/linux/usr/bin/foo --version
 > > foo: illegal option -- -
 > > usage: ls [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwx1] [file ...]
 > > # /compat/linux/bin/foo --version
 > > ls (coreutils) 5.2.1
 > > Written by Richard Stallman and David MacKenzie.
 >
 > Is all that taking place inside a linux shell?

No - sorry, bad example.  But I still see the same behavior running
the linux shell as you suggest (below).

And I actually started investigating this because I was running an
emulated linux app which tried to follow an absolute sym link (and it
was not looking in /compat/linux first for the target of the link).


 > If not, then the symlink resolution is happening *before* the linux 
 > emulator takes over.

Agreed.


 > Try this instead:
 > 
 > # /compat/linux/bin/sh
 > # /compat/linux/usr/bin/foo --version
 > # /compat/linux/bin/foo --version
 > # /bin/foo --version


# /compat/linux/bin/sh
sh-3.00# /compat/linux/usr/bin/foo --version
foo: illegal option -- -
usage: ls [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwx1] [file ...]

sh-3.00# /compat/linux/bin/foo --version
ls (coreutils) 5.2.1
Written by Richard Stallman and David MacKenzie.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

sh-3.00# /bin/foo --version
ls (coreutils) 5.2.1
Written by Richard Stallman and David MacKenzie.

Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

And, for good measure...

sh-3.00# /usr/bin/foo --version
foo: illegal option -- -
usage: ls [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuwx1] [file ...]


So it doesn't seem to behave as I was expecting from the linux sh either.

And ls (freebsd & linux) reports...

sh-3.00# ls -alF /compat/linux/usr/bin/foo /usr/bin/foo /bin/foo /compat/linux/bin/foo
-rwxr-xr-x  1 root wheel 89456 Apr 25 18:10 /bin/foo*
-rwxr-xr-x  1 root wheel 89456 Apr 25 18:10 /compat/linux/bin/foo*
lrwxr-xr-x  1 root wheel     8 May  1 20:04 /compat/linux/usr/bin/foo -> /bin/foo*
lrwxr-xr-x  1 root wheel     8 May  1 20:04 /usr/bin/foo -> /bin/foo*
sh-3.00# ls -L -alF /compat/linux/usr/bin/foo /usr/bin/foo /bin/foo /compat/linux/bin/foo
-rwxr-xr-x  1 root wheel 89456 Apr 25 18:10 /bin/foo*
-rwxr-xr-x  1 root wheel 89456 Apr 25 18:10 /compat/linux/bin/foo*
-r-xr-xr-x  1 root wheel 23444 Nov 17 02:23 /compat/linux/usr/bin/foo*
-r-xr-xr-x  1 root wheel 23444 Nov 17 02:23 /usr/bin/foo*
sh-3.00# exit
# ls -alF /compat/linux/usr/bin/foo /usr/bin/foo /bin/foo /compat/linux/bin/foo
ls: /usr/bin/foo: No such file or directory
-r-xr-xr-x  1 root  wheel  23444 Nov 17 02:23 /bin/foo*
-rwxr-xr-x  1 root  wheel  89456 Apr 25 18:10 /compat/linux/bin/foo*
lrwxr-xr-x  1 root  wheel      8 May  1 20:04 /compat/linux/usr/bin/foo@ -> /bin/foo
# ls -L -alF /compat/linux/usr/bin/foo /usr/bin/foo /bin/foo /compat/linux/bin/foo
ls: /usr/bin/foo: No such file or directory
-r-xr-xr-x  1 root  wheel  23444 Nov 17 02:23 /bin/foo*
-rwxr-xr-x  1 root  wheel  89456 Apr 25 18:10 /compat/linux/bin/foo*
-r-xr-xr-x  1 root  wheel  23444 Nov 17 02:23 /compat/linux/usr/bin/foo*


More information about the freebsd-emulation mailing list