[X2Go-Commits] [live-build-x2go] 22/166: name change
git-admin at x2go.org
git-admin at x2go.org
Mon Nov 20 02:16:40 CET 2017
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch feature/mate-minidesktop
in repository live-build-x2go.
commit ed01cc482b22cb4389bb37c6f8df7dd47d3845d7
Author: Stefan Baur (BAUR-ITCS) <kontakt at baur-itcs.de>
Date: Mon Jan 2 09:31:51 2017 +0100
name change
---
.../lib/live/config/2300-live-autoupdate | 412 +++++++++++++++++++++
1 file changed, 412 insertions(+)
diff --git a/config/includes.chroot/lib/live/config/2300-live-autoupdate b/config/includes.chroot/lib/live/config/2300-live-autoupdate
new file mode 100755
index 0000000..520b1a3
--- /dev/null
+++ b/config/includes.chroot/lib/live/config/2300-live-autoupdate
@@ -0,0 +1,412 @@
+#!/bin/sh
+
+cleanup ()
+{ # discard contents of tmpfs, umount if necessary
+ if [ -n "$NTFSROOT" ]; then
+ echo "Removing '$TEMPDIR/*'."
+ rm -rf $TEMPDIR/*
+ else
+ echo "Unmounting '$TEMPDIR'."
+ umount $TEMPDIR
+ fi
+ if rmdir $TEMPDIR; then
+ echo "Removed empty directory '$TEMPDIR'."
+ else
+ echo "Could not remove directory '$TEMPDIR'."
+ fi
+ if [ -n "$NTFSROOT" ]; then
+ if umount $MOUNTPOINT; then
+ echo "Unmounted '$MOUNTPOINT'."
+ else
+ echo "Could not unmount '$MOUNTPOINT'."
+ fi
+ fi
+}
+
+LiveAutoUpdateMain ()
+{
+# Output startup message
+#
+echo -n " live-autoupdater (backgrounding update task)"
+
+
+# Background everything
+#
+(
+
+# wait until terminal is available
+while ! [ -c /dev/tty10 ] ; do
+ sleep 10
+done
+
+# redirect all output to console #10
+#
+exec >/dev/tty10 2>&1
+
+
+# clear console
+#
+clear
+
+
+# This is so grep, awk and sed will match the right terms regardless of LANG
+#
+unset LANG
+unset LC_ALL
+unset LC_MESSAGES
+
+
+# download url pointing to directory with all required files goes here
+DOWNLOADURL=$(cat /proc/cmdline | \
+ tr ' ' '\n' | \
+ awk -F'=' ' /^updateurl=/ { print $2 }')
+
+if [ -z "$DOWNLOADURL" ]; then
+ echo "No update URL. Exiting."
+ return 0
+fi
+
+# Bandwidth limit goes here
+#
+#BWLIMITPERCENT=20 # in percent, numeric-only
+BWLIMITPERCENT=$(cat /proc/cmdline | \
+ tr ' ' '\n' | \
+ awk -F'=' ' /^bwlimit=/ { print $2 }')
+if [ -z "$BWLIMITPERCENT" ]; then
+ BWLIMITPERCENT=20
+ echo "Bandwidth limit not set. Defaulting to 20%."
+fi
+
+
+
+# sleeping a random amount of time to ease load on the update server
+#
+SLEEPTIME=0
+echo -n "Calculating random update delay (120-900 seconds)..."
+while [ $SLEEPTIME -lt 120 ]; do
+ echo -n "."
+ # During startup, script is run with /bin/sh,
+ # even when #!/bin/bash is set,
+ # so we need to improvise.
+ RND=$(/bin/bash -c 'echo $RANDOM')
+ SLEEPTIME=$((RND%900))
+done
+echo " "
+echo "Sleeping for $SLEEPTIME seconds ..."
+sleep $SLEEPTIME
+
+
+# Define our mountpoint and check if we're capable of auto-updating
+NTFSROOT=$(cat /proc/cmdline | tr ' ' '\n' | awk -F '=' '/^ntfs-uuid/ { print $2 }')
+if [ -n "$NTFSROOT" ]; then
+ mkdir -p /lib/live/mount/ntfsroot
+ # This is in case we've been passed an incomplete UUID and/or one with dashes
+ # For example, "vol c:" on Windows will return the last 8 digits of the UUID
+ # only, and separate them with a dash.
+ if ! [ -L "/dev/disk/by-uuid/$NTFSROOT" ]; then
+ NTFSROOT=$(echo $NTFSROOT | tr -d '-')
+ if ! [ -L "/dev/disk/by-uuid/$NTFSROOT" ]; then
+ NTFSROOT=$(echo /dev/disk/by-uuid/*$NTFSROOT | tr ' ' '\n' | head -1)
+ fi
+ fi
+
+ mount -t ntfs-3g -rw /dev/disk/by-uuid/$NTFSROOT /lib/live/mount/ntfsroot
+ MOUNTPOINT="/lib/live/mount/ntfsroot/"
+ # create a temporary directory
+ TEMPDIR=$(mktemp -d --tmpdir=$MOUNTPOINT)
+else
+ MOUNTPOINT="/lib/live/mount/findiso/"
+ # create a temporary directory and mount a tmpfs there
+ TEMPDIR=$(mktemp -d --tmpdir=/mnt)
+ IMGSIZE=$(df /lib/live/mount/medium | awk ' /medium/ { print $2}')
+ mount -t tmpfs -osize=$((IMGSIZE*15/10))k tmpfs $TEMPDIR
+
+fi
+if ! ( [ -d "$MOUNTPOINT/boot/X2Go-live-download" ] && \
+ ( \
+ [ -d "$MOUNTPOINT/boot/X2Go-live1" ] || \
+ [ -d "$MOUNTPOINT/boot/X2Go-live2" ] \
+ ) \
+ ); then
+ [ -n "$NTFSROOT" ] && umount $MOUNTPOINT
+ echo "No directories suitable for update."
+ return 0 # directories missing, most likely not a writeable medium
+fi
+
+
+# define and figure out some paths that we will be needing later on
+#
+if [ -f "$MOUNTPOINT/syslinux.cfg" ]; then
+ SYSLINUXPATH="$MOUNTPOINT/"
+elif [ -f "$MOUNTPOINT/syslinux/syslinux.cfg" ]; then
+ SYSLINUXPATH="$MOUNTPOINT/syslinux/"
+elif [ -f "$MOUNTPOINT/menu.lst" ]; then
+ GRUBPATH="$MOUNTPOINT/"
+elif [ -f "$MOUNTPOINT/boot/menu.lst" ]; then
+ GRUBPATH="$MOUNTPOINT/grub/"
+elif [ -f "$MOUNTPOINT/boot/grub/menu.lst" ]; then
+ GRUBPATH="$MOUNTPOINT/boot/grub/"
+else
+ [ -n "$NTFSROOT" ] && umount $MOUNTPOINT
+ echo "No suitable bootloader found."
+ return 1
+fi
+
+RUNNINGSYSTEMFULLPATH=$(dirname $(readlink -m "$MOUNTPOINT/$(cat /proc/cmdline | \
+ tr ' ' '\n' | \
+ awk -F'=' ' /^findiso=/ { print $2 }')"))
+
+ALLSYSTEMSROOT=$(dirname $RUNNINGSYSTEMFULLPATH)
+RUNNINGSYSTEMNAME=$(basename $RUNNINGSYSTEMFULLPATH)
+if [ "$RUNNINGSYSTEMNAME" = "X2Go-live1" ]; then
+ OTHERSYSTEMNAME="X2Go-live2"
+elif [ "$RUNNINGSYSTEMNAME" = "X2Go-live2" ]; then
+ OTHERSYSTEMNAME="X2Go-live1"
+else
+ [ -n "$NTFSROOT" ] && umount $MOUNTPOINT
+ echo "Unable to determine path/name of running system."
+ return 1
+fi
+OTHERSYSTEMFULLPATH=$(readlink -m "$ALLSYSTEMSROOT/$OTHERSYSTEMNAME")
+DOWNLOADPATH=$(readlink -m "$ALLSYSTEMSROOT/X2Go-live-download/")
+
+
+# Now we'll copy the content of the X2Go-live-download folder to our tempdir
+# this is so we can run wget in update mode (-N) or rsync without needing
+# write access to our boot medium (write access means increased wear and tear,
+# and we want to avoid that especially for media that has no wear-leveling
+# like CF cards)
+#
+while ! rsync -aPv --inplace --modify-window=1 $DOWNLOADPATH/ $TEMPDIR; do
+ echo "Sleeping 30 seconds ..."
+ sleep 30
+ echo "Retrying ..."
+done
+
+
+# Now let's figure out if we're supposed to use wget or rsync for downloading
+#
+if echo "$DOWNLOADURL" | grep -q "^http" || \
+ echo "$DOWNLOADURL" | grep -q "^ftp"
+ then
+ # Attempt to determine available bandwidth & to set BWLIMIT accordingly
+ wget -Nr -o /tmp/dl.log -P /tmp/ -nd \
+ --progress=bar:force $DOWNLOADURL/x2go-tce-initrd.img
+ cp --update "/tmp/x2gp-tce-initrd.img" "$TEMPDIR"
+ rm "/tmp/x2go-tce-initrd.img"
+ SIZEFACTORSTRING=$( awk -F' |\(|\)' ' $9 == "saved" && \
+ $7 == "-" { print $5 }' /tmp/dl.log \
+ )
+ case $SIZEFACTORSTRING in
+ "" | \
+ [0-9]) echo -n "Not enough Bandwidth for update task - "
+ echo -n "aborting."
+ cleanup
+ return 0
+ ;;
+ "KB/s") SIZEFACTOR=1;;
+ "MB/s") SIZEFACTOR=1024;;
+ "GB/s") SIZEFACTOR=1048576;;
+ *) SIZEFACTOR=$((1024*1024*1024));;
+ esac
+ DLRATE=$( awk -F' |\(|\)' ' $9 == "saved" && $7 == "-" \
+ { print $4 }' /tmp/dl.log \
+ )
+ BWLIMIT=$( echo "$DLRATE $SIZEFACTOR $BWLIMITPERCENT" | \
+ awk ' { print $1*$2*$3/100 }' | \
+ awk -F'.' '{ print $1 }' \
+ ) # outputs integer kilobytes, not rounded
+ echo "Determined bandwidth limit: '$BWLIMIT KB/s'"
+ DOWNLOADCOMMAND="wget -Nr -l 1 -nd -P "$TEMPDIR" \
+ --limit-rate=${BWLIMIT}k $DOWNLOADURL"
+
+elif echo "$DOWNLOADURL" | grep -q "^rsync"; then
+
+ rsync -hh -aPv -W --inplace --log-file=/tmp/dl.log $DOWNLOADURL/x2go-tce-initrd.img \
+ $TEMPDIR/x2go-tce-initrd.img.new
+ mv $TEMPDIR/x2go-tce-initrd.img.new $TEMPDIR/x2go-tce-initrd.img
+ SIZEFACTORSTRING=$( sed -e's_\(. bytes/sec\)_ \1_' /tmp/dl.log | \
+ awk '$4 == "sent" && $12 == "bytes/sec" \
+ { print $11 }' \
+ )
+ case $SIZEFACTORSTRING in
+ "" | \
+ [0-9]) echo -n "Not enough Bandwidth for update task - "
+ echo -n "aborting."
+ cleanup
+ return 0
+ ;;
+ "K") SIZEFACTOR=1;;
+ "M") SIZEFACTOR=1024;;
+ "G") SIZEFACTOR=$((1024*1024));;
+ *) SIZEFACTOR=$((1024*1024*1024));;
+ esac
+ DLRATE=$( sed -e's_\(. bytes/sec\)_ \1_' /tmp/dl.log | \
+ awk '$4 == "sent" && $12 == "bytes/sec" \
+ { print $10 }')
+ BWLIMIT=$( echo "$DLRATE $SIZEFACTOR $BWLIMITPERCENT" | \
+ awk ' { print $1*$2*$3/100 }' | \
+ awk -F'.' '{ print $1 }' \
+ ) # outputs integer kilobytes, not rounded
+ echo "Determined bandwidth limit: '$BWLIMIT KB/s'"
+ DOWNLOADCOMMAND="rsync -aPv --inplace --bwlimit=$BWLIMIT $DOWNLOADURL/ \
+ $TEMPDIR"
+else
+ [ -n "$NTFSROOT" ] && umount $MOUNTPOINT
+ echo "Unsupported download mechanism."
+ return 1
+fi
+rm /tmp/dl.log
+
+
+# Proceed to download from update location
+#
+while ! $DOWNLOADCOMMAND; do
+ echo "Sleeping 30 seconds ..."
+ sleep 30
+ echo "Retrying ..."
+done
+
+# Now check if these files are different from what we already have in our
+# download directory on the boot medium
+#
+echo "Diff'ing '$DOWNLOADPATH' '$TEMPDIR' ..."
+if diff -q $DOWNLOADPATH $TEMPDIR \
+ >/dev/null
+
+ then
+ cleanup
+ echo "Nothing to do. - Files on server not newer than '$DOWNLOADPATH'."
+ return 0 # current is newest, nothing to do, we want to avoid
+ # unneccessary writes to the medium
+else
+ echo "Differences detected. Continuing ..."
+fi
+
+
+# If we made it past that point, it's time to update the boot medium, so let's
+# remount it rw and async for speed
+#
+if mount -oremount,rw,async $MOUNTPOINT; then
+ echo "Remounted '$MOUNTPOINT' as rw and async."
+else
+ echo "Could not remount '$MOUNTPOINT' as rw and async."
+fi
+
+
+# Now, we don't want to copy an index.htm(l) file, so let's do away with that
+#
+rm -f $TEMPDIR/index.ht*
+
+
+# move everything over to the boot medium
+#
+echo "Moving $TEMPDIR/* => $DOWNLOADPATH"
+mv $TEMPDIR/* $DOWNLOADPATH
+cleanup # FIXME ist dieses Cleanup gerechtfertigt oder macht es dummfoog?
+if [ -n "$NTFSROOT" ]; then
+ echo "NTFSROOT detected. Attempting to mount '/dev/disk/by-uuid/$NTFSROOT'."
+ if mount -t ntfs-3g -rw /dev/disk/by-uuid/$NTFSROOT /lib/live/mount/ntfsroot; then
+ echo "Mount successful."
+ else
+ echo "Failed to mount NTFSROOT."
+ fi
+fi
+
+
+# let's check if we just downloaded a copy of our running system
+#
+echo "Diff'ing '$DOWNLOADPATH' '$RUNNINGSYSTEMFULLPATH'"
+if diff -q $DOWNLOADPATH $RUNNINGSYSTEMFULLPATH >/dev/null && \
+ [ -d "$OTHERSYSTEMFULLPATH" ] ; then
+ [ -n "$NTFSROOT" ] && umount $MOUNTPOINT
+ echo "Nothing to do. Content of $DOWNLOADPATH equals" \
+ "$RUNNINGSYSTEMNAME."
+ return 0 # current is newest, nothing to do,
+ # we want to keep the old system in OTHERSYSTEMFULLPATH
+ # as a fallback
+fi
+
+
+# make sure our destination path really exists
+#
+mkdir -p $OTHERSYSTEMFULLPATH
+
+
+# let's check if our destination is already up to date or needs updating
+#
+echo "Diff'ing '$DOWNLOADPATH' '$OTHERSYSTEMFULLPATH'"
+if diff -q $DOWNLOADPATH $OTHERSYSTEMFULLPATH >/dev/null; then
+ [ -n "$NTFSROOT" ] && umount $MOUNTPOINT
+ echo "Nothing to do - content of '$DOWNLOADPATH' equals"\
+ "'$OTHERSYSTEMNAME'."
+ return 0 # OTHERSYSTEMFULLPATH is already up to date
+else
+ # keep rsyncing until the update is complete
+ echo "Copying $DOWNLOADPATH/ => $OTHERSYSTEMFULLPATH"
+ while ! rsync -aPv --inplace --modify-window=1 $DOWNLOADPATH/ $OTHERSYSTEMFULLPATH
+ do
+ echo "Sleeping 30 seconds ..."
+ sleep 30
+ echo "Retrying ..."
+ done
+fi
+
+
+# change default boot to the image we just downloaded and installed
+#
+if [ -n "$SYSLINUXPATH" ]; then
+ echo "Changing syslinux default to $OTHERSYSTEMNAME."
+ sed -i -e"/^default/cdefault $OTHERSYSTEMNAME" \
+ $SYSLINUXPATH/syslinux.cfg
+
+elif [ -n "$GRUBPATH" ]; then
+ MENULST=$GRUBPATH/menu.lst
+ CURRENTDEFAULT=$(awk '/^default/ { print $2 }' $MENULST | tr -d '\r')
+ CURRENTTITLEPOSITION=$(grep '^title' $MENULST |
+ grep -n "${RUNNINGSYSTEMNAME}" |
+ awk -F':' '$2 ~ /'"${RUNNINGSYSTEMNAME}"'/ { print $1 }')
+ CURRENTTITLEPOSITION=$((CURRENTTITLEPOSITION-1))
+ OTHERTITLEPOSITION=$(grep '^title' $MENULST |
+ grep -n "${OTHERSYSTEMNAME}" |
+ awk -F':' '$2 ~ /'"${OTHERSYSTEMNAME}"'/ { print $1 }')
+ OTHERTITLEPOSITION=$((OTHERTITLEPOSITION-1))
+ if [ "$CURRENTTITLEPOSITION" = "$CURRENTDEFAULT" ]; then
+ echo "Changing GRUB-legacy default to $OTHERTITLEPOSITION ..."
+ sed -i -e"/^default/cdefault $OTHERTITLEPOSITION" \
+ $MENULST
+ else
+ echo "Not changing GRUB-legacy default."
+ echo "Reason: We're at boot position '$CURRENTTITLEPOSITION',"
+ echo "while default is set to position '$CURRENTDEFAULT'."
+ fi
+else
+ echo "Unsupported bootloader."
+fi
+
+# we're on an async mount point, so let's sync to be safe
+#
+sync
+
+
+# umount tempdir to free memory
+#
+if [ -d $TEMPDIR ]; then
+ cleanup
+fi
+
+
+# now, change mount back to ro and sync
+#
+if [ -n "$NTFSROOT" ]; then
+ umount $MOUNTPOINT
+else
+ mount -oremount,ro,sync $MOUNTPOINT
+fi
+
+) &
+
+}
+
+LiveAutoUpdateMain
+
--
Alioth's /srv/git/code.x2go.org/live-build-x2go.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/live-build-x2go.git
More information about the x2go-commits
mailing list