Index: /trunk/packages/sipb-xen-remote-server/debian/changelog
===================================================================
--- /trunk/packages/sipb-xen-remote-server/debian/changelog	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/debian/changelog	(revision 502)
@@ -0,0 +1,5 @@
+sipb-xen-remote-server (0.1) unstable; urgency=low
+
+  * First draft.
+
+ -- Greg Price <price@mit.edu>  Sun, 30 Mar 2008 01:08:50 -0400
Index: /trunk/packages/sipb-xen-remote-server/debian/compat
===================================================================
--- /trunk/packages/sipb-xen-remote-server/debian/compat	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/debian/compat	(revision 502)
@@ -0,0 +1,1 @@
+5
Index: /trunk/packages/sipb-xen-remote-server/debian/control
===================================================================
--- /trunk/packages/sipb-xen-remote-server/debian/control	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/debian/control	(revision 502)
@@ -0,0 +1,14 @@
+Source: sipb-xen-remote-server
+Section: servers
+Priority: important
+Maintainer: sipb-xen@mit.edu
+Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 5)
+Standards-Version: 3.7.2
+
+Package: sipb-xen-remote-server
+Architecture: all
+Provides: ${diverted-files}
+Conflicts: ${diverted-files}
+Depends: ${shlibs:Depends}, ${misc:Depends}, debathena-kerberos-config, fuse-utils, openssh-server, python-fuse, sipb-xen-chrony-config, sipb-xen-database-common, remctl-server, remctl-client
+Description: SIPB Xen remote-control server
+ This package should be installed to set up the remote-control server.
Index: /trunk/packages/sipb-xen-remote-server/debian/control.in
===================================================================
--- /trunk/packages/sipb-xen-remote-server/debian/control.in	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/debian/control.in	(revision 502)
@@ -0,0 +1,14 @@
+Source: sipb-xen-remote-server
+Section: servers
+Priority: important
+Maintainer: sipb-xen@mit.edu
+Build-Depends: @cdbs@
+Standards-Version: 3.7.2
+
+Package: sipb-xen-remote-server
+Architecture: all
+Provides: ${diverted-files}
+Conflicts: ${diverted-files}
+Depends: ${shlibs:Depends}, ${misc:Depends}, debathena-kerberos-config, fuse-utils, openssh-server, python-fuse, sipb-xen-chrony-config, sipb-xen-database-common, remctl-server, remctl-client
+Description: SIPB Xen remote-control server
+ This package should be installed to set up the remote-control server.
Index: /trunk/packages/sipb-xen-remote-server/debian/copyright
===================================================================
--- /trunk/packages/sipb-xen-remote-server/debian/copyright	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/debian/copyright	(revision 502)
@@ -0,0 +1,3 @@
+This package was created for internal use of the SIPB Xen Project of
+the MIT Student Information Processing Board.  Ask sipb-xen@mit.edu if
+you have questions about redistribution.
Index: /trunk/packages/sipb-xen-remote-server/debian/files
===================================================================
--- /trunk/packages/sipb-xen-remote-server/debian/files	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/debian/files	(revision 502)
@@ -0,0 +1,1 @@
+sipb-xen-remote-server_0.1_all.deb servers important
Index: /trunk/packages/sipb-xen-remote-server/debian/rules
===================================================================
--- /trunk/packages/sipb-xen-remote-server/debian/rules	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/debian/rules	(revision 502)
@@ -0,0 +1,11 @@
+#!/usr/bin/make -f
+
+DEB_AUTO_UPDATE_DEBIAN_CONTROL = 1
+DEB_DIVERT_EXTENSION = .sipb-xen
+#DEB_DIVERT_FILES_sipb-xen-remote-server += \
+#	/etc/init.d/bootmisc.sh \
+#	/etc/nscd.conf \
+#	/etc/nsswitch.conf \
+#	/etc/ssh/sshd_config
+
+include /usr/share/cdbs/1/rules/debhelper.mk
Index: /trunk/packages/sipb-xen-remote-server/debian/sipb-xen-remote-server.install
===================================================================
--- /trunk/packages/sipb-xen-remote-server/debian/sipb-xen-remote-server.install	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/debian/sipb-xen-remote-server.install	(revision 502)
@@ -0,0 +1,1 @@
+files/* .
Index: /trunk/packages/sipb-xen-remote-server/files/etc/remctl/acl/web
===================================================================
--- /trunk/packages/sipb-xen-remote-server/files/etc/remctl/acl/web	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/files/etc/remctl/acl/web	(revision 502)
@@ -0,0 +1,2 @@
+price/root@ATHENA.MIT.EDU
+daemon/sipb-xen.mit.edu@ATHENA.MIT.EDU
Index: /trunk/packages/sipb-xen-remote-server/files/etc/remctl/conf.d/sipb-xen-auto
===================================================================
--- /trunk/packages/sipb-xen-remote-server/files/etc/remctl/conf.d/sipb-xen-auto	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/files/etc/remctl/conf.d/sipb-xen-auto	(revision 502)
@@ -0,0 +1,1 @@
+include /etc/remctl/sipb-xen-auto/machine.d
Index: /trunk/packages/sipb-xen-remote-server/files/etc/remctl/conf.d/sipb-xen-web
===================================================================
--- /trunk/packages/sipb-xen-remote-server/files/etc/remctl/conf.d/sipb-xen-web	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/files/etc/remctl/conf.d/sipb-xen-web	(revision 502)
@@ -0,0 +1,11 @@
+web lvcreate     /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web lvremove     /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web lvrename     /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web lvresize     /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web lvcopy       /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web vmboot       /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web register     /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web moveregister /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web unregister   /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web remctl-moira-update /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
+web listvms      /usr/sbin/sipb-xen-remote-proxy-web /etc/remctl/acl/web
Index: /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remctl-update
===================================================================
--- /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remctl-update	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remctl-update	(revision 502)
@@ -0,0 +1,124 @@
+#!/bin/sh
+DIR=/etc/remctl/sipb-xen-auto
+TEMPLATE=$DIR/conf.template
+MACHINEDIR=$DIR/machine.d
+MOIRADIR=$DIR/moira-acl
+MOIRATMP=$DIR/moira-tmp
+MACHINETMP=$DIR/machine-list-tmp
+AUTOMACHINELIST=$DIR/auto-machine-list
+AUTOMOIRALIST=$DIR/auto-moira-list
+BINDIR=/usr/sbin
+ACLDIR=$DIR/acl
+
+update_machine()
+{
+    machine="$1"
+    sed "s/#MACHINENAME#/$machine/g" "$TEMPLATE" | \
+	sed "s,#BINDIR#,$BINDIR,g" >| "$MACHINETMP"
+    if ! cmp -s "$MACHINEDIR/$machine" "$MACHINETMP"; then
+	mv "$MACHINETMP" "$MACHINEDIR/$machine"
+    else
+	rm -f "$MACHINETMP"
+    fi
+}
+
+update_moiragroup()
+{
+    group="$1"
+    # Should perhaps replace with LDAP, but fine for now.
+
+    # We should do more careful error checking so we don't take away
+    # all bits and delete the moira-acl files whenever there's an AFS
+    # outage.
+    pts membership system:"$group" -noauth | tail -n+2 | \
+	sed 's/\./\//' | \
+	sed 's/^  //' | \
+	sed 's/$/@ATHENA.MIT.EDU/g' >| "$MOIRATMP"
+    if test -s "$MOIRATMP"; then
+	if ! cmp -s "$MOIRADIR/$group" "$MOIRATMP"; then
+	    mv "$MOIRATMP" "$MOIRADIR/$group"
+	fi
+    else
+	if test -e "$MOIRADIR/$group"; then
+	    rm "$MOIRADIR/$group"
+	fi
+    fi
+    rm -f "$MOIRATMP"
+}
+
+check_machine_name()
+{
+    machinename="$1"
+    if ! perl -0e 'exit($ARGV[0] !~ /^[A-Za-z0-9][A-Za-z0-9._-]*$/)' -- "$machinename"; then
+	echo "Bad machine name"
+	exit 1
+    fi
+}
+
+case "$1" in
+    moiragroup)
+	update_moiragroup "$2"
+	;;
+
+    all_machines)
+        # update the remctl.conf definitions
+	for machine in `cat "$AUTOMACHINELIST"`; do
+	    update_machine "$machine"
+	done
+	;;
+    all_moira)
+        # update our moira ACL lists
+	for group in `cat "$AUTOMOIRALIST"`; do
+	    update_moiragroup "$group"
+	done
+	;;
+    auto_machine_list)
+        # update the list of maintained machines
+	/bin/ls "$ACLDIR" >| "$AUTOMACHINELIST"
+	;;
+    auto_moira_list)
+        # update the moira list-of-lists
+        # /bin/ls "$MOIRADIR" >| "$AUTOMOIRALIST" # BAD IDEA in case of outage
+
+	# This extracts the list of all moira lists we care about, and updates those.
+	grep -R moira "$ACLDIR/" /etc/remctl/acl/ | perl -pe 's/.*moira-acl\/(.*)/$1/g' >| "$AUTOMOIRALIST"
+	;;
+    unregister)
+	machine="$2"
+	check_machine_name "$machine"
+	rm -f "$ACLDIR"/"$machine"
+	rm -f "$MACHINEDIR"/"$machine"
+	"$0" web
+	;;
+    moveregister)
+        oldmachine="$2"
+        newmachine="$3"
+	check_machine_name "$oldmachine"
+	check_machine_name "$newmachine"
+        mv "$ACLDIR"/"$oldmachine" "$ACLDIR"/"$newmachine"
+        rm -f "$MACHINEDIR"/"$oldmachine"
+        "$0" web
+	;;
+    register)
+	machine="$2"
+	check_machine_name "$machine"
+	if [ -e "$ACLDIR"/"$machine" ]; then
+	    echo "Machine already registered"
+	    exit 1
+	fi
+	echo "include /etc/remctl/acl/web" > "$ACLDIR/$machine"
+	"$0" web
+	;;
+    web)
+	"$0" auto_machine_list
+	"$0" all_machines
+	;;	
+    remctl-moira-update|all)
+    	"$0" auto_machine_list
+	"$0" all_machines
+	"$0" auto_moira_list
+	"$0" all_moira
+	;;
+esac
+
+exit 0
Index: /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-proxy
===================================================================
--- /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-proxy	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-proxy	(revision 502)
@@ -0,0 +1,5 @@
+#!/bin/sh
+# invoke as sipb-xen-remote-proxy-$TYPE, with "TYPE" in the remctl sense.
+kinit -k host/sipb-vm-58.mit.edu
+#echo remctl black-mesa remote ${0##*-} "$@"
+remctl black-mesa remote ${0##*-} "$@"
Index: /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-proxy-control
===================================================================
--- /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-proxy-control	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-proxy-control	(revision 502)
@@ -0,0 +1,1 @@
+link sipb-xen-remote-proxy
Index: /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-proxy-web
===================================================================
--- /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-proxy-web	(revision 502)
+++ /trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-proxy-web	(revision 502)
@@ -0,0 +1,1 @@
+link sipb-xen-remote-proxy
