summaryrefslogtreecommitdiffstats
path: root/modules.d/90livenet/livenetroot.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 13:54:25 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-03 13:54:25 +0000
commit9cb1c4df7b9ce1a9ad1312621b0f2b16a94fba3a (patch)
tree2efb72864cc69e174c9c5ee33efb88a5f1553b48 /modules.d/90livenet/livenetroot.sh
parentInitial commit. (diff)
downloaddracut-9cb1c4df7b9ce1a9ad1312621b0f2b16a94fba3a.tar.xz
dracut-9cb1c4df7b9ce1a9ad1312621b0f2b16a94fba3a.zip
Adding upstream version 060+5.upstream/060+5
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-xmodules.d/90livenet/livenetroot.sh60
1 files changed, 60 insertions, 0 deletions
diff --git a/modules.d/90livenet/livenetroot.sh b/modules.d/90livenet/livenetroot.sh
new file mode 100755
index 0000000..66dd41b
--- /dev/null
+++ b/modules.d/90livenet/livenetroot.sh
@@ -0,0 +1,60 @@
+#!/bin/sh
+# livenetroot - fetch a live image from the network and run it
+
+type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh
+
+. /lib/url-lib.sh
+
+PATH=/usr/sbin:/usr/bin:/sbin:/bin
+RETRIES=${RETRIES:-100}
+SLEEP=${SLEEP:-5}
+
+[ -e /tmp/livenet.downloaded ] && exit 0
+
+# args get passed from 40network/netroot
+netroot="$2"
+liveurl="${netroot#livenet:}"
+info "fetching $liveurl"
+
+if getargbool 0 'rd.writable.fsimg'; then
+
+ imgsize=$(($(curl -sIL "$liveurl" | sed -n 's/Content-Length: *\([[:digit:]]*\).*/\1/p') / (1024 * 1024)))
+
+ check_live_ram $imgsize
+fi
+
+imgfile=
+#retry until the imgfile is populated with data or the max retries
+i=1
+while [ "$i" -le "$RETRIES" ]; do
+ imgfile=$(fetch_url "$liveurl")
+
+ # shellcheck disable=SC2181
+ if [ $? != 0 ]; then
+ warn "failed to download live image: error $?"
+ imgfile=
+ fi
+
+ if [ -n "$imgfile" -a -s "$imgfile" ]; then
+ break
+ else
+ if [ $i -ge "$RETRIES" ]; then
+ warn "failed to download live image after $i attempts."
+ exit 1
+ fi
+
+ sleep "$SLEEP"
+ fi
+
+ i=$((i + 1))
+done > /tmp/livenet.downloaded
+
+# TODO: couldn't dmsquash-live-root handle this?
+if [ "${imgfile##*.}" = "iso" ]; then
+ root=$(losetup -f)
+ losetup "$root" "$imgfile"
+else
+ root=$imgfile
+fi
+
+exec /sbin/dmsquash-live-root "$root"