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.)
master
Will Woods 2012-03-08 18:03:48 -05:00 committed by Harald Hoyer
parent 7e60091c6b
commit 52c4c9484d
3 changed files with 44 additions and 1 deletions

View File

@ -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

View File

@ -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"
}


View File

@ -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:}"