On Wednesday 27 July 2005 17:33, Erich Focht wrote:
> 
> Wouldn't it make more sense to directly pipe the udp-receive output to a tar?
> 
Here is a patch for the problem. I tried to commit it but am getting the
following error message:
svn: Can't create directory 
'/var/lib/svn/systemimager/db/transactions/3200-1.txn': Permission denied

This doesn't seem to come from my site, I created that directory and gave it
world write permission.

The commit text was:
flamethrower_client was filling up the tmpfs when transfering big images.
Instead of trying to store the image as a tar file (which is still the default)
now it is possible to directly untar the transfered data by piping it to
a tar command. The option has been added by reusing all the flamethrower_client 
code.
It is triggered by setting the environment variable FLAMETHROWER_TARPIPE.


Best regards,
Erich

--- etc/autoinstallscript.template.oold	2005-07-27 18:39:12.000000000 +0200
+++ etc/autoinstallscript.template	2005-07-27 18:40:30.000000000 +0200
@@ -230,6 +230,7 @@
     MODULE_NAME="${IMAGENAME}"
     DIR=/a
     RETRY=7
+    FLAMETHROWER_TARPIPE=y
     flamethrower_client
 else 
     # Use rsync 
@@ -291,6 +292,7 @@
         MODULE_NAME="override_${OVERRIDE}"
         DIR=/a
         RETRY=7
+	FLAMETHROWER_TARPIPE=y
         flamethrower_client
     else
         # Use rsync
--- initrd_source/skel/etc/init.d/functions.old	2005-07-27 18:15:36.000000000 +0200
+++ initrd_source/skel/etc/init.d/functions	2005-07-27 18:38:12.000000000 +0200
@@ -341,13 +341,18 @@
 #   [RETRY=7]               # Optional
 #   [PORTBASE=9000]         # Required if a sourceable file called $MODULE_NAME
 #                           #   doesn't exist
+#   [FLAMETHROWER_TARPIPE]  # If not empty, untar received data directly,
+#                           # without storing it to a temporary file
 #
 #   flamethrower_client
 #
 flamethrower_client() {
 
+    if [ ! -z $FLAMETHROWER_TARPIPE ]; then
+	$FLAMETHROWER_TARPIPE=tarpipe
+    fi
     logmsg
-    logmsg "flamethrower_client(${MODULE_NAME})"
+    logmsg "flamethrower_client(${MODULE_NAME}) $FLAMETHROWER_TARPIPE "
     logmsg ---------------------------------------------------------------------
 
     # validate
@@ -360,11 +365,11 @@
         fi
     fi
     if [ -z $DIR ]; then
-        logmsg Must set DIR
+        logmsg "Must set DIR !!!"
+	shellout
     else
         mkdir -p $DIR
     fi
-    
 
     # build command
     UDP_RECEIVER_OPTIONS="--interface ${DEVICE} --portbase $PORTBASE --nokbd"
@@ -400,19 +405,27 @@
         # receive cast
         #   example udp-receiver command:
         #   udp-receiver --interface lo --portbase 9002 --nokbd --nosync --file /tmp/multicast.tar
-        logmsg udp-receiver $UDP_RECEIVER_OPTIONS --file /tmp/multicast.tar
-        udp-receiver $UDP_RECEIVER_OPTIONS --file /tmp/multicast.tar
-        UDP_RECEIVER_EXIT_STATUS=$?
-
-        # untar it
-        if [ "$UDP_RECEIVER_EXIT_STATUS" = "0" ]; then
-            logmsg tar ${TAR_OPTS} -f /tmp/multicast.tar -C ${DIR}
-            tar ${TAR_OPTS} -f /tmp/multicast.tar -C ${DIR}
-            TAR_EXIT_STATUS=$?
-        fi
 
-        # discard used tarball like an old sock (recommended by: Ramon Bastiaans <[EMAIL PROTECTED]>)
-        rm -f /tmp/multicast.tar
+        if [ -n $FLAMETHROWER_TARPIPE ]; then
+	    TAR_OPTS="$TAR_OPTS -f -"
+	    logmsg "udp-receiver $UDP_RECEIVER_OPTIONS | tar $TAR_OPTS -C $DIR"
+	    udp-receiver $UDP_RECEIVER_OPTIONS | tar $TAR_OPTS -C $DIR
+	    TAR_EXIT_STATUS=$?
+	    UDP_RECEIVER_STATUS=0
+	else
+	    logmsg udp-receiver $UDP_RECEIVER_OPTIONS --file /tmp/multicast.tar
+	    udp-receiver $UDP_RECEIVER_OPTIONS --file /tmp/multicast.tar
+	    UDP_RECEIVER_EXIT_STATUS=$?
+
+            # untar it
+	    if [ "$UDP_RECEIVER_EXIT_STATUS" = "0" ]; then
+		logmsg tar ${TAR_OPTS} -f /tmp/multicast.tar -C ${DIR}
+		tar ${TAR_OPTS} -f /tmp/multicast.tar -C ${DIR}
+		TAR_EXIT_STATUS=$?
+	    fi
+            # discard used tarball like an old sock (recommended by: Ramon Bastiaans <[EMAIL PROTECTED]>)
+	    rm -f /tmp/multicast.tar
+	fi
 
         # did everything work properly
         if [ $UDP_RECEIVER_EXIT_STATUS -eq 0 ] && [ $TAR_EXIT_STATUS -eq 0 ]; then
@@ -436,7 +449,6 @@
     logmsg 'finished!'
     logmsg 
 
-
     # Unset vars, so next module (which may not have them set) won't use then unintentially
     unset TTL
     unset NOSYNC
@@ -451,6 +463,7 @@
     unset TAR_EXIT_STATUS
     unset TAR_OPTS
     unset SUCCESS
+    unset FLAMETHROWER_TARPIPE
 }
 
 #

Reply via email to