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
exit 0
else
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list
echo "$(printf "$(TEXT "Detected %s network cards.")" "${#ETHX[@]}")"
ETHX=$(ls /sys/class/net/ | grep -v lo)
echo "$(printf "$(TEXT "Detected %s network cards.")" "$(echo ${ETHX} | wc -w)")"
echo "$(TEXT "Checking Connect.")"
COUNT=0
BOOTIPWAIT="$(readConfigKey "bootipwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTIPWAIT}" ] && BOOTIPWAIT=10
while [ ${COUNT} -lt $((${BOOTIPWAIT} + 32)) ]; do
hasConnect="false"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'yes'; then
echo -en "${ETHX[${N}]} "
for N in ${ETHX}; do
if ethtool ${N} | grep 'Link detected' | grep -q 'yes'; then
echo -en "${N} "
hasConnect="true"
fi
done
@ -183,27 +183,27 @@ else
sleep 1
done
echo "$(TEXT "Waiting IP.(For reference only)")"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
for N in ${ETHX}; do
COUNT=0
DRIVER=$(ls -ld /sys/class/net/${ETHX[${N}]}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
echo -en "${ETHX[${N}]}(${DRIVER}): "
DRIVER=$(ls -ld /sys/class/net/${N}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
echo -en "${N}(${DRIVER}): "
while true; do
if ! ip link show ${ETHX[${N}]} | grep -q 'UP'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "DOWN")\n"
if ! ip link show ${N} | grep -q 'UP'; then
echo -en "\r${N}(${DRIVER}): $(TEXT "DOWN")\n"
break
fi
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'no'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
if ethtool ${N} | grep 'Link detected' | grep -q 'no'; then
echo -en "\r${N}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
break
fi
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
fi
COUNT=$((${COUNT} + 1))
IP="$(getIP ${ETHX[${N}]})"
IP="$(getIP ${N})"
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
fi
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)"
. ${WORK_PATH}/include/consts.sh
@ -346,3 +345,21 @@ function rebootTo() {
grub-editenv ${ENVFILE} set next_entry="${1}"
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} ""
# 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
[ ${#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 [ ! -f "${USER_CONFIG_FILE}" ]; then
@ -60,7 +60,8 @@ initConfigKey "modules" "{}" "${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')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
if [ -n "${IPR}" ]; then
@ -115,14 +116,14 @@ if [ ${BOOT} -eq 1 ]; then
fi
# 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.")"
COUNT=0
while [ ${COUNT} -lt 30 ]; do
hasConnect="false"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'yes'; then
echo -en "${ETHX[${N}]} "
for N in ${ETHX}; do
if ethtool ${N} | grep 'Link detected' | grep -q 'yes'; then
echo -en "${N} "
hasConnect="true"
fi
done
@ -135,27 +136,27 @@ while [ ${COUNT} -lt 30 ]; do
sleep 1
done
echo "$(TEXT "Waiting IP.")"
for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
for N in ${ETHX}; do
COUNT=0
DRIVER=$(ls -ld /sys/class/net/${ETHX[${N}]}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
echo -en "${ETHX[${N}]}(${DRIVER}): "
DRIVER=$(ls -ld /sys/class/net/${N}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
echo -en "${N}(${DRIVER}): "
while true; do
if ! ip link show ${ETHX[${N}]} | grep -q 'UP'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "DOWN")\n"
if ! ip link show ${N} | grep -q 'UP'; then
echo -en "\r${N}(${DRIVER}): $(TEXT "DOWN")\n"
break
fi
if ethtool ${ETHX[${N}]} | grep 'Link detected' | grep -q 'no'; then
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
if ethtool ${N} | grep 'Link detected' | grep -q 'no'; then
echo -en "\r${N}(${DRIVER}): $(TEXT "NOT CONNECTED")\n"
break
fi
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
fi
COUNT=$((${COUNT} + 1))
IP="$(getIP ${ETHX[${N}]})"
IP="$(getIP ${N})"
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
fi
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
if [ -f "${MKERR_FILE}" ]; then
DIALOG --title "$(TEXT "Error")" \
--msgbox "$(cat ${MKERR_FILE})" 0 0
--msgbox "$(cat ${MKERR_FILE})" 0 0
return 1
else
return 0
@ -1045,6 +1045,7 @@ function advancedMenu() {
echo "n \"$(TEXT "Reboot on kernel panic:") \Z4${KERNELPANIC}\Zn\"" >>"${TMP_PATH}/menu"
fi
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 "h \"$(TEXT "Edit grub.cfg file manually")\"" >>"${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)")"
ITEMS=""
IDX=0
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list
for ETH in ${ETHX[@]}; do
ETHX=$(ls /sys/class/net/ | 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 | sed 's/://g')"
@ -1153,7 +1154,7 @@ function advancedMenu() {
[ $? -ne 0 ] && continue
(
IDX=1
for ETH in ${ETHX[@]}; do
for ETH in ${ETHX}; do
MACR="$(cat /sys/class/net/${ETH}/address | sed 's/://g')"
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
IPC="$(cat "${TMP_PATH}/resp" | sed -n "${IDX}p")"
@ -1175,6 +1176,63 @@ function advancedMenu() {
--progressbox "$(TEXT "Setting IP ...")" 20 100
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)
editUserConfig
NEXT="e"
@ -1334,7 +1392,7 @@ function advancedMenu() {
return
fi
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
[ $? -ne 0 ] && return
USER="$(cat "${TMP_PATH}/resp" | awk '{print $1}')"