[Server-devel] [PATCH] Add support for usbmount triggers in xs-rsync
Martin Langhoff
martin at laptop.org
Mon Aug 11 02:12:57 EDT 2008
This is the first user of usbmount, so several things
to note...
- The usbmount scripts don't get a tty, which means
that we need sudo to allow nontty usage (changed
in xs-config for root)
- We check manifest.md5 with a custom utility called
xs-check-signature, initially a wrapper around md5sum
that ensures that all files in the directory are in
the manifest. This script is not included here.
- We use /usr/bin/logger (to syslog) for output and
logging, we log to the 'user' facility. Moodle will
later have a 'tail -f /var/log/user.log'.
- Stock syslog.conf in fedora drop the user messages,
so xs-config has been updated to log to user.log
- It is important to show progress towards completion
so each msg has an indication of how far along we are.
- We'll need to localise these. Tricky -
---
Makefile | 2 +
usbmount-50-xs-rsync-installcontent | 62 +++++++++++++++++++++++++++++++++++
xs-rsync.spec.in | 2 +
3 files changed, 66 insertions(+), 0 deletions(-)
create mode 100755 usbmount-50-xs-rsync-installcontent
diff --git a/Makefile b/Makefile
index 729b0b4..f78173f 100644
--- a/Makefile
+++ b/Makefile
@@ -82,6 +82,8 @@ install:
install -D -m 644 xinetd-xs-rsyncd.conf $(DESTDIR)/etc/xinetd.d/xs-rsyncd
install -D -m 644 crond-xs-rsync.conf $(DESTDIR)/etc/cron.d/xs-rsync
+ install -D -m 755 usbmount-50-xs-rsync-installcontent $(DESTDIR)/etc/usbmount/mount.d/50-xs-rsync-installcontent
+
# root owned
install -D -d $(DESTDIR)/library/xs-rsync
install -D -d $(DESTDIR)/library/xs-rsync/xobuilds-packed
diff --git a/usbmount-50-xs-rsync-installcontent b/usbmount-50-xs-rsync-installcontent
new file mode 100755
index 0000000..9bfeed4
--- /dev/null
+++ b/usbmount-50-xs-rsync-installcontent
@@ -0,0 +1,62 @@
+#!/bin/bash -x
+# Part of the xs-sync package
+# Author: Martin Langhoff <martin at laptop.org>
+# Copyright: One Laptop per Child
+
+set -e
+
+VERBOSE=no
+
+# Log a string via the syslog facility.
+log()
+{
+ if test $1 != debug || expr "$VERBOSE" : "[yY]" > /dev/null; then
+ logger -p user.$1 -t "xs-rsync[$$]" -- "$2"
+ fi
+}
+STEPS=5
+
+if [ -e $UM_MOUNTPOINT/xs-xobuilds -a \
+ -e $UM_MOUNTPOINT/xs-xobuilds/manifest.md5 ];then
+ log notice 'Found xobuilds to install!';
+ log notice "[1/$STEPS] Checking signature]";
+
+ xs-check-signature $UM_MOUNTPOINT/xs-xobuilds/manifest.md5
+
+ log notice "[2/$STEPS] Checking checksum on external disk";
+ pushd $UM_MOUNTPOINT/xs-xobuilds
+ md5sum -c manifest.md5
+ popd
+
+ ## Do we have enough space?
+ # note: we could use awk {'print $4'} instead of the
+ # perl regex, but it breaks with long /dev nodes
+ # such as those from LVMs -which wrap. The regex captures the
+ # number just left of the number with the percentage sign.
+ NEED=`du -s -B1M $UM_MOUNTPOINT/xs-xobuilds | awk {'print $1'}`
+ HAVE=`df -B1M /library/xs-rsync | tail -n1 | \
+ perl -pe 'm/(\d+)\s+\d+\%/; $_=$1;'`
+ if [ $NEED -gt $HAVE ];then
+ log err 'Not enough free space in /library for this xo image - cancelling';
+ exit 1;
+ fi
+
+ ### Copy it first - as the media is bound to be slow
+ # - make this atomic by cp'ing to a tmpdir, and mv'ing into place
+ # to be fail-safe
+ # - remove - manifest.md5
+ # - TODO? we could avoid cp'ing files we already have using
+ # rsync --copy-dest instead of cp
+ #
+ log notice "[3/$STEPS] Copying xo-builds to xobuilds-packed";
+ TMPDEST=`mktemp -d -p /library/xs-rsync/tmp`
+ cp $UM_MOUNTPOINT/xs-xobuilds/* $TMPDEST
+ rm $TMPDEST/manifest.md5
+ mv $TMPDEST/* /library/xs-rsync/xobuilds-packed/
+
+ log notice "[4/$STEPS] Refreshing XO builds available";
+ (/usr/bin/xs-refresh-xobuilds.py 2>&1 ) | logger -p user.debug -t "xs-rsync[$$]"
+ log notice "[5/$STEPS] Finished - XOs can now update.";
+
+
+fi # end if we have xs-xobuilds/manifest.md5
\ No newline at end of file
diff --git a/xs-rsync.spec.in b/xs-rsync.spec.in
index 0fc0c46..3b0f103 100644
--- a/xs-rsync.spec.in
+++ b/xs-rsync.spec.in
@@ -20,6 +20,7 @@ Requires: fakeroot
Requires: fakechroot
Requires: bash
Requires: vixie-cron
+Requires: usbmount
%description
XS rsync provides support for publishing resources on the XS via rsync.
@@ -79,6 +80,7 @@ make install DESTDIR=$RPM_BUILD_ROOT
%config(noreplace) %{_sysconfdir}/xs-rsyncd.conf.in
%config(noreplace) %{_sysconfdir}/xinetd.d/xs-rsyncd
%config(noreplace) %{_sysconfdir}/cron.d/xs-rsync
+%config(noreplace) %{_sysconfdir}/usbmount/mount.d/50-xs-rsync-installcontent
%dir /library/xs-rsync/xobuilds-packed
%attr(755, xs-rsync, xs-rsync) %dir /library/xs-rsync/pub
%attr(755, xs-rsync, xs-rsync) %dir /library/xs-rsync/pub/builds
--
1.5.5.1
More information about the Server-devel
mailing list