url-lib: add support for NFS

This adds nfs_fetch_url to allow fetching arbitrary files from NFS.

This means that livenet can now run using an NFS-mounted live image,
which reduces memory usage by a lot.

Signed-off-by: Will Woods <wwoods@redhat.com>
master
Will Woods 2012-02-14 12:38:07 -05:00 committed by Harald Hoyer
parent 5978983b30
commit 370329ca3b
1 changed files with 28 additions and 0 deletions

View File

@ -10,6 +10,8 @@ type mkuniqdir >/dev/null 2>&1 || . /lib/dracut-lib.sh
# fetch the given URL to a locally-visible location.
# if OUTFILE is given, the URL will be fetched to that filename,
# overwriting it if present.
# If the URL is something mountable (e.g. nfs://) and no OUTFILE is given,
# the server will be left mounted until pre-pivot.
# the return values are as follows:
# 0: success
# 253: unknown error (file missing)
@ -47,6 +49,8 @@ add_url_handler() {
url_handler_map="$@"
}

### HTTP, HTTPS, FTP #################################################

curl_args="--location --retry 3 --fail --show-error"
curl_fetch_url() {
local url="$1" outloc="$2"
@ -64,3 +68,27 @@ curl_fetch_url() {
echo "$outloc"
}
add_url_handler curl_fetch_url http https ftp

### NFS ##############################################################

. /lib/nfs-lib.sh

nfs_fetch_url() {
local url="$1" outloc="$2" nfs="" server="" path="" options=""
nfs_to_var "$url" || return 255
local filepath="${path%/*}" filename="${path##*/}"

# TODO: check to see if server:/filepath is already mounted
local mntdir="$(mkuniqdir /run nfs_mnt)"
mount_nfs $nfs:$server:$path${options:+:$options} $mntdir
# FIXME: schedule lazy unmount during pre-pivot hook

if [ -z "$outloc" ]; then
outloc="$mntdir/$filename"
else
cp -f "$mntdir/$filename" "$outloc" || return $?
fi
[ -f "$outloc" ] || return 253
echo "$outloc"
}
add_url_handler nfs_fetch_url nfs nfs4