tree: rewrite

Signed-off-by: AuxXxilium <info@auxxxilium.tech>
This commit is contained in:
AuxXxilium 2024-06-19 17:45:46 +02:00
parent 430a2bd00c
commit f999ad2821
5 changed files with 66 additions and 50 deletions

View File

@ -50,6 +50,7 @@ function addonSelection() {
while read -r ADDON DESC; do
arrayExistItem "${ADDON}" "${!ADDONS[@]}" && ACT="on" || ACT="off"
if [ "${ADDON}" == "cpufreqscaling" ]; then
[ "${ACPISYS}" == "false" ] && continue
[ ! -d "/sys/devices/system/cpu/cpu0/cpufreq" ] && continue
fi
if [ "${ADDON}" == "amepatch" ] && [ "${OFFLINE}" == "true" ]; then
@ -263,6 +264,7 @@ function cmdlineMenu() {
1)
MSG=""
MSG+="Commonly used Parameter:\n"
MSG+=" * \Z4SpectreAll_on=\Zn\n Enable Spectre and Meltdown protection to mitigate the threat of speculative execution vulnerability.\n"
MSG+=" * \Z4disable_mtrr_trim=\Zn\n Disables kernel trim any uncacheable memory out.\n"
MSG+=" * \Z4intel_idle.max_cstate=1\Zn\n Set the maximum C-state depth allowed by the intel_idle driver.\n"
MSG+=" * \Z4pcie_port_pm=off\Zn\n Disable the power management of the PCIe port.\n"
@ -799,7 +801,7 @@ function updateMenu() {
opts=$(cat ${TMP_PATH}/opts)
[ -z "${opts}" ] && return 1
if [ ${opts} -eq 1 ]; then
TAG="$(curl --interface ${ARCNIC} -m 5 -w "%{http_code}" -skL https://api.github.com/repos/AuxXxilium/arc/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')"
TAG="$(curl --interface ${ARCNIC} -m 5 -w "%{http_code}" -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | sort -rV | head -1)"
if [ $? -ne 0 ] || [ ${STATUS} -ne 200 ] || [ -z "${TAG}" ]; then
dialog --backtitle "$(backtitle)" --title "Upgrade Loader" --aspect 18 \
--msgbox "Error checking new Version!" 0 0
@ -1050,6 +1052,7 @@ function sysinfo() {
TEXT+="\n Vendor: \Zb${VENDOR}\Zn"
TEXT+="\n CPU: \Zb${CPU}\Zn"
TEXT+="\n Memory: \Zb$((${RAMTOTAL}))GB\Zn"
TEXT+="\n AES | ACPI: \Zb${AESSYS} | ${ACPISYS}\Zn"
TEXT+="\n Date: \Zb$(date)\Zn"
TEXT+="\n"
TEXT+="\n\Z4> Network: ${NIC} NIC\Zn"
@ -1368,6 +1371,7 @@ function staticIPMenu() {
[ -z "${opts}" ] && return 1
if [ ${opts} -eq 1 ]; then
writeConfigKey "static.${ETH}" "false" "${USER_CONFIG_FILE}"
/etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
elif [ ${opts} -eq 2 ]; then
dialog --backtitle "$(backtitle)" --title "DHCP/StaticIP" \
--inputbox "Type a Static IP\nLike: 192.168.0.2" 0 0 "${IPADDR}" \
@ -1384,21 +1388,14 @@ function staticIPMenu() {
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && return 1
GATEWAY=$(cat "${TMP_PATH}/resp")
dialog --backtitle "$(backtitle)" --title "DHCP/StaticIP" \
--inputbox "Type a Nameserver\nLike: 8.8.8.8" 0 0 "${NAMESERVER}" \
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && return 1
NAMESERVER=$(cat "${TMP_PATH}/resp")
writeConfigKey "ip.${ETH}" "${IPADDR}" "${USER_CONFIG_FILE}"
writeConfigKey "netmask.${ETH}" "${NETMASK}" "${USER_CONFIG_FILE}"
writeConfigKey "gateway.${ETH}" "${GATEWAY}" "${USER_CONFIG_FILE}"
writeConfigKey "nameserver.${ETH}" "${NAMESERVER}" "${USER_CONFIG_FILE}"
writeConfigKey "static.${ETH}" "true" "${USER_CONFIG_FILE}"
#NETMASK=$(convert_netmask "${NETMASK}")
/etc/init.d/S41dhcpcd stop >/dev/null 2>&1 || true
ip addr add ${IPADDR}/${NETMASK} dev ${ETH}
ip route add default via ${GATEWAY} dev ${ETH}
echo "nameserver ${NAMESERVER}" >>/etc/resolv.conf.head
/etc/init.d/S40network restart
IP="${IPADDR}"
fi

View File

@ -25,6 +25,17 @@ if grep -q "^flags.*hypervisor.*" /proc/cpuinfo; then
else
MACHINE=NATIVE
fi
# Check for AES and ACPI Support
if ! grep -q "^flags.*aes.*" /proc/cpuinfo; then
AESSYS="false"
else
AESSYS="true"
fi
if ! grep -q "^flags.*acpi.*" /proc/cpuinfo; then
ACPISYS="false"
else
ACPISYS="true"
fi
# Get Loader Disk Bus
BUS=$(getBus "${LOADER_DISK}")
@ -33,7 +44,10 @@ BUS=$(getBus "${LOADER_DISK}")
CUSTOM="$(readConfigKey "arc.custom" "${USER_CONFIG_FILE}")"
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) # real network cards list
for ETH in ${ETHX}; do
if curl --interface ${ETH} -m 5 -skL https://api.github.com/repos/AuxXxilium/arc/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}' > /dev/null 2>&1; then
# Update Check
NEWTAG=$(curl --interface ${ETH} -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
if [ -n "${NEWTAG}" ]; then
NEWTAG="${ARC_VERSION}"
ARCNIC=${ETH}
break
fi
@ -43,15 +57,16 @@ if [ -n "${ARCNIC}" ]; then
elif [ -z "${ARCNIC}" ] && [ "${CUSTOM}" == "false" ]; then
writeConfigKey "arc.offline" "true" "${USER_CONFIG_FILE}"
cp -f "${PART3_PATH}/configs/offline.json" "${ARC_PATH}/include/offline.json"
ARCNIC="eth99"
dialog --backtitle "$(backtitle)" --title "Online Check" \
--msgbox "No online Connection found.\nSwitch to Offline Mode!" 0 0
--msgbox "Could not connect to Github.\nSwitch to Offline Mode!" 0 0
elif [ -z "${ARCNIC}" ] && [ "${CUSTOM}" == "true" ]; then
dialog --backtitle "$(backtitle)" --title "Online Check" \
--infobox "No online Connection found.\nReboot to try again!" 0 0
--infobox "Could not connect to Github.\nReboot to try again!" 0 0
sleep 5
exec reboot
fi
writeConfigKey "arc.nic" "${ARCNIC:-eth0}" "${USER_CONFIG_FILE}"
writeConfigKey "arc.nic" "${ARCNIC}" "${USER_CONFIG_FILE}"
ARCNIC="$(readConfigKey "arc.nic" "${USER_CONFIG_FILE}")"
# Get DSM Data from Config
@ -97,15 +112,10 @@ LAYOUT="$(readConfigKey "layout" "${USER_CONFIG_FILE}")"
KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")"
if [ "${OFFLINE}" == "false" ]; then
# Update Check
NEWTAG=$(curl --interface ${ARCNIC} -m 5 -skL https://api.github.com/repos/AuxXxilium/arc/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')
if [ -z "${NEWTAG}" ]; then
NEWTAG="${ARC_VERSION}"
fi
# Timezone
GETREGION=$(curl --interface ${ARCNIC} -m 5 -v http://ip-api.com/line?fields=timezone 2>/dev/null | tr -d '\n' | cut -d '/' -f1)
GETTIMEZONE=$(curl --interface ${ARCNIC} -m 5 -v http://ip-api.com/line?fields=timezone 2>/dev/null | tr -d '\n' | cut -d '/' -f2)
GETKEYMAP=$(curl --interface ${ARCNIC} -m 5 -v http://ip-api.com/line?fields=countryCode 2>/dev/null | tr '[:upper:]' '[:lower:]')
GETREGION=$(curl --interface ${ARCNIC} -m 5 -v "http://ip-api.com/line?fields=timezone" 2>/dev/null | tr -d '\n' | cut -d '/' -f1)
GETTIMEZONE=$(curl --interface ${ARCNIC} -m 5 -v "http://ip-api.com/line?fields=timezone" 2>/dev/null | tr -d '\n' | cut -d '/' -f2)
GETKEYMAP=$(curl --interface ${ARCNIC} -m 5 -v "http://ip-api.com/line?fields=countryCode" 2>/dev/null | tr '[:upper:]' '[:lower:]')
writeConfigKey "time.region" "${GETREGION}" "${USER_CONFIG_FILE}"
writeConfigKey "time.timezone" "${GETTIMEZONE}" "${USER_CONFIG_FILE}"
[ -z "{KEYMAP}" ] && writeConfigKey "keymap" "${GETKEYMAP}" "${USER_CONFIG_FILE}"
@ -369,7 +379,7 @@ function arcVersion() {
while read -r ID DESC; do
writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}"
for MOD in ${KOLIST[@]}; do
[ "${MOD}" == "${ID}" ] && echo "N ${ID}.ko" >>"${USER_UP_PATH}/modulelist"
[ "${MOD}" == "${ID}" ] && echo "F ${ID}.ko" >>"${USER_UP_PATH}/modulelist"
done
done < <(getAllModules "${PLATFORM}" "${KVERP}")
# Check for Only Version
@ -521,9 +531,14 @@ function arcSettings() {
--msgbox "WARN: You have more then 8 Ethernet Ports.\nThere are only 8 supported by DSM." 0 0
fi
# Check for AES
if ! grep -q "^flags.*aes.*" /proc/cpuinfo; then
if [ "${AESSYS}" == "false" ]; then
dialog --backtitle "$(backtitle)" --title "Arc Warning" \
--msgbox "WARN: Your CPU does not have AES Support for Hardwareencryption in DSM." 0 0
--msgbox "WARN: Your System doesn't have AES Support for Hardwareencryption in DSM." 0 0
fi
# Check for ACPI
if [ "${ACPISYS}" == "false" ]; then
dialog --backtitle "$(backtitle)" --title "Arc Warning" \
--msgbox "WARN: Your System doesn't have ACPI Support for CPU Frequency Scaling in DSM." 0 0
fi
fi
EMMCBOOT="$(readConfigKey "arc.emmcboot" "${USER_CONFIG_FILE}")"
@ -682,8 +697,8 @@ function make() {
--infobox "Get PAT Data from Github..." 3 30
idx=0
while [ ${idx} -le 3 ]; do # Loop 3 times, if successful, break
PAT_URL=$(curl --interface ${ARCNIC} -m 5 -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/dsm/${MODEL/+/%2B}/${PRODUCTVER}/pat_url")
PAT_HASH=$(curl --interface ${ARCNIC} -m 5 -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/dsm/${MODEL/+/%2B}/${PRODUCTVER}/pat_hash")
PAT_URL=$(curl --interface ${ARCNIC} -m 10 -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/dsm/${MODEL/+/%2B}/${PRODUCTVER}/pat_url")
PAT_HASH=$(curl --interface ${ARCNIC} -m 10 -skL "https://raw.githubusercontent.com/AuxXxilium/arc-dsm/main/dsm/${MODEL/+/%2B}/${PRODUCTVER}/pat_hash")
PAT_URL=${PAT_URL%%\?*}
if [ -n "${PAT_URL}" ] && [ -n "${PAT_HASH}" ]; then
if echo "${PAT_URL}" | grep -q "https://"; then

View File

@ -66,7 +66,7 @@ if ! readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q nvmesystem; then
HASATA=0
for D in $(lsblk -dpno NAME); do
[ "${D}" == "${LOADER_DISK}" ] && continue
if [ "$(getBus "${D}")" == "sata" -o "$(getBus "${D}")" == "scsi" ]; then
if [ "$(getBus "${D}")" == "sata" ] || [ "$(getBus "${D}")" == "scsi" ]; then
HASATA=1
break
fi
@ -146,7 +146,7 @@ if [ "${DT}" == "true" ] && ! echo "epyc7002 purley broadwellnkv2" | grep -wq "$
[ "${CMDLINE['modprobe.blacklist']}" != "" ] && CMDLINE['modprobe.blacklist']+=","
CMDLINE['modprobe.blacklist']+="mpt3sas"
fi
if echo "epyc7002 apollolake geminilake" | grep -wq "${PLATFORM}"; then
if echo "apollolake geminilake" | grep -wq "${PLATFORM}"; then
CMDLINE["intel_iommu"]="igfx_off"
fi
if echo "purley broadwellnkv2" | grep -wq "${PLATFORM}"; then
@ -195,7 +195,7 @@ if [ "${DIRECTBOOT}" == "true" ]; then
elif [ "${DIRECTBOOT}" == "false" ]; then
BOOTIPWAIT="$(readConfigKey "arc.bootipwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTIPWAIT}" ] && BOOTIPWAIT=20
echo -e "\033[1;34mDetected ${NIC} NIC.\033[0m \033[1;37mWaiting for Connection:\033[0m"
echo -e "\033[1;34mDetected ${NIC} NIC.\033[0m \033[1;37mWaiting for DHCP Connection:\033[0m"
IPCON=""
for ETH in ${ETHX}; do
IP=""
@ -210,18 +210,18 @@ elif [ "${DIRECTBOOT}" == "false" ]; then
elif [ -n "${IP}" ]; then
SPEED=$(ethtool ${ETH} 2>/dev/null | grep "Speed:" | awk '{print $2}')
if [[ "${IP}" =~ ^169\.254\..* ]]; then
echo -e "\r\033[1;37m${DRIVER} (${SPEED} | ${MSG}):\033[0m LINK LOCAL (No DHCP server detected.)"
echo -e "\r\033[1;37m${DRIVER} (${SPEED} | ${MSG}):\033[0m LINK LOCAL (No DHCP server found.)"
else
echo -e "\r\033[1;37m${DRIVER} (${SPEED} | ${MSG}):\033[0m Access \033[1;34mhttp://${IP}:5000\033[0m to connect to DSM via web."
[ ! -n "${IPCON}" ] && IPCON="${IP}"
fi
break
elif [ ${COUNT} -gt ${BOOTIPWAIT} ]; then
elif [ ${COUNT} -ge ${BOOTIPWAIT} ]; then
echo -e "\r\033[1;37m${DRIVER}:\033[0m TIMEOUT"
break
fi
sleep 3
COUNT=$((${COUNT} + 3))
sleep 5
COUNT=$((${COUNT} + 4))
done
done
# Exec Bootwait to check SSH/Web connection
@ -261,8 +261,12 @@ elif [ "${DIRECTBOOT}" == "false" ]; then
# Executes DSM kernel via KEXEC
KEXECARGS=""
if [ $(echo "${KVER:-4}" | cut -d'.' -f1) -lt 4 ] && [ ${EFI} -eq 1 ]; then
echo -e "\033[1;33mWarning, running kexec with --noefi param, strange things will happen!!\033[0m"
KEXECARGS="--noefi"
fi
kexec ${KEXECARGS} -l "${MOD_ZIMAGE_FILE}" --initrd "${MOD_RDGZ_FILE}" --command-line="${CMDLINE_LINE}" >"${LOG_FILE}" 2>&1 || dieLog
echo -e "\033[1;37m"Booting DSM..."\033[0m"
echo -e "\033[1;37mBooting DSM...\033[0m"
for T in $(w -h 2>/dev/null | awk '{print $2}'); do
[ -w "/dev/${T}" ] && echo -e "\n\033[1;37mThis interface will not be operational. Wait a few minutes.\033[0m\nUse \033[1;34mhttp://${IPCON}:5000\033[0m or try \033[1;34mhttp://find.synology.com/ \033[0mto find DSM and proceed.\n" >"/dev/${T}" 2>/dev/null || true
done

View File

@ -12,7 +12,7 @@ function updateLoader() {
# Check for new Version
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
TAG="$(curl --interface ${ARCNIC} -m 5 -skL https://api.github.com/repos/AuxXxilium/arc/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')"
TAG=$(curl --interface ${ARCNIC} -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
if [ -n "${TAG}" ]; then
echo "New Version: ${TAG}"
break
@ -68,7 +68,7 @@ function updateAddons() {
# Check for new Version
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
TAG="$(curl --interface ${ARCNIC} -m 5 -skL https://api.github.com/repos/AuxXxilium/arc-addons/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')"
TAG=$(curl --interface ${ARCNIC} -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-addons/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
if [ -n "${TAG}" ]; then
echo "New Version: ${TAG}"
break
@ -129,7 +129,7 @@ function updatePatches() {
# Check for new Version
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
TAG="$(curl --interface ${ARCNIC} -m 5 -skL https://api.github.com/repos/AuxXxilium/arc-patches/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')"
TAG=$(curl --interface ${ARCNIC} -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-patches/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
if [ -n "${TAG}" ]; then
echo "New Version: ${TAG}"
break
@ -182,7 +182,7 @@ function updateModules() {
# Check for new Version
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
TAG="$(curl --interface ${ARCNIC} -m 5 -skL https://api.github.com/repos/AuxXxilium/arc-modules/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')"
TAG=$(curl --interface ${ARCNIC} -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc-modules/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
if [ -n "${TAG}" ]; then
echo "New Version: ${TAG}"
break
@ -254,7 +254,7 @@ function updateConfigs() {
# Check for new Version
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
TAG="$(curl --interface ${ARCNIC} -m 5 -skL https://api.github.com/repos/AuxXxilium/arc-configs/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')"
TAG=$(curl --interface ${ARCNIC} -m 5 -skL "https://api.github.com/repos/AuxXxilium/arc-configs/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
if [ -n "${TAG}" ]; then
echo "New Version: ${TAG}"
break
@ -307,7 +307,7 @@ function updateLKMs() {
# Check for new Version
idx=0
while [ ${idx} -le 5 ]; do # Loop 5 times, if successful, break
TAG="$(curl --interface ${ARCNIC} -m 5 -skL https://api.github.com/repos/AuxXxilium/arc-lkm/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}')"
TAG=$(curl --interface ${ARCNIC} -m 5 -skL "https://api.github.com/repos/AuxXxilium/arc-lkm/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
if [ -n "${TAG}" ]; then
echo "New Version: ${TAG}"
break

View File

@ -66,7 +66,6 @@ initConfigKey "keymap" "" "${USER_CONFIG_FILE}"
initConfigKey "layout" "" "${USER_CONFIG_FILE}"
initConfigKey "lkm" "prod" "${USER_CONFIG_FILE}"
initConfigKey "mac" "{}" "${USER_CONFIG_FILE}"
initConfigKey "nameserver" "{}" "${USER_CONFIG_FILE}"
initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
initConfigKey "model" "" "${USER_CONFIG_FILE}"
initConfigKey "modelid" "" "${USER_CONFIG_FILE}"
@ -92,18 +91,19 @@ NIC=0
for ETH in ${ETHX}; do
MACR=$(cat /sys/class/net/${ETH}/address | sed 's/://g')
if [ -z "${MACR}" ]; then
MACR="9009d012345${NIC}"
MACR="9009d0123456"
fi
initConfigKey "mac.${ETH}" "${MACR}" "${USER_CONFIG_FILE}"
if [ "${MACSYS}" == "custom" ]; then
MACA="$(readConfigKey "mac.${ETH}" "${USER_CONFIG_FILE}")"
if [ "${MACA}" != "${MACR}" ]; then
if [ -n "${MACA}" ] && [ "${MACA}" != "${MACR}" ]; then
MAC="${MACA:0:2}:${MACA:2:2}:${MACA:4:2}:${MACA:6:2}:${MACA:8:2}:${MACA:10:2}"
echo "Setting ${ETH} MAC to ${MAC}"
ip link set dev ${ETH} address "${MAC}" >/dev/null 2>&1 || true
ip link set dev ${ETH} address ${MAC} >/dev/null 2>&1 || true
STATICIP="$(readConfigKey "static.${ETH}" "${USER_CONFIG_FILE}")"
[ "${STATICIP}" == "false" ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
sleep 2
fi
/etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
fi
NIC=$((${NIC} + 1))
done
@ -181,9 +181,9 @@ for ETH in ${ETHX}; do
NETMASK="$(readConfigKey "netmask.${ETH}" "${USER_CONFIG_FILE}")"
GATEWAY="$(readConfigKey "gateway.${ETH}" "${USER_CONFIG_FILE}")"
NAMESERVER="$(readConfigKey "nameserver.${ETH}" "${USER_CONFIG_FILE}")"
IP="${ARCIP}"
IP=${ARCIP}
#NETMASK=$(convert_netmask "${NETMASK}")
ip addr add ${IP}/${NETMASK} dev ${ETH} 2>/dev/null || true
ip addr add ${ARCIP}/${NETMASK} dev ${ETH} 2>/dev/null || true
ip route add default via ${GATEWAY} dev ${ETH} 2>/dev/null || true
echo "nameserver ${NAMESERVER}" >>/etc/resolv.conf.head 2>/dev/null || true
/etc/init.d/S40network restart 2>/dev/null || true
@ -200,17 +200,17 @@ for ETH in ${ETHX}; do
SPEED=$(ethtool ${ETH} 2>/dev/null | grep "Speed:" | awk '{print $2}')
writeConfigKey "ip.${ETH}" "${IP}" "${USER_CONFIG_FILE}"
if [[ "${IP}" =~ ^169\.254\..* ]]; then
echo -e "\r\033[1;37m${DRIVER} (${SPEED} | ${MSG}):\033[0m LINK LOCAL (No DHCP server detected.)"
echo -e "\r\033[1;37m${DRIVER} (${SPEED} | ${MSG}):\033[0m LINK LOCAL (No DHCP server found.)"
else
echo -e "\r\033[1;37m${DRIVER} (${SPEED} | ${MSG}):\033[0m Access \033[1;34mhttp://${IP}:7681\033[0m to connect to Arc via web."
fi
break
elif [ ${COUNT} -gt ${BOOTIPWAIT} ]; then
elif [ ${COUNT} -ge ${BOOTIPWAIT} ]; then
echo -e echo -e "\r\033[1;37m${DRIVER}:\033[0m TIMEOUT"
break
fi
sleep 3
COUNT=$((${COUNT} + 3))
sleep 5
COUNT=$((${COUNT} + 4))
done
done