From 51c23a2c65f5488b3f90de29dc752dec9c3c5013 Mon Sep 17 00:00:00 2001 From: Ing Date: Mon, 24 Jun 2024 04:40:56 +0800 Subject: [PATCH] fix setStaticIP --- files/initrd/opt/rr/boot.sh | 4 ++ files/initrd/opt/rr/init.sh | 11 +++++- files/initrd/opt/rr/menu.sh | 77 ++++++++++++++++++++----------------- 3 files changed, 56 insertions(+), 36 deletions(-) diff --git a/files/initrd/opt/rr/boot.sh b/files/initrd/opt/rr/boot.sh index abcbaf54..ad537736 100755 --- a/files/initrd/opt/rr/boot.sh +++ b/files/initrd/opt/rr/boot.sh @@ -169,6 +169,10 @@ if echo "purley broadwellnkv2" | grep -wq "${PLATFORM}"; then CMDLINE["SASmodel"]="1" fi +while IFS=': ' read KEY VALUE; do + [ -n "${KEY}" ] && CMDLINE["network.${KEY}"]="${VALUE}" +done <<<$(readConfigMap "network" "${USER_CONFIG_FILE}") + while IFS=': ' read KEY VALUE; do [ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}" done <<<$(readConfigMap "cmdline" "${USER_CONFIG_FILE}") diff --git a/files/initrd/opt/rr/init.sh b/files/initrd/opt/rr/init.sh index 19bebc1e..6c6f5ee6 100755 --- a/files/initrd/opt/rr/init.sh +++ b/files/initrd/opt/rr/init.sh @@ -85,7 +85,16 @@ if [ ! "LOCALBUILD" = "${LOADER_DISK}" ]; then MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')" IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" if [ -n "${IPR}" ]; then - ip addr add ${IPC}/24 dev ${ETH} + IFS='/' read -r -a IPRA <<<"$IPR" + ip addr flush dev $ETH + ip addr add ${IPRA[0]}/${IPRA[1]:-"255.255.255.0"} dev $ETH + if [ -n "${IPRA[2]}" ]; then + ip route add default via ${IPRA[2]} dev $ETH + fi + if [ -n "${IPRA[3]:-${IPRA[2]}}" ]; then + sed -i "/nameserver ${IPRA[3]:-${IPRA[2]}}/d" /etc/resolv.conf + echo "nameserver ${IPRA[3]:-${IPRA[2]}}" >>/etc/resolv.conf + fi sleep 1 fi [ "${ETH::3}" = "eth" ] && ethtool -s ${ETH} wol g 2>/dev/null || true diff --git a/files/initrd/opt/rr/menu.sh b/files/initrd/opt/rr/menu.sh index a48959a2..fd6a7be7 100755 --- a/files/initrd/opt/rr/menu.sh +++ b/files/initrd/opt/rr/menu.sh @@ -1488,46 +1488,53 @@ function editGrubCfg() { ############################################################################### # Set static IP function setStaticIP() { - MSG="$(TEXT "Temporary IP: (UI will not refresh)")" - ITEMS="" - IDX=0 ETHX=$(ls /sys/class/net/ 2>/dev/null | grep -v lo) for ETH in ${ETHX}; do - [ ${IDX} -gt 7 ] && break # Currently, only up to 8 are supported. (<==> boot.sh L96, <==> lkm: MAX_NET_IFACES) - IDX=$((${IDX} + 1)) MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')" IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" - ITEMS+="${ETH}(${MACR}) ${IDX} 1 ${IPR:-\"\"} ${IDX} 22 36 16 " - done - echo ${ITEMS} >"${TMP_PATH}/opts" - DIALOG --title "$(TEXT "Advanced")" \ - --form "${MSG}" 10 60 ${IDX} --file "${TMP_PATH}/opts" \ - 2>"${TMP_PATH}/resp" - [ $? -ne 0 ] && return - ( - IDX=1 - for ETH in ${ETHX}; do - MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')" - IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" - IPC="$(cat "${TMP_PATH}/resp" | sed -n "${IDX}p")" - if [ -n "${IPC}" -a "${IPR}" != "${IPC}" ]; then - if ! echo "${IPC}" | grep -q "/"; then - IPC="${IPC}/24" + IFS='/' read -r -a IPRA <<<"$IPR" + + MSG="$(TEXT "Set to ${ETH}(${MACR}): (Delete if empty)")" + while true; do + DIALOG --title "$(TEXT "Advanced")" \ + --form "${MSG}" 10 60 4 "address" 1 1 "${IPRA[0]}" 1 9 36 16 "netmask" 2 1 "${IPRA[1]}" 2 9 36 16 "gateway" 3 1 "${IPRA[2]}" 3 9 36 16 "dns" 4 1 "${IPRA[3]}" 4 9 36 16 \ + 2>"${TMP_PATH}/resp" + RET=$? + case ${RET} in + 0) # ok-button + DIALOG --title "$(TEXT "Advanced")" \ + --infobox "$(TEXT "Setting IP ...")" 0 0 + address="$(cat "${TMP_PATH}/resp" | sed -n '1p')" + netmask="$(cat "${TMP_PATH}/resp" | sed -n '2p')" + gateway="$(cat "${TMP_PATH}/resp" | sed -n '3p')" + dnsname="$(cat "${TMP_PATH}/resp" | sed -n '4p')" + if [ -z "${address}" ]; then + deleteConfigKey "network.${MACR}" "${USER_CONFIG_FILE}" + else + ip addr flush dev $ETH + ip addr add ${address}/${netmask:-"255.255.255.0"} dev $ETH + if [ -n "${gateway}" ]; then + ip route add default via ${gateway} dev $ETH + fi + if [ -n "${dnsname:-${gateway}}" ]; then + sed -i "/nameserver ${dnsname:-${gateway}}/d" /etc/resolv.conf + echo "nameserver ${dnsname:-${gateway}}" >>/etc/resolv.conf + fi + writeConfigKey "network.${MACR}" "${address}/${netmask}/${gateway}/${dnsname}" "${USER_CONFIG_FILE}" + sleep 1 fi - ip addr add ${IPC} dev ${ETH} - writeConfigKey "network.${MACR}" "${IPC}" "${USER_CONFIG_FILE}" - sleep 1 - elif [ -z "${IPC}" ]; then - deleteConfigKey "network.${MACR}" "${USER_CONFIG_FILE}" - fi - IDX=$((${IDX} + 1)) + touch ${PART1_PATH}/.build + break + ;; + 1) # cancel-button + break + ;; + 255) # ESC + break 2 + ;; + esac done - sleep 1 - IP="$(getIP)" - [[ "${IP}" =~ ^169\.254\..* ]] && IP="" - ) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \ - --progressbox "$(TEXT "Setting IP ...")" 20 100 - return + done } ############################################################################### @@ -3506,7 +3513,7 @@ else echo "x \"$(TEXT "Reboot to RR")\"" >>"${TMP_PATH}/menu" echo "y \"$(TEXT "Reboot to Recovery")\"" >>"${TMP_PATH}/menu" echo "z \"$(TEXT "Reboot to Junior")\"" >>"${TMP_PATH}/menu" - if efibootmgr | grep -q "^Boot0000" ; then + if efibootmgr | grep -q "^Boot0000"; then echo "b \"$(TEXT "Reboot to BIOS")\"" >>"${TMP_PATH}/menu" fi echo "s \"$(TEXT "Back to shell")\"" >>"${TMP_PATH}/menu"