fix setStaticIP

This commit is contained in:
Ing 2024-06-24 04:40:56 +08:00
parent 8feb56926e
commit ed002e1866
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" CMDLINE["SASmodel"]="1"
fi 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 while IFS=': ' read KEY VALUE; do
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}" [ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
done <<<$(readConfigMap "cmdline" "${USER_CONFIG_FILE}") 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')" MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
if [ -n "${IPR}" ]; then 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 sleep 1
fi fi
[ "${ETH::3}" = "eth" ] && ethtool -s ${ETH} wol g 2>/dev/null || true [ "${ETH::3}" = "eth" ] && ethtool -s ${ETH} wol g 2>/dev/null || true

View File

@ -1488,46 +1488,53 @@ function editGrubCfg() {
############################################################################### ###############################################################################
# Set static IP # Set static IP
function setStaticIP() { function setStaticIP() {
MSG="$(TEXT "Temporary IP: (UI will not refresh)")"
ITEMS=""
IDX=0
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep -v lo) ETHX=$(ls /sys/class/net/ 2>/dev/null | grep -v lo)
for ETH in ${ETHX}; do 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')" MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
ITEMS+="${ETH}(${MACR}) ${IDX} 1 ${IPR:-\"\"} ${IDX} 22 36 16 " IFS='/' read -r -a IPRA <<<"$IPR"
done
echo ${ITEMS} >"${TMP_PATH}/opts" MSG="$(TEXT "Set to ${ETH}(${MACR}): (Delete if empty)")"
while true; do
DIALOG --title "$(TEXT "Advanced")" \ DIALOG --title "$(TEXT "Advanced")" \
--form "${MSG}" 10 60 ${IDX} --file "${TMP_PATH}/opts" \ --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" 2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && return RET=$?
( case ${RET} in
IDX=1 0) # ok-button
for ETH in ${ETHX}; do DIALOG --title "$(TEXT "Advanced")" \
MACR="$(cat /sys/class/net/${ETH}/address 2>/dev/null | sed 's/://g')" --infobox "$(TEXT "Setting IP ...")" 0 0
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" address="$(cat "${TMP_PATH}/resp" | sed -n '1p')"
IPC="$(cat "${TMP_PATH}/resp" | sed -n "${IDX}p")" netmask="$(cat "${TMP_PATH}/resp" | sed -n '2p')"
if [ -n "${IPC}" -a "${IPR}" != "${IPC}" ]; then gateway="$(cat "${TMP_PATH}/resp" | sed -n '3p')"
if ! echo "${IPC}" | grep -q "/"; then dnsname="$(cat "${TMP_PATH}/resp" | sed -n '4p')"
IPC="${IPC}/24" if [ -z "${address}" ]; then
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}" 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 fi
IDX=$((${IDX} + 1)) if [ -n "${dnsname:-${gateway}}" ]; then
done 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 sleep 1
IP="$(getIP)" fi
[[ "${IP}" =~ ^169\.254\..* ]] && IP="" touch ${PART1_PATH}/.build
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \ break
--progressbox "$(TEXT "Setting IP ...")" 20 100 ;;
return 1) # cancel-button
break
;;
255) # ESC
break 2
;;
esac
done
done
} }
############################################################################### ###############################################################################
@ -3506,7 +3513,7 @@ else
echo "x \"$(TEXT "Reboot to RR")\"" >>"${TMP_PATH}/menu" echo "x \"$(TEXT "Reboot to RR")\"" >>"${TMP_PATH}/menu"
echo "y \"$(TEXT "Reboot to Recovery")\"" >>"${TMP_PATH}/menu" echo "y \"$(TEXT "Reboot to Recovery")\"" >>"${TMP_PATH}/menu"
echo "z \"$(TEXT "Reboot to Junior")\"" >>"${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" echo "b \"$(TEXT "Reboot to BIOS")\"" >>"${TMP_PATH}/menu"
fi fi
echo "s \"$(TEXT "Back to shell")\"" >>"${TMP_PATH}/menu" echo "s \"$(TEXT "Back to shell")\"" >>"${TMP_PATH}/menu"