agama/live/live-root/usr/lib/dracut/modules.d/99live-self-update/live-self-update-parser.sh
2026-07-28 14:02:25 +01:00

87 lines
2.8 KiB
Bash
Executable file

#!/bin/bash
# redirect stdout/stderr to systemd journal using the "live-self-update"
# identifier, later the self-update logs can be filtered by using command
# "journalctl -t live-self-update" which includes the output from this dracut
# hook and the self-update service as well
exec > >(systemd-cat -t live-self-update) 2>&1
. /lib/dracut-lib.sh
# generate Dracut command line options
FILE="/etc/cmdline.d/live-self-update-generated.conf"
# source the shared self-update configuration variables
. ./lib/live-self-update/conf.sh
mkdir -p "$RUN_DIR"
configure_network() {
# skip the network configuration if "rd.neednet=0" option was used by user
if getargbool 1 rd.neednet; then
echo "<5>Enabling network configuration"
echo "rd.neednet=1" > "$FILE"
# use DHCP if there is no network configuration provided by user
# (the HCN module writes "ip=hcn" when it configures the network itself)
if ! getarg "ip=" >/dev/null; then
echo "Using default DHCP network configuration"
echo "ip=dhcp" >> "$FILE"
fi
else
echo "<5>Network configuration disabled by the rd.neednet=0 boot parameter"
fi
}
# skip self-update, either it was explicitly disabled by user or is not
# configured in the product (like openSUSE)
skip() {
echo "<5>$1"
# create a skip file
true > "$SKIP_FILE"
}
# evaluate the registration server (SCC or RMT)
get_reg_server() {
local url
url=$(getargs "inst.register_url=")
if [ -n "$url" ]; then
echo "<5>Will use a custom registration server $url for obtaining the self-update repository"
echo "$url" > "$SERVER_FILE"
configure_network
elif [ -s "$CONFIG_DEFAULT_REG_SERVER_FILE" ]; then
echo "<5>Will use the default registration server $(cat "$CONFIG_DEFAULT_REG_SERVER_FILE") for obtaining the self-update repository"
configure_network
elif [ -s "$CONFIG_FALLBACK_FILE" ]; then
echo "<5>Will use the fallback self-update URL $(cat "$CONFIG_FALLBACK_FILE")"
configure_network
else
skip "Self update not configured"
fi
}
# evaluate the self-update URL:
# 1. explicitly set with the "inst.self_update" boot option
# 2. SCC or RMT server is configured (it will be asked later)
# 3. fallback URL if present
# 4. if no URL is set self-update is skipped
get_url() {
local url
url=$(getargs "inst.self_update=")
if [ "$url" == "0" ]; then
skip "Self update disabled via boot parameter"
elif [ -z "$url" ]; then
get_reg_server
else
echo "<5>Using custom self update repository: $url"
echo "$url" > "$REPO_FILE"
# automatically configure network when a remote self-update repository is used,
# match all remote protocols supported by zypper (see "man zypper"),
if grep -q -s -E -e "https?://" -e "ftp://" -e "smb://" -e "cifs://" -e "nfs4?://" -e "obs://" "$REPO_FILE"; then
configure_network
fi
fi
}
get_url