66 lines
2.4 KiB
Bash
Executable file
66 lines
2.4 KiB
Bash
Executable file
#!/bin/bash
|
|
# fetch-driver-net - fetch driver from the network.
|
|
# runs from the "initqueue/online" hook whenever a net interface comes online
|
|
# initqueue/online hook passes interface name as $1
|
|
|
|
command -v warn_critical >/dev/null || . /lib/anaconda-lib.sh
|
|
|
|
# No dd_net was requested - exit
|
|
[ -f /tmp/dd_net ] || return 0
|
|
DD_NET=$(cat /tmp/dd_net)
|
|
|
|
. /lib/url-lib.sh
|
|
|
|
for dd in $DD_NET; do
|
|
# If we already fetched this URL, skip it
|
|
grep -Fqx "$dd" /tmp/dd_net.done && continue
|
|
# Otherwise try to fetch it
|
|
|
|
if [[ $dd == *.rpm ]] || [[ $dd == *.iso ]]; then
|
|
# Path in $dd leads to a file
|
|
info "Fetching driverdisk from $dd file"
|
|
|
|
if driver=$(fetch_url "$dd"); then
|
|
echo "$dd" >> /tmp/dd_net.done # mark it done so we don't fetch it again
|
|
driver-updates --net "$dd" "$driver"
|
|
else
|
|
warn_critical "Failed to fetch driver from $dd"
|
|
fi
|
|
|
|
else
|
|
# Path in $dd leads to a directory
|
|
|
|
# Only nfs supports processing of the whole directories
|
|
if [[ $dd == nfs://* ]]; then
|
|
|
|
info "Fetching RPM driverdisks from $dd directory"
|
|
|
|
# Following variables are set by nfs_to_var:
|
|
# shellcheck disable=SC2168 # dracut sources hooks instead of running them
|
|
local nfs="" server="" path="" options="" mntdir=""
|
|
nfs_to_var "$dd"
|
|
|
|
# Obtain mount directory and mount it
|
|
# (new unique name is generated if not already mounted)
|
|
mntdir=$(nfs_already_mounted "$server" "$path")
|
|
if [ -z "$mntdir" ]; then
|
|
mntdir="$(mkuniqdir /run nfs_mnt)"
|
|
mount_nfs "$nfs:$server:$path$(options:+:"$options")" "$mntdir"
|
|
fi
|
|
|
|
# Get and process all rpm files in the mounted directory
|
|
for rpm_file in "$mntdir"/*.rpm; do
|
|
# If no file is found bash still loops once
|
|
# Hence to prevent this:
|
|
if [[ ! -e "$rpm_file" ]]; then
|
|
warn "No RPM driverdisks found in $dd."
|
|
continue
|
|
fi
|
|
driver-updates --net "$dd" "$rpm_file"
|
|
done
|
|
echo "$dd" >> /tmp/dd_net.done # mark it done so we don't fetch it again
|
|
else
|
|
warn "Failed to fetch drivers from $dd. Processing of directories supported only by NFS."
|
|
fi
|
|
fi
|
|
done
|