Added mkjigsnap, a utility to run on the server to create snapshots
authorSteve McIntyre <steve@einval.com>
Sun, 13 Mar 2005 22:20:15 +0000 (22:20 +0000)
committerSteve McIntyre <steve@einval.com>
Sun, 13 Mar 2005 22:20:15 +0000 (22:20 +0000)
needed for jigdo templates

mkjigsnap [new file with mode: 0755]
mkjigsnap.8 [new file with mode: 0644]

diff --git a/mkjigsnap b/mkjigsnap
new file mode 100755 (executable)
index 0000000..192abc8
--- /dev/null
+++ b/mkjigsnap
@@ -0,0 +1,129 @@
+#!/bin/sh
+#
+# mkjigsnap
+#
+# (c) 2004 Steve McIntyre
+#
+# Server-side wrapper; run this on a machine with a mirror to set up
+# the snapshots for jigit
+
+# Some things needed:
+#   CD name of the jigit
+#   location of the mirror
+#   output location; where the jigdo, template file and 
+#      snapshot will be written
+#   the locations of the input jigdo and template files
+#   the keyword to look for (e.g. Debian)
+# Example:
+# ./mkjigsnap -o /tmp/mjs-test -n mjs-test -m /tmp/mirror \
+#      -j ~/jigdo/update/debian-update-3.0r2.01-i386.jigdo \
+#      -t ~/jigdo/update/debian-update-3.0r2.01-i386.template \
+#      -k Debian -k Non-US
+
+while [ $# -gt 0 ]
+do
+    case "$1"x in
+        "-n"x)
+            shift
+            CDNAME=$1
+            shift
+            ;;
+        "-m"x)
+            shift
+            MIRROR=$1
+            shift
+            ;;
+        "-o"x)
+            shift
+            OUT=$1
+            shift
+            ;;
+        "-j"x)
+            shift
+            JIGDO=$1
+            shift
+            ;;
+        "-t"x)
+            shift
+            TEMPLATE=$1
+            shift
+            ;;
+        "-k"x)
+            shift
+            KEYWORDS="$KEYWORDS $1"
+            shift
+            ;;
+        ""*)
+            echo "Input error!"
+            exit 1
+            ;;
+    esac
+done
+
+if [ "$CDNAME"x = ""x ] ; then
+    echo "You must specify the output name for the jigit conf!"
+    exit 1
+fi
+
+if [ "$MIRROR"x = ""x ] ; then
+    echo "You must specify the location of the mirror!"
+    exit 1
+fi
+    
+if [ "$OUT"x = ""x ] ; then
+    echo "You must specify where to set up the snapshot!"
+    exit 1
+fi
+    
+if [ "$JIGDO"x = ""x ] ; then
+    echo "You must specify the jigdo file!"
+    exit 1
+fi
+    
+if [ "$TEMPLATE"x = ""x ] ; then
+    echo "You must specify the template file!"
+    exit 1
+fi
+    
+if [ "$KEYWORDS"x = ""x ] ; then
+    echo "You must specify the keywords to match!"
+    exit 1
+fi
+
+DATE=`date '+%Y-%m-%d'`
+    
+# If we got here, we have all the info we need
+echo "Creating snapshot tree:"
+for KEYWORD in $KEYWORDS
+do
+    NUM=$(( $NUM + `grep "$KEYWORD:" $JIGDO | wc -l`))
+done
+LINKS_DONE=0
+for KEYWORD in $KEYWORDS
+do
+    for jentry in `cat $JIGDO | grep =$KEYWORD:`
+    do
+        file=`echo $jentry | sed "s/^.*$KEYWORD://g"`
+        dir=$OUT/snapshot/$DATE/`dirname $file`
+        if [ ! -d $dir ] ; then
+            mkdir -p $dir
+        fi
+        ln -f $MIRROR/$file $OUT/snapshot/$DATE/$file
+        error=$?
+        if [ $error -ne 0 ] ; then
+            echo "Unable to link $MIRROR/$file; error $error"
+            exit 1
+        fi
+        LINKS_DONE=$(($LINKS_DONE + 1))
+        printf "\r%d/%d links created" $LINKS_DONE $NUM
+    done
+done
+
+echo
+
+cp $JIGDO $OUT/$CDNAME.jigdo
+cp $TEMPLATE $OUT/$CDNAME.template
+echo "JIGDO=$CDNAME.jigdo" > $OUT/$CDNAME.conf
+echo "TEMPLATE=$CDNAME.template" >> $OUT/$CDNAME.conf
+echo "SNAPSHOT=snapshot/$DATE" >> $OUT/$CDNAME.conf
+
diff --git a/mkjigsnap.8 b/mkjigsnap.8
new file mode 100644 (file)
index 0000000..33d84b7
--- /dev/null
@@ -0,0 +1,51 @@
+.TH MKJIGSNAP 8 "September 2004" "Jigit jigdo tools"
+.SH NAME
+mkjigsnap \- Create a snapshot tree on a jigdo server
+.SH SYNOPSIS
+.B mkjigsnap
+\-n \f CD name\fR \-m \f mirror\fR \-o \f output directory\fR
+\-j \f jigdo file\fR \-t \f template file\fR \-k \f keyword\fR
+.SH DESCRIPTION
+.PP
+mkjigsnap will create the directory tree and snapshot needed for jigit
+to work effectively. Once you have created the .template and .jigdo
+files that you want to distribute, run mkjigsnap on a mirror machine
+and it will set things up for you. You need to specify all of the
+options.
+.TP
+\fB\-n CD name\fR
+Specify the output name for jigit (e.g. warty, sarge-i386-1).
+.TP
+\fB\-m mirror\fR
+Specify the location of the mirror containing all the files
+needed. This
+.B must
+be on the same filesystem as the output directory, as hard links will
+be used to create the snapshot efficiently.
+.TP
+\fB\-o output directory\fR
+Specify the output location for the jigdo, template, conf and
+snapshot. This
+.B must
+be on the same filesystem as the mirror, as hard links will be used to
+create the snapshot efficiently.
+.TP
+\fB\-j jigdo file\fR
+Specify the location of the jigdo file to be used.
+.TP
+\fB\-t template file\fR
+Specify the location of the template file to be used.
+.TP
+\fB\-k keyword\fR
+Specify the "keywords" which are used in the jigdo file (e.g. Debian,
+Non-US, Ubuntu).
+.SH "SEE ALSO"
+\fBjigdo-file\fP(1), \fBjigit\fP(1), \fBjigdump\fP(1) and \fBmkimage\fP(1).
+.SH "COPYRIGHT"
+Copyright 2004 Steve McIntyre (steve@einval.com)
+.PP
+mkjigsnap may be copied under the terms and conditions of version 2 of
+the GNU General Public License, as published by the Free Software
+Foundation (Cambridge, MA, USA).
+.SH "AUTHOR"
+Written by Steve McIntyre (steve@einval.com)