]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
Add 'live.updates' to livenet module
authorWill Woods <wwoods@redhat.com>
Thu, 8 Mar 2012 23:03:48 +0000 (18:03 -0500)
committerHarald Hoyer <harald@redhat.com>
Fri, 9 Mar 2012 10:13:08 +0000 (11:13 +0100)
live.updates allows you to specify the URL for an "updates image" that
should be applied to the live runtime before switch_root.

The URL can be anything supported by url-lib (http, https, ftp, possibly
nfs) and the image can be anything supported by img-lib (xz/gzip
compressed cpio/tar, uncompressed cpio/tar, filesystem image, etc.)

modules.d/90livenet/fetch-liveupdate.sh [new file with mode: 0755]
modules.d/90livenet/module-setup.sh
modules.d/90livenet/parse-livenet.sh

diff --git a/modules.d/90livenet/fetch-liveupdate.sh b/modules.d/90livenet/fetch-liveupdate.sh
new file mode 100755 (executable)
index 0000000..8a5fdec
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+# fetch-liveupdate - fetch an update image for dmsquash-live media.
+# this gets called by the "initqueue/online" hook for each network interface
+# that comes online.
+
+# no updates requested? we're not needed.
+[ -e /tmp/liveupdates.info ] || return 0
+
+command -v getarg >/dev/null || . /lib/dracut-lib.sh
+command -v fetch_url >/dev/null || . /lib/url-lib.sh
+command -v unpack_img >/dev/null || . /lib/img-lib.sh
+
+read url < /tmp/liveupdates.info
+
+info "fetching live updates from $url"
+
+fetch_url "$url" /tmp/updates.img
+if [ $? != 0 ]; then
+    warn "failed to fetch update image!"
+    warn "url: $url"
+    return 1
+fi
+
+unpack_img /tmp/updates.img /updates.tmp.$$
+if [ $? != 0 ]; then
+    warn "failed to unpack update image!"
+    warn "url: $url"
+    return 1
+fi
+rm -rf /updates
+mv -f /updates.tmp.$$ /updates
+mv /tmp/liveupdates.info /tmp/liveupdates.done
index c650ef312c929c885529210605a3240f6342cb1b..207155303e6a799d921ba9bc4d82f413870120d3 100755 (executable)
@@ -12,6 +12,7 @@ depends() {
 
 install() {
     inst_hook cmdline 29 "$moddir/parse-livenet.sh"
+    inst_hook initqueue/online 95 "$moddir/fetch-liveupdate.sh"
     inst "$moddir/livenetroot.sh" "/sbin/livenetroot"
 }
 
index 926dba2249987fc1547b1dc167221ab4065edb88..3553cef1ee551ed97d660f213002144844881760 100755 (executable)
@@ -1,10 +1,20 @@
-#!/bin/bash
+#!/bin/sh
 # live net images - just like live images, but specified like:
 # root=live:[url-to-backing-file]
 
 [ -z "$root" ] && root=$(getarg root=)
 . /lib/url-lib.sh
 
+# live updates
+updates=$(getarg live.updates=)
+if [ -n "$updates" ]; then
+    # make sure network comes up even if we're doing a local live device
+    [ -z "$netroot" ] && echo "rd.neednet=1" > /etc/cmdline.d/90livenet.conf
+    echo "$updates" > /tmp/liveupdates.info
+    echo '[ -e /tmp/liveupdates.done ]' > \
+        $hookdir/initqueue/finished/liveupdates.sh
+fi
+
 str_starts "$root" "live:" && liveurl="$root"
 str_starts "$liveurl" "live:" || return
 liveurl="${liveurl#live:}"