Browse Source

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 13 years ago committed by Harald Hoyer
parent
commit
52c4c9484d
  1. 32
      modules.d/90livenet/fetch-liveupdate.sh
  2. 1
      modules.d/90livenet/module-setup.sh
  3. 12
      modules.d/90livenet/parse-livenet.sh

32
modules.d/90livenet/fetch-liveupdate.sh

@ -0,0 +1,32 @@ @@ -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

1
modules.d/90livenet/module-setup.sh

@ -12,6 +12,7 @@ depends() { @@ -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"
}


12
modules.d/90livenet/parse-livenet.sh

@ -1,10 +1,20 @@ @@ -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:}"

Loading…
Cancel
Save