Linux executable picks up FreeBSD library over linux one and breaks

Alexander Leidinger Alexander at Leidinger.net
Wed Dec 5 03:29:55 PST 2007


Quoting Chuck Robey <chuckr at chuckr.org> (from Mon, 03 Dec 2007  
13:30:50 -0500):

> Alexander Leidinger wrote:
>> Quoting Chuck Robey <chuckr at chuckr.org> (from Sun, 02 Dec 2007   
>> 13:23:33 -0500):
>>
>>> You've gotten some good suggestions, but I might add one more, I don't
>>> think it's been mentioned.  I have foound, myself in the last 2 weeks,
>>> some FreeBSD ports putting in Linux tools, installing stuff in the
>>> wrong places, like sticking in SYSV libraries in /usr/local/lib instead
>>> of /compat/linux/usr/lib.  I verified in that case that the Linux
>>
>> If they put the libs directly in /usr/local/lib instead of   
>> /usr/local/lib/<linux_port_specific_directory>, then it is a big   
>> error. But if it is in a subdirectory where no FreeBSD lib resides,  
>>  it is ok (the linux browser sets LD_LIBRARY_PATH in the start   
>> script to the right path).
>>
>> Have a look how the native browser works, the private libs are not   
>> in ldconfig either and the browser start script sets the library   
>> path for the browser binary. At least it did this the last time I   
>> checked...
>>
>
> Does that mean that all programs needing those libs must have wrapper
> shells, so as ot implement the LD_LIBRARY_PATH?  I know of programs

Yes. For the mozilla stuff it seems to be a design decision of them to  
put the libs in a non-standard path (this is independent from the OS).  
Don't shoot FreeBSD, shoot them if you don't like this.

> that bomb if that's even set at all, and I think it can be a security
> tool, and I just think that there is no good reason for installing
> Linux libs outside of the compat tree.  There isn't any good reason not

You have 2 differet issue here. One issue is that some  
program(-suites) decide to put their libs into a non-standard  
directory. The other one is that you should not mix libs from linux  
and FreeBSD.

> to use the compat tree, is there?  You know, there's a local there too,
> so you don't even need to be ignoring LOCALBASE, which is something I
> don't care for ports to do at all.

Even if you have them in LINUXBASE, you could pick up the wrong libs  
depending on the search order of the libs directories and the location  
of the libs.

The big goal is, that an user should not have the need to put  
/compat/linux/... into his path to start a linux program. We can do  
this by putting those linux programs into LOCALBASE (easy, if they  
don't install libs or hide the libs in special dirs), or by putting  
them into LINUXBASE and add a wrapper script to LOCALBASE (not as  
easy, as you have to have more knowledge about pkg-plist in the ports  
to get the port to do the right thing).

For pure infrastructure ports (which just have linux libs), I enforce  
the rule that they have to be in LINUXBASE as soon as I encounter a  
port which violates this rule. For application programs I go the  
relaxed way: fix the problem in case there's one and I get aware of it.

> I just don't see any reason for such a obviously pathological thing to
> occur.  Just because it's possible to fix it, program by program, by
> implementing wrapper scripts, you aren't going to tell me that's some
> sort of elegant fix, so the fact that doing such a thing is justified?

I don't think that wrapper scripts are elegant in general, but our  
linuxulator is a special environment and if you want that other people  
with "normal" knowledge (read: no ports committer... and even _some_  
ports committers would have to learn some new things to get it right)  
are able to produce a linux port (there are already some special rules  
to take care about with linux ports, several of them we managed to  
cover behind some easy knobs), you have to come up with a compromise.

Feel free to propose other solutions, but before you propose anything,  
I suggest you try to write a port which implements your solution to  
get an idea how complex it is in reality.

Bye,
Alexander.

-- 
I've always made it a solemn practice to never
drink anything stronger than tequila before breakfast.
		-- R. Nesson

http://www.Leidinger.net    Alexander @ Leidinger.net: PGP ID = B0063FE7
http://www.FreeBSD.org       netchild @ FreeBSD.org  : PGP ID = 72077137


More information about the freebsd-hackers mailing list