Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Dec 2000 13:02:09 -0600 (CST)
From:      Mike Meyer <mwm@mired.org>
To:        freebsd-current@FreeBSD.ORG
Subject:   Re: Package installation location
Message-ID:  <14899.54065.737498.114689@guru.mired.org>
In-Reply-To: <20001210132152.B27718@drama.navipath.com>
References:  <20001210125026.A27718@drama.navipath.com> <xzpitosgn0w.fsf@flood.ping.uio.no> <20001210132152.B27718@drama.navipath.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Forrest Aldrich <forrie@navipath.com> types:
> Haha... okay, then what's the argument about.
> > You're about six years late. The ports system has used $PREFIX for
> > precisely this purpose since October 1994.

As Jacques pointed out, you set LOCALBASE in /etc/make.conf.

The problem is that *it doesn't work*. Well, not very well. Part of it
is that it's only given lip service: the porters handbook says "make
your ports PREFIX clean"; portlint doesn't do any checking about it.
The porters handbook doesn't even provide instructions on how to test
for whether or not a port is PREFIX clean. Making things LOCALBASE
clean isn't even suggested. Admittedly, most port maintainers respond
well when I report that things are broken, but checking for this
should be done before the port is commited, not afterwards!

Lots of other random things break:

Packages built with a PREFIX value cannot reliably be installed with
another value of PREFIX (no, I don't think that should be a
requirement). This means that the prebuilt packages on the CDROM are
unusable under these conditions. Since distfiles have been banished
from the distribution, the pain of setting PREFIX to anything other
than /usr/local for my clients that don't have good network
connectivity is higher than the cost of doing intermixing the two
different file types. For commercial packages, that's not even an
option!

The system perl build checks the /usr/local tree for modules, not the
LOCALBASE tree. Perls module installation package also installs things
in /usr/local, no matter what LOCALBASE is set to. This means that all
ports that install PERL modules either 1) aren't PREFIX clean or 2)
don't find those modules if they are.

The python port breaks the other way: the binary only checks the
LOCALBASE heirarchy for modules(*). Locally maintained modules wind up
being scattered in among the ports modules, and thus require special
treatment. I'm not sure about other ports that support modules, but it
wouldn't surprise me if they had similar problems.

Ports that have build dependencies on other binaries sometimes assume
that the binary in question is on roots path. The startup scripts in
/root set the path to include things in the /usr/local heirarchy,
*not* the LOCALBASE heirarchy. Thus those builds - while being PREFIX
clean - are still broken (not LOCALBASE clean).

In fact, all the hook for supporting "local" things are pointed directly at
/usr/local; none of them check LOCALBASE.

All of these would be solved if the FreeBSD took a lesson from their
peers. Most of them could be solved without changing the default value
for LOCALBASE - if people wanted them solved.

	<mike

*) Python calls them packages; I'm using the Perl terminology to avoid
confusion.


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?14899.54065.737498.114689>