From 52c4c9484d0cdccad7d9a3cc684677e784edab53 Mon Sep 17 00:00:00 2001 From: Will Woods Date: Thu, 8 Mar 2012 18:03:48 -0500 Subject: [PATCH] Add 'live.updates' to livenet module 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 | 32 +++++++++++++++++++++++++++++++ modules.d/90livenet/module-setup.sh | 1 + modules.d/90livenet/parse-livenet.sh | 12 +++++++++++- 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100755 modules.d/90livenet/fetch-liveupdate.sh diff --git a/modules.d/90livenet/fetch-liveupdate.sh b/modules.d/90livenet/fetch-liveupdate.sh new file mode 100755 index 0000000..8a5fdec --- /dev/null +++ b/modules.d/90livenet/fetch-liveupdate.sh @@ -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 diff --git a/modules.d/90livenet/module-setup.sh b/modules.d/90livenet/module-setup.sh index c650ef3..2071553 100755 --- a/modules.d/90livenet/module-setup.sh +++ b/modules.d/90livenet/module-setup.sh @@ -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" } diff --git a/modules.d/90livenet/parse-livenet.sh b/modules.d/90livenet/parse-livenet.sh index 926dba2..3553cef 100755 --- a/modules.d/90livenet/parse-livenet.sh +++ b/modules.d/90livenet/parse-livenet.sh @@ -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:}"