This commit is contained in:
Ing 2023-11-12 17:03:51 +08:00
parent 3971f9609f
commit 1a792b7ea6
8 changed files with 1751 additions and 1512 deletions

View File

@ -160,17 +160,17 @@ if [ "${DIRECT}" = "true" ]; then
reboot reboot
exit 0 exit 0
else else
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list ETHX=$(ls /sys/class/net/ | grep -v lo)
echo "$(printf "$(TEXT "Detected %s network cards.")" "${#ETHX[@]}")" echo "$(printf "$(TEXT "Detected %s network cards.")" "$(echo ${ETHX} | wc -w)")"
echo "$(TEXT "Checking Connect.")" echo "$(TEXT "Checking Connect.")"
COUNT=0 COUNT=0
BOOTIPWAIT="$(readConfigKey "bootipwait" "${USER_CONFIG_FILE}")" BOOTIPWAIT="$(readConfigKey "bootipwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTIPWAIT}" ] && BOOTIPWAIT=10 [ -z "${BOOTIPWAIT}" ] && BOOTIPWAIT=10
while [ ${COUNT} -lt $((${BOOTIPWAIT} + 32)) ]; do while [ ${COUNT} -lt $((${BOOTIPWAIT} + 32)) ]; do
hasConnect="false" hasConnect="false"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do for N in ${ETHX}; do
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'yes'; then if ethtool ${N} | grep 'Link detected' | grep -q 'yes'; then
echo -en "${ETHX[${N}]} " echo -en "${N} "
hasConnect="true" hasConnect="true"
fi fi
done done
@ -183,27 +183,27 @@ else
sleep 1 sleep 1
done done
echo "$(TEXT "Waiting IP.(For reference only)")" echo "$(TEXT "Waiting IP.(For reference only)")"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do for N in ${ETHX}; do
COUNT=0 COUNT=0
DRIVER=$(ls -ld /sys/class/net/${ETHX[${N}]}/device/driver 2>/dev/null | awk -F '/' '{print $NF}') DRIVER=$(ls -ld /sys/class/net/${N}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
echo -en "${ETHX[${N}]}(${DRIVER}): " echo -en "${N}(${DRIVER}): "
while true; do while true; do
if ! ip link show ${ETHX[${N}]} | grep -q 'UP'; then if ! ip link show ${N} | grep -q 'UP'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "DOWN")\n" echo -en "\r${N}(${DRIVER}): $(TEXT "DOWN")\n"
break break
fi fi
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'no'; then if ethtool ${N} | grep 'Link detected' | grep -q 'no'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "NOT CONNECTED")\n" echo -en "\r${N}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
break break
fi fi
if [ ${COUNT} -eq ${BOOTIPWAIT} ]; then # Under normal circumstances, no errors should occur here. if [ ${COUNT} -eq ${BOOTIPWAIT} ]; then # Under normal circumstances, no errors should occur here.
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "TIMEOUT (Please check the IP on the router.)")\n" echo -en "\r${N}(${DRIVER}): $(TEXT "TIMEOUT (Please check the IP on the router.)")\n"
break break
fi fi
COUNT=$((${COUNT} + 1)) COUNT=$((${COUNT} + 1))
IP="$(getIP ${ETHX[${N}]})" IP="$(getIP ${N})"
if [ -n "${IP}" ]; then if [ -n "${IP}" ]; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:5000\033[0m to connect the DSM via web.")" "${IP}")\n" echo -en "\r${N}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:5000\033[0m to connect the DSM via web.")" "${IP}")\n"
break break
fi fi
echo -n "." echo -n "."

View File

@ -1,4 +1,3 @@
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)" [ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
. ${WORK_PATH}/include/consts.sh . ${WORK_PATH}/include/consts.sh
@ -346,3 +345,21 @@ function rebootTo() {
grub-editenv ${ENVFILE} set next_entry="${1}" grub-editenv ${ENVFILE} set next_entry="${1}"
reboot reboot
} }
###############################################################################
# connect wlanif
# 1 netif name
function connectwlanif() {
[ ! -d "/sys/class/net/${1}" ] && return 1
CONF=""
[ -z "${CONF}" -a -f "${PART1_PATH}/wpa_supplicant.conf.${1}" ] && CONF="${PART1_PATH}/wpa_supplicant.conf.${1}"
[ -z "${CONF}" -a -f "${PART1_PATH}/wpa_supplicant.conf" ] && CONF="${PART1_PATH}/wpa_supplicant.conf"
[ -z "${CONF}" ] && return 2
if [ -f "/var/run/wpa_supplicant.pid.${1}" ]; then
kill -9 $(cat /var/run/wpa_supplicant.pid.${1})
rm -f /var/run/wpa_supplicant.pid.${1}
fi
wpa_supplicant -i ${1} -c "${CONF}" -B -P "/var/run/wpa_supplicant.pid.${1}" >/dev/null 2>&1
}

View File

@ -18,9 +18,9 @@ printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} "" printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} ""
# Get first MAC address # Get first MAC address
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list ETHX=$(ls /sys/class/net/ | grep -v lo)
# No network devices # No network devices
[ ${#ETHX[@]} -le 0 ] && die "$(TEXT "Network devices not found!")" [ $(echo ${ETHX} | wc -w) -le 0 ] && die "$(TEXT "Network devices not found!")"
# If user config file not exists, initialize it # If user config file not exists, initialize it
if [ ! -f "${USER_CONFIG_FILE}" ]; then if [ ! -f "${USER_CONFIG_FILE}" ]; then
@ -60,7 +60,8 @@ initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
# _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")" # _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
for ETH in ${ETHX[@]}; do for ETH in ${ETHX}; do
[ "${ETH::4}" = "wlan" ] && connectwlanif "${ETH}" && sleep 1
MACR="$(cat /sys/class/net/${ETH}/address | sed 's/://g')" MACR="$(cat /sys/class/net/${ETH}/address | 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
@ -115,14 +116,14 @@ if [ ${BOOT} -eq 1 ]; then
fi fi
# Wait for an IP # Wait for an IP
echo "$(printf "$(TEXT "Detected %s network cards.")" "${#ETHX[@]}")" echo "$(printf "$(TEXT "Detected %s network cards.")" "$(echo ${ETHX} | wc -w)")"
echo "$(TEXT "Checking Connect.")" echo "$(TEXT "Checking Connect.")"
COUNT=0 COUNT=0
while [ ${COUNT} -lt 30 ]; do while [ ${COUNT} -lt 30 ]; do
hasConnect="false" hasConnect="false"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do for N in ${ETHX}; do
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'yes'; then if ethtool ${N} | grep 'Link detected' | grep -q 'yes'; then
echo -en "${ETHX[${N}]} " echo -en "${N} "
hasConnect="true" hasConnect="true"
fi fi
done done
@ -135,27 +136,27 @@ while [ ${COUNT} -lt 30 ]; do
sleep 1 sleep 1
done done
echo "$(TEXT "Waiting IP.")" echo "$(TEXT "Waiting IP.")"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do for N in ${ETHX}; do
COUNT=0 COUNT=0
DRIVER=$(ls -ld /sys/class/net/${ETHX[${N}]}/device/driver 2>/dev/null | awk -F '/' '{print $NF}') DRIVER=$(ls -ld /sys/class/net/${N}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
echo -en "${ETHX[${N}]}(${DRIVER}): " echo -en "${N}(${DRIVER}): "
while true; do while true; do
if ! ip link show ${ETHX[${N}]} | grep -q 'UP'; then if ! ip link show ${N} | grep -q 'UP'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "DOWN")\n" echo -en "\r${N}(${DRIVER}): $(TEXT "DOWN")\n"
break break
fi fi
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'no'; then if ethtool ${N} | grep 'Link detected' | grep -q 'no'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "NOT CONNECTED")\n" echo -en "\r${N}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
break break
fi fi
if [ ${COUNT} -eq 15 ]; then if [ ${COUNT} -eq 15 ]; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "TIMEOUT (Please check the IP on the router.)")\n" echo -en "\r${N}(${DRIVER}): $(TEXT "TIMEOUT (Please check the IP on the router.)")\n"
break break
fi fi
COUNT=$((${COUNT} + 1)) COUNT=$((${COUNT} + 1))
IP="$(getIP ${ETHX[${N}]})" IP="$(getIP ${N})"
if [ -n "${IP}" ]; then if [ -n "${IP}" ]; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:7681\033[0m to configure the loader via web terminal.")" "${IP}")\n" echo -en "\r${N}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:7681\033[0m to configure the loader via web terminal.")" "${IP}")\n"
break break
fi fi
echo -n "." echo -n "."

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1018,7 +1018,7 @@ function make() {
--progressbox "$(TEXT "Making ...")" 20 100 --progressbox "$(TEXT "Making ...")" 20 100
if [ -f "${MKERR_FILE}" ]; then if [ -f "${MKERR_FILE}" ]; then
DIALOG --title "$(TEXT "Error")" \ DIALOG --title "$(TEXT "Error")" \
--msgbox "$(cat ${MKERR_FILE})" 0 0 --msgbox "$(cat ${MKERR_FILE})" 0 0
return 1 return 1
else else
return 0 return 0
@ -1045,6 +1045,7 @@ function advancedMenu() {
echo "n \"$(TEXT "Reboot on kernel panic:") \Z4${KERNELPANIC}\Zn\"" >>"${TMP_PATH}/menu" echo "n \"$(TEXT "Reboot on kernel panic:") \Z4${KERNELPANIC}\Zn\"" >>"${TMP_PATH}/menu"
fi fi
echo "m \"$(TEXT "Set static IP")\"" >>"${TMP_PATH}/menu" echo "m \"$(TEXT "Set static IP")\"" >>"${TMP_PATH}/menu"
echo "y \"$(TEXT "Set wireless account")\"" >>"${TMP_PATH}/menu"
echo "u \"$(TEXT "Edit user config file manually")\"" >>"${TMP_PATH}/menu" echo "u \"$(TEXT "Edit user config file manually")\"" >>"${TMP_PATH}/menu"
echo "h \"$(TEXT "Edit grub.cfg file manually")\"" >>"${TMP_PATH}/menu" echo "h \"$(TEXT "Edit grub.cfg file manually")\"" >>"${TMP_PATH}/menu"
echo "t \"$(TEXT "Try to recovery a DSM installed system")\"" >>"${TMP_PATH}/menu" echo "t \"$(TEXT "Try to recovery a DSM installed system")\"" >>"${TMP_PATH}/menu"
@ -1138,8 +1139,8 @@ function advancedMenu() {
MSG="$(TEXT "Temporary IP: (UI will not refresh)")" MSG="$(TEXT "Temporary IP: (UI will not refresh)")"
ITEMS="" ITEMS=""
IDX=0 IDX=0
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list ETHX=$(ls /sys/class/net/ | 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} -gt 7 ] && break # Currently, only up to 8 are supported. (<==> boot.sh L96, <==> lkm: MAX_NET_IFACES)
IDX=$((${IDX} + 1)) IDX=$((${IDX} + 1))
MACR="$(cat /sys/class/net/${ETH}/address | sed 's/://g')" MACR="$(cat /sys/class/net/${ETH}/address | sed 's/://g')"
@ -1153,7 +1154,7 @@ function advancedMenu() {
[ $? -ne 0 ] && continue [ $? -ne 0 ] && continue
( (
IDX=1 IDX=1
for ETH in ${ETHX[@]}; do for ETH in ${ETHX}; do
MACR="$(cat /sys/class/net/${ETH}/address | sed 's/://g')" MACR="$(cat /sys/class/net/${ETH}/address | sed 's/://g')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
IPC="$(cat "${TMP_PATH}/resp" | sed -n "${IDX}p")" IPC="$(cat "${TMP_PATH}/resp" | sed -n "${IDX}p")"
@ -1175,6 +1176,63 @@ function advancedMenu() {
--progressbox "$(TEXT "Setting IP ...")" 20 100 --progressbox "$(TEXT "Setting IP ...")" 20 100
NEXT="e" NEXT="e"
;; ;;
y)
DIALOG --title "$(TEXT "Advanced")" \
--infobox "$(TEXT "Scanning ...")" 0 0
ITEM=$(iw wlan0 scan | grep SSID: | awk '{print $2}')
MSG=""
MSG+="$(TEXT "Scanned SSIDs:\n")"
for I in $(iw wlan0 scan | grep SSID: | awk '{print $2}'); do MSG+="${I}\n"; done
LINENUM=$(($(echo -e "${MSG}" | wc -l) + 8))
while true; do
SSID=$(cat ${PART1_PATH}/wpa_supplicant.conf 2>/dev/null | grep -i SSID | cut -d'=' -f2)
PSK=$(cat ${PART1_PATH}/wpa_supplicant.conf 2>/dev/null | grep -i PSK | cut -d'=' -f2)
SSID="${SSID//\"/}"
PSK="${PSK//\"/}"
DIALOG --title "$(TEXT "Advanced")" \
--form "${MSG}" ${LINENUM:-16} 62 2 "SSID" 1 1 "${SSID}" 1 7 50 0 " PSK" 2 1 "${PSK}" 2 7 50 0 \
2>"${TMP_PATH}/resp"
RET=$?
case ${RET} in
0) # ok-button
SSID="$(cat "${TMP_PATH}/resp" | sed -n '1p')"
PSK="$(cat "${TMP_PATH}/resp" | sed -n '2p')"
if [ -z "${SSID}" -o -z "${PSK}" ]; then
DIALOG --title "$(TEXT "Advanced")" \
--yesno "$(TEXT "Invalid SSID/PSK, retry?")" 0 0
[ $? -eq 0 ] && break
fi
(
rm -f ${PART1_PATH}/wpa_supplicant.conf
echo "ctrl_interface=/var/run/wpa_supplicant" >>${PART1_PATH}/wpa_supplicant.conf
echo "update_config=1" >>${PART1_PATH}/wpa_supplicant.conf
echo "network={" >>${PART1_PATH}/wpa_supplicant.conf
echo " ssid=\"${SSID}\"" >>${PART1_PATH}/wpa_supplicant.conf
echo " psk=\"${PSK}\"" >>${PART1_PATH}/wpa_supplicant.conf
echo "}" >>${PART1_PATH}/wpa_supplicant.conf
for ETH in $(ls /sys/class/net/ | grep wlan); do
connectwlanif "${ETH}" && sleep 1
MACR="$(cat /sys/class/net/${ETH}/address | sed 's/://g')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
if [ -n "${IPR}" ]; then
ip addr add ${IPC}/24 dev ${ETH}
sleep 1
fi
done
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Setting ...")" 20 100
break
;;
1) # cancel-button
break
;;
255) # ESC
break
;;
esac
done
;;
u) u)
editUserConfig editUserConfig
NEXT="e" NEXT="e"
@ -1334,7 +1392,7 @@ function advancedMenu() {
return return
fi fi
DIALOG --title "$(TEXT "Advanced")" \ DIALOG --title "$(TEXT "Advanced")" \
--no-items --menu "$(TEXT "Choose a user name")" 0 0 0 --file "${TMP_PATH}/menu" \ --no-items --menu "$(TEXT "Choose a user name")" 0 0 0 --file "${TMP_PATH}/menu" \
2>${TMP_PATH}/resp 2>${TMP_PATH}/resp
[ $? -ne 0 ] && return [ $? -ne 0 ] && return
USER="$(cat "${TMP_PATH}/resp" | awk '{print $1}')" USER="$(cat "${TMP_PATH}/resp" | awk '{print $1}')"