anaconda/anaconda-40.22.3.13/dracut/parse-anaconda-options.sh
2024-11-14 21:39:56 -08:00

141 lines
4.5 KiB
Bash
Executable file

#!/bin/bash
# parse-anaconda-options.sh - parse installer-specific options
. /lib/anaconda-lib.sh
. /lib/url-lib.sh
# create the repodir and isodir that anaconda will look for
mkdir -p "$repodir" "$isodir"
# add some modules
modprobe -q edd
# get some info from .buildstamp
buildstamp=/run/initramfs/.buildstamp
[ -f /.buildstamp ] && buildstamp=/.buildstamp
if [ ! -f $buildstamp ]; then
warn ".buildstamp missing"
else
product=$(config_get Main Product < $buildstamp)
version=$(config_get Main Version < $buildstamp)
# TODO: this is silly. There should be an "Arch" item in there..
uuid=$(config_get Main UUID < $buildstamp)
strstr "$uuid" "." && arch=${uuid##*.}
fi
[ -z "$arch" ] && arch=$(uname -m)
echo Loading "$product" "$version" "$arch" installer...
# set HTTP headers so server(s) will recognize us
set_http_header "X-Anaconda-Architecture" "$arch"
set_http_header "X-Anaconda-System-Release" "$product"
# convenience function to warn the user about old argument names.
warn_renamed_arg() {
local arg=""
arg="$(getarg "$1")" && warn_critical "'$1=$arg'" && \
warn_critical "$1 has been deprecated and will be removed. Please use $2 instead."
}
# check for deprecated arg, warn user, and write new arg to /etc/cmdline
check_depr_arg() {
local arg="" quiet="" newval=""
if [ "$1" == "--quiet" ]; then quiet=1; shift; fi
arg="$(getarg "$1")"
[ "$arg" ] || return 1
# shellcheck disable=SC2059 # yes, $2 *is* the format string
newval=$(printf "$2" "$arg")
[ "$quiet" ] || warn_critical "'$1' is deprecated. Using '$newval' instead."
echo "$newval" >> /etc/cmdline.d/75-anaconda-options.conf
}
check_depr_args() {
local q=""
for i in $(getargs "$1"); do check_depr_arg "$q" "$i" "$2" && q="--quiet"; done
}
check_removed_arg() {
local arg="$1"; shift
if getarg "$arg" > /dev/null; then
warn_critical "'$arg' is deprecated and has been removed."
[ -n "$*" ] && warn_critical "$*"
fi
}
check_removed_no_inst_arg() {
local removed_arg="$1" new_arg="$2"
check_removed_arg "$removed_arg" "All usage of Anaconda boot arguments without 'inst.' prefix \
was removed. Please use $new_arg instead."
}
# ssh
check_removed_no_inst_arg "sshd" "inst.sshd"
# serial was never supposed to be used for anything!
check_removed_arg serial "To change the console use 'console=' instead."
# USB is built-in and can't be disabled anymore. DEAL WITH IT.
check_removed_arg nousb "USB drivers can't be disabled."
# ethtool is gone. Who forces their devices to single-duplex anymore?
check_removed_arg ethtool
# interactive junk in initramfs
# (maybe we'll bring it back someday?)
check_removed_arg askmethod "Use an appropriate 'inst.repo=' argument instead."
check_removed_arg asknetwork "Use an appropriate 'ip=' argument instead."
# lang & keymap
check_removed_no_inst_arg "lang" "inst.lang"
check_removed_no_inst_arg "keymap" "inst.keymap"
# repo
check_depr_arg "method=" "repo=%s"
check_removed_no_inst_arg "repo" "inst.repo"
# stage2
check_removed_no_inst_arg "stage2" "inst.stage2"
# kickstart
check_removed_no_inst_arg "ks" "inst.ks"
check_removed_no_inst_arg "kssendmac" "inst.ks.sendmac"
check_removed_no_inst_arg "kssendsn" "inst.ks.sendsn"
# mpath
check_removed_arg "inst.nompath"
# dmraid & nodmraid
check_removed_arg "inst.dmraid"
check_removed_arg "inst.nodmraid"
# Ignore self-signed SSL certs
check_removed_no_inst_arg "noverifyssl" "inst.noverifyssl"
if getargbool 0 inst.noverifyssl; then
# Tell dracut to use curl --insecure
echo "rd.noverifyssl" >> /etc/cmdline.d/75-anaconda-options.conf
fi
# add proxy= to the dracut so stage1 downloads (stage2,kickstart...) don't ignore inst.proxy
if proxy=$(getarg inst.proxy); then
echo "proxy=$proxy" >> /etc/cmdline.d/75-anaconda-options.conf
fi
# updates
check_removed_no_inst_arg "updates" "inst.updates"
if updates=$(getarg inst.updates); then
if [ -n "$updates" ]; then
export anac_updates=$updates
case $updates in
http*|ftp*|nfs*)
echo "live.updates=$updates" \
>> /etc/cmdline.d/75-anaconda-options.conf ;;
esac
else
warn "'updates' requires a location for the updates disk"
fi
fi
# for rdp bring network up in initramfs so that cmdline configuration is used
check_removed_no_inst_arg "rdp" "inst.rdp"
getargbool 0 inst.rdp && warn "anaconda requiring network for RDP" && set_neednet
# Driver Update Disk
check_removed_no_inst_arg "dd" "inst.dd"
# re-read the commandline args
unset CMDLINE