agama/live/live-root/usr/lib/dracut/modules.d/98dracut-menu/dracut-cmdline-menu.sh
2026-06-02 13:38:21 +02:00

145 lines
2.7 KiB
Bash
Executable file

#!/bin/bash
if [ -d /sysroot ] ; then
type getarg > /dev/null 2>&1 || . /lib/dracut-lib.sh
getarg "rd.cmdline=menu" || exit 0
fi
# -----------------------------------------------------------------------------
# usage example:
#
# title="Foo menu"
# items=("Foo A" "Foo B" "Foo C")
#
# dia_menu title items selected_item
#
# echo "selected_item=$selected_item"
#
dia_menu () {
local -n x_title=$1
local -n x_list=$2
local -n x_item=$3
local tmp i ind ok
until [[ "$ok" ]] ; do
echo -e "\n$x_title\n"
echo "0) <-- Back <--"
ind=1
for i in "${x_list[@]}" ; do
echo "$ind) $i"
ind=$((ind + 1))
done
echo
read -e -r -p "> " x_item tmp
[[ ( -z "$x_item" || "$x_item" = $((x_item)) ) && "$x_item" -lt $ind ]] && ok=1
done
x_item=$((x_item))
return 0
}
# usage example
#
# title="Foo input"
# value="foo bar"
# dia_input title value
# aborted=$?
#
# if [ $aborted = 1 ] ; then
# echo aborted
# else
# echo -e "input=\"$value\""
# fi
#
dia_input () {
local -n x_title=$1
local -n x_value=$2
local tmp="$x_value"
echo -e "\n${x_title}. (Enter '+++' to abort.)\n"
read -e -r -p "[$tmp]> " -i "$tmp" tmp
if [[ "$tmp" = "${tmp%+++}+++" ]] ; then
return 1
else
x_value="$tmp"
fi
return 0
}
# -----------------------------------------------------------------------------
echo
echo "== Additional parameters =="
live_root=$(getarg "root=")
live_root_disk=$(getarg "root_disk=")
live_root_net=$(getarg "root_net=")
live_proxy=$(getarg "proxy=")
live_root_disk=${live_root_disk:-$live_root}
live_root=${live_root#live:}
live_root_disk=${live_root_disk#live:}
live_root_net=${live_root_net#live:}
aborted=1
while [ "$aborted" != 0 ] ; do
echo -n > /etc/cmdline.d/98-cmdline-menu.conf
title="Live image location"
items=("Disk / DVD" "Network")
dia_menu title items selected_item
aborted=$?
[[ $aborted != 0 ]] && continue
case $selected_item in
1) live_root="$live_root_disk" ;;
2) live_root="$live_root_net" ;;
esac
if [[ "$selected_item" = 2 ]] ; then
title="Live image location (e.g. http://example.com/live.iso)"
dia_input title live_root
aborted=$?
[[ $aborted != 0 ]] && continue
live_root_net="$live_root"
title="Proxy Settings (e.g. http://proxy.example.com)"
dia_input title live_proxy
aborted=$?
[[ $aborted != 0 ]] && continue
fi
echo "root=live:$live_root" >> /etc/cmdline.d/98-cmdline-menu.conf
echo "proxy=$live_proxy" >> /etc/cmdline.d/98-cmdline-menu.conf
echo
echo "== Updated settings =="
echo
cat /etc/cmdline.d/98-cmdline-menu.conf
title="Settings ok?"
items=("Yes" "No")
dia_menu title items selected_item
[[ $selected_item = 1 ]] && break
aborted=1
done