Skip to content

Commit 84f1f56

Browse files
committed
tree: add new backup
Signed-off-by: AuxXxilium <[email protected]>
1 parent 4302045 commit 84f1f56

File tree

5 files changed

+85
-69
lines changed

5 files changed

+85
-69
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ jobs:
171171
echo "Create Arc vhd"
172172
createvmc "arc.vmc"
173173
qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd
174+
qemu-img convert -p -f raw -O vhdx ${IMAGE_FILE} arc.vhdx
174175
175176
echo "Create Arc ova"
176177
convertova "${IMAGE_FILE}" "arc.ova"
@@ -183,6 +184,7 @@ jobs:
183184
zip -9 "arc-${{ env.ARC_VERSION }}.vmdk-dyn.zip" arc-dyn.vmdk
184185
zip -9 "arc-${{ env.ARC_VERSION }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
185186
zip -9 "arc-${{ env.ARC_VERSION }}.vhd.zip" arc.vhd arc.vmc
187+
zip -9 "arc-${{ env.ARC_VERSION }}.vhdx.zip" arc.vhdx
186188
zip -9 "arc-${{ env.ARC_VERSION }}.ova.zip" arc.ova
187189
(cd files && zip -r ../update-${{ env.ARC_VERSION }}.zip ./p1 ./p3)
188190
sha256sum update-${{ env.ARC_VERSION }}.zip >"update-${{ env.ARC_VERSION }}.hash"

files/initrd/opt/arc/arc-functions.sh

Lines changed: 68 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,14 +1324,14 @@ function storagepanelMenu() {
13241324
STORAGEPANELUSER="$(readConfigKey "addons.storagepanel" "${USER_CONFIG_FILE}")"
13251325
[ -n "${STORAGEPANELUSER}" ] && DISKPANELUSER="$(echo ${STORAGEPANELUSER} | cut -d' ' -f1)" || DISKPANELUSER="RACK_24_Bay"
13261326
[ -n "${STORAGEPANELUSER}" ] && M2PANELUSER="$(echo ${STORAGEPANELUSER} | cut -d' ' -f2)" || M2PANELUSER="1X4"
1327-
ITEMS="$(echo -e "RACK_2_Bay \nRACK_4_Bay \nRACK_8_Bay \nRACK_12_Bay \nRACK_16_Bay \nRACK_24_Bay \nRACK_60_Bay \nTOWER_1_Bay \nTOWER_2_Bay \nTOWER_4_Bay \nTOWER_6_Bay \nTOWER_8_Bay \nTOWER_12_Bay \n")"
1327+
ITEMS="$(echo -e "RACK_0_Bay \nRACK_2_Bay \nRACK_4_Bay \nRACK_8_Bay \nRACK_10_Bay \nRACK_12_Bay \nRACK_12_Bay_2 \nRACK_16_Bay \nRACK_20_Bay \nRACK_24_Bay \nRACK_60_Bay \nTOWER_1_Bay \nTOWER_2_Bay \nTOWER_4_Bay \nTOWER_4_Bay_J \nTOWER_4_Bay_S \nTOWER_5_Bay \nTOWER_6_Bay \nTOWER_8_Bay \nTOWER_12_Bay \n")"
13281328
dialog --backtitle "$(backtitle)" --title "StoragePanel" \
13291329
--default-item "${DISKPANELUSER}" --no-items --menu "Choose a Disk Panel" 0 0 0 ${ITEMS} \
13301330
2>"${TMP_PATH}/resp"
13311331
resp="$(cat "${TMP_PATH}/resp" 2>/dev/null)"
13321332
[ -z "${resp}" ] && break
13331333
STORAGE=${resp}
1334-
ITEMS="$(echo -e "1X2 \n1X4 \n1X8 \n")"
1334+
ITEMS="$(echo -e "1X1 \n1X2 \n1X3 \n1X4 \n1X6 \n1X8 \n2X2 \n2X3 \n2X4 \n2X6 \n2X8 \n3X4 \n4X4 \n")"
13351335
dialog --backtitle "$(backtitle)" --title "StoragePanel" \
13361336
--default-item "${M2PANELUSER}" --no-items --menu "Choose a M.2 Panel" 0 0 0 ${ITEMS} \
13371337
2>"${TMP_PATH}/resp"
@@ -1357,22 +1357,22 @@ function backupMenu() {
13571357
while true; do
13581358
if [ -n "${USERID}" ] && [ "${ARC_OFFLINE}" != "true" ] && [ "${CONFDONE}" = "true" ]; then
13591359
dialog --backtitle "$(backtitle)" --title "Backup" --cancel-label "Exit" --menu "Choose an Option" 0 0 0 \
1360-
1 "Restore Arc Config (from DSM)" \
1360+
1 "Restore Loader (from DSM Disk)" \
13611361
2 "Restore Hardware Key (local)" \
13621362
3 "Backup Hardware Key (local)" \
13631363
4 "Restore Arc Config (from Online)" \
13641364
5 "Backup Arc Config (to Online)" \
13651365
2>"${TMP_PATH}/resp"
13661366
elif [ -n "${USERID}" ] && [ "${ARC_OFFLINE}" != "true" ]; then
13671367
dialog --backtitle "$(backtitle)" --title "Backup" --cancel-label "Exit" --menu "Choose an Option" 0 0 0 \
1368-
1 "Restore Arc Config (from DSM)" \
1368+
1 "Restore Loader (from DSM Disk)" \
13691369
2 "Restore Hardware Key (local)" \
13701370
3 "Backup Hardware Key (local)" \
13711371
4 "Restore Arc Config (from Online)" \
13721372
2>"${TMP_PATH}/resp"
13731373
else
13741374
dialog --backtitle "$(backtitle)" --title "Backup" --cancel-label "Exit" --menu "Choose an Option" 0 0 0 \
1375-
1 "Restore Arc Config (from DSM)" \
1375+
1 "Restore Loader (from DSM Disk)" \
13761376
2 "Restore Hardware Key (local)" \
13771377
3 "Backup Hardware Key (local)" \
13781378
2>"${TMP_PATH}/resp"
@@ -1383,56 +1383,10 @@ function backupMenu() {
13831383
DSMROOTS="$(findDSMRoot)"
13841384
if [ -z "${DSMROOTS}" ]; then
13851385
dialog --backtitle "$(backtitle)" --title "Restore Arc Config" \
1386-
--msgbox "No DSM system partition(md0) found!\nPlease insert all disks before continuing." 0 0
1387-
return
1388-
fi
1389-
mkdir -p "${TMP_PATH}/mdX"
1390-
for I in ${DSMROOTS}; do
1391-
#fixDSMRootPart "${I}"
1392-
T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')"
1393-
mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX"
1394-
[ $? -ne 0 ] && continue
1395-
MODEL=""
1396-
PRODUCTVER=""
1397-
if [ -f "${TMP_PATH}/mdX/usr/arc/backup/p1/user-config.yml" ]; then
1398-
cp -f "${TMP_PATH}/mdX/usr/arc/backup/p1/user-config.yml" "${USER_CONFIG_FILE}"
1399-
sleep 2
1400-
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
1401-
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
1402-
if [ -n "${MODEL}" ] && [ -n "${PRODUCTVER}" ]; then
1403-
TEXT="Config found:\nModel: ${MODEL}\nVersion: ${PRODUCTVER}"
1404-
SN="$(readConfigKey "sn" "${USER_CONFIG_FILE}")"
1405-
TEXT+="\nSerial: ${SN}"
1406-
ARC_PATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")"
1407-
TEXT+="\nArc Patch: ${ARC_PATCH}"
1408-
dialog --backtitle "$(backtitle)" --title "Restore Arc Config" \
1409-
--aspect 18 --msgbox "${TEXT}" 0 0
1410-
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
1411-
DT="$(readConfigKey "platforms.${PLATFORM}.dt" "${P_FILE}")"
1412-
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
1413-
resetBuild
1414-
break
1415-
fi
1416-
fi
1417-
umount "${TMP_PATH}/mdX"
1418-
done
1419-
rm -rf "${TMP_PATH}/mdX" 2>/dev/null
1420-
if [ -f "${USER_CONFIG_FILE}" ]; then
1421-
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
1422-
if [ -n "${PRODUCTVER}" ]; then
1423-
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
1424-
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
1425-
is_in_array "${PLATFORM}" "${KVER5L[@]}" && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
1426-
if [ -n "${PLATFORM}" ] && [ -n "${KVERP}" ]; then
1427-
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
1428-
mergeConfigModules "$(getAllModules "${PLATFORM}" "${KVERP}" | awk '{print $1}')" "${USER_CONFIG_FILE}"
1429-
fi
1430-
fi
1386+
--msgbox "No DSM system found!\nPlease insert all disks before continuing." 0 0
1387+
return 1
14311388
fi
1432-
dialog --backtitle "$(backtitle)" --title "Restore Arc Config" \
1433-
--aspect 18 --infobox "Restore successful! -> Reload Arc Init now" 5 50
1434-
sleep 2
1435-
rm -f "${HOME}/.initialized" && exec init.sh
1389+
recoverDSM
14361390
;;
14371391
2)
14381392
dialog --backtitle "$(backtitle)" --title "Restore Encryption Key" \
@@ -3864,4 +3818,64 @@ function onlineMenu() {
38643818
esac
38653819
done
38663820
return
3821+
}
3822+
3823+
###############################################################################
3824+
# Recover DSM files
3825+
function recoverDSM() {
3826+
DSMROOTS="$(findDSMRoot)"
3827+
[ -z "${DSMROOTS}" ] && return
3828+
mkdir -p "${TMP_PATH}/mdX"
3829+
for I in ${DSMROOTS}; do
3830+
# fixDSMRootPart "${I}"
3831+
T="$(blkid -o value -s TYPE "${I}" 2>/dev/null | sed 's/linux_raid_member/ext4/')"
3832+
mount -t "${T:-ext4}" "${I}" "${TMP_PATH}/mdX"
3833+
[ $? -ne 0 ] && continue
3834+
MODEL=""
3835+
PRODUCTVER=""
3836+
BACKUP_CONFIG="${TMP_PATH}/mdX/usr/arc/backup/p1/user-config.yml"
3837+
3838+
# Check if BACKUP_CONFIG exists before proceeding
3839+
if [ ! -f "${BACKUP_CONFIG}" ]; then
3840+
umount "${TMP_PATH}/mdX"
3841+
break && return
3842+
fi
3843+
3844+
MODEL="$(readConfigKey "model" "${BACKUP_CONFIG}")"
3845+
PRODUCTVER="$(readConfigKey "productver" "${BACKUP_CONFIG}")"
3846+
if [ -n "${MODEL}" ] && [ -n "${PRODUCTVER}" ]; then
3847+
TEXT="Config found:\nModel: ${MODEL}\nVersion: ${PRODUCTVER}"
3848+
PLATFORM="$(readConfigKey "platform" "${BACKUP_CONFIG}")"
3849+
TEXT+="\nPlatform: ${PLATFORM}"
3850+
SN="$(readConfigKey "sn" "${BACKUP_CONFIG}")"
3851+
TEXT+="\nSerial: ${SN}"
3852+
ARC_PATCH="$(readConfigKey "arc.patch" "${BACKUP_CONFIG}")"
3853+
TEXT+="\nArc Patch: ${ARC_PATCH}"
3854+
CONFDONE="$(readConfigKey "arc.confdone" "${BACKUP_CONFIG}")"
3855+
dialog --backtitle "$(backtitle)" --title "Restore Arc" \
3856+
--aspect 18 --msgbox "${TEXT}" 0 0
3857+
[ $? -ne 0 ] && break
3858+
cp -af "${TMP_PATH}/mdX/usr/arc/backup/p1/"* "${PART1_PATH}" 2>/dev/null
3859+
cp -af "${TMP_PATH}/mdX/usr/arc/backup/p2/"* "${PART2_PATH}" 2>/dev/null
3860+
resetBuild
3861+
break
3862+
fi
3863+
umount -f "${TMP_PATH}/mdX" 2>/dev/null
3864+
done
3865+
if [ -f "${USER_CONFIG_FILE}" ]; then
3866+
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
3867+
if [ -n "${PRODUCTVER}" ]; then
3868+
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
3869+
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
3870+
is_in_array "${PLATFORM}" "${KVER5L[@]}" && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
3871+
if [ -n "${PLATFORM}" ] && [ -n "${KVERP}" ]; then
3872+
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
3873+
mergeConfigModules "$(getAllModules "${PLATFORM}" "${KVERP}" | awk '{print $1}')" "${USER_CONFIG_FILE}"
3874+
fi
3875+
fi
3876+
dialog --backtitle "$(backtitle)" --title "Restore Arc" \
3877+
--aspect 18 --infobox "Restore successful! -> Reload Arc Init now" 3 50
3878+
sleep 2
3879+
rm -f "${HOME}/.initialized" && exec init.sh
3880+
fi
38673881
}

files/initrd/opt/arc/arc.sh

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ elif [ "${ARC_MODE}" = "automated" ]; then
8787
makearc
8888
fi
8989
elif [ "${ARC_MODE}" = "config" ]; then
90+
if [ -z "${MODEL}" ] && [ -z "${PRODUCTVER}" ] && [ -n "$(findDSMRoot)" ]; then
91+
dialog --backtitle "$(backtitle)" --title "Arc Recovery" \
92+
--yesno "An installed DSM is detected on your disk. Do you want to try to restore it?" 0 0
93+
[ $? -eq 0 ] && recoverDSM
94+
fi
9095
[ "${CONFDONE}" = "true" ] && NEXT="2" || NEXT="1"
9196
[ "${BUILDDONE}" = "true" ] && NEXT="4" || NEXT="1"
9297
while true; do

files/initrd/opt/arc/include/functions.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -717,5 +717,6 @@ function getBoardName() {
717717
function resetBuild() {
718718
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
719719
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
720+
rm -f "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}" >/dev/null 2>&1 || true
720721
return
721722
}

files/initrd/opt/arc/ramdisk-patch.sh

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -212,22 +212,16 @@ mkdir -p "${RAMDISK_PATH}/usr/arc"
212212
} >"${RAMDISK_PATH}/usr/arc/VERSION"
213213
BACKUP_PATH="${RAMDISK_PATH}/usr/arc/backup"
214214
rm -rf "${BACKUP_PATH}"
215-
for F in "${USER_GRUB_CONFIG}" "${USER_CONFIG_FILE}"; do
216-
if [ -f "${F}" ]; then
217-
FD="$(dirname "${F}")"
218-
mkdir -p "${FD/\/mnt/${BACKUP_PATH}}"
219-
cp -f "${F}" "${FD/\/mnt/${BACKUP_PATH}}"
220-
elif [ -d "${F}" ]; then
221-
SIZE="$(du -sm "${F}" 2>/dev/null | awk '{print $1}')"
222-
if [ ${SIZE:-0} -gt 4 ]; then
223-
echo "Backup of ${F} skipped, size is ${SIZE}MB" >>"${LOG_FILE}"
224-
continue
225-
fi
226-
FD="$(dirname "${F}")"
227-
mkdir -p "${FD/\/mnt/${BACKUP_PATH}}"
228-
cp -rf "${F}" "${FD/\/mnt/${BACKUP_PATH}}"
215+
if [ -f "${USER_GRUB_CONFIG}" ] && [ -f "${USER_CONFIG_FILE}" ] && [ -f "${ORI_ZIMAGE_FILE}" ] && [ -f "${ORI_RDGZ_FILE}" ]; then
216+
if [ -d "${PART1_PATH}" ]; then
217+
mkdir -p "${BACKUP_PATH}/p1"
218+
cp -rf "${PART1_PATH}/." "${BACKUP_PATH}/p1/"
229219
fi
230-
done
220+
if [ -d "${PART2_PATH}" ]; then
221+
mkdir -p "${BACKUP_PATH}/p2"
222+
cp -rf "${PART2_PATH}/." "${BACKUP_PATH}/p2/"
223+
fi
224+
fi
231225

232226
# Network card configuration file
233227
for N in $(seq 0 7); do

0 commit comments

Comments
 (0)