Proper and util-vserver both depend on util-python for build scripts
[build.git] / Makefile
index fcd1bf0..ca9bc30 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,38 +1,10 @@
 #
 # PlanetLab RPM generation
 #
-# Copyright (c) 2003  The Trustees of Princeton University (Trustees).
-# All Rights Reserved.
-# 
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met: 
-# 
-#     * Redistributions of source code must retain the above copyright
-#       notice, this list of conditions and the following disclaimer.
-# 
-#     * Redistributions in binary form must reproduce the above
-#       copyright notice, this list of conditions and the following
-#       disclaimer in the documentation and/or other materials provided
-#       with the distribution.
-# 
-#     * Neither the name of the copyright holder nor the names of its
-#       contributors may be used to endorse or promote products derived
-#       from this software without specific prior written permission.
-# 
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTEES OR
-# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-# $Id: Makefile,v 1.45 2004/09/22 04:09:26 mlh-pl_rpm Exp $
+# Mark Huang <mlhuang@cs.princeton.edu>
+# Copyright (C) 2003-2005 The Trustees of Princeton University
+#
+# $Id: Makefile,v 1.72 2005/07/14 18:13:15 mlhuang Exp $
 #
 
 # Default target
@@ -41,10 +13,9 @@ all:
 #
 # CVSROOT: CVSROOT to use
 # INITIAL: CVS tag to use for Source0 tarball
-# TAG: CVS tag to patch to
-# MODULE: CVS module name to use
+# TAG: CVS tag to patch to (if not HEAD)
+# MODULE: CVS module name to use (if not HEAD)
 # SPEC: RPM spec file template
-# RPMBUILD: If not rpmbuild
 # RPMFLAGS: Miscellaneous RPM flags
 # CVS_RSH: If not ssh
 # ALL: default targets
@@ -58,13 +29,16 @@ all:
 # spec file are generated automatically.
 #
 
+# Default values
+INITIAL := HEAD
+TAG := HEAD
+CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
+
 #
 # kernel
 #
 
-kernel-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-kernel-INITIAL := HEAD
-kernel-TAG := HEAD
+kernel-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 kernel-MODULE := linux-2.6
 kernel-SPEC := linux-2.6/scripts/kernel-2.6-planetlab.spec
 ALL += kernel
@@ -73,38 +47,19 @@ ALL += kernel
 # vnet
 #
 
-vnet-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-vnet-INITIAL := HEAD
-vnet-TAG := HEAD
+vnet-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 vnet-MODULE := vnet
 vnet-SPEC := vnet/vnet.spec
-vnet-RPMFLAGS := --define "kernelver $(shell rpmquery --queryformat '%{VERSION}-%{RELEASE}\n' --specfile SPECS/$(notdir $(kernel-SPEC)) | head -1)"
 ALL += vnet
 
 # Build kernel first so we can bootstrap off of its build
 vnet: kernel
 
-#
-# vsh
-#
-
-vsh-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-vsh-INITIAL := HEAD
-vsh-TAG := HEAD
-vsh-MODULE := trampoline
-vsh-SPEC := trampoline/vsh.spec
-ALL += vsh
-
-# Build kernel first so we can bootstrap off of its build
-vsh: kernel
-
 #
 # util-vserver
 #
 
-util-vserver-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-util-vserver-INITIAL := HEAD
-util-vserver-TAG := HEAD
+util-vserver-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 util-vserver-MODULE := util-vserver
 util-vserver-SPEC := util-vserver/util-vserver.spec
 ALL += util-vserver
@@ -116,22 +71,16 @@ util-vserver: kernel
 # vserver-reference
 #
 
-vserver-reference-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-vserver-reference-INITIAL := HEAD
-vserver-reference-TAG := HEAD
+vserver-reference-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 vserver-reference-MODULE := vserver-reference
 vserver-reference-SPEC := vserver-reference/vserver-reference.spec
-# Package must be built as root
-vserver-reference-RPMBUILD := sudo rpmbuild
 ALL += vserver-reference
 
 #
 # lkcdutils
 #
 
-lkcdutils-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-lkcdutils-INITIAL := HEAD
-lkcdutils-TAG := HEAD
+lkcdutils-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 lkcdutils-MODULE := lkcdutils
 lkcdutils-SPEC := lkcdutils/spec/lkcdutils.spec
 ALL += lkcdutils
@@ -143,9 +92,7 @@ lkcdutils: kernel
 # yum
 #
 
-yum-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-yum-INITIAL := HEAD
-yum-TAG := HEAD
+yum-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 yum-MODULE := yum
 yum-SPEC := yum/yum.spec
 ALL += yum
@@ -154,9 +101,8 @@ ALL += yum
 # ksymoops
 #
 
-ksymoops-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
+ksymoops-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 ksymoops-INITIAL := ksymoops-2_4_9
-ksymoops-TAG := HEAD
 ksymoops-MODULE := ksymoops
 ksymoops-SPEC := ksymoops/ksymoops.spec
 ALL += ksymoops
@@ -165,9 +111,7 @@ ALL += ksymoops
 # PlanetLabAccounts
 #
 
-PlanetLabAccounts-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-PlanetLabAccounts-INITIAL := HEAD
-PlanetLabAccounts-TAG := HEAD
+PlanetLabAccounts-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 PlanetLabAccounts-MODULE := PlanetLabAccounts
 PlanetLabAccounts-SPEC := PlanetLabAccounts/PlanetLabAccounts.spec
 ALL += PlanetLabAccounts
@@ -176,9 +120,7 @@ ALL += PlanetLabAccounts
 # NodeUpdate
 #
 
-NodeUpdate-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-NodeUpdate-INITIAL := HEAD
-NodeUpdate-TAG := HEAD
+NodeUpdate-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 NodeUpdate-MODULE := NodeUpdate
 NodeUpdate-SPEC := NodeUpdate/NodeUpdate.spec
 ALL += NodeUpdate
@@ -187,9 +129,7 @@ ALL += NodeUpdate
 # PlanetLabConf
 #
 
-PlanetLabConf-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-PlanetLabConf-INITIAL := HEAD
-PlanetLabConf-TAG := HEAD
+PlanetLabConf-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 PlanetLabConf-MODULE := PlanetLabConf
 PlanetLabConf-SPEC := PlanetLabConf/PlanetLabConf.spec
 ALL += PlanetLabConf
@@ -198,31 +138,16 @@ ALL += PlanetLabConf
 # PlanetLabKeys
 #
 
-PlanetLabKeys-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-PlanetLabKeys-INITIAL := HEAD
-PlanetLabKeys-TAG := HEAD
+PlanetLabKeys-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 PlanetLabKeys-MODULE := PlanetLabKeys
 PlanetLabKeys-SPEC := PlanetLabKeys/PlanetLabKeys.spec
 ALL += PlanetLabKeys
 
-#
-# BWLimit
-#
-
-BWLimit-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-BWLimit-INITIAL := HEAD
-BWLimit-TAG := HEAD
-BWLimit-MODULE := BWLimit
-BWLimit-SPEC := BWLimit/BWLimit.spec
-ALL += BWLimit
-
 #
 # ipod
 #
 
-ipod-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-ipod-INITIAL := HEAD
-ipod-TAG := HEAD
+ipod-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 ipod-MODULE := ipod
 ipod-SPEC := ipod/ipod.spec
 ALL += ipod
@@ -231,9 +156,7 @@ ALL += ipod
 # sudo
 #
 
-sudo-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-sudo-INITIAL := HEAD
-sudo-TAG := HEAD
+sudo-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 sudo-MODULE := sudo
 sudo-SPEC := sudo/planetlab_sudo.spec
 ALL += sudo
@@ -242,9 +165,7 @@ ALL += sudo
 # pycurl
 #
 
-pycurl-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-pycurl-INITIAL := HEAD
-pycurl-TAG := HEAD
+pycurl-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 pycurl-MODULE := pycurl
 pycurl-SPEC := pycurl/pycurl.spec
 ALL += pycurl
@@ -253,9 +174,7 @@ ALL += pycurl
 # BootServerRequest
 #
 
-BootServerRequest-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-BootServerRequest-INITIAL := HEAD
-BootServerRequest-TAG := HEAD
+BootServerRequest-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 BootServerRequest-MODULE := BootServerRequest
 BootServerRequest-SPEC := BootServerRequest/PLBootServerRequest.spec
 ALL += BootServerRequest
@@ -264,9 +183,7 @@ ALL += BootServerRequest
 # PlanetLabID
 #
 
-PlanetLabID-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
-PlanetLabID-INITIAL := HEAD
-PlanetLabID-TAG := HEAD
+PlanetLabID-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 PlanetLabID-MODULE := PlanetLabID
 PlanetLabID-SPEC := PlanetLabID/PlanetLabID.spec
 ALL += PlanetLabID
@@ -275,9 +192,7 @@ ALL += PlanetLabID
 # Node Manager
 #
 
-sidewinder-CVSROOT := pup-sidewinder@cvs.planet-lab.org:/cvs
-sidewinder-INITIAL := HEAD
-sidewinder-TAG := HEAD
+sidewinder-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 sidewinder-MODULE := sidewinder
 sidewinder-SPEC := sidewinder/sidewinder.spec
 ALL += sidewinder
@@ -286,22 +201,138 @@ ALL += sidewinder
 # pl_sshd
 #
 
-pl_sshd-CVSROOT := pup-pl_sshd@cvs.planet-lab.org:/cvs
-pl_sshd-INITIAL := HEAD
-pl_sshd-TAG := HEAD
+pl_sshd-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
 pl_sshd-MODULE := pl_sshd
 pl_sshd-SPEC := pl_sshd/pl_sshd.spec
 ALL += pl_sshd
 
+#
+# Resource Management Tools
+#
+
+resman-CVSROOT := :pserver:anon@build.planet-lab.org:/cvs
+resman-MODULE := resman
+resman-SPEC := resman/resman.spec
+ALL += resman
+
+#
+# Proper: Privileged Operations Service
+#
+
+proper-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
+proper-MODULE := proper
+proper-SPEC := proper/proper.spec
+ALL += proper
+
+#
+# ulogd
+#
+
+ulogd-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
+ulogd-MODULE := ulogd
+ulogd-SPEC := ulogd/ulogd.spec
+ALL += ulogd
+
+ulogd: kernel proper
+
+#
+# netflow
+#
+
+netflow-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
+netflow-MODULE := netflow
+netflow-SPEC := netflow/netflow.spec
+ALL += netflow
+
+#
+# PlanetLab Mom: Cleans up your mess
+#
+
+pl_mom-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
+pl_mom-MODULE := pl_mom
+pl_mom-SPEC := pl_mom/pl_mom.spec
+ALL += pl_mom
+
+#
+# iptables
+#
+
+iptables-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
+iptables-MODULE := iptables
+iptables-SPEC := iptables/iptables.spec
+ALL += iptables
+
+iptables: kernel
+
+#
+# kexec-tools
+#
+
+kexec-tools-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
+kexec-tools-MODULE := kexec-tools
+kexec-tools-SPEC := kexec-tools/kexec-tools.spec
+ALL += kexec-tools
+
+#
+# util-python
+#
+util-python-CVSROOT := :pserver:anon@cvs.planet-lab.org:/cvs
+util-python-MODULE := util-python
+util-python-SPEC := util-python/util-python.spec
+ALL += util-python
+
+# proper and util-vserver both use scripts in util-python for building
+proper: util-python
+util-vserver: util-python
+
+
+
 ifeq ($(findstring $(package),$(ALL)),)
 
 # Build all packages
 all: $(ALL)
+       install -D -m 644 groups/v3_yumgroups.xml RPMS/yumgroups.xml
+        # Create package manifest
+       sh ./packages.sh -b "http://build.planet-lab.org/$(subst $(HOME)/,,$(shell pwd))/SRPMS" SRPMS > SRPMS/packages.xml
 
 # Recurse
 $(ALL):
        $(MAKE) package=$@
 
+# Upload packages to boot server
+SERVER := build@boot.planet-lab.org
+ARCHIVE := /var/www/html/install-rpms/archive
+
+# Put nightly alpha builds in a subdirectory
+ifeq ($(TAG),HEAD)
+ARCHIVE := $(ARCHIVE)/planetlab-alpha
+REPOS := /var/www/html/install-rpms/planetlab-alpha
+endif
+
+install:
+ifeq ($(BASE),)
+       @echo make install is only meant to be called from ./build.sh
+else
+ifneq ($(BUILDS),)
+        # Remove old runs
+       echo "cd $(ARCHIVE) && ls -t | sed -n $(BUILDS)~1p | xargs rm -rf" | ssh $(SERVER) /bin/bash -s
+endif
+        # Populate repository
+       ssh $(SERVER) mkdir -p $(ARCHIVE)/$(BASE)/RPMS $(ARCHIVE)/$(BASE)/SRPMS
+       rsync --delete --links --perms --times --group --compress --rsh=ssh \
+           $(sort $(subst -debuginfo,,$(wildcard RPMS/yumgroups.xml RPMS/*/*))) $(SERVER):$(ARCHIVE)/$(BASE)/RPMS/
+       ssh $(SERVER) yum-arch $(ARCHIVE)/$(BASE)/RPMS >/dev/null
+       rsync --delete --links --perms --times --group --compress --rsh=ssh \
+           $(wildcard SRPMS/*) $(SERVER):$(ARCHIVE)/$(BASE)/SRPMS/
+       ssh $(SERVER) yum-arch $(ARCHIVE)/$(BASE)/SRPMS >/dev/null
+ifeq ($(TAG),HEAD)
+        # Update nightly alpha symlink if it does not exist or is broken, or it is Monday
+       if ! ssh $(SERVER) "[ -e $(REPOS) ] && exit 0 || exit 1" || [ "$(shell date +%A)" = "Monday" ] ; then \
+           ssh $(SERVER) ln -nsf $(ARCHIVE)/$(BASE)/RPMS/ $(REPOS) ; \
+       fi
+endif
+endif
+
 # Remove files generated by this package
 $(foreach package,$(ALL),$(package)-clean): %-clean:
        $(MAKE) package=$* clean
@@ -315,13 +346,12 @@ clean:
 else
 
 # Define variables for Makerules
-CVSROOT := $($(package)-CVSROOT)
-INITIAL := $($(package)-INITIAL)
-TAG := $($(package)-TAG)
+CVSROOT := $(if $($(package)-CVSROOT),$($(package)-CVSROOT),$(CVSROOT))
+INITIAL := $(if $($(package)-INITIAL),$($(package)-INITIAL),$(INITIAL))
+TAG := $(if $($(package)-TAG),$($(package)-TAG),$(TAG))
 MODULE := $($(package)-MODULE)
 SPEC := $($(package)-SPEC)
 RPMFLAGS := $($(package)-RPMFLAGS)
-RPMBUILD := $(if $($(package)-RPMBUILD),$($(package)-RPMBUILD),rpmbuild)
 CVS_RSH := $(if $($(package)-CVS_RSH),$($(package)-CVS_RSH),ssh)
 
 include Makerules