fix setStaticIP

This commit is contained in:
Ing 2024-06-24 04:40:56 +08:00
parent 907c85edaa
commit 51c23a2c65
3 changed files with 56 additions and 36 deletions

View File

@ -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}")

View File

@ -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

View File

@ -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"