Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bfc108ef87 |
18
.github/workflows/autobuild.yml
vendored
18
.github/workflows/autobuild.yml
vendored
@@ -138,13 +138,7 @@ jobs:
|
||||
echo "Image Converter"
|
||||
qemu-img convert -p -f raw -O vmdk ${IMAGE_FILE} arc-dyn.vmdk
|
||||
qemu-img convert -p -f raw -o subformat=monolithicFlat -O vmdk ${IMAGE_FILE} arc.vmdk
|
||||
|
||||
echo "Create Arc vhd"
|
||||
createvmc "arc.vmc"
|
||||
qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd
|
||||
|
||||
echo "Create Arc ova"
|
||||
convertova "${IMAGE_FILE}" "arc.ova"
|
||||
qemu-img convert -p -f raw -O vhdx ${IMAGE_FILE} arc.vhdx
|
||||
|
||||
# Zip image and generate checksum
|
||||
- name: Pack Next Image
|
||||
@@ -161,7 +155,7 @@ jobs:
|
||||
# Cleanup
|
||||
- name: Cleanup
|
||||
run: |
|
||||
rm -rf "arc.img" "arc.vmdk" "arc-dyn.vmdk" "arc-flat.vmdk" "arc.vhd" "arc.ova" "arc.vmc"
|
||||
rm -rf "arc.img" "arc.vmdk" "arc-dyn.vmdk" "arc.vhdx" "arc-flat.vmdk"
|
||||
|
||||
# Build incremental
|
||||
- name: Build Stable Image
|
||||
@@ -217,13 +211,7 @@ jobs:
|
||||
echo "Image Converter"
|
||||
qemu-img convert -p -f raw -O vmdk ${IMAGE_FILE} arc-dyn.vmdk
|
||||
qemu-img convert -p -f raw -o subformat=monolithicFlat -O vmdk ${IMAGE_FILE} arc.vmdk
|
||||
|
||||
echo "Create Arc vhd"
|
||||
createvmc "arc.vmc"
|
||||
qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd
|
||||
|
||||
echo "Create Arc ova"
|
||||
convertova "${IMAGE_FILE}" "arc.ova"
|
||||
qemu-img convert -p -f raw -O vhdx ${IMAGE_FILE} arc.vhdx
|
||||
|
||||
# Zip image and generate checksum
|
||||
- name: Pack Stable Image
|
||||
|
||||
18
.github/workflows/build.yml
vendored
18
.github/workflows/build.yml
vendored
@@ -71,7 +71,7 @@ jobs:
|
||||
sudo timedatectl set-timezone "Europe/Berlin"
|
||||
|
||||
sudo apt update
|
||||
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
|
||||
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
|
||||
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
|
||||
# sudo snap install yq
|
||||
if ! command -v yq &>/dev/null || ! yq --version 2>/dev/null | grep -q "v4."; then
|
||||
@@ -164,10 +164,7 @@ jobs:
|
||||
echo "Image Converter"
|
||||
qemu-img convert -p -f raw -O vmdk ${IMAGE_FILE} arc-dyn.vmdk
|
||||
qemu-img convert -p -f raw -o subformat=monolithicFlat -O vmdk ${IMAGE_FILE} arc.vmdk
|
||||
|
||||
echo "Create Arc vhd"
|
||||
createvmc "arc.vmc"
|
||||
qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd
|
||||
qemu-img convert -p -f raw -O vhdx ${IMAGE_FILE} arc.vhdx
|
||||
|
||||
echo "Create Arc ova"
|
||||
convertova "${IMAGE_FILE}" "arc.ova"
|
||||
@@ -180,7 +177,7 @@ jobs:
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-dyn.zip" arc-dyn.vmdk
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhd.zip" arc.vhd arc.vmc
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhdx.zip" arc.vhdx
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.ova.zip" arc.ova
|
||||
(cd files && zip -r ../update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip ./p1 ./p3)
|
||||
fi
|
||||
@@ -188,7 +185,7 @@ jobs:
|
||||
# Cleanup
|
||||
- name: Cleanup
|
||||
run: |
|
||||
rm -rf "arc.img" "arc.vmdk" "arc-dyn.vmdk" "arc-flat.vmdk" "arc.vhd" "arc.ova" "arc.vmc"
|
||||
rm -rf "arc.img" "arc.ova" "arc.vmdk" "arc-dyn.vmdk" "arc.vhdx" "arc-flat.vmdk"
|
||||
|
||||
# Build incremental
|
||||
- name: Build Stable Image
|
||||
@@ -244,10 +241,7 @@ jobs:
|
||||
echo "Image Converter"
|
||||
qemu-img convert -p -f raw -O vmdk ${IMAGE_FILE} arc-dyn.vmdk
|
||||
qemu-img convert -p -f raw -o subformat=monolithicFlat -O vmdk ${IMAGE_FILE} arc.vmdk
|
||||
|
||||
echo "Create Arc vhd"
|
||||
createvmc "arc.vmc"
|
||||
qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd
|
||||
qemu-img convert -p -f raw -O vhdx ${IMAGE_FILE} arc.vhdx
|
||||
|
||||
echo "Create Arc ova"
|
||||
convertova "${IMAGE_FILE}" "arc.ova"
|
||||
@@ -260,7 +254,7 @@ jobs:
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-dyn.zip" arc-dyn.vmdk
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhd.zip" arc.vhd arc.vmc
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhdx.zip" arc.vhdx
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.ova.zip" arc.ova
|
||||
(cd files && zip -r ../update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip ./p1 ./p3)
|
||||
fi
|
||||
|
||||
@@ -582,9 +582,9 @@ function synoinfoMenu() {
|
||||
--checklist "Select synoinfo entry to remove" 0 0 0 --file "${TMP_PATH}/opts" \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && continue
|
||||
resp=$(cat "${TMP_PATH}/resp")
|
||||
[ -z "${resp}" ] && continue
|
||||
for I in ${resp}; do
|
||||
RESP=$(cat "${TMP_PATH}/resp")
|
||||
[ -z "${RESP}" ] && continue
|
||||
for I in ${RESP}; do
|
||||
unset SYNOINFO[${I}]
|
||||
deleteConfigKey "synoinfo.\"${I}\"" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
@@ -721,7 +721,6 @@ function backupMenu() {
|
||||
fi
|
||||
mkdir -p "${TMP_PATH}/mdX"
|
||||
for I in ${DSMROOTS}; do
|
||||
# fixDSMRootPart "${I}"
|
||||
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
|
||||
MODEL=""
|
||||
PRODUCTVER=""
|
||||
@@ -747,7 +746,6 @@ function backupMenu() {
|
||||
break
|
||||
fi
|
||||
fi
|
||||
umount "${TMP_PATH}/mdX"
|
||||
done
|
||||
if [ -f "${USER_CONFIG_FILE}" ]; then
|
||||
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||
@@ -777,7 +775,6 @@ 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"
|
||||
@@ -786,7 +783,6 @@ 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
|
||||
@@ -806,7 +802,6 @@ 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
|
||||
@@ -859,12 +854,16 @@ function backupMenu() {
|
||||
exec init.sh
|
||||
;;
|
||||
5)
|
||||
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
|
||||
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
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "Online Backup" --msgbox "Online Backup failed!" 5 40
|
||||
dialog --backtitle "$(backtitle)" --title "Online Backup" --msgbox "No User Config found!" 5 40
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
@@ -972,7 +971,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=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
ETHN=$(echo ${ETHX} | wc -w)
|
||||
ARC_BRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
|
||||
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
|
||||
@@ -1021,11 +1020,10 @@ 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')"
|
||||
GPUNAME=$(lspci -s ${PCI} | sed "s/\ .*://" | awk '{$1=""}1' | awk '{$1=$1};1')
|
||||
TEXT+="\n GPU: \Zb${GPUNAME}\Zn"
|
||||
done
|
||||
TEXT+="\n GPU: \Zb${GPUNAME}\Zn"
|
||||
fi
|
||||
TEXT+="\n Memory: \Zb$((${RAMTOTAL}))GB\Zn"
|
||||
TEXT+="\n AES | ACPI: \Zb${AESSYS} | ${ACPISYS}\Zn"
|
||||
@@ -1039,23 +1037,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
|
||||
@@ -1115,14 +1113,15 @@ function sysinfo() {
|
||||
TEXT+="\n"
|
||||
# Get Information for Sata Controller
|
||||
NUMPORTS=0
|
||||
if [ $(lspci -d ::106 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
if [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
|
||||
TEXT+="\n SATA Controller:\n"
|
||||
for PCI in $(lspci -d ::106 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://" | awk '{$1=""}1' | awk '{$1=$1};1')
|
||||
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 -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep -q "\[${P}:"; then
|
||||
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 [ "$(cat /sys/class/scsi_host/host${P}/ahci_port_cmd)" = "0" ]; then
|
||||
TEXT+="\Z1\Zb$(printf "%02d" ${P})\Zn "
|
||||
else
|
||||
@@ -1140,7 +1139,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 -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[${PORT}:" | wc -l)
|
||||
PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[${PORT}:" | wc -l)
|
||||
TEXT+="\Zb ${NAME}\Zn\n Disks: ${PORTNUM}\n"
|
||||
NUMPORTS=$((${NUMPORTS} + ${PORTNUM}))
|
||||
done
|
||||
@@ -1148,7 +1147,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 -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[${PORT}:" | wc -l)
|
||||
PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[${PORT}:" | wc -l)
|
||||
TEXT+="\Zb ${NAME}\Zn\n Disks: ${PORTNUM}\n"
|
||||
NUMPORTS=$((${NUMPORTS} + ${PORTNUM}))
|
||||
done
|
||||
@@ -1164,12 +1163,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 -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[${PORT}:" | wc -l)
|
||||
PORTNUM=$(lsscsi -b 2>/dev/null | 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/block/mmc* 2>/dev/null | wc -l) -gt 0 ] && TEXT+="\n MMC Controller:\n"
|
||||
[ $(ls -l /sys/class/mmc_host 2>/dev/null | grep mmc_host | 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)
|
||||
@@ -1181,7 +1180,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 -bS 2>/dev/null | awk '$3 != "0"' | grep -v - | grep "\[N:${PORT}:" | wc -l)
|
||||
PORTNUM=$(lsscsi -b 2>/dev/null | grep -v - | grep "\[N:${PORT}:" | wc -l)
|
||||
TEXT+="\Zb ${NAME}\Zn\n Disks: ${PORTNUM}\n"
|
||||
NUMPORTS=$((${NUMPORTS} + ${PORTNUM}))
|
||||
done
|
||||
@@ -1268,7 +1267,7 @@ function uploadDiag () {
|
||||
# Shows Networkdiag to user
|
||||
function networkdiag() {
|
||||
(
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
for N in ${ETHX}; do
|
||||
echo
|
||||
DRIVER=$(ls -ld /sys/class/net/${N}/device/driver 2>/dev/null | awk -F '/' '{print $NF}')
|
||||
@@ -1282,8 +1281,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
|
||||
@@ -1297,7 +1296,7 @@ function networkdiag() {
|
||||
else
|
||||
websites=("google.com" "github.com" "auxxxilium.tech")
|
||||
for website in "${websites[@]}"; do
|
||||
if ping -I "${N}" -c 1 "${website}" &> /dev/null; then
|
||||
if ping -I ${ETH} -c 1 "${website}" &> /dev/null; then
|
||||
echo -e "Connection to ${website} is successful."
|
||||
else
|
||||
echo -e "Connection to ${website} failed."
|
||||
@@ -1305,20 +1304,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
|
||||
@@ -1372,7 +1371,7 @@ function credits() {
|
||||
###############################################################################
|
||||
# Setting Static IP for Loader
|
||||
function staticIPMenu() {
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep -v lo)
|
||||
IPCON=""
|
||||
for N in ${ETHX}; do
|
||||
MACR="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g')"
|
||||
@@ -1395,7 +1394,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)"
|
||||
@@ -1404,10 +1403,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
|
||||
@@ -1455,7 +1454,6 @@ 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
|
||||
@@ -1465,7 +1463,7 @@ function downgradeMenu() {
|
||||
done
|
||||
rm -rf "${TMP_PATH}/mdX" >/dev/null
|
||||
) 2>&1 | dialog --backtitle "$(backtitle)" --title "Allow Downgrade" \
|
||||
--progressbox "Removing Version lock..." 20 70
|
||||
--progressbox "Removing ..." 20 70
|
||||
dialog --backtitle "$(backtitle)" --title "Allow Downgrade" \
|
||||
--msgbox "Allow Downgrade Settings completed." 0 0
|
||||
return
|
||||
@@ -1483,7 +1481,6 @@ 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
|
||||
@@ -1526,7 +1523,6 @@ 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"
|
||||
@@ -1567,7 +1563,6 @@ 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
|
||||
@@ -1757,7 +1752,6 @@ 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
|
||||
@@ -1794,12 +1788,12 @@ function bootipwaittime() {
|
||||
# let user format disks from inside arc
|
||||
function formatDisks() {
|
||||
rm -f "${TMP_PATH}/opts"
|
||||
while read -r KNAME SIZE TYPE MODEL PKNAME; do
|
||||
while read -r KNAME SIZE TYPE MODEL; do
|
||||
[ "${KNAME}" = "N/A" ] || [ "${SIZE:0:1}" = "0" ] && continue
|
||||
[ "${KNAME:0:7}" = "/dev/md" ] && continue
|
||||
[ "${KNAME}" = "${LOADER_DISK}" ] || [ "${PKNAME}" = "${LOADER_DISK}" ] && continue
|
||||
printf "\"%s\" \"%-6s %-4s %s\" \"off\"\n" "${KNAME}" "${SIZE}" "${TYPE}" "${MODEL}" >>"${TMP_PATH}/opts"
|
||||
done < <(lsblk -Jpno KNAME,SIZE,TYPE,MODEL,PKNAME 2>/dev/null | sed 's|null|"N/A"|g' | jq -r '.blockdevices[] | "\(.kname) \(.size) \(.type) \(.model) \(.pkname)"' 2>/dev/null)
|
||||
[ "${KNAME:0:8}" = "${LOADER_DISK}" ] && continue
|
||||
printf "\"%s\" \"%-6s %-4s %s\" \"off\"\n" "${KNAME}" "${SIZE}" "${MODEL}" "${TYPE}" >>"${TMP_PATH}/opts"
|
||||
done < <(lsblk -Jpno KNAME,SIZE,TYPE,MODEL 2>/dev/null | sed 's|null|"N/A"|g' | jq -r '.blockdevices[] | "\(.kname) \(.size) \(.type) \(.model)"' 2>/dev/null)
|
||||
if [ ! -f "${TMP_PATH}/opts" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Format Disks" \
|
||||
--msgbox "No disk found!" 0 0
|
||||
@@ -1809,20 +1803,20 @@ function formatDisks() {
|
||||
--checklist "Select Disks" 0 0 0 --file "${TMP_PATH}/opts" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && return
|
||||
resp=$(cat "${TMP_PATH}/resp")
|
||||
[ -z "${resp}" ] && return
|
||||
RESP=$(cat "${TMP_PATH}/resp")
|
||||
[ -z "${RESP}" ] && return
|
||||
dialog --backtitle "$(backtitle)" --title "Format Disks" \
|
||||
--yesno "Warning:\nThis operation is irreversible. Please backup important data. Do you want to continue?" 0 0
|
||||
[ $? -ne 0 ] && return
|
||||
if [ $(ls /dev/md[0-9]* 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Format Disks" \
|
||||
--yesno "Warning:\nThe current disks are in raid, do you still want to format them?" 0 0
|
||||
--yesno "Warning:\nThe current hds is in raid, do you still want to format them?" 0 0
|
||||
[ $? -ne 0 ] && return
|
||||
for I in $(ls /dev/md[0-9]* 2>/dev/null); do
|
||||
mdadm -S "${I}" >/dev/null 2>&1
|
||||
done
|
||||
fi
|
||||
for I in ${resp}; do
|
||||
for I in ${RESP}; do
|
||||
if [[ "${I}" = /dev/mmc* ]]; then
|
||||
echo y | mkfs.ext4 -T largefile4 -E nodiscard "${I}"
|
||||
else
|
||||
@@ -1838,13 +1832,13 @@ function formatDisks() {
|
||||
###############################################################################
|
||||
# Clone bootloader disk
|
||||
function cloneLoader() {
|
||||
rm -f "${TMP_PATH}/opts" 2>/dev/null
|
||||
while read -r KNAME SIZE TYPE MODEL PKNAME; do
|
||||
rm -f "${TMP_PATH}/opts"
|
||||
while read -r KNAME SIZE TYPE MODEL; do
|
||||
[ "${KNAME}" = "N/A" ] || [ "${SIZE:0:1}" = "0" ] && continue
|
||||
[ "${KNAME:0:7}" = "/dev/md" ] && continue
|
||||
[ "${KNAME}" = "${LOADER_DISK}" ] || [ "${PKNAME}" = "${LOADER_DISK}" ] && continue
|
||||
printf "\"%s\" \"%-6s %-4s %s\" \"off\"\n" "${KNAME}" "${SIZE}" "${TYPE}" "${MODEL}" >>"${TMP_PATH}/opts"
|
||||
done < <(lsblk -Jpno KNAME,SIZE,TYPE,MODEL,PKNAME 2>/dev/null | sed 's|null|"N/A"|g' | jq -r '.blockdevices[] | "\(.kname) \(.size) \(.type) \(.model) \(.pkname)"' 2>/dev/null)
|
||||
[ "${KNAME:0:8}" = "${LOADER_DISK}" ] && continue
|
||||
printf "\"%s\" \"%-6s %-4s %s\" \"off\"\n" "${KNAME}" "${SIZE}" "${MODEL}" "${TYPE}" >>"${TMP_PATH}/opts"
|
||||
done < <(lsblk -Jpno KNAME,SIZE,TYPE,MODEL 2>/dev/null | sed 's|null|"N/A"|g' | jq -r '.blockdevices[] | "\(.kname) \(.size) \(.type) \(.model)"' 2>/dev/null)
|
||||
|
||||
if [ ! -f "${TMP_PATH}/opts" ]; then
|
||||
dialog --backtitle "$(backtitle)" --colors --title "Clone Loader" \
|
||||
@@ -1874,24 +1868,25 @@ function cloneLoader() {
|
||||
[ $? -ne 0 ] && return
|
||||
fi
|
||||
(
|
||||
rm -rf "${PART3_PATH}/dl" >/dev/null
|
||||
CLEARCACHE=0
|
||||
|
||||
gzip -dc "${ARC_PATH}/grub.img.gz" | dd of="${resp}" bs=1M conv=fsync status=progress
|
||||
hdparm -z "${resp}" # reset disk cache
|
||||
fdisk -l "${resp}"
|
||||
gzip -dc "${ARC_PATH}/grub.img.gz" | dd of="${RESP}" bs=1M conv=fsync status=progress
|
||||
hdparm -z "${RESP}" # reset disk cache
|
||||
fdisk -l "${RESP}"
|
||||
sleep 1
|
||||
|
||||
NEW_BLDISK_P1="$(lsblk "${resp}" -pno KNAME,LABEL 2>/dev/null | grep 'ARC1' | awk '{print $1}')"
|
||||
NEW_BLDISK_P2="$(lsblk "${resp}" -pno KNAME,LABEL 2>/dev/null | grep 'ARC2' | awk '{print $1}')"
|
||||
NEW_BLDISK_P3="$(lsblk "${resp}" -pno KNAME,LABEL 2>/dev/null | grep 'ARC3' | awk '{print $1}')"
|
||||
SIZEOFDISK=$(cat /sys/block/${resp/\/dev\//}/size)
|
||||
ENDSECTOR=$(($(fdisk -l ${resp} | grep "${NEW_BLDISK_P3}" | awk '{print $3}') + 1))
|
||||
NEW_BLDISK_P1="$(lsblk "${RESP}" -pno KNAME,LABEL 2>/dev/null | grep 'ARC1' | awk '{print $1}')"
|
||||
NEW_BLDISK_P2="$(lsblk "${RESP}" -pno KNAME,LABEL 2>/dev/null | grep 'ARC2' | awk '{print $1}')"
|
||||
NEW_BLDISK_P3="$(lsblk "${RESP}" -pno KNAME,LABEL 2>/dev/null | grep 'ARC3' | awk '{print $1}')"
|
||||
SIZEOFDISK=$(cat /sys/block/${RESP/\/dev\//}/size)
|
||||
ENDSECTOR=$(($(fdisk -l ${RESP} | grep "${NEW_BLDISK_P3}" | awk '{print $3}') + 1))
|
||||
|
||||
if [ ${SIZEOFDISK}0 -ne ${ENDSECTOR}0 ]; then
|
||||
echo -e "\033[1;36mResizing ${NEW_BLDISK_P3}\033[0m"
|
||||
echo -e "d\n\nn\n\n\n\n\nn\nw" | fdisk "${resp}" >/dev/null 2>&1
|
||||
echo -e "d\n\nn\n\n\n\n\nn\nw" | fdisk "${RESP}" >/dev/null 2>&1
|
||||
resize2fs "${NEW_BLDISK_P3}"
|
||||
fdisk -l "${resp}"
|
||||
fdisk -l "${RESP}"
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
@@ -1944,10 +1939,29 @@ function cloneLoader() {
|
||||
sync
|
||||
__umountNewBlDisk
|
||||
sleep 3
|
||||
|
||||
mkdir -p "${TMP_PATH}/sdX1"
|
||||
mount "$(lsblk "${resp}" -pno KNAME,LABEL 2>/dev/null | grep ARC1 | awk '{print $1}')" "${TMP_PATH}/sdX1"
|
||||
cp -vRf "${PART1_PATH}/". "${TMP_PATH}/sdX1/"
|
||||
sync
|
||||
umount "${TMP_PATH}/sdX1"
|
||||
|
||||
mkdir -p "${TMP_PATH}/sdX2"
|
||||
mount "$(lsblk "${resp}" -pno KNAME,LABEL 2>/dev/null | grep ARC2 | awk '{print $1}')" "${TMP_PATH}/sdX2"
|
||||
cp -vRf "${PART2_PATH}/". "${TMP_PATH}/sdX2/"
|
||||
sync
|
||||
umount "${TMP_PATH}/sdX2"
|
||||
|
||||
mkdir -p "${TMP_PATH}/sdX3"
|
||||
mount "$(lsblk "${resp}" -pno KNAME,LABEL 2>/dev/null | grep ARC3 | awk '{print $1}')" "${TMP_PATH}/sdX3"
|
||||
cp -vRf "${PART3_PATH}/". "${TMP_PATH}/sdX3/"
|
||||
sync
|
||||
umount "${TMP_PATH}/sdX3"
|
||||
sleep 3
|
||||
) 2>&1 | dialog --backtitle "$(backtitle)" --colors --title "Clone Loader" \
|
||||
--progressbox "Cloning ..." 20 100
|
||||
dialog --backtitle "$(backtitle)" --colors --title "Clone Loader" \
|
||||
--msgbox "Bootloader has been cloned to Disk ${resp},\nremove the current Bootloader Disk!\nReboot?" 0 0
|
||||
--msgbox "Bootloader has been cloned to disk ${resp},\nplease remove the current bootloader disk!\nReboot?" 0 0
|
||||
rebootTo config
|
||||
return
|
||||
}
|
||||
@@ -1991,7 +2005,6 @@ 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"
|
||||
@@ -2000,7 +2013,7 @@ function greplogs() {
|
||||
SYSLOG=1
|
||||
umount "${TMP_PATH}/mdX"
|
||||
done
|
||||
rm -rf "${TMP_PATH}/mdX" >/dev/null
|
||||
rm -rf "${TMP_PATH}/mdX"
|
||||
fi
|
||||
if [ ${SYSLOG} -eq 1 ]; then
|
||||
MSG+="System logs found!\n"
|
||||
@@ -2028,7 +2041,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://${IPCON}/logs.tar.gz"
|
||||
URL="http://$(getIP)/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"
|
||||
@@ -2049,7 +2062,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://${IPCON}/dsmconfig.tar.gz"
|
||||
URL="http://$(getIP)/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
|
||||
@@ -2151,7 +2164,6 @@ 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"*
|
||||
@@ -2376,14 +2388,14 @@ function genHardwareID() {
|
||||
if echo "${USERID}" | grep -vq "Hardware ID"; then
|
||||
dialog --backtitle "$(backtitle)" --title "HardwareID" \
|
||||
--msgbox "HardwareID: ${HWID}\nYour HardwareID is registered to UserID: ${USERID}!" 6 70
|
||||
writeConfigKey "arc.hardwareid" "${HWID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.hwid" "${HWID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "${USERID}" "${USER_CONFIG_FILE}"
|
||||
break
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "HardwareID" \
|
||||
--yes-label "Retry" --no-label "Cancel" --yesno "HardwareID: ${HWID}\nRegister your HardwareID on\nhttps://arc.auxxxilium.tech (Discord Account needed).\nPress Retry after you registered it." 8 60
|
||||
[ $? -ne 0 ] && break
|
||||
writeConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
[ $? -ne 0 ] && USERID="" && break
|
||||
writeConfigKey "arc.hwid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
done
|
||||
@@ -2398,18 +2410,18 @@ function checkHardwareID() {
|
||||
[ ! -f "${S_FILE}.bak" ] && cp -f "${S_FILE}" "${S_FILE}.bak" 2>/dev/null || true
|
||||
if echo "${USERID}" | grep -vq "Hardware ID"; then
|
||||
if curl -skL -m 10 "https://arc.auxxxilium.tech?hwid=${HWID}&userid=${USERID}" -o "${S_FILE}" 2>/dev/null; then
|
||||
writeConfigKey "arc.hardwareid" "${HWID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.hwid" "${HWID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "${USERID}" "${USER_CONFIG_FILE}"
|
||||
else
|
||||
writeConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.hwid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
[ -f "${S_FILE}.bak" ] && mv -f "${S_FILE}.bak" "${S_FILE}" 2>/dev/null
|
||||
mv -f "${S_FILE}.bak" "${S_FILE}" 2>/dev/null
|
||||
fi
|
||||
else
|
||||
USERID=""
|
||||
writeConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.hwid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
[ -f "${S_FILE}.bak" ] && mv -f "${S_FILE}.bak" "${S_FILE}" 2>/dev/null
|
||||
mv -f "${S_FILE}.bak" "${S_FILE}" 2>/dev/null
|
||||
fi
|
||||
return
|
||||
}
|
||||
|
||||
@@ -13,10 +13,11 @@
|
||||
. "${ARC_PATH}/include/compat.sh"
|
||||
. "${ARC_PATH}/arc-functions.sh"
|
||||
|
||||
# Get Keymap and Timezone and check System
|
||||
# Get Keymap and Timezone Config
|
||||
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}")"
|
||||
|
||||
@@ -88,7 +89,11 @@ function backtitlep() {
|
||||
# Model Selection
|
||||
function arcModel() {
|
||||
STEP="model"
|
||||
[ "${ARCOFFLINE}" != "true" ] && checkHardwareID || true
|
||||
if [ ! -f "${S_FILE}" ] || [ ! -f "${P_FILE}" ]; then
|
||||
updateConfigs
|
||||
else
|
||||
checkHardwareID
|
||||
fi
|
||||
dialog --backtitle "$(backtitlep)" --title "Model" \
|
||||
--infobox "Reading Models..." 3 25
|
||||
ARCCONF="$(readConfigKey "${MODEL:-SA6400}.serial" "${S_FILE}")"
|
||||
@@ -120,9 +125,9 @@ function arcModel() {
|
||||
[ "${DT}" = "true" ] && HBAS="" || HBAS="x"
|
||||
[ "${M}" = "SA6400" ] && HBAS="x"
|
||||
[ "${DT}" = "false" ] && USBS="int/ext" || USBS="ext"
|
||||
[[ "${M}" = "DS718+" || "${M}" = "DS918+" || "${M}" = "DS1019+" || "${M}" = "DS1621xs+" || "${M}" = "RS1619xs+" ]] && M_2_CACHE="+" || M_2_CACHE="x"
|
||||
[[ "${M}" = "DS918+" || "${M}" = "DS1019+" || "${M}" = "DS1621xs+" || "${M}" = "RS1619xs+" ]] && M_2_CACHE="+" || M_2_CACHE="x"
|
||||
[[ "${M}" = "DS220+" || "${M}" = "DS224+" ]] && M_2_CACHE=""
|
||||
[[ "${M}" = "DS220+" || "${M}" = "DS224+" || "${M}" = "DS718+" || "${M}" = "DS918+" || "${M}" = "DS1019+" || "${M}" = "DS1621xs+" || "${M}" = "RS1619xs+" ]] && M_2_STORAGE="" || M_2_STORAGE="+"
|
||||
[[ "${M}" = "DS220+" || "${M}" = "DS224+" || "${M}" = "DS918+" || "${M}" = "DS1019+" || "${M}" = "DS1621xs+" || "${M}" = "RS1619xs+" ]] && M_2_STORAGE="" || M_2_STORAGE="+"
|
||||
# Check id model is compatible with CPU
|
||||
if [ ${RESTRICT} -eq 1 ]; then
|
||||
for F in "${FLAGS}"; do
|
||||
@@ -243,8 +248,8 @@ function arcVersion() {
|
||||
if [ "${ARCMODE}" = "config" ] && [ "${ARCRESTORE}" != "true" ]; then
|
||||
# Select Build for DSM
|
||||
ITEMS="$(readConfigEntriesArray "platforms.${PLATFORM}.productvers" "${P_FILE}" | sort -r)"
|
||||
dialog --clear --no-items --nocancel --title "DSM Version" --backtitle "$(backtitlep)" \
|
||||
--no-items --menu "Select DSM Version" 7 30 0 ${ITEMS} \
|
||||
dialog --clear --no-items --nocancel --title "Version" --backtitle "$(backtitlep)" \
|
||||
--no-items --menu "Choose DSM Version" 7 30 0 ${ITEMS} \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && return 0
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
@@ -281,8 +286,8 @@ function arcVersion() {
|
||||
PREV="${V}"
|
||||
done < <(echo "${PVS}")
|
||||
DSMPVS="$(cat ${TMP_PATH}/versions)"
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "DSM Build" \
|
||||
--no-items --menu "Select DSM Build" 0 0 0 ${DSMPVS} \
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Version" \
|
||||
--no-items --menu "Choose a DSM Build" 0 0 0 ${DSMPVS} \
|
||||
2>${TMP_PATH}/resp
|
||||
RET=$?
|
||||
[ ${RET} -ne 0 ] && return
|
||||
@@ -364,7 +369,7 @@ function arcVersion() {
|
||||
if [ -n "${ARCCONF}" ]; then
|
||||
initConfigKey "addons.arcdns" "" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
if [ ${SASDRIVES} -gt 0 ] && [ "${DT}" = "false" ]; then
|
||||
if [ ${SASDRIVES} -gt 0 ]; then
|
||||
initConfigKey "addons.smartctl" "" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
fi
|
||||
@@ -408,12 +413,12 @@ 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" ] && [ "${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}"
|
||||
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}"
|
||||
elif [ "${ARCMODE}" = "config" ]; then
|
||||
dialog --clear --backtitle "$(backtitlep)" \
|
||||
--nocancel --title "SN/Mac Options"\
|
||||
@@ -475,14 +480,12 @@ function arcSettings() {
|
||||
PAT_HASH="$(readConfigKey "pathash" "${USER_CONFIG_FILE}")"
|
||||
DT="$(readConfigKey "platforms.${PLATFORM}.dt" "${P_FILE}")"
|
||||
# Get Network Config for Loader
|
||||
if [ "${ARCMODE}" = "config" ] || [ "${ARCPATCH}" = "true" ] || [ "${ARCPATCH}" = "false" ]; then
|
||||
STEP="network"
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Network Config" \
|
||||
--infobox "Generating Network Config..." 3 40
|
||||
sleep 2
|
||||
getnet
|
||||
[ $? -ne 0 ] && return 1
|
||||
fi
|
||||
STEP="network"
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Network Config" \
|
||||
--infobox "Generating Network Config..." 3 40
|
||||
sleep 2
|
||||
getnet
|
||||
[ $? -ne 0 ] && return 1
|
||||
if [ "${ONLYPATCH}" = "true" ]; then
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
@@ -490,7 +493,7 @@ function arcSettings() {
|
||||
return 0
|
||||
fi
|
||||
# Select Portmap for Loader
|
||||
if [ "${DT}" = "false" ] && [ ${SATADRIVES} -gt 0 ]; then
|
||||
if [ "${DT}" = "false" ] && [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
|
||||
STEP="storagemap"
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Storage Map" \
|
||||
--infobox "Generating Storage Map..." 3 40
|
||||
@@ -531,7 +534,7 @@ function arcSettings() {
|
||||
fi
|
||||
if [ ${DEVICENIC} -gt ${MODELNIC} ] && [ "${ARCPATCH}" = "true" ]; then
|
||||
dialog --backtitle "$(backtitlep)" --title "Arc Warning" \
|
||||
--msgbox "WARN: You have more NIC (${DEVICENIC}) than supported by Model (${MODELNIC}).\nOnly the first ${MODELNIC} are used by Arc Patch." 6 80
|
||||
--msgbox "WARN: You have more NIC (${DEVICENIC}) than supported by Model (${MODELNIC}).\nOnly ${MODELNIC} are used by Arc Patch." 6 80
|
||||
fi
|
||||
# Check for AES
|
||||
if [ "${AESSYS}" = "false" ]; then
|
||||
@@ -712,7 +715,7 @@ function make() {
|
||||
livepatch
|
||||
sleep 3
|
||||
) 2>&1 | dialog --backtitle "$(backtitlep)" --colors --title "Build Loader" \
|
||||
--progressbox "Patching DSM Files..." 20 70
|
||||
--progressbox "Magical things happening..." 20 70
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "Build Loader" --aspect 18 \
|
||||
--infobox "Configuration issue found.\nCould not build Loader!\nExit." 5 40
|
||||
@@ -803,7 +806,8 @@ function boot() {
|
||||
dialog --backtitle "$(backtitle)" --title "Arc Boot" \
|
||||
--infobox "Booting DSM...\nPlease stay patient!" 4 25
|
||||
sleep 2
|
||||
exec reboot
|
||||
clear
|
||||
exec boot.sh
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -818,7 +822,7 @@ if [ "${ARCMODE}" = "update" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Arc Update" \
|
||||
--infobox "Update is not possible in Offline Mode!" 5 40
|
||||
sleep 3
|
||||
exec reboot
|
||||
reboot
|
||||
fi
|
||||
elif [ "${ARCMODE}" = "automated" ]; then
|
||||
# Check for Custom Build
|
||||
@@ -836,7 +840,7 @@ else
|
||||
echo "0 \"HardwareID for Arc Patch\" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
echo "1 \"Choose Model \" " >>"${TMP_PATH}/menu"
|
||||
if [ "${CONFDONE}" = "true" ]; then
|
||||
if [ "${CONFDONE}" = "true" ] && [ -n "${IPCON}" ]; then
|
||||
echo "2 \"Build Loader \" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
if [ "${BUILDDONE}" = "true" ]; then
|
||||
|
||||
@@ -102,20 +102,6 @@ EMMCBOOT="$(readConfigKey "emmcboot" "${USER_CONFIG_FILE}")"
|
||||
MODBLACKLIST="$(readConfigKey "modblacklist" "${USER_CONFIG_FILE}")"
|
||||
ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")"
|
||||
|
||||
# HardwareID Check
|
||||
if [ "${ARCPATCH}" = "true" ]; then
|
||||
HARDWAREID="$(readConfigKey "arc.hardwareid" "${USER_CONFIG_FILE}")"
|
||||
HWID="$(genHWID)"
|
||||
if [ "${HARDWAREID}" != "${HWID}" ]; then
|
||||
echo "\033[1;31m*** HardwareID does not match! - Loader can't boot to DSM! You need to reconfigure your Loader - Rebooting to Config Mode! ***\033[0m"
|
||||
writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
sleep 5
|
||||
rebootTo "config"
|
||||
fi
|
||||
fi
|
||||
|
||||
declare -A CMDLINE
|
||||
|
||||
# Automated Cmdline
|
||||
@@ -179,9 +165,9 @@ CMDLINE['panic']="${KERNELPANIC:-0}"
|
||||
CMDLINE['pcie_aspm']="off"
|
||||
CMDLINE['modprobe.blacklist']="${MODBLACKLIST}"
|
||||
[ $(cat /proc/cpuinfo | grep Intel | wc -l) -gt 0 ] && CMDLINE["intel_pstate"]="passive"
|
||||
[ $(cat /proc/cpuinfo | grep AMD | wc -l) -gt 0 ] && CMDLINE["amd_pstate"]="passive"
|
||||
CMDLINE['intremap']="no_x2apic_optout"
|
||||
# CMDLINE['nointremap']="" # no need
|
||||
# CMDLINE['split_lock_detect']="off" # no need
|
||||
# CMDLINE['nox2apic']="" # check platform
|
||||
# CMDLINE['nomodeset']=""
|
||||
if echo "apollolake geminilake purley" | grep -wq "${PLATFORM}"; then
|
||||
CMDLINE["nox2apic"]=""
|
||||
@@ -208,14 +194,14 @@ if echo "purley broadwellnkv2" | grep -wq "${PLATFORM}"; then
|
||||
fi
|
||||
|
||||
# NIC Cmdline
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
ETHM=$(readConfigKey "${MODEL}.ports" "${S_FILE}" 2>/dev/null)
|
||||
ETHN=$(echo ${ETHX} | wc -w)
|
||||
[ -z "${ETHM}" ] && ETHM="${ETHN}"
|
||||
[ -z "${ETHM}" ] && ETHM=${ETHN}
|
||||
NIC=0
|
||||
for N in ${ETHX}; do
|
||||
MAC="$(readConfigKey "${N}" "${USER_CONFIG_FILE}")"
|
||||
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | tr '[:upper:]' '[:lower:]')" || NIC=$((NIC + 1))
|
||||
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | tr '[:lower:]' '[:upper:]')" || NIC=$((${NIC} + 1))
|
||||
[ ${NIC} -le ${ETHM} ] && CMDLINE["mac${NIC}"]="${MAC}"
|
||||
[ ${NIC} -ge ${ETHM} ] && break
|
||||
done
|
||||
@@ -274,8 +260,8 @@ elif [ "${DIRECTBOOT}" = "false" ]; then
|
||||
echo -e "\r${DRIVER}: \033[1;37mNOT CONNECTED\033[0m"
|
||||
break
|
||||
fi
|
||||
COUNT=$((COUNT + 1))
|
||||
IP="$(getIP "${N}")"
|
||||
COUNT=$((${COUNT} + 1))
|
||||
IP="$(getIP ${N})"
|
||||
if [ -n "${IP}" ]; then
|
||||
SPEED=$(ethtool ${N} 2>/dev/null | grep "Speed:" | awk '{print $2}')
|
||||
if [[ "${IP}" =~ ^169\.254\..* ]]; then
|
||||
@@ -314,7 +300,7 @@ elif [ "${DIRECTBOOT}" = "false" ]; then
|
||||
done
|
||||
|
||||
# # Unload all network interfaces
|
||||
# for D in $(realpath /sys/class/net/*/device/driver); do rmmod -f "$(basename ${D})" 2>/dev/null || true; done
|
||||
# for D in $(readlink /sys/class/net/*/device/driver); do rmmod -f "$(basename ${D})" 2>/dev/null || true; done
|
||||
|
||||
# Unload all graphics drivers
|
||||
# for D in $(lsmod | grep -E '^(nouveau|amdgpu|radeon|i915)' | awk '{print $1}'); do rmmod -f "${D}" 2>/dev/null || true; done
|
||||
@@ -334,6 +320,5 @@ elif [ "${DIRECTBOOT}" = "false" ]; then
|
||||
echo -e "\033[1;37mBooting DSM...\033[0m"
|
||||
# Boot to DSM
|
||||
[ "${KERNELLOAD}" = "kexec" ] && kexec -e || poweroff
|
||||
fi
|
||||
|
||||
exit 0
|
||||
exit 0
|
||||
fi
|
||||
Binary file not shown.
@@ -136,7 +136,7 @@ function generateMacAddress() {
|
||||
[ ${I} -lt ${NUM} ] && MACS+=" "
|
||||
done
|
||||
|
||||
MACS="$(echo "${MACS}" | tr '[:upper:]' '[:lower:]')"
|
||||
MACS="$(echo "${MACS}" | tr '[:lower:]' '[:upper:]')"
|
||||
echo "${MACS}"
|
||||
return 0
|
||||
}
|
||||
@@ -229,7 +229,7 @@ function _set_conf_kv() {
|
||||
# sort netif busid
|
||||
function _sort_netif() {
|
||||
local ETHLIST=""
|
||||
local ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
local ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
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)"
|
||||
@@ -277,7 +277,7 @@ function getBus() {
|
||||
# 1 - ethN
|
||||
function getIP() {
|
||||
local IP=""
|
||||
MACR="$(cat /sys/class/net/${1}/address 2>/dev/null | sed 's/://g')"
|
||||
MACR="$(cat /sys/class/net/${1}/address 2>/dev/null | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
|
||||
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${IPR}" ]; then
|
||||
IFS='/' read -r -a IPRA <<<"${IPR}"
|
||||
@@ -511,13 +511,9 @@ function onlineCheck() {
|
||||
LAYOUT="$(readConfigKey "layout" "${USER_CONFIG_FILE}")"
|
||||
if [ -z "${LAYOUT}" ]; then
|
||||
[ -n "${KEYMAP}" ] && KEYMAP="$(echo ${KEYMAP} | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]' | tr -d '[:punct:]' | tr -d '[:digit:]')"
|
||||
if loadkeys "${KEYMAP:-us}" 2>/dev/null; then
|
||||
writeConfigKey "keymap" "${KEYMAP}" "${USER_CONFIG_FILE}"
|
||||
else
|
||||
KEYMAP="us"
|
||||
loadkeys "${KEYMAP}" 2>/dev/null
|
||||
writeConfigKey "keymap" "${KEYMAP}" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
[ -n "${KEYMAP}" ] && writeConfigKey "keymap" "${KEYMAP}" "${USER_CONFIG_FILE}"
|
||||
[ -z "${KEYMAP}" ] && KEYMAP="us"
|
||||
loadkeys ${KEYMAP}
|
||||
fi
|
||||
[ $(echo "${ARC_VERSION}" | grep "dev" | wc -l) -eq 0 ] && NEWTAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep -v "dev" | sort -rV | head -1)" || NEWTAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep "dev" | sort -rV | head -1)"
|
||||
if [ -n "${NEWTAG}" ]; then
|
||||
@@ -589,18 +585,13 @@ function check_port() {
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Unmount disks
|
||||
# Unmount new boot loader disk
|
||||
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() {
|
||||
@@ -623,15 +614,4 @@ 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
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
# Get Network Config for Loader
|
||||
function getnet() {
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
||||
ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")"
|
||||
NICPORTS="$(readConfigKey "${MODEL}.ports" "${S_FILE}" 2>/dev/null)"
|
||||
@@ -21,16 +21,16 @@ function getnet() {
|
||||
# User Mac
|
||||
for N in ${ETHX}; do
|
||||
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 ${N} (Eq. 001132a1b2c3).\nA custom Mac will not be applied to NIC!" 7 50\
|
||||
--inputbox "Type a custom MAC for ${ETH} (Eq. 001132abc123)." 7 50 "${MAC}"\
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && break
|
||||
MAC=$(cat "${TMP_PATH}/resp")
|
||||
[ -z "${MAC}" ] && MAC="$(readConfigKey "${N}" "${USER_CONFIG_FILE}")"
|
||||
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g')"
|
||||
MAC="$(echo "${MAC}" | tr '[:upper:]' '[:lower:]')"
|
||||
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
|
||||
MAC="$(echo "${MAC}" | tr '[:lower:]' '[:upper:]')"
|
||||
if [ ${#MAC} -eq 12 ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Mac Setting" --msgbox "Set Mac for ${N} to ${MAC}!" 5 50
|
||||
writeConfigKey "${N}" "${MAC}" "${USER_CONFIG_FILE}"
|
||||
break
|
||||
else
|
||||
@@ -42,9 +42,9 @@ function getnet() {
|
||||
}
|
||||
|
||||
# Get Amount of NIC
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
ETHX="$(ls /sys/class/net 2>/dev/null | grep eth)"
|
||||
# Get actual IP
|
||||
for N in ${ETHX}; do
|
||||
IPCON="$(getIP "${N}")"
|
||||
for ETH in ${ETHX}; do
|
||||
IPCON=$(getIP ${ETH})
|
||||
[ -n "${IPCON}" ] && break
|
||||
done
|
||||
@@ -2,50 +2,52 @@
|
||||
function getmap() {
|
||||
# Sata Disks
|
||||
SATADRIVES=0
|
||||
if [ $(lspci -d ::106 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
# Clean old files
|
||||
[ -f "${TMP_PATH}/drivesmax" ] && rm -f "${TMP_PATH}/drivesmax" && touch "${TMP_PATH}/drivesmax" || true
|
||||
[ -f "${TMP_PATH}/drivescon" ] && rm -f "${TMP_PATH}/drivescon" && touch "${TMP_PATH}/drivescon" || true
|
||||
[ -f "${TMP_PATH}/ports" ] && rm -f "${TMP_PATH}/ports" && touch "${TMP_PATH}/ports" || true
|
||||
[ -f "${TMP_PATH}/remap" ] && rm -f "${TMP_PATH}/remap" && touch "${TMP_PATH}/remap" || true
|
||||
if [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
|
||||
let DISKIDXMAPIDX=0
|
||||
DISKIDXMAP=""
|
||||
let DISKIDXMAPIDXMAX=0
|
||||
DISKIDXMAPMAX=""
|
||||
for PCI in $(lspci -d ::106 | awk '{print $1}'); do
|
||||
NUMPORTS=0
|
||||
CONPORTS=0
|
||||
unset HOSTPORTS
|
||||
declare -A HOSTPORTS
|
||||
while read -r LINE; do
|
||||
ATAPORT="$(echo ${LINE} | grep -o 'ata[0-9]*')"
|
||||
PORT=$(echo ${ATAPORT} | sed 's/ata//')
|
||||
HOSTPORTS[${PORT}]=$(echo ${LINE} | grep -o 'host[0-9]*$')
|
||||
done < <(ls -l /sys/class/scsi_host | grep -F "${PCI}")
|
||||
while read -r PORT; do
|
||||
ls -l /sys/block | grep -F -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0
|
||||
PCMD=$(cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd)
|
||||
[ ${PCMD} = 0 ] && DUMMY=1 || DUMMY=0
|
||||
[ ${ATTACH} = 1 ] && CONPORTS="$((${CONPORTS} + 1))" && echo "$((${PORT} - 1))" >>"${TMP_PATH}/ports"
|
||||
[ ${DUMMY} = 1 ] # Do nothing for now
|
||||
NUMPORTS=$((${NUMPORTS} + 1))
|
||||
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
|
||||
[ ${NUMPORTS} -gt 8 ] && NUMPORTS=8
|
||||
[ ${CONPORTS} -gt 8 ] && CONPORTS=8
|
||||
echo -n "${NUMPORTS}" >>"${TMP_PATH}/drivesmax"
|
||||
echo -n "${CONPORTS}" >>"${TMP_PATH}/drivescon"
|
||||
DISKIDXMAP=$DISKIDXMAP$(printf "%02x" $DISKIDXMAPIDX)
|
||||
let DISKIDXMAPIDX=$DISKIDXMAPIDX+$CONPORTS
|
||||
DISKIDXMAPMAX=$DISKIDXMAPMAX$(printf "%02x" $DISKIDXMAPIDXMAX)
|
||||
let DISKIDXMAPIDXMAX=$DISKIDXMAPIDXMAX+$NUMPORTS
|
||||
SATADRIVES=$((${SATADRIVES} + ${CONPORTS}))
|
||||
done
|
||||
fi
|
||||
# Clean old files
|
||||
[ -f "${TMP_PATH}/drivesmax" ] && rm -f "${TMP_PATH}/drivesmax"
|
||||
touch "${TMP_PATH}/drivesmax"
|
||||
[ -f "${TMP_PATH}/drivescon" ] && rm -f "${TMP_PATH}/drivescon"
|
||||
touch "${TMP_PATH}/drivescon"
|
||||
[ -f "${TMP_PATH}/ports" ] && rm -f "${TMP_PATH}/ports"
|
||||
touch "${TMP_PATH}/ports"
|
||||
[ -f "${TMP_PATH}/remap" ] && rm -f "${TMP_PATH}/remap"
|
||||
touch "${TMP_PATH}/remap"
|
||||
if [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
|
||||
let DISKIDXMAPIDX=0
|
||||
DISKIDXMAP=""
|
||||
let DISKIDXMAPIDXMAX=0
|
||||
DISKIDXMAPMAX=""
|
||||
for PCI in $(lspci -d ::106 | awk '{print $1}'); do
|
||||
NUMPORTS=0
|
||||
CONPORTS=0
|
||||
unset HOSTPORTS
|
||||
declare -A HOSTPORTS
|
||||
while read -r LINE; do
|
||||
ATAPORT="$(echo ${LINE} | grep -o 'ata[0-9]*')"
|
||||
PORT=$(echo ${ATAPORT} | sed 's/ata//')
|
||||
HOSTPORTS[${PORT}]=$(echo ${LINE} | grep -o 'host[0-9]*$')
|
||||
done < <(ls -l /sys/class/scsi_host | grep -F "${PCI}")
|
||||
while read -r PORT; do
|
||||
ls -l /sys/block | grep -F -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0
|
||||
PCMD=$(cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd)
|
||||
[ ${PCMD} = 0 ] && DUMMY=1 || DUMMY=0
|
||||
[ ${ATTACH} = 1 ] && CONPORTS="$((${CONPORTS} + 1))" && echo "$((${PORT} - 1))" >>"${TMP_PATH}/ports"
|
||||
[ ${DUMMY} = 1 ] # Do nothing for now
|
||||
NUMPORTS=$((${NUMPORTS} + 1))
|
||||
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
|
||||
[ ${NUMPORTS} -gt 8 ] && NUMPORTS=8
|
||||
[ ${CONPORTS} -gt 8 ] && CONPORTS=8
|
||||
echo -n "${NUMPORTS}" >>"${TMP_PATH}/drivesmax"
|
||||
echo -n "${CONPORTS}" >>"${TMP_PATH}/drivescon"
|
||||
DISKIDXMAP=$DISKIDXMAP$(printf "%02x" $DISKIDXMAPIDX)
|
||||
let DISKIDXMAPIDX=$DISKIDXMAPIDX+$CONPORTS
|
||||
DISKIDXMAPMAX=$DISKIDXMAPMAX$(printf "%02x" $DISKIDXMAPIDXMAX)
|
||||
let DISKIDXMAPIDXMAX=$DISKIDXMAPIDXMAX+$NUMPORTS
|
||||
SATADRIVES=$((${SATADRIVES} + ${CONPORTS}))
|
||||
done
|
||||
fi
|
||||
# SAS Disks
|
||||
SASDRIVES=0
|
||||
if [ $(lspci -d ::107 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
if [ $(lspci -d ::107 | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::107 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n 2>/dev/null)
|
||||
@@ -55,7 +57,7 @@ function getmap() {
|
||||
fi
|
||||
# SCSI Disks
|
||||
SCSIDRIVES=0
|
||||
if [ $(lspci -d ::100 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
if [ $(lspci -d ::100 | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::100 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort - 2>/dev/null)
|
||||
@@ -65,7 +67,7 @@ function getmap() {
|
||||
fi
|
||||
# Raid Disks
|
||||
RAIDDRIVES=0
|
||||
if [ $(lspci -d ::104 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
if [ $(lspci -d ::104 | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::104 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n 2>/dev/null)
|
||||
@@ -75,7 +77,7 @@ function getmap() {
|
||||
fi
|
||||
# USB Disks
|
||||
USBDRIVES=0
|
||||
if [ $(ls -l /sys/class/scsi_host 2>/dev/null | grep usb | wc -l) -gt 0 ]; then
|
||||
if [[ -d "/sys/class/scsi_host" && $(ls -l /sys/class/scsi_host | grep usb | wc -l) -gt 0 ]]; then
|
||||
for PCI in $(lspci -d ::c03 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n 2>/dev/null)
|
||||
@@ -86,7 +88,7 @@ function getmap() {
|
||||
fi
|
||||
# MMC Disks
|
||||
MMCDRIVES=0
|
||||
if [ $(ls -l /sys/block/mmc* 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
if [[ -d "/sys/class/mmc_host" && $(ls -l /sys/class/mmc_host | grep mmc_host | wc -l) -gt 0 ]]; then
|
||||
for PCI in $(lspci -d ::805 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORTNUM=$(ls -l /sys/block/mmc* | grep "${PCI}" | wc -l 2>/dev/null)
|
||||
@@ -96,7 +98,7 @@ function getmap() {
|
||||
fi
|
||||
# NVMe Disks
|
||||
NVMEDRIVES=0
|
||||
if [ $(lspci -d ::108 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
if [ $(lspci -d ::108 | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::108 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/nvme | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/nvme//' | sort -n 2>/dev/null)
|
||||
|
||||
@@ -76,13 +76,13 @@ function updateLoader() {
|
||||
--infobox "Update Loader successful! -> Reboot to automated Build Mode..." 3 60
|
||||
sleep 3
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
rebootTo automated
|
||||
rebootTo "automated"
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "Update Loader" --aspect 18 \
|
||||
--infobox "Update Loader successful! -> Reboot to Config Mode..." 3 50
|
||||
sleep 3
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
rebootTo config
|
||||
rebootTo "config"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
@@ -38,8 +38,6 @@ initConfigKey "arc.confdone" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.dynamic" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.offline" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.version" "${ARC_VERSION}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "boot" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "boot.dsminfo" "true" "${USER_CONFIG_FILE}"
|
||||
@@ -95,27 +93,27 @@ if arrayExistItem "sortnetif:" $(readConfigMap "addons" "${USER_CONFIG_FILE}");
|
||||
_sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
|
||||
fi
|
||||
# Read/Write IP/Mac to config
|
||||
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' | tr '[:upper:]' '[:lower:]')"
|
||||
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${IPR}" ] && [ "1" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then
|
||||
IFS='/' read -r -a IPRA <<<"${IPR}"
|
||||
ip addr flush dev "${N}"
|
||||
ip addr add "${IPRA[0]}/${IPRA[1]:-"255.255.255.0"}" dev "${N}"
|
||||
if [ -n "${IPRA[2]}" ]; then
|
||||
ip route add default via "${IPRA[2]}" dev "${N}"
|
||||
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
|
||||
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
for N in ${ETHX}; do
|
||||
MACR="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
|
||||
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${IPR}" ] && [ "1" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then
|
||||
IFS='/' read -r -a IPRA <<<"${IPR}"
|
||||
ip addr flush dev ${N}
|
||||
ip addr add ${IPRA[0]}/${IPRA[1]:-"255.255.255.0"} dev ${N}
|
||||
if [ -n "${IPRA[2]}" ]; then
|
||||
ip route add default via ${IPRA[2]} dev ${N}
|
||||
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 "${N}" "${MACR}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
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
|
||||
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 "${N}" "${MACR}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
ETHN=$(echo ${ETHX} | wc -w)
|
||||
writeConfigKey "device.nic" "${ETHN}" "${USER_CONFIG_FILE}"
|
||||
# No network devices
|
||||
@@ -154,7 +152,11 @@ elif [ "${ARCMODE}" = "update" ]; then
|
||||
echo -e "\033[1;34mStarting Update Mode...\033[0m"
|
||||
elif [ "${BUILDDONE}" = "true" ] && [ "${ARCMODE}" = "dsm" ]; then
|
||||
echo -e "\033[1;34mStarting DSM Mode...\033[0m"
|
||||
exec boot.sh && exit 0
|
||||
if [ -f "${ARC_PATH}/boot.sh" ]; then
|
||||
exec boot.sh && exit 0
|
||||
else
|
||||
echo -e "\033[1;31mError: Can't find Arc System Files...\033[0m"
|
||||
fi
|
||||
else
|
||||
echo -e "\033[1;34mStarting Config Mode...\033[0m"
|
||||
fi
|
||||
@@ -175,8 +177,8 @@ for N in ${ETHX}; do
|
||||
echo -e "\r${DRIVER}: \033[1;37mNOT CONNECTED\033[0m"
|
||||
break
|
||||
fi
|
||||
COUNT=$((COUNT + 1))
|
||||
IP="$(getIP "${N}")"
|
||||
COUNT=$((${COUNT} + 1))
|
||||
IP="$(getIP ${N})"
|
||||
if [ -n "${IP}" ]; then
|
||||
SPEED=$(ethtool ${N} 2>/dev/null | grep "Speed:" | awk '{print $2}')
|
||||
if [[ "${IP}" =~ ^169\.254\..* ]]; then
|
||||
@@ -208,9 +210,6 @@ mkdir -p "${MODULES_PATH}"
|
||||
mkdir -p "${PATCH_PATH}"
|
||||
mkdir -p "${USER_UP_PATH}"
|
||||
|
||||
# Tell webterminal that the loader is ready
|
||||
touch "${HOME}/.initialized"
|
||||
|
||||
# Load Arc Overlay
|
||||
echo -e "\033[1;34mLoading Arc Overlay...\033[0m"
|
||||
echo
|
||||
@@ -221,7 +220,7 @@ RAM=$(awk '/MemTotal:/ {printf "%.0f", $2 / 1024}' /proc/meminfo 2>/dev/null)
|
||||
if [ ${RAM} -le 3500 ]; then
|
||||
echo -e "\033[1;31mYou have less than 4GB of RAM, if errors occur in loader creation, please increase the amount of RAM.\033[0m\n\033[1;31mUse arc.sh to proceed. Not recommended!\033[0m"
|
||||
else
|
||||
exec arc.sh
|
||||
arc.sh
|
||||
fi
|
||||
|
||||
exit 0
|
||||
@@ -93,21 +93,21 @@ while IFS=': ' read -r KEY VALUE; do
|
||||
done < <(readConfigMap "modules" "${USER_CONFIG_FILE}")
|
||||
|
||||
# Patches (diff -Naru OLDFILE NEWFILE > xxx.patch)
|
||||
PATCHS=(
|
||||
"ramdisk-etc-rc-*.patch"
|
||||
"ramdisk-init-script-*.patch"
|
||||
"ramdisk-post-init-script-*.patch"
|
||||
"ramdisk-disable-root-pwd-*.patch"
|
||||
"ramdisk-disable-disabled-ports-*.patch"
|
||||
)
|
||||
for PE in "${PATCHS[@]}"; do
|
||||
PATCHES=()
|
||||
PATCHES+=("ramdisk-etc-rc-*.patch")
|
||||
PATCHES+=("ramdisk-init-script-*.patch")
|
||||
PATCHES+=("ramdisk-post-init-script-*.patch")
|
||||
PATCHES+=("ramdisk-disable-root-pwd-*.patch")
|
||||
PATCHES+=("ramdisk-disable-disabled-ports-*.patch")
|
||||
for PE in ${PATCHES[@]}; do
|
||||
RET=1
|
||||
echo "Patching with ${PE}" >"${LOG_FILE}"
|
||||
# ${PE} contains *, so double quotes cannot be added
|
||||
for PF in $(ls ${PATCH_PATH}/${PE} 2>/dev/null); do
|
||||
echo "Patching with ${PF}" >>"${LOG_FILE}"
|
||||
# busybox patch and gun patch have different processing methods and parameters.
|
||||
(cd "${RAMDISK_PATH}" && busybox patch -p1 -i "${PF}") >>"${LOG_FILE}" 2>&1
|
||||
(
|
||||
cd "${RAMDISK_PATH}"
|
||||
busybox patch -p1 -i "${PF}" >>"${LOG_FILE}" 2>&1 # busybox patch and gun patch have different processing methods and parameters.
|
||||
)
|
||||
RET=$?
|
||||
[ ${RET} -eq 0 ] && break
|
||||
done
|
||||
@@ -149,22 +149,20 @@ gzip -dc "${LKMS_PATH}/rp-${PLATFORM}-${KVERP}-${LKM}.ko.gz" >"${RAMDISK_PATH}/u
|
||||
# Addons
|
||||
echo "Create addons.sh" >"${LOG_FILE}"
|
||||
mkdir -p "${RAMDISK_PATH}/addons"
|
||||
{
|
||||
echo "#!/bin/sh"
|
||||
echo 'echo "addons.sh called with params ${@}"'
|
||||
echo "export LOADERLABEL=\"ARC\""
|
||||
echo "export LOADERVERSION=\"${ARC_VERSION}\""
|
||||
echo "export LOADERBUILD=\"${ARC_BUILD}\""
|
||||
echo "export LOADERBRANCH=\"${ARCBRANCH}\""
|
||||
echo "export PLATFORM=\"${PLATFORM}\""
|
||||
echo "export MODEL=\"${MODEL}\""
|
||||
echo "export MODELID=\"${MODELID}\""
|
||||
echo "export PRODUCTVER=\"${PRODUCTVER}\""
|
||||
echo "export MLINK=\"${PAT_URL}\""
|
||||
echo "export MCHECKSUM=\"${PAT_HASH}\""
|
||||
echo "export LAYOUT=\"${LAYOUT}\""
|
||||
echo "export KEYMAP=\"${KEYMAP}\""
|
||||
} >"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "#!/bin/sh" >"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo 'echo "addons.sh called with params ${@}"' >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LOADERLABEL=\"ARC\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LOADERVERSION=\"${ARC_VERSION}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LOADERBUILD=\"${ARC_BUILD}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LOADERBRANCH=\"${ARCBRANCH}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export PLATFORM=\"${PLATFORM}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export PRODUCTVER=\"${PRODUCTVER}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export MODEL=\"${MODEL}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export MODELID=\"${MODELID}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export MLINK=\"${PAT_URL}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export MCHECKSUM=\"${PAT_HASH}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LAYOUT=\"${LAYOUT}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export KEYMAP=\"${KEYMAP}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
chmod +x "${RAMDISK_PATH}/addons/addons.sh"
|
||||
|
||||
# System Addons
|
||||
|
||||
@@ -77,7 +77,7 @@ set menu_color_normal=white/black
|
||||
set menu_color_highlight=white/red
|
||||
set color_normal=white/black
|
||||
|
||||
set ARC_CMDLINE="earlyprintk earlycon=uart8250,io,0x3f8,115200n8 console=ttyS0,115200n8 root=/dev/ram rootwait nomodeset intremap=no_x2apic_optout net.ifnames=0 panic=5 split_lock_detect=off pcie_aspm=off intel_pstate=passive amd_pstate=passive"
|
||||
set ARC_CMDLINE="earlyprintk earlycon=uart8250,io,0x3f8,115200n8 console=ttyS0,115200n8 root=/dev/ram rootwait nointremap net.ifnames=0 panic=5 split_lock_detect=off pcie_aspm=off intel_pstate=passive nox2apic nomodeset"
|
||||
|
||||
search --set=root --label "ARC3"
|
||||
if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
|
||||
|
||||
126
scripts/func.sh
126
scripts/func.sh
@@ -243,9 +243,9 @@ function repackInitrd() {
|
||||
[ -z "${INITRD_FILE}" ] || [ ! -f "${INITRD_FILE}" ] && exit 1
|
||||
[ -z "${PLUGIN_PATH}" ] || [ ! -d "${PLUGIN_PATH}" ] && exit 1
|
||||
|
||||
INITRD_FILE="$(realpath "${INITRD_FILE}")"
|
||||
PLUGIN_PATH="$(realpath "${PLUGIN_PATH}")"
|
||||
OUTPUT_PATH="$(realpath "${OUTPUT_PATH}")"
|
||||
INITRD_FILE="$(readlink -f "${INITRD_FILE}")"
|
||||
PLUGIN_PATH="$(readlink -f "${PLUGIN_PATH}")"
|
||||
OUTPUT_PATH="$(readlink -f "${OUTPUT_PATH}")"
|
||||
|
||||
local RDXZ_PATH="rdxz_tmp"
|
||||
mkdir -p "${RDXZ_PATH}"
|
||||
@@ -290,8 +290,8 @@ function resizeImg() {
|
||||
[[ -z "${INPUT_FILE}" || ! -f "${INPUT_FILE}" ]] && exit 1
|
||||
[ -z "${CHANGE_SIZE}" ] && exit 1
|
||||
|
||||
INPUT_FILE="$(realpath "${INPUT_FILE}")"
|
||||
OUTPUT_FILE="$(realpath "${OUTPUT_FILE}")"
|
||||
INPUT_FILE="$(readlink -f "${INPUT_FILE}")"
|
||||
OUTPUT_FILE="$(readlink -f "${OUTPUT_FILE}")"
|
||||
|
||||
|
||||
SIZE=$(($(du -m "${INPUT_FILE}" | awk '{print $1}')$(echo "${CHANGE_SIZE}" | sed 's/M//g; s/b//g')))
|
||||
@@ -310,28 +310,47 @@ function resizeImg() {
|
||||
sudo losetup -d ${LOOPX}
|
||||
}
|
||||
|
||||
# createvmx
|
||||
# convertova
|
||||
# $1 bootloader file
|
||||
# $2 vmx name
|
||||
function createvmx() {
|
||||
# $2 ova file
|
||||
function convertova() {
|
||||
BLIMAGE=${1}
|
||||
VMNAME=${2}
|
||||
OVAPATH=${2}
|
||||
|
||||
BLIMAGE="$(readlink -f "${BLIMAGE}")"
|
||||
OVAPATH="$(readlink -f "${OVAPATH}")"
|
||||
VMNAME="$(basename "${OVAPATH}" .ova)"
|
||||
|
||||
# Download and install ovftool if it doesn't exist
|
||||
if [ ! -x ovftool/ovftool ]; then
|
||||
rm -rf ovftool ovftool.zip
|
||||
curl -skL https://github.com/rgl/ovftool-binaries/raw/main/archive/VMware-ovftool-4.6.0-21452615-lin.x86_64.zip -o ovftool.zip
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to download ovftool"
|
||||
exit 1
|
||||
fi
|
||||
unzip ovftool.zip -d . >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to extract ovftool"
|
||||
exit 1
|
||||
fi
|
||||
chmod +x ovftool/ovftool
|
||||
fi
|
||||
if ! command -v qemu-img &>/dev/null; then
|
||||
sudo apt install -y qemu-utils
|
||||
fi
|
||||
|
||||
# Convert raw image to VMDK
|
||||
rm -rf "VMX_${VMNAME}"
|
||||
mkdir -p "VMX_${VMNAME}"
|
||||
qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${BLIMAGE}" "VMX_${VMNAME}/${VMNAME}-disk1.vmdk"
|
||||
qemu-img create -f vmdk "VMX_${VMNAME}/${VMNAME}-disk2.vmdk" "32G"
|
||||
rm -rf "OVA_${VMNAME}"
|
||||
mkdir -p "OVA_${VMNAME}"
|
||||
qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${BLIMAGE}" "OVA_${VMNAME}/${VMNAME}-disk1.vmdk"
|
||||
qemu-img create -f vmdk "OVA_${VMNAME}/${VMNAME}-disk2.vmdk" "32G"
|
||||
|
||||
# Create VM configuration
|
||||
cat <<_EOF_ >"VMX_${VMNAME}/${VMNAME}.vmx"
|
||||
cat <<_EOF_ >"OVA_${VMNAME}/${VMNAME}.vmx"
|
||||
.encoding = "UTF-8"
|
||||
config.version = "8"
|
||||
virtualHW.version = "17"
|
||||
virtualHW.version = "21"
|
||||
displayName = "${VMNAME}"
|
||||
annotation = "https://github.com/AuxXxilium/arc"
|
||||
guestOS = "ubuntu-64"
|
||||
@@ -388,83 +407,10 @@ sata0:0.present = "TRUE"
|
||||
sata0:1.fileName = "${VMNAME}-disk2.vmdk"
|
||||
sata0:1.present = "TRUE"
|
||||
_EOF_
|
||||
}
|
||||
|
||||
# convertvmx
|
||||
# $1 bootloader file
|
||||
# $2 vmx file
|
||||
function convertvmx() {
|
||||
local BLIMAGE=${1}
|
||||
local VMXPATH=${2}
|
||||
|
||||
BLIMAGE="$(realpath "${BLIMAGE}")"
|
||||
VMXPATH="$(realpath "${VMXPATH}")"
|
||||
local VMNAME="$(basename "${VMXPATH}" .vmx)"
|
||||
|
||||
createvmx "${BLIMAGE}" "${VMNAME}"
|
||||
|
||||
rm -rf "${VMXPATH}"
|
||||
mv -f "VMX_${VMNAME}" "${VMXPATH}"
|
||||
}
|
||||
|
||||
# convertova
|
||||
# $1 bootloader file
|
||||
# $2 ova file
|
||||
function convertova() {
|
||||
local BLIMAGE=${1}
|
||||
local OVAPATH=${2}
|
||||
|
||||
BLIMAGE="$(realpath "${BLIMAGE}")"
|
||||
OVAPATH="$(realpath "${OVAPATH}")"
|
||||
local VMNAME="$(basename "${OVAPATH}" .ova)"
|
||||
|
||||
createvmx "${BLIMAGE}" "${VMNAME}"
|
||||
|
||||
# Download and install ovftool if it doesn't exist
|
||||
if [ ! -x ovftool/ovftool ]; then
|
||||
rm -rf ovftool ovftool.zip
|
||||
curl -skL https://github.com/rgl/ovftool-binaries/raw/main/archive/VMware-ovftool-4.6.0-21452615-lin.x86_64.zip -o ovftool.zip
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to download ovftool"
|
||||
exit 1
|
||||
fi
|
||||
unzip ovftool.zip -d . >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to extract ovftool"
|
||||
exit 1
|
||||
fi
|
||||
chmod +x ovftool/ovftool
|
||||
fi
|
||||
|
||||
rm -f "${OVAPATH}"
|
||||
ovftool/ovftool "VMX_${VMNAME}/${VMNAME}.vmx" "${OVAPATH}"
|
||||
rm -rf "VMX_${VMNAME}"
|
||||
}
|
||||
|
||||
function createvmc() {
|
||||
cat <<_EOF_ >"${1:-arc.vmc}"
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<preferences>
|
||||
<version type="string">2.0</version>
|
||||
<hardware>
|
||||
<memory>
|
||||
<ram_size type="integer">4096</ram_size>
|
||||
</memory>
|
||||
<pci_bus>
|
||||
<ide_adapter>
|
||||
<ide_controller id="0">
|
||||
<location id="0">
|
||||
<drive_type type="integer">1</drive_type>
|
||||
<pathname>
|
||||
<relative type="string">arc.vhd</relative>
|
||||
</pathname>
|
||||
</location>
|
||||
</ide_controller>
|
||||
</ide_adapter>
|
||||
</pci_bus>
|
||||
</hardware>
|
||||
</preferences>
|
||||
_EOF_
|
||||
ovftool/ovftool "OVA_${VMNAME}/${VMNAME}.vmx" "${OVAPATH}"
|
||||
rm -rf "OVA_${VMNAME}"
|
||||
}
|
||||
|
||||
# copy buildroot
|
||||
|
||||
Reference in New Issue
Block a user