diff --git a/files/initrd/opt/arc/arc-functions.sh b/files/initrd/opt/arc/arc-functions.sh index e4f8c683..9b195b5d 100755 --- a/files/initrd/opt/arc/arc-functions.sh +++ b/files/initrd/opt/arc/arc-functions.sh @@ -721,6 +721,7 @@ function backupMenu() { fi mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" MODEL="" PRODUCTVER="" @@ -746,6 +747,7 @@ function backupMenu() { break fi fi + umount "${TMP_PATH}/mdX" done if [ -f "${USER_CONFIG_FILE}" ]; then PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")" @@ -775,6 +777,7 @@ function backupMenu() { fi mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" if [ -f "${TMP_PATH}/mdX/usr/arc/backup/p2/machine.key" ]; then cp -f "${TMP_PATH}/mdX/usr/arc/backup/p2/machine.key" "${PART2_PATH}/machine.key" @@ -783,6 +786,7 @@ function backupMenu() { break fi done + umount "${TMP_PATH}/mdX" if [ -f "${PART2_PATH}/machine.key" ]; then dialog --backtitle "$(backtitle)" --title "Restore Encryption Key" --aspect 18 \ --msgbox "Encryption Key restore successful!" 0 0 @@ -802,6 +806,7 @@ function backupMenu() { ( mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue if [ -f "${PART2_PATH}/machine.key" ]; then @@ -854,16 +859,12 @@ function backupMenu() { exec init.sh ;; 5) - if [ -f "${USER_CONFIG_FILE}" ]; then - HWID="$(genHWID)" - curl -sk -X POST -F "file=@${USER_CONFIG_FILE}" "https://arc.auxxxilium.tech?cup=${HWID}&userid=${USERID}" 2>/dev/null - if [ $? -eq 0 ]; then - dialog --backtitle "$(backtitle)" --title "Online Backup" --msgbox "Online Backup successful!" 5 40 - else - dialog --backtitle "$(backtitle)" --title "Online Backup" --msgbox "Online Backup failed!" 5 40 - fi + HWID="$(genHWID)" + curl -sk -X POST -F "file=@${USER_CONFIG_FILE}" "https://arc.auxxxilium.tech?cup=${HWID}&userid=${USERID}" 2>/dev/null + if [ $? -eq 0 ]; then + dialog --backtitle "$(backtitle)" --title "Online Backup" --msgbox "Online Backup successful!" 5 40 else - dialog --backtitle "$(backtitle)" --title "Online Backup" --msgbox "No User Config found!" 5 40 + dialog --backtitle "$(backtitle)" --title "Online Backup" --msgbox "Online Backup failed!" 5 40 fi ;; esac @@ -971,7 +972,7 @@ function sysinfo() { CPU="$(cat /proc/cpuinfo 2>/dev/null | grep 'model name' | uniq | awk -F':' '{print $2}')" SECURE=$(dmesg 2>/dev/null | grep -i "Secure Boot" | awk -F'] ' '{print $2}') VENDOR=$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i') - ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth) + ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true ETHN=$(echo ${ETHX} | wc -w) ARC_BRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")" CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")" @@ -1020,10 +1021,11 @@ function sysinfo() { TEXT+="\n Vendor: \Zb${VENDOR}\Zn" TEXT+="\n CPU: \Zb${CPU}\Zn" if [ $(lspci -d ::300 | wc -l) -gt 0 ]; then + GPUNAME="" for PCI in $(lspci -d ::300 | awk '{print $1}'); do - GPUNAME=$(lspci -s ${PCI} | sed "s/\ .*://" | awk '{$1=""}1' | awk '{$1=$1};1') - TEXT+="\n GPU: \Zb${GPUNAME}\Zn" + GPUNAME+="$(lspci -s ${PCI} | sed "s/\ .*://" | awk '{$1=""}1' | awk '{$1=$1};1')" done + TEXT+="\n GPU: \Zb${GPUNAME}\Zn" fi TEXT+="\n Memory: \Zb$((${RAMTOTAL}))GB\Zn" TEXT+="\n AES | ACPI: \Zb${AESSYS} | ${ACPISYS}\Zn" @@ -1037,23 +1039,23 @@ function sysinfo() { DRIVER=$(ls -ld /sys/class/net/${N}/device/driver 2>/dev/null | awk -F '/' '{print $NF}') while true; do if [ -z "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then - TEXT+="\n${DRIVER}: \ZbDOWN\Zn" + TEXT+="\n ${DRIVER}: \ZbDOWN\Zn" break fi if [ "0" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then - TEXT+="\n${DRIVER}: \ZbNOT CONNECTED\Zn" + TEXT+="\n ${DRIVER}: \ZbNOT CONNECTED\Zn" break fi if [ ${COUNT} -ge ${TIMEOUT} ]; then - TEXT+="\n${DRIVER}: \ZbTIMEOUT\Zn" + TEXT+="\n ${DRIVER}: \ZbTIMEOUT\Zn" break fi COUNT=$((${COUNT} + 1)) - IP="$(getIP ${N})" + IP="$(getIP "${N}")" if [ -n "${IP}" ]; then SPEED=$(ethtool ${N} 2>/dev/null | grep "Speed:" | awk '{print $2}') if [[ "${IP}" =~ ^169\.254\..* ]]; then - TEXT+="\n$ {DRIVER} (${SPEED}): \ZbLINK LOCAL (No DHCP server found.)\Zn" + TEXT+="\n ${DRIVER} (${SPEED}): \ZbLINK LOCAL (No DHCP server found.)\Zn" else TEXT+="\n ${DRIVER} (${SPEED}): \Zb${IP}\Zn" fi @@ -1120,8 +1122,7 @@ function sysinfo() { TEXT+="\Zb ${NAME}\Zn\n Ports: " PORTS=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n) for P in ${PORTS}; do - if lsscsi -b | grep -v - | grep -q "\[${P}:"; then - DUMMY="$([ "$(cat /sys/class/scsi_host/host${P}/ahci_port_cmd)" = "0" ] && echo 1 || echo 2)" + if lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep -q "\[${P}:"; then if [ "$(cat /sys/class/scsi_host/host${P}/ahci_port_cmd)" = "0" ]; then TEXT+="\Z1\Zb$(printf "%02d" ${P})\Zn " else @@ -1139,7 +1140,7 @@ function sysinfo() { for PCI in $(lspci -d ::104 2>/dev/null | awk '{print $1}'); do NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://") PORT=$(ls -l /sys/class/scsi_host 2>/dev/null | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n) - PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[${PORT}:" | wc -l) + PORTNUM=$(lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[${PORT}:" | wc -l) TEXT+="\Zb ${NAME}\Zn\n Disks: ${PORTNUM}\n" NUMPORTS=$((${NUMPORTS} + ${PORTNUM})) done @@ -1147,7 +1148,7 @@ function sysinfo() { for PCI in $(lspci -d ::107 2>/dev/null | awk '{print $1}'); do NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://") PORT=$(ls -l /sys/class/scsi_host 2>/dev/null | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n) - PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[${PORT}:" | wc -l) + PORTNUM=$(lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[${PORT}:" | wc -l) TEXT+="\Zb ${NAME}\Zn\n Disks: ${PORTNUM}\n" NUMPORTS=$((${NUMPORTS} + ${PORTNUM})) done @@ -1163,12 +1164,12 @@ function sysinfo() { for PCI in $(lspci -d ::c03 2>/dev/null | awk '{print $1}'); do NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://") PORT=$(ls -l /sys/class/scsi_host 2>/dev/null | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n) - PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[${PORT}:" | wc -l) + PORTNUM=$(lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[${PORT}:" | wc -l) [ ${PORTNUM} -eq 0 ] && continue TEXT+="\Zb ${NAME}\Zn\n Disks: ${PORTNUM}\n" NUMPORTS=$((${NUMPORTS} + ${PORTNUM})) done - [ $(ls -l /sys/class/mmc_host 2>/dev/null | grep mmc_host | wc -l) -gt 0 ] && TEXT+="\n MMC Controller:\n" + [ $(ls -l /sys/block/mmc* | wc -l) -gt 0 ] && TEXT+="\n MMC Controller:\n" for PCI in $(lspci -d ::805 2>/dev/null | awk '{print $1}'); do NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://") PORTNUM=$(ls -l /sys/block/mmc* 2>/dev/null | grep "${PCI}" | wc -l) @@ -1180,7 +1181,7 @@ function sysinfo() { for PCI in $(lspci -d ::108 2>/dev/null | awk '{print $1}'); do NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://") PORT=$(ls -l /sys/class/nvme 2>/dev/null | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/nvme//' | sort -n) - PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[N:${PORT}:" | wc -l) + PORTNUM=$(lsscsi -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[N:${PORT}:" | wc -l) TEXT+="\Zb ${NAME}\Zn\n Disks: ${PORTNUM}\n" NUMPORTS=$((${NUMPORTS} + ${PORTNUM})) done @@ -1267,7 +1268,7 @@ function uploadDiag () { # Shows Networkdiag to user function networkdiag() { ( - ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth) + ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true for N in ${ETHX}; do echo DRIVER=$(ls -ld /sys/class/net/${N}/device/driver 2>/dev/null | awk -F '/' '{print $NF}') @@ -1281,8 +1282,8 @@ function networkdiag() { continue fi echo -e "Link: CONNECTED" - addr=$(getIP ${N}) - netmask=$(ifconfig ${N} | grep inet | grep 255 | awk '{print $4}' | cut -f2 -d':') + addr=$(getIP "${N}") + netmask=$(ifconfig "${N}" | grep inet | grep 255 | awk '{print $4}' | cut -f2 -d':') echo -e "IP Address: ${addr}" echo -e "Netmask: ${netmask}" echo @@ -1296,7 +1297,7 @@ function networkdiag() { else websites=("google.com" "github.com" "auxxxilium.tech") for website in "${websites[@]}"; do - if ping -I ${ETH} -c 1 "${website}" &> /dev/null; then + if ping -I "${N}" -c 1 "${website}" &> /dev/null; then echo -e "Connection to ${website} is successful." else echo -e "Connection to ${website} failed." @@ -1304,20 +1305,20 @@ function networkdiag() { done echo HWID="$(genHWID)" - USERIDAPI="$(curl --interface ${N} -skL -m 10 "https://arc.auxxxilium.tech?hwid=${HWID}" 2>/dev/null)" + USERIDAPI="$(curl --interface "${N}" -skL -m 10 "https://arc.auxxxilium.tech?hwid=${HWID}" 2>/dev/null)" if [[ $? -ne 0 || -z "${USERIDAPI}" ]]; then echo -e "Arc UserID API not reachable!" else echo -e "Arc UserID API reachable! (${USERIDAPI})" fi - GITHUBAPI=$(curl --interface ${N} -skL -m 10 "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep -v "dev" | sort -rV | head -1 2>/dev/null) + GITHUBAPI=$(curl --interface "${N}" -skL -m 10 "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep -v "dev" | sort -rV | head -1 2>/dev/null) if [[ $? -ne 0 || -z "${GITHUBAPI}" ]]; then echo -e "Github API not reachable!" else echo -e "Github API reachable!" fi if [ "${CONFDONE}" = "true" ]; then - SYNOAPI=$(curl --interface ${N} -skL -m 10 "https://www.synology.com/api/support/findDownloadInfo?lang=en-us&product=${MODEL/+/%2B}&major=${PRODUCTVER%%.*}&minor=${PRODUCTVER##*.}" | jq -r '.info.system.detail[0].items[0].files[0].url') + SYNOAPI=$(curl --interface "${N}" -skL -m 10 "https://www.synology.com/api/support/findDownloadInfo?lang=en-us&product=${MODEL/+/%2B}&major=${PRODUCTVER%%.*}&minor=${PRODUCTVER##*.}" | jq -r '.info.system.detail[0].items[0].files[0].url') if [[ $? -ne 0 || -z "${SYNOAPI}" ]]; then echo -e "Syno API not reachable!" else @@ -1371,7 +1372,7 @@ function credits() { ############################################################################### # Setting Static IP for Loader function staticIPMenu() { - ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep -v lo) + ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true IPCON="" for N in ${ETHX}; do MACR="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g')" @@ -1394,7 +1395,7 @@ function staticIPMenu() { if [ -z "${address}" ]; then if [ -n "$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" ]; then if [ "1" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then - ip addr flush dev ${N} + ip addr flush dev "${N}" fi deleteConfigKey "network.${MACR}" "${USER_CONFIG_FILE}" IP="$(getIP)" @@ -1403,10 +1404,10 @@ function staticIPMenu() { fi else if [ "1" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then - ip addr flush dev ${N} - ip addr add ${address}/${netmask:-"255.255.255.0"} dev ${N} + ip addr flush dev "${N}" + ip addr add "${address}/${netmask:-"255.255.255.0"}" dev "${N}" if [ -n "${gateway}" ]; then - ip route add default via ${gateway} dev ${N} + ip route add default via "${gateway}" dev "${N}" fi if [ -n "${dnsname:-${gateway}}" ]; then sed -i "/nameserver ${dnsname:-${gateway}}/d" /etc/resolv.conf @@ -1454,6 +1455,7 @@ function downgradeMenu() { ( mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue [ -f "${TMP_PATH}/mdX/etc/VERSION" ] && rm -f "${TMP_PATH}/mdX/etc/VERSION" >/dev/null @@ -1463,7 +1465,7 @@ function downgradeMenu() { done rm -rf "${TMP_PATH}/mdX" >/dev/null ) 2>&1 | dialog --backtitle "$(backtitle)" --title "Allow Downgrade" \ - --progressbox "Removing ..." 20 70 + --progressbox "Removing Version lock..." 20 70 dialog --backtitle "$(backtitle)" --title "Allow Downgrade" \ --msgbox "Allow Downgrade Settings completed." 0 0 return @@ -1481,6 +1483,7 @@ function resetPassword() { rm -f "${TMP_PATH}/menu" >/dev/null mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue if [ -f "${TMP_PATH}/mdX/etc/shadow" ]; then @@ -1523,6 +1526,7 @@ function resetPassword() { ( mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue sed -i "s|^${USER}:[^:]*|${USER}:${NEWPASSWD}|" "${TMP_PATH}/mdX/etc/shadow" @@ -1563,6 +1567,7 @@ function addNewDSMUser() { mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then @@ -1752,6 +1757,7 @@ function disablescheduledTasks { ( mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then @@ -2005,6 +2011,7 @@ function greplogs() { if [ -n "${DSMROOTS}" ]; then mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue mkdir -p "${TMP_PATH}/logs/md0/log" @@ -2013,7 +2020,7 @@ function greplogs() { SYSLOG=1 umount "${TMP_PATH}/mdX" done - rm -rf "${TMP_PATH}/mdX" + rm -rf "${TMP_PATH}/mdX" >/dev/null fi if [ ${SYSLOG} -eq 1 ]; then MSG+="System logs found!\n" @@ -2041,7 +2048,7 @@ function greplogs() { tar -czf "${TMP_PATH}/logs.tar.gz" -C "${TMP_PATH}" logs if [ -z "${SSH_TTY}" ]; then # web mv -f "${TMP_PATH}/logs.tar.gz" "/var/www/data/logs.tar.gz" - URL="http://$(getIP)/logs.tar.gz" + URL="http://${IPCON}/logs.tar.gz" MSG+="Please via ${URL} to download the logs,\nAnd go to Github or Discord to create an issue and upload the logs." else sz -be -B 536870912 "${TMP_PATH}/logs.tar.gz" @@ -2062,7 +2069,7 @@ function getbackup() { if [ -z "${SSH_TTY}" ]; then # web mv -f "${TMP_PATH}/dsmconfig.tar.gz" "/var/www/data/dsmconfig.tar.gz" chmod 644 "/var/www/data/dsmconfig.tar.gz" - URL="http://$(getIP)/dsmconfig.tar.gz" + URL="http://${IPCON}/dsmconfig.tar.gz" dialog --backtitle "$(backtitle)" --colors --title "DSM Config" \ --msgbox "Please via ${URL}\nto download the dsmconfig and unzip it and back it up in order by file name." 0 0 else @@ -2164,6 +2171,7 @@ function resetDSMNetwork { ( mkdir -p "${TMP_PATH}/mdX" for I in ${DSMROOTS}; do + fixDSMRootPart "${I}" mount -t ext4 "${I}" "${TMP_PATH}/mdX" [ $? -ne 0 ] && continue rm -f "${TMP_PATH}/mdX/etc.defaults/sysconfig/network-scripts/ifcfg-bond"* "${TMP_PATH}/mdX/etc.defaults/sysconfig/network-scripts/ifcfg-eth"* diff --git a/files/initrd/opt/arc/arc.sh b/files/initrd/opt/arc/arc.sh index 680e9b3f..67cafb84 100755 --- a/files/initrd/opt/arc/arc.sh +++ b/files/initrd/opt/arc/arc.sh @@ -13,11 +13,10 @@ . "${ARC_PATH}/include/compat.sh" . "${ARC_PATH}/arc-functions.sh" -# Get Keymap and Timezone Config +# Get Keymap and Timezone and check System onlineCheck KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")" ARCOFFLINE="$(readConfigKey "arc.offline" "${USER_CONFIG_FILE}")" -# Check for System systemCheck ARCMODE="$(readConfigKey "arc.mode" "${USER_CONFIG_FILE}")" @@ -413,12 +412,13 @@ function arcPatch() { # Read Model Values PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")" MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")" + ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")" ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")" # Check for Custom Build - if [ "${ARCMODE}" = "automated" ]; then - ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")" - [ -n "${ARCCONF}" ] && SN="$(generateSerial "${MODEL}" "true")" || SN="$(generateSerial "${MODEL}" "false")" - [ -n "${ARCCONF}" ] && writeConfigKey "arc.patch" "true" "${USER_CONFIG_FILE}" || writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}" + if [ "${ARCMODE}" = "automated" ] && [ "${ARCPATCH}" != "user" ]; then + ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")" + [ -n "${ARCCONF}" ] && SN="$(generateSerial "${MODEL}" "true")" || SN="$(generateSerial "${MODEL}" "false")" + [ -n "${ARCCONF}" ] && writeConfigKey "arc.patch" "true" "${USER_CONFIG_FILE}" || writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}" elif [ "${ARCMODE}" = "config" ]; then dialog --clear --backtitle "$(backtitlep)" \ --nocancel --title "SN/Mac Options"\ @@ -484,7 +484,9 @@ function arcSettings() { dialog --backtitle "$(backtitlep)" --colors --title "Network Config" \ --infobox "Generating Network Config..." 3 40 sleep 2 - getnet + if [ "${ARCMODE}" != "automated" ] && [ "${ARCPATCH}" != "user" ]; then + getnet + fi [ $? -ne 0 ] && return 1 if [ "${ONLYPATCH}" = "true" ]; then writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}" diff --git a/files/initrd/opt/arc/boot.sh b/files/initrd/opt/arc/boot.sh index 2f9778c0..340f4b39 100755 --- a/files/initrd/opt/arc/boot.sh +++ b/files/initrd/opt/arc/boot.sh @@ -194,7 +194,7 @@ if echo "purley broadwellnkv2" | grep -wq "${PLATFORM}"; then fi # NIC Cmdline -ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth) +ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true ETHM=$(readConfigKey "${MODEL}.ports" "${S_FILE}" 2>/dev/null) ETHN=$(echo ${ETHX} | wc -w) [ -z "${ETHM}" ] && ETHM="${ETHN}" diff --git a/files/initrd/opt/arc/include/functions.sh b/files/initrd/opt/arc/include/functions.sh index 0464d54a..0d467322 100755 --- a/files/initrd/opt/arc/include/functions.sh +++ b/files/initrd/opt/arc/include/functions.sh @@ -229,7 +229,7 @@ function _set_conf_kv() { # sort netif busid function _sort_netif() { local ETHLIST="" - local ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth) + local ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true for N in ${ETHX}; do local MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g; s/.*/\L&/')" local BUS="$(ethtool -i ${N} 2>/dev/null | grep bus-info | cut -d' ' -f2)" @@ -585,24 +585,29 @@ function check_port() { } ############################################################################### -# Unmount new boot loader disk +# Unmount disks function __umountNewBlDisk() { umount "${TMP_PATH}/sdX1" 2>/dev/null umount "${TMP_PATH}/sdX2" 2>/dev/null umount "${TMP_PATH}/sdX3" 2>/dev/null } +function __umountDSMRootDisk() { + umount "${TMP_PATH}/mdX" + rm -rf "${TMP_PATH}/mdX" +} + ############################################################################### # bootwait SSH/Web function _bootwait() { # Exec Bootwait to check SSH/Web connection BOOTWAIT=5 - busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WB + w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WB MSG="" while test ${BOOTWAIT} -ge 0; do MSG="\033[1;33mAccess SSH/Web will interrupt boot...\033[0m" echo -en "\r${MSG}" - busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WC + w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WC if ! diff WB WC >/dev/null 2>&1; then echo -en "\r\033[1;33mAccess SSH/Web detected and boot is interrupted.\033[0m\n" rm -f WB WC @@ -614,4 +619,15 @@ function _bootwait() { rm -f WB WC echo -en "\r$(printf "%$((${#MSG} * 2))s" " ")\n" return 0 +} + +############################################################################### +# check and fix the DSM root partition +# 1 - DSM root path +function fixDSMRootPart() { + if mdadm --detail "${1}" 2>/dev/null | grep -i "State" | grep -iEq "active|FAILED|Not Started"; then + mdadm --stop "${1}" >/dev/null 2>&1 + mdadm --assemble --scan >/dev/null 2>&1 + fsck "${1}" >/dev/null 2>&1 + fi } \ No newline at end of file diff --git a/files/initrd/opt/arc/include/network.sh b/files/initrd/opt/arc/include/network.sh index ae7f38b8..9439be70 100755 --- a/files/initrd/opt/arc/include/network.sh +++ b/files/initrd/opt/arc/include/network.sh @@ -1,6 +1,6 @@ # Get Network Config for Loader function getnet() { - ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth) + ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")" ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")" NICPORTS="$(readConfigKey "${MODEL}.ports" "${S_FILE}" 2>/dev/null)" @@ -23,7 +23,7 @@ function getnet() { while true; do MAC="$(cat /sys/class/net/${N}/address | sed 's/://g' | tr '[:lower:]' '[:upper:]')" dialog --backtitle "$(backtitle)" --title "Mac Setting" \ - --inputbox "Type a custom MAC for ${ETH} (Eq. 001132abc123)." 7 50 "${MAC}"\ + --inputbox "Type a custom MAC for ${N} (Eq. 001132abc123)." 7 50 "${MAC}"\ 2>"${TMP_PATH}/resp" [ $? -ne 0 ] && break MAC=$(cat "${TMP_PATH}/resp") @@ -42,7 +42,7 @@ function getnet() { } # Get Amount of NIC -ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth) +ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true # Get actual IP for N in ${ETHX}; do IPCON="$(getIP "${N}")" diff --git a/files/initrd/opt/arc/init.sh b/files/initrd/opt/arc/init.sh index 0e2374fc..3ceb1702 100755 --- a/files/initrd/opt/arc/init.sh +++ b/files/initrd/opt/arc/init.sh @@ -93,7 +93,7 @@ if arrayExistItem "sortnetif:" $(readConfigMap "addons" "${USER_CONFIG_FILE}"); _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")" fi # Read/Write IP/Mac to config -ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth) +ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true for N in ${ETHX}; do MACR="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g')" IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")" @@ -112,7 +112,7 @@ ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth) fi [ "${N::3}" = "eth" ] && ethtool -s "${N}" wol g 2>/dev/null || true # [ "${N::3}" = "eth" ] && ethtool -K ${N} rxhash off 2>/dev/null || true - initConfigKey "${ETH}" "${MACR}" "${USER_CONFIG_FILE}" + initConfigKey "${N}" "${MACR}" "${USER_CONFIG_FILE}" done ETHN=$(echo ${ETHX} | wc -w) writeConfigKey "device.nic" "${ETHN}" "${USER_CONFIG_FILE}"