aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buildtools/build-freebsd-ports.py137
-rw-r--r--buildtools/freebsd-skeleton/rpki-ca/Makefile11
-rw-r--r--buildtools/freebsd-skeleton/rpki-ca/pkg-plist0
-rw-r--r--buildtools/freebsd-skeleton/rpki-ca/pkg-upgrade18
-rw-r--r--buildtools/freebsd-skeleton/rpki-rp/Makefile30
-rw-r--r--buildtools/freebsd-skeleton/rpki-rp/pkg-plist0
-rw-r--r--buildtools/freebsd-skeleton/rpki-rp/pkg-upgrade18
7 files changed, 63 insertions, 151 deletions
diff --git a/buildtools/build-freebsd-ports.py b/buildtools/build-freebsd-ports.py
index 821b3060..c422f02f 100644
--- a/buildtools/build-freebsd-ports.py
+++ b/buildtools/build-freebsd-ports.py
@@ -25,6 +25,7 @@ version numbers in the Makefiles.
import sys
import os
+import re
import subprocess
import errno
import glob
@@ -39,6 +40,12 @@ def check_dir(s):
parser = argparse.ArgumentParser(description = __doc__)
parser.add_argument("--allow-dirty", action = "store_true",
help = "don't insist on pristine subversion checkout")
+parser.add_argument("--make-package", action = "store_true",
+ help = "build binary package")
+parser.add_argument("--no-clean", action = "store_true",
+ help = "don't clean port after staging etc (implies --no-tarball)")
+parser.add_argument("--no-tarball", action = "store_true",
+ help = "don't create tarball of generated port")
parser.add_argument("svndir", metavar = "subversion-working-directory", type = check_dir,
help = "directory containing subversion working tree")
args = parser.parse_args()
@@ -64,6 +71,13 @@ url = "http://download.rpki.net/" + tarball
portsdir = os.path.abspath("freebsd-ports")
portsdir_old = portsdir + ".old"
+# Could perhaps use distutils.sysconfig.get_python_lib() instead of
+# this regexp hack, but would be just as complicated in its own way,
+# so just go with this for the moment.
+
+py_lib = re.compile(r"^lib/python\d+\.\d+")
+py_sitelib = re.compile(r"^lib/python\d+\.\d+/site-packages")
+
if os.path.isdir(portsdir_old):
shutil.rmtree(portsdir_old)
@@ -80,97 +94,52 @@ elif os.path.exists(os.path.join("/usr/ports/distfiles", tarball)):
if os.path.isdir(portsdir_old):
shutil.rmtree(portsdir_old)
-base_rp = os.path.join(portsdir, "rpki-rp")
-base_ca = os.path.join(portsdir, "rpki-ca")
+if args.make_package:
+ pkgdir = os.path.join(portsdir, "packages")
+ os.mkdir(pkgdir)
+
+formatdict = dict(SVNVERSION = svnversion, SVNBRANCH = branch)
-formatdict = dict(SVNVERSION = svnversion,
- SVNBRANCH = branch)
+keepdirs = ("usr", "etc", "bin", "var", "lib", "libexec", "sbin", "share", "etc/rc.d", "%%PYTHON_SITELIBDIR%%")
for port in ("rpki-rp", "rpki-ca"):
+ base = os.path.join(portsdir, port)
+ stage = os.path.join(base, "work", "stage")
fn = os.path.join(portsdir, port, "Makefile")
with open(fn, "r") as f:
template = f.read()
with open(fn, "w") as f:
f.write(template % formatdict)
-subprocess.check_call(("make", "makesum", "DISTDIR=" + portsdir), cwd = base_rp)
-subprocess.check_call(("make", "makesum", "DISTDIR=" + portsdir), cwd = base_ca)
-
-trust_anchors = [os.path.basename(fn)
- for fn in subprocess.check_output(("tar", "tf", os.path.join(portsdir, tarball))).splitlines()
- if "/rcynic/sample-trust-anchors/" in fn and fn.endswith(".tal")]
-
-with open(os.path.join(base_rp, "pkg-plist"), "w") as f:
-
- f.write('''\
-bin/find_roa
-bin/hashdir
-bin/print_roa
-bin/print_rpki_manifest
-bin/rcynic
-bin/rcynic-cron
-bin/rcynic-html
-bin/rcynic-svn
-bin/rcynic-text
-bin/rtr-origin
-bin/scan_roas
-bin/validation_status
-etc/rcynic.conf.sample
-''')
-
- for trust_anchor in sorted(trust_anchors):
- f.write("etc/rpki/trust-anchors/%s\n" % trust_anchor)
-
- f.write('''\
-@dirrm etc/rpki/trust-anchors
-@dirrmtry etc/rpki
-@dirrm www/apache%%APACHE_VERSION%%/data/rcynic
-@cwd /
-@dirrm var/rcynic/data
-@dirrm var/rcynic/rpki-rtr/sockets
-@dirrm var/rcynic/rpki-rtr
-@dirrm var/rcynic
-''')
-
-# "USE_GNOME=" gets rid of annoying whining due to empty or
-# non-existent pkg-plist. The (direct) Gnome dependency doesn't
-# matter while constructing the port skeleton, so it's simplest just
-# to disable it for this one command.
-
-subprocess.check_call(("make", "DISTDIR=" + portsdir, "USE_GNOME="), cwd = base_ca)
-
-tempdir = os.path.join(base_ca, "work", "temp-install", "")
-
-subprocess.check_call(("make", "install", "DESTDIR=" + os.path.abspath(tempdir)),
- cwd = os.path.join(base_ca, "work", tarname))
-
-with open(os.path.join(base_ca, "pkg-plist"), "w") as f:
-
- dont_remove = ("usr", "etc", "bin", "var", "lib", "libexec", "sbin", "share", "lib/python2.7", "lib/python2.7/site-packages")
-
- usr_local = None
-
- for dirpath, dirnames, filenames in os.walk(tempdir, topdown = False):
- dn = dirpath[len(tempdir):]
-
- if dn.startswith("usr/local"):
- if not usr_local and usr_local is not None:
- f.write("@cwd\n")
- usr_local = True
- dn = dn[len("usr/local/"):]
- else:
- if usr_local:
- f.write("@cwd /\n")
- usr_local = False
-
- for fn in filenames:
- f.write(os.path.join(dn, fn) + "\n")
-
- if dn and dn not in dont_remove:
- f.write("@dirrm %s\n" % dn)
-
-subprocess.check_call(("make", "clean"), cwd = base_ca)
-
-for port in ("rpki-rp", "rpki-ca"):
- subprocess.check_call(("tar", "czf", "%s-port.tgz" % port, port), cwd = portsdir)
+ subprocess.check_call(("make", "makesum", "stage", "DISTDIR=" + portsdir), cwd = base)
+
+ with open(os.path.join(base, "pkg-plist"), "w") as f:
+ usr_local = None
+ for dirpath, dirnames, filenames in os.walk(stage, topdown = False):
+ dn = dirpath[len(stage)+1:]
+ if dn.startswith("usr/local"):
+ if not usr_local and usr_local is not None:
+ f.write("@cwd\n")
+ usr_local = True
+ dn = dn[len("usr/local/"):]
+ dn = py_sitelib.sub("%%PYTHON_SITELIBDIR%%", dn)
+ if dn == "etc/rc.d":
+ continue
+ else:
+ if usr_local:
+ f.write("@cwd /\n")
+ usr_local = False
+ for fn in filenames:
+ f.write(os.path.join(dn, fn) + "\n")
+ if dn and dn not in keepdirs and not py_lib.match(dn):
+ f.write("@dirrm %s\n" % dn)
+
+ if args.make_package:
+ subprocess.check_call(("make", "clean", "package", "PKGREPOSITORY=" + pkgdir), cwd = base)
+
+ if not args.no_clean:
+ subprocess.check_call(("make", "clean"), cwd = base)
+
+ if not args.no_tarball and not args.no_clean:
+ subprocess.check_call(("tar", "czf", "%s-port.tgz" % port, port), cwd = portsdir)
diff --git a/buildtools/freebsd-skeleton/rpki-ca/Makefile b/buildtools/freebsd-skeleton/rpki-ca/Makefile
index 575ba7ae..8e723d34 100644
--- a/buildtools/freebsd-skeleton/rpki-ca/Makefile
+++ b/buildtools/freebsd-skeleton/rpki-ca/Makefile
@@ -9,6 +9,7 @@ COMMENT= rpki.net RPKI CA tools
WWW= http://rpki.net/
GNU_CONFIGURE= yes
+NO_MTREE= yes
USE_PYTHON= 2.7+
USE_GNOME= libxml2 libxslt
USE_MYSQL= server
@@ -16,11 +17,10 @@ USE_APACHE_RUN= 22+
USE_RC_SUBR= rpki-ca
-# Disable a couple of recent whoopie cushions in the FreeBSD ports system
+# Disable parallel builds, they failed last time I tried and we don't really need them
MAKE_JOBS_UNSAFE= yes
-#NO_STAGE = yes
-# We depend on our own relying party code
+# We depend on our own relying party code. Perhaps this should require our own version number?
BUILD_DEPENDS+= rpki-rp>0:${PORTSDIR}/net/rpki-rp
RUN_DEPENDS+= rpki-rp>0:${PORTSDIR}/net/rpki-rp
@@ -49,9 +49,6 @@ CONFIGURE_ENV= CFLAGS="-I${LOCALBASE}/include" LDFLAGS="-L${LOCALBASE}/lib"
CONFIGURE_ARGS= --disable-target-installation --disable-rp-tools APACHE_VERSION=${APACHE_VERSION}
pre-install:
- PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL
-
-post-install:
- PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
+ @test -d ${STAGEDIR}${PREFIX}/etc/rc.d || mkdir -p ${STAGEDIR}${PREFIX}/etc/rc.d
.include <bsd.port.mk>
diff --git a/buildtools/freebsd-skeleton/rpki-ca/pkg-plist b/buildtools/freebsd-skeleton/rpki-ca/pkg-plist
deleted file mode 100644
index e69de29b..00000000
--- a/buildtools/freebsd-skeleton/rpki-ca/pkg-plist
+++ /dev/null
diff --git a/buildtools/freebsd-skeleton/rpki-ca/pkg-upgrade b/buildtools/freebsd-skeleton/rpki-ca/pkg-upgrade
deleted file mode 100644
index f569a3d6..00000000
--- a/buildtools/freebsd-skeleton/rpki-ca/pkg-upgrade
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh -
-
-echo 1>&2 "pkg-upgrade invoked with arguments \"$*\"."
-
-case $2 in
-
-PRE-UPGRADE)
- ;;
-
-POST-UPGRADE)
- ;;
-
-*)
- echo "No clue what this script is meant to do when invoked with arguments \"$*\"."
- #exit 1
- ;;
-
-esac
diff --git a/buildtools/freebsd-skeleton/rpki-rp/Makefile b/buildtools/freebsd-skeleton/rpki-rp/Makefile
index 3218b8d9..f0fe61aa 100644
--- a/buildtools/freebsd-skeleton/rpki-rp/Makefile
+++ b/buildtools/freebsd-skeleton/rpki-rp/Makefile
@@ -9,6 +9,7 @@ COMMENT= rpki.net RPKI relying party tools
WWW= http://rpki.net/
GNU_CONFIGURE= yes
+NO_MTREE= yes
USE_PYTHON= 2.7+
USE_GNOME= libxml2 libxslt
USE_APACHE_RUN= 22+
@@ -35,37 +36,18 @@ RUN_DEPENDS+= rrdtool>0:${PORTSDIR}/databases/rrdtool
# Just want relying party tools, try to use system OpenSSL if we can.
-CONFIGURE_ARGS= --disable-ca-tools APACHE_VERSION=${APACHE_VERSION}
+CONFIGURE_ARGS= --disable-target-installation --disable-ca-tools APACHE_VERSION=${APACHE_VERSION}
CONFIGURE_ENV= CFLAGS="-I${LOCALBASE}/include" LDFLAGS="-L${LOCALBASE}/lib"
-# Disable a couple of recent whoopie cushions in the FreeBSD ports system
+# Disable parallel builds, they failed the last time I tried and we don't really need them
MAKE_JOBS_UNSAFE= yes
-#NO_STAGE = yes
# rcynic's Makefile constructs an rcynic.conf for us if it doesn't
# find one already installed. This turns out to be exactly what
-# FreeBSD's rules want us to install as rcynic.conf.sample, so we
-# shuffle things around a bit just before and just after installation
-# to make this all come out right.
-#
-# If I ever teach rcynic to construct a .conf.sample file per the
-# FreeBSD way of doing things, this will need to change to match.
-
-pre-install:
- PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} PRE-INSTALL
- @if test -f ${PREFIX}/etc/rcynic.conf; \
- then \
- ${MV} -f ${PREFIX}/etc/rcynic.conf ${PREFIX}/etc/rcynic.conf.real; \
- fi
+# FreeBSD's rules want us to install as rcynic.conf.sample, so we just
+# rename it.
post-install:
- PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL
- @if test -f ${PREFIX}/etc/rcynic.conf.real; \
- then \
- ${MV} -f ${PREFIX}/etc/rcynic.conf ${PREFIX}/etc/rcynic.conf.sample; \
- ${MV} -f ${PREFIX}/etc/rcynic.conf.real ${PREFIX}/etc/rcynic.conf; \
- else \
- ${CP} -p ${PREFIX}/etc/rcynic.conf ${PREFIX}/etc/rcynic.conf.sample; \
- fi
+ ${MV} -vf ${STAGEDIR}${PREFIX}/etc/rcynic.conf ${STAGEDIR}${PREFIX}/etc/rcynic.conf.sample
.include <bsd.port.mk>
diff --git a/buildtools/freebsd-skeleton/rpki-rp/pkg-plist b/buildtools/freebsd-skeleton/rpki-rp/pkg-plist
deleted file mode 100644
index e69de29b..00000000
--- a/buildtools/freebsd-skeleton/rpki-rp/pkg-plist
+++ /dev/null
diff --git a/buildtools/freebsd-skeleton/rpki-rp/pkg-upgrade b/buildtools/freebsd-skeleton/rpki-rp/pkg-upgrade
deleted file mode 100644
index f569a3d6..00000000
--- a/buildtools/freebsd-skeleton/rpki-rp/pkg-upgrade
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh -
-
-echo 1>&2 "pkg-upgrade invoked with arguments \"$*\"."
-
-case $2 in
-
-PRE-UPGRADE)
- ;;
-
-POST-UPGRADE)
- ;;
-
-*)
- echo "No clue what this script is meant to do when invoked with arguments \"$*\"."
- #exit 1
- ;;
-
-esac