[nycbug-talk] creating "local" ports (fwd)

Dirk Meyer dirk.meyer at dinoex.sub.org
Tue Nov 14 17:01:01 UTC 2006


Hallo Charles Sprickman,

> I'm finding that there are a number of ports that we need to patch for 
> some functionality that's unique to our business (qmail, mailfront, etc.). 
> Currently we just do "make patch" and then apply our patches.  This works, 
> but is a bit of a pain to maintain.
> Is there a way to create a "local" category?  ie: /usr/ports/LOCAL

I like to point out a very easy way:

$ mkdir /usr/ports/LOCAL
$ echo "PKGCATEGORY?=LOCAL" > /usr/ports/LOCAL/makefile.inc
$ echo "PKGNAMESUFFIX?=-local" >> /usr/ports/LOCAL/makefile.inc

Copy a port you like to change into this.
build and install it from there.
You need _no_ modifications on a port.

PKGNAMESUFFIX or PKGNAMEPREFIX can be set to make standard and
local packages coexists.

If the master ports gets updated, you habe to merge the changes.

Or you create a slave-port., which referes to the master ports in the
normal ports tree.

All base tools support this.


> We might occasionally look at the real qmail/mailfront/djbdns or other 
> ports and see if there's anything we want to pull in, but we'd most likely 
> be doing more work with merging in more of our own patches/software.

a)
You can still add your own patches in /usr/ports/category/portname/files/

b)
You can create in  /usr/ports/category/portname/ a Makefile.local
that defines additional steps, dependencies ... 

> Is there some mechanism that I'm missing to deal with a local category? 
> I've been googling without much luck, and I didn't see this addressed in 
> the porter's handbook.

The minium requierement is:
/usr/ports/LOCAL/makefile.inc:PKGCATEGORY=LOCAL


> -How does one handle packages that depend on say, qmail, but I now want to
> depend on local-qmail?  I know portupgrade can be tought this by setting
> an alternate pkgdep, but is there any clever way of doing this so that 
> when you're not using portupgrade the deps are adjusted?

My pkg_update tool supports this.
For each hostname there is an optional sed_file.

$ head /usr/ports/local/update/data/depends.*
==> /usr/ports/local/update/data/depends.k3.dinoex.de <==
s=www/lynx$=www/lynx-ssl=
s|lang/gcc34|local/gcc34-objc|
s|lang/gcc33|local/gcc33-objc|


See:
http://people.freebsd.org/~dinoex/batch/README
http://people.freebsd.org/~dinoex/batch/pkg_update

This is an updated version of:
http://2004.eurobsdcon.org/talks.html?tx_ptspeechupload_pi1[showUid]=27
http://2004.eurobsdcon.org/uploads/media/EBSD04_27.pdf

kind regards Dirk

- Dirk Meyer, Im Grund 4, 34317 Habichtswald, Germany
- [dirk.meyer at dinoex.sub.org],[dirk.meyer at guug.de],[dinoex at FreeBSD.org]
http://people.freebsd.org/~dinoex/errorlogs/


More information about the freebsd-ports mailing list