Package Building in the Large

Jason C. Wells jcw at highperformance.net
Thu Nov 22 11:13:46 PST 2007


Most of the message below is just rounding out the discussion.  There is
one significant question on recursion though.

Doug Barton wrote:

>> I also ended up with shared a library version problem
>> in at least one port (grip) in spite of having started my build with a
>> completely vacant /usr/local.
> 
> That sounds like a problem with the ports. I can't think of any way
> that portmaster would cause that.

It might be due to a non-clean /usr/local on the target install host. It
was a foo.so.3 is required but foo.so.2 is installed sort of error.  I
haven't dealt with the installation step in a meaningful way yet.  Don't
worry about responding to this bit.

>> It looks to have good port upgrading abilities,
>> but that is not what I am after.  What I am trying to do is operate a
>> build host and distribute packages from there. 
> 
> That is not its primary purpose, but assuming that your systems are
> similarly configured, and running an OS version that's fairly close in
> age, there is no reason that portmaster shouldn't be able to at least
> create the packages that you can then distribute manually.

All my systems run a -release and all ports are tagged with the same
-release. (With a few odd cases when security issues demand.)  A few
years ago I decided to stop tracking -stable and just run pure releases.
 I now spend less time administering my five or so systems.  By what you
claim, portmaster should suffice.

>> I used 'portmaster -GgDt -p /usr/ports/ports $pmarg' for my run
>> where $pmarg was the list of 31 ports.
> 
> That's definitely not going to work, for several reasons. The -G
> switch should only be used _after_ you've already run portmaster
> without it for a given port build.

I had manually run 'make config-recursive' previously.  I'll do as
advised at any rate.

> I'm also unsure
> what /usr/ports/ports is supposed to be, unless that's a local path
> issue.

It's a local hierarchy issue.  I pushed the ports tree up one level and
therein lie 6.2, -current, and the soon to be 7.0 trees.
/usr/ports/ports is a link to the tree I was working on in which is
/usr/ports/ports-current.  Once the FreeBSD portmanager pulls the
trigger I will be dealing with 7.0 exclusively.

> Assuming that your list of ports is relative to the /usr/ports
> directory (e.g., 'archivers/unzip astro/planets', etc.), what I would
> do is:
> for dir in $pmarg; do
> portmaster -BgD -p /usr/ports/$dir
> done

Aha!  I had an error (don't recall exactly) without using -p where the
complaint had something to do with not finding something in /usr/ports.
 So I fired up the manual and then found the -p switch and assumed that
was how I told portmaster where the ports tree was stored.  I think this
is the ticket.  I don't have my manpages handy right now but I'll take a
closer look.

But what about recursion?  I held the notion the portmaster did
magically delicious recursion and so I thought that providing the list
of ports to a single invocation of portmaster would allow portmaster to
sort the build order correctly.  The code snippet you show would cause
portmaster to _forget_ recursion information during each iteration of
the loop.  My concern was that some dependencies would be built more
than once.  That's dog slow.

> Replace the literal "/usr/ports/" in that string with the actual
> location of your ports tree if its different. You probably also want
> to add the -v switch in there for the first few runs to familiarize
> yourself with what's going on, and review the man page.

> Please note, I am not saying that portmaster will definitely be the
> right solution for you. However, I do think it's worth pointing out
> that if used properly it should at least be able to do what it says it
> can do.

I'll give it another go.

Later,
Jason


More information about the freebsd-ports mailing list