Jails and common ports

Marcus I. Ryan marcus at riboflavin.net
Thu Nov 20 14:50:26 PST 2008

Cross-posting this to freebsd-ports because it's mostly about the  
ports infrastructure and how I might (ab)use it...

I'm looking into setting up jails, and was hoping I was onto something  
with using ports to maintain application software but I hit a snag and  
I'm hoping someone can either tell me how to do what I want or at  
least say "nope...you're on crack thinking that will work" ;)

I'm trying to set up a number of jails on my system following the  
handbook suggestions for "Application of Jails"  
(http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/jails-application.html).  That means I have a master read-only instance for the base system (world), and read-write instances of key directories for each jail.  This is ideal for what I'd like to do because I only have to do one world upgrade to upgrade all my  

I'd like to extend that idea to a number of common ports.  For  
instance, I'd like to have gettext, libtool, etc., installed once and  
be able to do a single portupgrade to update it for all jails.

My initial plan was to make an /opt folder in the master filesystem  
and use the master jail to install ports (PREFIX=/opt and  
LOCALBASE=/opt).  I added the /opt/bin and /opt/sbin to the path and  
/opt/lib to the ld_config directories for the child jails and they  
were indeed able to see the first couple of ports I installed.

However, I started hitting issues with libtool and friends.  The  
children would not find them, and would go ahead and start installing  
their own local copies of those ports.  Turns out quite a few tools  
are defined in /usr/ports/Mk/* and are defined relative to LOCALBASE.   
If I leave LOCALBASE and PREFIX alone in the child jails so they'll  
use /usr/local for their specific ports, I can't recognize and use  
other ports like libtool installed in /opt; it doesn't seem right to  
set LOCALBASE in the child jails since I want them to use /usr/local  
for anything I haven't provided.

I really would like to avoid the "joy" of making hard-links, etc., for  
all the files in the common packages, but I didn't see any way to  
override settings for these individual ports.  I did edit some  
Makefiles and add '--prefix=/opt' to the CONFIGURE_ARGS for those  
ports, and everything worked fine, but I'd prefer to do it "the right  
way" (e.g. not editing Makefiles).

Is there a variable I'm not seeing that would allow me to do this kind  
of crazy thing, or am I better off either setting up hard links and/or  
using automated package building and just repeating pkg_upgrades in  
each jail?

If it's the latter, does someone know of a decent all-in-one doc to  
help me at least set up some features so I update ports once in a  
master and just get packages from the same place (I can piece it  
together myself from all the other docs I've found and been reading,  
but if someone has already written it up, hate to reinvent it myself  
:) ).

Thanks in advance.

Marcus I. Ryan, marcus at riboflavin.net
People often find it easier to be a result
of the past than a cause of the future.

More information about the freebsd-questions mailing list