优化脚本,修复条件判断,增强代码可读性和执行效率

This commit is contained in:
Ing 2024-11-23 17:23:12 +08:00
parent 0605583469
commit 90bce4a843
25 changed files with 6391 additions and 6268 deletions

View File

@ -13,7 +13,7 @@ rm -rf "${PART1_PATH}/logs" /sys/fs/pstore/* >/dev/null 2>&1 || true
# Check if machine has EFI
EFI=$([ -d /sys/firmware/efi ] && echo 1 || echo 0)
FBI=$(cat /sys/class/graphics/fb*/name 2>/dev/null | head -1)
BUS=$(getBus "${LOADER_DISK}")
# Print text centralized
@ -167,13 +167,31 @@ CMDLINE['console']="ttyS0,115200n8"
CMDLINE['consoleblank']="600"
# CMDLINE['no_console_suspend']="1"
CMDLINE['root']="/dev/md0"
CMDLINE['rootwait']=""
CMDLINE['loglevel']="15"
CMDLINE['log_buf_len']="32M"
CMDLINE['rootwait']=""
CMDLINE['panic']="${KERNELPANIC:-0}"
# CMDLINE['nointremap']="" # no need
# CMDLINE['split_lock_detect']="off" # no need
CMDLINE['pcie_aspm']="off"
# CMDLINE['intel_pstate']="disable"
# CMDLINE['nox2apic']="" # check platform
# CMDLINE['nomodeset']=""
CMDLINE['modprobe.blacklist']="${MODBLACKLIST}"
if echo "apollolake geminilake purley" | grep -wq "${PLATFORM}"; then
CMDLINE["nox2apic"]=""
fi
# # Save command line to grubenv RR_CMDLINE= ... nox2apic
# if echo "apollolake geminilake purley" | grep -wq "${PLATFORM}"; then
# if grep -q "^flags.*x2apic.*" /proc/cpuinfo; then
# checkCmdline "rr_cmdline" "nox2apic" || addCmdline "rr_cmdline" "nox2apic"
# fi
# else
# checkCmdline "rr_cmdline" "nox2apic" && delCmdline "rr_cmdline" "nox2apic"
# fi
# if [ -n "$(ls /dev/mmcblk* 2>/dev/null)" ] && [ ! "${BUS}" = "mmc" ] && [ ! "${EMMCBOOT}" = "true" ]; then
# if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "sdhci"; then
# [ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE['modprobe.blacklist']+=","
@ -217,6 +235,8 @@ for KEY in "${!CMDLINE[@]}"; do
done
CMDLINE_LINE=$(echo "${CMDLINE_LINE}" | sed 's/^ //') # Remove leading space
printf "%s:\n \033[1;36m%s\033[0m\n" "$(TEXT "Cmdline")" "${CMDLINE_LINE}"
# Check if user wants to modify at this stage
function _bootwait() {
BOOTWAIT="$(readConfigKey "bootwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTWAIT}" ] && BOOTWAIT=10
@ -362,6 +382,12 @@ else
# # Unload all network interfaces
# 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
# for I in $(find /sys/devices -name uevent -exec bash -c 'cat {} 2>/dev/null | grep -Eq "PCI_CLASS=0?30[0|1|2]00" && dirname {}' \;); do
# [ -e ${I}/reset ] && cat ${I}/vendor >/dev/null | grep -iq 0x10de && echo 1 >${I}/reset || true # Proc open nvidia driver when booting
# done
# Reboot
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff

View File

@ -205,7 +205,7 @@ function _get_fastest() {
local speedlist=""
if command -v ping >/dev/null 2>&1; then
for I in "$@"; do
speed=$(ping -c 1 -W 5 "${I}" 2>/dev/null | awk -F'[= ]' '/time=/ {for(i=1;i<=NF;i++) if ($i=="time") print $(i+1)}')
speed=$(LC_ALL=C ping -c 1 -W 5 "${I}" 2>/dev/null | awk -F'[= ]' '/time=/ {for(i=1;i<=NF;i++) if ($i=="time") print $(i+1)}')
speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty
done
else
@ -215,10 +215,10 @@ function _get_fastest() {
speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty
done
fi
local fastest="$(echo -e "${speedlist}" | tr -s '\n' | sort -k2n | head -1)"
local fastest="$(echo -e "${speedlist}" | tr -s '\n' | grep -v '999$' | sort -k2n | head -1)"
URL="$(echo "${fastest}" | awk '{print $1}')"
SPD="$(echo "${fastest}" | awk '{print $2}')" # It is a float type
echo "${URL}"
echo "${URL:-${1}}"
[ $(echo "${SPD:-999}" | cut -d. -f1) -ge 999 ] && return 1 || return 0
}
@ -301,10 +301,9 @@ function getIP() {
function getLogo() {
local MODEL="${1}"
rm -f "${PART3_PATH}/logo.png"
local fastest="www.synology.com" # $(_get_fastest "www.synology.com" "www.synology.cn")
if [ $? -ne 0 ]; then
return 1
fi
local fastest="$(_get_fastest "www.synology.com" "www.synology.cn")"
# [ $? -ne 0 ] && return 1
local STATUS=$(curl -skL --connect-timeout 10 -w "%{http_code}" "https://${fastest}/api/products/getPhoto?product=${MODEL/+/%2B}&type=img_s&sort=0" -o "${PART3_PATH}/logo.png")
if [ $? -ne 0 ] || [ "${STATUS:-0}" -ne 200 ] || [ ! -f "${PART3_PATH}/logo.png" ]; then
rm -f "${PART3_PATH}/logo.png"

View File

@ -78,7 +78,7 @@ function installModules() {
local ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
for F in $(ls "${TMP_PATH}/modules/"*.ko 2>/dev/null); do
local M=$(basename "${F}")
[ "${ODP}" == "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
if echo "${MLIST}" | grep -wq "${M:0:-3}"; then
cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
else

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -123,14 +123,9 @@ function modelMenu() {
PS="$(readConfigEntriesArray "platforms" "${WORK_PATH}/platforms.yml" | sort)"
MJ="$(python3 ${WORK_PATH}/include/functions.py getmodels -p "${PS[*]}")"
if [ -z "${MJ}" ] || [ "${MJ}" = "[]" ]; then
if _get_fastest synology.com >/dev/null 2>&1; then
DIALOG --title "$(TEXT "Model")" \
--msgbox "$(TEXT "Failed to get models, Please check the network and try again, or use 'Parse Pat'!")" 0 0
else
if [ "${MJ:-[]}" = "[]" ]; then
DIALOG --title "$(TEXT "Model")" \
--msgbox "$(TEXT "Unable to connect to Synology website, Please check the network and try again, or use 'Parse Pat'!")" 0 0
fi
return 1
fi
@ -242,7 +237,7 @@ function productversMenu() {
--infobox "$(TEXT "Get pat data ...")" 0 0
fi
PJ="$(python3 ${WORK_PATH}/include/functions.py getpats4mv -m "${MODEL}" -v "${selver}")"
if [ -z "${PJ}" ] || [ "${PJ}" = "{}" ]; then
if [ "${PJ:-{}}" = "{}" ]; then
if [ -z "${1}" ]; then
MSG="$(TEXT "Unable to connect to Synology website, Please check the network and try again, or use 'Parse Pat'!")"
DIALOG --title "$(TEXT "Addons")" \
@ -694,27 +689,32 @@ function moduleMenu() {
2>${TMP_PATH}/resp
RET=$?
case ${RET} in
0) # ok-button
0)
# ok-button
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
L="$(for I in $(cat ${TMP_PATH}/resp 2>/dev/null); do echo "modules.${I}:"; done)"
mergeConfigStr p "${L}" "${USER_CONFIG_FILE}"
touch ${PART1_PATH}/.build
break
;;
3) # extra-button
3)
# extra-button
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
L="$(echo "${ALLMODULES}" | awk '{print "modules."$1":"}')"
mergeConfigStr p "${L}" "${USER_CONFIG_FILE}"
touch ${PART1_PATH}/.build
;;
2) # help-button
2)
# help-button
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
touch ${PART1_PATH}/.build
;;
1) # cancel-button
1)
# cancel-button
break
;;
255) # ESC
255)
# ESC
break
;;
esac
@ -904,7 +904,8 @@ function cmdlineMenu() {
2>"${TMP_PATH}/resp"
RET=$?
case ${RET} in
0) # ok-button
0)
# ok-button
NAME="$(sed -n '1p' "${TMP_PATH}/resp" 2>/dev/null)"
VALUE="$(sed -n '2p' "${TMP_PATH}/resp" 2>/dev/null)"
[ "${NAME: -1}" = "=" ] && NAME="${NAME:0:-1}"
@ -917,10 +918,12 @@ function cmdlineMenu() {
writeConfigKey "cmdline.\"${NAME//\"/}\"" "${VALUE}" "${USER_CONFIG_FILE}"
break
;;
1) # cancel-button
1)
# cancel-button
break
;;
255) # ESC
255)
# ESC
break
;;
esac
@ -965,7 +968,8 @@ function cmdlineMenu() {
2>"${TMP_PATH}/resp"
RET=$?
case ${RET} in
0) # ok-button
0)
# ok-button
sn="$(sed -n '1p' "${TMP_PATH}/resp" 2>/dev/null | sed 's/.*/\U&/')"
mac1="$(sed -n '2p' "${TMP_PATH}/resp" 2>/dev/null | sed 's/[:-]//g' | sed 's/.*/\U&/')"
mac2="$(sed -n '3p' "${TMP_PATH}/resp" 2>/dev/null | sed 's/[:-]//g' | sed 's/.*/\U&/')"
@ -982,17 +986,20 @@ function cmdlineMenu() {
writeConfigKey "mac2" "${MAC2}" "${USER_CONFIG_FILE}"
break
;;
3) # extra-button
3)
# extra-button
sn=$(generateSerial "${MODEL}")
NETIF_NUM=2
MACS=($(generateMacAddress "${MODEL}" ${NETIF_NUM}))
mac1=${MACS[0]}
mac2=${MACS[1]}
;;
1) # cancel-button
1)
# cancel-button
break
;;
255) # ESC
255)
# ESC
break
;;
esac
@ -1006,7 +1013,9 @@ function cmdlineMenu() {
# DIALOG --title "$(TEXT "Cmdline")" \
# --msgbox "${ITEMS}" 0 0
# ;;
e) return ;;
e)
return
;;
esac
done
}
@ -1054,7 +1063,8 @@ function synoinfoMenu() {
2>"${TMP_PATH}/resp"
RET=$?
case ${RET} in
0) # ok-button
0)
# ok-button
NAME="$(sed -n '1p' "${TMP_PATH}/resp" 2>/dev/null)"
VALUE="$(sed -n '2p' "${TMP_PATH}/resp" 2>/dev/null)"
[ "${NAME: -1}" = "=" ] && NAME="${NAME:0:-1}"
@ -1068,10 +1078,12 @@ function synoinfoMenu() {
touch ${PART1_PATH}/.build
break
;;
1) # cancel-button
1)
# cancel-button
break
;;
255) # ESC
255)
# ESC
break
;;
esac
@ -1105,7 +1117,9 @@ function synoinfoMenu() {
done
touch ${PART1_PATH}/.build
;;
e) return ;;
e)
return
;;
esac
done
}
@ -1117,8 +1131,7 @@ function getSynoExtractor() {
mirrors=("global.synologydownload.com" "global.download.synology.com" "cndl.synology.cn")
fastest=$(_get_fastest ${mirrors[@]})
if [ $? -ne 0 ]; then
echo -e "$(TEXT "Network error, please check the network connection and try again.")" >"${LOG_FILE}"
return 1
echo -e "$(TEXT "The current network status is unknown, using the default mirror.")"
fi
OLDPAT_URL="https://${fastest}/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat"
OLDPAT_PATH="${TMP_PATH}/DS3622xs+-42218.pat"
@ -1261,8 +1274,7 @@ function extractDsmFiles() {
mirrors=("global.synologydownload.com" "global.download.synology.com" "cndl.synology.cn")
fastest=$(_get_fastest ${mirrors[@]})
if [ $? -ne 0 ]; then
echo -e "$(TEXT "Network error, please check the network connection and try again.")" >"${LOG_FILE}"
return 1
echo -e "$(TEXT "The current network status is unknown, using the default mirror.")"
fi
mirror="$(echo ${PATURL} | sed 's|^http[s]*://\([^/]*\).*|\1|')"
if echo "${mirrors[@]}" | grep -wq "${mirror}" && [ "${mirror}" != "${fastest}" ]; then
@ -1716,21 +1728,25 @@ function allowDSMDowngrade() {
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
rm -f "${TMP_PATH}/isOk"
(
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
[ -f "${TMP_PATH}/mdX/etc/VERSION" ] && rm -f "${TMP_PATH}/mdX/etc/VERSION"
[ -f "${TMP_PATH}/mdX/etc.defaults/VERSION" ] && rm -f "${TMP_PATH}/mdX/etc.defaults/VERSION"
rm -f "${TMP_PATH}/mdX/etc/VERSION" "${TMP_PATH}/mdX/etc.defaults/VERSION"
sync
echo "true" >"${TMP_PATH}/isOk"
umount "${TMP_PATH}/mdX"
done
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Removing ...")" 20 100
[ -f "${TMP_PATH}/isOk" ] &&
MSG="$(TEXT "Remove VERSION file for DSM system partition(md0) completed.")" ||
MSG="$(TEXT "Remove VERSION file for DSM system partition(md0) failed.")"
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "Remove VERSION file for DSM system partition(md0) completed.")" 0 0
--msgbox "${MSG}" 0 0
return
}
@ -1783,10 +1799,12 @@ function resetDSMPassword() {
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "Invalid password")" 0 0
done
# NEWPASSWD="$(python3 -c "from passlib.hash import sha512_crypt;pw=\"${VALUE}\";print(sha512_crypt.using(rounds=5000).hash(pw))")"
NEWPASSWD="$(openssl passwd -6 -salt $(openssl rand -hex 8) "${VALUE}")"
rm -f "${TMP_PATH}/isOk"
(
mkdir -p "${TMP_PATH}/mdX"
# local NEWPASSWD="$(python3 -c "from passlib.hash import sha512_crypt;pw=\"${VALUE}\";print(sha512_crypt.using(rounds=5000).hash(pw))")"
# local NEWPASSWD="$(echo "${VALUE}" | mkpasswd -m sha512)"
local NEWPASSWD="$(openssl passwd -6 -salt $(openssl rand -hex 8) "${VALUE}")"
for I in ${DSMROOTS}; do
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
@ -1794,13 +1812,17 @@ function resetDSMPassword() {
sed -i "/^${USER}:/ s/^\(${USER}:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:\)[^:]*:/\1:/" "${TMP_PATH}/mdX/etc/shadow"
sed -i "s|status=on|status=off|g" "${TMP_PATH}/mdX/usr/syno/etc/packages/SecureSignIn/preference/${USER}/method.config" 2>/dev/null
sync
echo "true" >"${TMP_PATH}/isOk"
umount "${TMP_PATH}/mdX"
done
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Resetting ...")" 20 100
[ -f "${TMP_PATH}/isOk" ] &&
MSG="$(printf "$(TEXT "Reset password for user '%s' completed.")" "${USER}")" ||
MSG="$(printf "$(TEXT "Reset password for user '%s' failed.")" "${USER}")"
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "$(TEXT "Password reset completed.")" 0 0
--msgbox "${MSG}" 0 0
return
}
@ -1820,6 +1842,7 @@ function addNewDSMUser() {
[ $? -ne 0 ] && return
username="$(sed -n '1p' "${TMP_PATH}/resp" 2>/dev/null)"
password="$(sed -n '2p' "${TMP_PATH}/resp" 2>/dev/null)"
rm -f "${TMP_PATH}/isOk"
(
ONBOOTUP=""
ONBOOTUP="${ONBOOTUP}if synouser --enum local | grep -q ^${username}\$; then synouser --setpw ${username} ${password}; else synouser --add ${username} ${password} rr 0 user@rr.com 1; fi\n"
@ -1835,16 +1858,17 @@ function addNewDSMUser() {
DELETE FROM task WHERE task_name LIKE 'RRONBOOTUPRR_ADDUSER';
INSERT INTO task VALUES('RRONBOOTUPRR_ADDUSER', '', 'bootup', '', 1, 0, 0, 0, '', 0, '$(echo -e ${ONBOOTUP})', 'script', '{}', '', '', '{}', '{}');
EOF
sleep 1
sync
echo "true" >${TMP_PATH}/isEnable
echo "true" >"${TMP_PATH}/isOk"
fi
umount "${TMP_PATH}/mdX"
done
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Adding ...")" 20 100
[ "$(cat ${TMP_PATH}/isEnable 2>/dev/null)" = "true" ] && MSG="$(TEXT "User added successfully.")" || MSG="$(TEXT "User add failed.")"
[ -f "${TMP_PATH}/isOk" ] &&
MSG="$(printf "$(TEXT "Add new user '%s' completed.")" "${username}")" ||
MSG="$(printf "$(TEXT "Add new user '%s' failed.")" "${username}")"
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "${MSG}" 0 0
return
@ -1859,6 +1883,7 @@ function forceEnableDSMTelnetSSH() {
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
rm -f "${TMP_PATH}/isOk"
(
ONBOOTUP=""
ONBOOTUP="${ONBOOTUP}systemctl restart inetd\n"
@ -1873,16 +1898,17 @@ function forceEnableDSMTelnetSSH() {
DELETE FROM task WHERE task_name LIKE 'RRONBOOTUPRR_SSH';
INSERT INTO task VALUES('RRONBOOTUPRR_SSH', '', 'bootup', '', 1, 0, 0, 0, '', 0, '$(echo -e ${ONBOOTUP})', 'script', '{}', '', '', '{}', '{}');
EOF
sleep 1
sync
echo "true" >${TMP_PATH}/isEnable
echo "true" >"${TMP_PATH}/isOk"
fi
umount "${TMP_PATH}/mdX"
done
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Enabling ...")" 20 100
[ "$(cat ${TMP_PATH}/isEnable 2>/dev/null)" = "true" ] && MSG="$(TEXT "Enabled Telnet&SSH successfully.")" || MSG="$(TEXT "Enabled Telnet&SSH failed.")"
[ -f "${TMP_PATH}/isOk" ] &&
MSG="$(TEXT "Force enable Telnet&SSH of DSM system completed.")" ||
MSG="$(TEXT "Force enable Telnet&SSH of DSM system failed.")"
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "${MSG}" 0 0
return
@ -1903,20 +1929,23 @@ function removeBlockIPDB {
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
rm -f "${TMP_PATH}/isOk"
(
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
mount -t ext4 "${I}" "${TMP_PATH}/mdX"
[ $? -ne 0 ] && continue
[ -f "${TMP_PATH}/mdX/etc/synoautoblock.db" ] && rm -f "${TMP_PATH}/mdX/etc/synoautoblock.db"
rm -f "${TMP_PATH}/mdX/etc/synoautoblock.db"
sync
echo "true" >${TMP_PATH}/isEnable
echo "true" >"${TMP_PATH}/isOk"
umount "${TMP_PATH}/mdX"
done
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Removing ...")" 20 100
[ "$(cat ${TMP_PATH}/isEnable 2>/dev/null)" = "true" ] && MSG="$(TEXT "Removing The blocked ip database successfully.")" || MSG="$(TEXT "Removing The blocked ip database failed.")"
[ -f "${TMP_PATH}/isOk" ] &&
MSG="$(TEXT "Removing the blocked ip database completed.")" ||
MSG="$(TEXT "Removing the blocked ip database failed.")"
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "${MSG}" 0 0
return
@ -1931,6 +1960,7 @@ function disablescheduledTasks {
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
rm -f "${TMP_PATH}/isOk"
(
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
@ -1939,14 +1969,16 @@ function disablescheduledTasks {
if [ -f "${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db" ]; then
echo "UPDATE task SET enable = 0;" | sqlite3 ${TMP_PATH}/mdX/usr/syno/etc/esynoscheduler/esynoscheduler.db
sync
echo "true" >${TMP_PATH}/isEnable
echo "true" >"${TMP_PATH}/isOk"
fi
umount "${TMP_PATH}/mdX"
done
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Enabling ...")" 20 100
[ "$(cat ${TMP_PATH}/isEnable 2>/dev/null)" = "true" ] && MSG="$(TEXT "Disable all scheduled tasks successfully.")" || MSG="$(TEXT "Disable all scheduled tasks failed.")"
[ -f "${TMP_PATH}/isOk" ] &&
MSG="$(TEXT "Disable all scheduled tasks of DSM completed.")" ||
MSG="$(TEXT "Disable all scheduled tasks of DSM failed.")"
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "${MSG}" 0 0
return
@ -1967,6 +1999,7 @@ function initDSMNetwork {
--msgbox "$(TEXT "No DSM system partition(md0) found!\nPlease insert all disks before continuing.")" 0 0
return
fi
rm -f "${TMP_PATH}/isOk"
(
mkdir -p "${TMP_PATH}/mdX"
for I in ${DSMROOTS}; do
@ -1975,13 +2008,15 @@ function initDSMNetwork {
rm -f "${TMP_PATH}/mdX/etc/sysconfig/network-scripts/ifcfg-bond"* "${TMP_PATH}/mdX/etc/sysconfig/network-scripts/ifcfg-eth"*
rm -f "${TMP_PATH}/mdX/etc.defaults/sysconfig/network-scripts/ifcfg-bond"* "${TMP_PATH}/mdX/etc.defaults/sysconfig/network-scripts/ifcfg-eth"*
sync
echo "true" >${TMP_PATH}/isEnable
echo "true" >"${TMP_PATH}/isOk"
umount "${TMP_PATH}/mdX"
done
rm -rf "${TMP_PATH}/mdX"
) 2>&1 | DIALOG --title "$(TEXT "Advanced")" \
--progressbox "$(TEXT "Recovering ...")" 20 100
[ "$(cat ${TMP_PATH}/isEnable 2>/dev/null)" = "true" ] && MSG="$(TEXT "The network settings initialization successfully.")" || MSG="$(TEXT "The network settings initialization failed.")"
[ -f "${TMP_PATH}/isOk" ] &&
MSG="$(TEXT "Initialize DSM network settings completed.")" ||
MSG="$(TEXT "Initialize DSM network settings failed.")"
DIALOG --title "$(TEXT "Advanced")" \
--msgbox "${MSG}" 0 0
return
@ -2138,8 +2173,8 @@ function tryRecoveryDSM() {
__umountDSMRootDisk
DIALOG --title "$(TEXT "Settings")" \
--msgbox "$(TEXT "Found a backup of the user's configuration, and restored it. Please rebuild and boot.")" 0 0
exec "$0"
touch ${PART1_PATH}/.build
exec "${0}"
return
fi
fi
@ -2241,22 +2276,16 @@ function cloneBootloaderDisk() {
umount "${TMP_PATH}/sdX3" 2>/dev/null
}
mkdir -p "${TMP_PATH}/sdX1" "${TMP_PATH}/sdX2" "${TMP_PATH}/sdX3"
mount "${NEW_BLDISK_P1}" "${TMP_PATH}/sdX1" || {
printf "$(TEXT "Can't mount %s.")" "${NEW_BLDISK_P1}" >"${LOG_FILE}"
for i in {1..3}; do
rm -rf "${TMP_PATH}/sdX${i}"
mkdir -p "${TMP_PATH}/sdX${i}"
PART_NAME="$(eval "echo \${NEW_BLDISK_P${i}}")"
mount "${PART_NAME}" "${TMP_PATH}/sdX${i}" || {
printf "$(TEXT "Can't mount %s.")" "${PART_NAME}" >"${LOG_FILE}"
__umountNewBlDisk
break
}
mount "${NEW_BLDISK_P2}" "${TMP_PATH}/sdX2" || {
printf "$(TEXT "Can't mount %s.")" "${NEW_BLDISK_P2}" >"${LOG_FILE}"
__umountNewBlDisk
break
}
mount "${NEW_BLDISK_P3}" "${TMP_PATH}/sdX3" || {
printf "$(TEXT "Can't mount %s.")" "${NEW_BLDISK_P3}" >"${LOG_FILE}"
__umountNewBlDisk
break
break 2
}
done
SIZEOLD1="$(du -sm "${PART1_PATH}" 2>/dev/null | awk '{print $1}')"
SIZEOLD2="$(du -sm "${PART2_PATH}" 2>/dev/null | awk '{print $1}')"
@ -2271,22 +2300,15 @@ function cloneBootloaderDisk() {
__umountNewBlDisk
break
fi
cp -vRf "${PART1_PATH}/". "${TMP_PATH}/sdX1/" || {
printf "$(TEXT "Can't copy to %s.")" "${NEW_BLDISK_P1}" >"${LOG_FILE}"
for i in {1..3}; do
PART_NAME="$(eval "echo \${PART${i}_PATH}")"
cp -vrf "${PART_NAME}/". "${TMP_PATH}/sdX${i}/" || {
PART_NAME="$(eval "echo \${NEW_BLDISK_P${i}}")"
printf "$(TEXT "Can't copy to %s.")" "${PART_NAME}" >"${LOG_FILE}"
__umountNewBlDisk
break
}
cp -vRf "${PART2_PATH}/". "${TMP_PATH}/sdX2/" || {
printf "$(TEXT "Can't copy to %s.")" "${NEW_BLDISK_P2}" >"${LOG_FILE}"
__umountNewBlDisk
break
}
cp -vRf "${PART3_PATH}/". "${TMP_PATH}/sdX3/" || {
printf "$(TEXT "Can't copy to %s.")" "${NEW_BLDISK_P3}" >"${LOG_FILE}"
__umountNewBlDisk
break
break 2
}
done
sync
__umountNewBlDisk
sleep 3
@ -2425,47 +2447,46 @@ function savemodrr() {
DIALOG --title "$(TEXT "Settings")" \
--yesno "$(TEXT "Warning:\nDo not terminate midway, otherwise it may cause damage to the RR. Do you want to continue?")" 0 0
[ $? -ne 0 ] && return
DIALOG --title "$(TEXT "Settings")" \
--infobox "$(TEXT "Saving ...\n(It usually takes 5-10 minutes, please be patient and wait.)")" 0 0
RDXZ_PATH="${TMP_PATH}/rdxz_tmp"
rm -rf "${RDXZ_PATH}"
mkdir -p "${RDXZ_PATH}"
INITRD_FORMAT=$(file -b --mime-type "${RR_RAMDISK_FILE}")
(
cd "${RDXZ_PATH}"
case "${INITRD_FORMAT}" in
*'x-cpio'*) cpio -idm <"${RR_RAMDISK_FILE}" ;;
*'x-xz'*) xz -dc "${RR_RAMDISK_FILE}" | cpio -idm ;;
*'x-lz4'*) lz4 -dc "${RR_RAMDISK_FILE}" | cpio -idm ;;
*'x-lzma'*) lzma -dc "${RR_RAMDISK_FILE}" | cpio -idm ;;
*'x-bzip2'*) bzip2 -dc "${RR_RAMDISK_FILE}" | cpio -idm ;;
*'gzip'*) gzip -dc "${RR_RAMDISK_FILE}" | cpio -idm ;;
*'zstd'*) zstd -dc "${RR_RAMDISK_FILE}" | cpio -idm ;;
*'x-cpio'*) (cd "${RDXZ_PATH}" && cpio -idm <"${RR_RAMDISK_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${RDXZ_PATH}" && xz -dc "${RR_RAMDISK_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${RDXZ_PATH}" && lz4 -dc "${RR_RAMDISK_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${RDXZ_PATH}" && lzma -dc "${RR_RAMDISK_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${RDXZ_PATH}" && bzip2 -dc "${RR_RAMDISK_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'gzip'*) (cd "${RDXZ_PATH}" && gzip -dc "${RR_RAMDISK_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'zstd'*) (cd "${RDXZ_PATH}" && zstd -dc "${RR_RAMDISK_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*) ;;
esac
) >/dev/null 2>&1 || true
if [ -z "$(ls -A "$RDXZ_PATH")" ]; then
DIALOG --title "$(TEXT "Settings")" \
--msgbox "$(TEXT "initrd-rr file format error!")" 0 0
return
fi
rm -rf "${RDXZ_PATH}/opt/rr"
cp -rf "$(dirname ${WORK_PATH})" "${RDXZ_PATH}/"
(
cd "${RDXZ_PATH}"
cp -rpf "$(dirname ${WORK_PATH})" "${RDXZ_PATH}/" 2>/dev/null
cp -apf "/root/"{.bashrc,.dialogrc} "${RDXZ_PATH}/root/" 2>/dev/null
RDSIZE=$(du -sb ${RDXZ_PATH} 2>/dev/null | awk '{print $1}')
case "${INITRD_FORMAT}" in
*'x-cpio'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} >"${RR_RAMDISK_FILE}" ;;
*'x-xz'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | xz -9 -C crc32 -c - >"${RR_RAMDISK_FILE}" ;;
*'x-lz4'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | lz4 -9 -l -c - >"${RR_RAMDISK_FILE}" ;;
*'x-lzma'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | lzma -9 -c - >"${RR_RAMDISK_FILE}" ;;
*'x-bzip2'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | bzip2 -9 -c - >"${RR_RAMDISK_FILE}" ;;
*'gzip'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | gzip -9 -c - >"${RR_RAMDISK_FILE}" ;;
*'zstd'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | zstd -19 -T0 -f -c - >"${RR_RAMDISK_FILE}" ;;
*'x-cpio'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root >"${RR_RAMDISK_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | xz -9 -C crc32 -c - >"${RR_RAMDISK_FILE}") >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | lz4 -9 -l -c - >"${RR_RAMDISK_FILE}") >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | lzma -9 -c - >"${RR_RAMDISK_FILE}") >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | bzip2 -9 -c - >"${RR_RAMDISK_FILE}") >/dev/null 2>&1 ;;
*'gzip'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | gzip -9 -c - >"${RR_RAMDISK_FILE}") >/dev/null 2>&1 ;;
*'zstd'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | zstd -19 -T0 -f -c - >"${RR_RAMDISK_FILE}") >/dev/null 2>&1 ;;
*) ;;
esac
) 2>&1 | DIALOG --title "$(TEXT "Settings")" \
--gauge "$(TEXT "Saving ...\n(It usually takes 5-10 minutes, please be patient and wait.)")" 8 100
rm -rf "${RDXZ_PATH}"
DIALOG --title "$(TEXT "Settings")" \
--msgbox "$(TEXT "Save is complete.")" 0 0
@ -2488,7 +2509,8 @@ function setStaticIP() {
2>"${TMP_PATH}/resp"
RET=$?
case ${RET} in
0) # ok-button
0)
# ok-button
address="$(sed -n '1p' "${TMP_PATH}/resp" 2>/dev/null)"
netmask="$(sed -n '2p' "${TMP_PATH}/resp" 2>/dev/null)"
gateway="$(sed -n '3p' "${TMP_PATH}/resp" 2>/dev/null)"
@ -2524,10 +2546,12 @@ function setStaticIP() {
--progressbox "$(TEXT "Setting ...")" 20 100
break
;;
1) # cancel-button
1)
# cancel-button
break
;;
255) # ESC
255)
# ESC
break 2
;;
esac
@ -2555,7 +2579,8 @@ function setWirelessAccount() {
2>"${TMP_PATH}/resp"
RET=$?
case ${RET} in
0) # ok-button
0)
# ok-button
SSID="$(sed -n '1p' "${TMP_PATH}/resp" 2>/dev/null)"
PSK="$(sed -n '2p' "${TMP_PATH}/resp" 2>/dev/null)"
(
@ -2588,10 +2613,12 @@ function setWirelessAccount() {
--progressbox "$(TEXT "Setting ...")" 20 100
break
;;
1) # cancel-button
1)
# cancel-button
break
;;
255) # ESC
255)
# ESC
break
;;
esac
@ -2649,10 +2676,13 @@ function changePassword() {
--inputbox "$(TEXT "New password: (Empty for default value 'rr')")" 0 70 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && return
DIALOG --title "$(TEXT "Settings")" \
--infobox "$(TEXT "Setting ...")" 20 100
local STRPASSWD="$(cat "${TMP_PATH}/resp")"
# local NEWPASSWD="$(python3 -c "from passlib.hash import sha512_crypt;pw=\"${STRPASSWD:-rr}\";print(sha512_crypt.using(rounds=5000).hash(pw))")"
# local NEWPASSWD="$(echo "${STRPASSWD:-rr}" | mkpasswd -m sha512)"
local NEWPASSWD="$(openssl passwd -6 -salt $(openssl rand -hex 8) "${STRPASSWD:-rr}")"
cp -p /etc/shadow /etc/shadow-
cp -pf /etc/shadow /etc/shadow-
sed -i "s|^root:[^:]*|root:${NEWPASSWD}|" /etc/shadow
local RDXZ_PATH="${TMP_PATH}/rdxz_tmp"
@ -2661,19 +2691,16 @@ function changePassword() {
local INITRD_FORMAT
if [ -f "${RR_RAMUSER_FILE}" ]; then
INITRD_FORMAT=$(file -b --mime-type "${RR_RAMUSER_FILE}")
(
cd "${RDXZ_PATH}"
case "${INITRD_FORMAT}" in
*'x-cpio'*) cpio -idm <"${RR_RAMUSER_FILE}" ;;
*'x-xz'*) xz -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'x-lz4'*) lz4 -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'x-lzma'*) lzma -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'x-bzip2'*) bzip2 -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'gzip'*) gzip -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'zstd'*) zstd -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'x-cpio'*) (cd "${RDXZ_PATH}" && cpio -idm <"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${RDXZ_PATH}" && xz -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${RDXZ_PATH}" && lz4 -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${RDXZ_PATH}" && lzma -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${RDXZ_PATH}" && bzip2 -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'gzip'*) (cd "${RDXZ_PATH}" && gzip -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'zstd'*) (cd "${RDXZ_PATH}" && zstd -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*) ;;
esac
) >/dev/null 2>&1 || true
else
INITRD_FORMAT="application/zstd"
fi
@ -2682,28 +2709,26 @@ function changePassword() {
rm -f ${RDXZ_PATH}/etc/shadow* 2>/dev/null
else
mkdir -p "${RDXZ_PATH}/etc"
cp -p /etc/shadow* ${RDXZ_PATH}/etc && chown root:root ${RDXZ_PATH}/etc/shadow* && chmod 600 ${RDXZ_PATH}/etc/shadow*
cp -pf /etc/shadow* ${RDXZ_PATH}/etc && chown root:root ${RDXZ_PATH}/etc/shadow* && chmod 600 ${RDXZ_PATH}/etc/shadow*
fi
if [ -n "$(ls -A "${RDXZ_PATH}" 2>/dev/null)" ] && [ -n "$(ls -A "${RDXZ_PATH}/etc" 2>/dev/null)" ]; then
(
cd "${RDXZ_PATH}"
local RDSIZE=$(du -sb ${RDXZ_PATH} 2>/dev/null | awk '{print $1}')
case "${INITRD_FORMAT}" in
*'x-cpio'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} >"${RR_RAMUSER_FILE}" ;;
*'x-xz'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | xz -9 -C crc32 -c - >"${RR_RAMUSER_FILE}" ;;
*'x-lz4'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | lz4 -9 -l -c - >"${RR_RAMUSER_FILE}" ;;
*'x-lzma'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | lzma -9 -c - >"${RR_RAMUSER_FILE}" ;;
*'x-bzip2'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | bzip2 -9 -c - >"${RR_RAMUSER_FILE}" ;;
*'gzip'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | gzip -9 -c - >"${RR_RAMUSER_FILE}" ;;
*'zstd'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | zstd -19 -T0 -f -c - >"${RR_RAMUSER_FILE}" ;;
*'x-cpio'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | xz -9 -C crc32 -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | lz4 -9 -l -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | lzma -9 -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | bzip2 -9 -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'gzip'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | gzip -9 -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'zstd'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | zstd -19 -T0 -f -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*) ;;
esac
) 2>&1 | DIALOG --title "$(TEXT "Settings")"
else
rm -f "${RR_RAMUSER_FILE}"
fi
rm -rf "${RDXZ_PATH}"
[ "${STRPASSWD:-rr}" = "rr" ] && MSG="$(TEXT "password for root restored.")" || MSG="$(TEXT "password for root changed.")"
DIALOG --title "$(TEXT "Settings")" \
--msgbox "${MSG}" 0 0
@ -2723,7 +2748,8 @@ function changePorts() {
2>"${TMP_PATH}/resp"
RET=$?
case ${RET} in
0) # ok-button
0)
# ok-button
function check_port() {
if [ -z "${1}" ]; then
return 0
@ -2745,6 +2771,8 @@ function changePorts() {
--yesno "$(printf "$(TEXT "Invalid %s port number, retry?")" "${EP}")" 0 0
[ $? -eq 0 ] && continue || break
fi
DIALOG --title "$(TEXT "Settings")" \
--infobox "$(TEXT "Setting ...")" 20 100
# save to rrorg.conf
rm -f "/etc/rrorg.conf"
[ ! "${HTTP:-7080}" = "7080" ] && (echo "HTTP_PORT=${HTTP}" >>"/etc/rrorg.conf" && /etc/init.d/S90thttpd restart >/dev/null 2>&1)
@ -2757,19 +2785,16 @@ function changePorts() {
local INITRD_FORMAT
if [ -f "${RR_RAMUSER_FILE}" ]; then
INITRD_FORMAT=$(file -b --mime-type "${RR_RAMUSER_FILE}")
(
cd "${RDXZ_PATH}"
case "${INITRD_FORMAT}" in
*'x-cpio'*) cpio -idm <"${RR_RAMUSER_FILE}" ;;
*'x-xz'*) xz -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'x-lz4'*) lz4 -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'x-lzma'*) lzma -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'x-bzip2'*) bzip2 -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'gzip'*) gzip -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'zstd'*) zstd -dc "${RR_RAMUSER_FILE}" | cpio -idm ;;
*'x-cpio'*) (cd "${RDXZ_PATH}" && cpio -idm <"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${RDXZ_PATH}" && xz -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${RDXZ_PATH}" && lz4 -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${RDXZ_PATH}" && lzma -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${RDXZ_PATH}" && bzip2 -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'gzip'*) (cd "${RDXZ_PATH}" && gzip -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*'zstd'*) (cd "${RDXZ_PATH}" && zstd -dc "${RR_RAMUSER_FILE}" | cpio -idm) >/dev/null 2>&1 ;;
*) ;;
esac
) >/dev/null 2>&1 || true
else
INITRD_FORMAT="application/zstd"
fi
@ -2777,23 +2802,20 @@ function changePorts() {
rm -f "${RDXZ_PATH}/etc/rrorg.conf" 2>/dev/null
else
mkdir -p "${RDXZ_PATH}/etc"
cp -p /etc/rrorg.conf ${RDXZ_PATH}/etc
cp -pf /etc/rrorg.conf ${RDXZ_PATH}/etc
fi
if [ -n "$(ls -A "${RDXZ_PATH}" 2>/dev/null)" ] && [ -n "$(ls -A "${RDXZ_PATH}/etc" 2>/dev/null)" ]; then
(
cd "${RDXZ_PATH}"
local RDSIZE=$(du -sb ${RDXZ_PATH} 2>/dev/null | awk '{print $1}')
case "${INITRD_FORMAT}" in
*'x-cpio'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} >"${RR_RAMUSER_FILE}" ;;
*'x-xz'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | xz -9 -C crc32 -c - >"${RR_RAMUSER_FILE}" ;;
*'x-lz4'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | lz4 -9 -l -c - >"${RR_RAMUSER_FILE}" ;;
*'x-lzma'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | lzma -9 -c - >"${RR_RAMUSER_FILE}" ;;
*'x-bzip2'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | bzip2 -9 -c - >"${RR_RAMUSER_FILE}" ;;
*'gzip'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | gzip -9 -c - >"${RR_RAMUSER_FILE}" ;;
*'zstd'*) find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | zstd -19 -T0 -f -c - >"${RR_RAMUSER_FILE}" ;;
*'x-cpio'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | xz -9 -C crc32 -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | lz4 -9 -l -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | lzma -9 -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | bzip2 -9 -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'gzip'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | gzip -9 -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*'zstd'*) (cd "${RDXZ_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | zstd -19 -T0 -f -c - >"${RR_RAMUSER_FILE}") >/dev/null 2>&1 ;;
*) ;;
esac
) 2>&1 | DIALOG --title "$(TEXT "Settings")"
else
rm -f "${RR_RAMUSER_FILE}"
fi
@ -2803,10 +2825,12 @@ function changePorts() {
--msgbox "${MSG}" 0 0
break
;;
1) # cancel-button
1)
# cancel-button
break
;;
255) # ESC
255)
# ESC
break
;;
esac
@ -2835,6 +2859,9 @@ function advancedMenu() {
if [ "${DIRECTBOOT}" = "false" ]; then
echo "i \"$(TEXT "Timeout of get IP in boot:") \Z4${BOOTIPWAIT}\Zn\""
echo "k \"$(TEXT "Kernel switching method:") \Z4${KERNELWAY}\Zn\""
# Some GPU have compatibility issues, so this function is temporarily disabled. RR_CMDLINE= ... nomodeset
# checkCmdline "rr_cmdline" "nomodeset" && POWEROFFDISPLAY="false" || POWEROFFDISPLAY="true"
# echo "v \"$(TEXT "Power off display after boot:") \Z4${POWEROFFDISPLAY}\Zn\"" >>"${TMP_PATH}/menu"
fi
echo "n \"$(TEXT "Reboot on kernel panic:") \Z4${KERNELPANIC}\Zn\""
if [ -n "$(ls /dev/mmcblk* 2>/dev/null)" ]; then
@ -2946,6 +2973,18 @@ function advancedMenu() {
writeConfigKey "kernelway" "${KERNELWAY}" "${USER_CONFIG_FILE}"
NEXT="k"
;;
# v)
# DIALOG --title "$(TEXT "Advanced")" \
# --yesno "$(TEXT "Modifying this item requires a reboot, continue?")" 0 0
# RET=$?
# [ ${RET} -ne 0 ] && continue
# checkCmdline "rr_cmdline" "nomodeset" && delCmdline "rr_cmdline" "nomodeset" || addCmdline "rr_cmdline" "nomodeset"
# DIALOG --title "$(TEXT "Advanced")" \
# --infobox "$(TEXT "Reboot to RR")" 0 0
# rebootTo config
# exit 0
# NEXT="v"
# ;;
n)
rm -f "${TMP_PATH}/menu"
{
@ -3028,7 +3067,9 @@ function advancedMenu() {
initDSMNetwork
NEXT="e"
;;
e) break ;;
e)
break
;;
esac
done
}
@ -3171,7 +3212,9 @@ function settingsMenu() {
--msgbox "${MSG}" 0 0
NEXT="e"
;;
e) break ;;
e)
break
;;
esac
done
}
@ -3202,7 +3245,7 @@ function downloadExts() {
TAG="${LATESTURL##*/}"
fi
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
if [ -z "${TAG}" ] || [ "${TAG}" = "latest" ]; then
if [ "${TAG:-latest}" = "latest" ]; then
MSG="$(printf "%s\n%s:\n%s\n" "$(TEXT "Error checking new version.")" "$(TEXT "Error")" "Tag is ${TAG}")"
if [ "${5}" = "-1" ]; then
echo "${T} - ${MSG}"
@ -3388,7 +3431,7 @@ function updateRR() {
done <<<$(readConfigArray "remove" "${TMP_PATH}/update/update-list.yml")
while IFS=': ' read -r KEY VALUE; do
if [ "${KEY: -1}" = "/" ]; then
rm -Rf "${VALUE}"/*
rm -rf "${VALUE}"/*
mkdir -p "${VALUE}"
cp -rf "${TMP_PATH}/update/${VALUE}"/* "${VALUE}"
if [ "$(realpath "${VALUE}")" = "$(realpath "${MODULES_PATH}")" ]; then
@ -3841,7 +3884,9 @@ function updateMenu() {
writeConfigKey "prerelease" "${PRERELEASE}" "${USER_CONFIG_FILE}"
NEXT="e"
;;
e) return ;;
e)
return
;;
esac
[ -z "${1}" ] || return
done

View File

@ -8,23 +8,6 @@
set -o pipefail # Get exit code from process piped
# Sanity check
if [ ! -f "${ORI_RDGZ_FILE}" ]; then
echo "ERROR: ${ORI_RDGZ_FILE} not found!" >"${LOG_FILE}"
exit 1
fi
echo -n "Patching Ramdisk"
# Remove old rd.gz patched
rm -f "${MOD_RDGZ_FILE}"
# Unzipping ramdisk
echo -n "."
rm -rf "${RAMDISK_PATH}" # Force clean
mkdir -p "${RAMDISK_PATH}"
(cd "${RAMDISK_PATH}" && xz -dc <"${ORI_RDGZ_FILE}" | cpio -idm) >/dev/null 2>&1 || true
# get user data
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
@ -42,32 +25,6 @@ PATSUM="$(readConfigKey "patsum" "${USER_CONFIG_FILE}")"
ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")" # official drivers priorities
HDDSORT="$(readConfigKey "hddsort" "${USER_CONFIG_FILE}")"
[ "${PATURL:0:1}" = "#" ] && PATURL=""
[ "${PATSUM:0:1}" = "#" ] && PATSUM=""
# Check if DSM buildnumber changed
. "${RAMDISK_PATH}/etc/VERSION"
if [ -n "${PRODUCTVER}" ] && [ -n "${BUILDNUM}" ] && [ -n "${SMALLNUM}" ] &&
([ ! "${PRODUCTVER}" = "${majorversion}.${minorversion}" ] || [ ! "${BUILDNUM}" = "${buildnumber}" ] || [ ! "${SMALLNUM}" = "${smallfixnumber}" ]); then
OLDVER="${PRODUCTVER}(${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))"
NEWVER="${majorversion}.${minorversion}(${buildnumber}$([ ${smallfixnumber:-0} -ne 0 ] && echo "u${smallfixnumber}"))"
echo -e "\033[A\n\033[1;32mBuild number changed from \033[1;31m${OLDVER}\033[1;32m to \033[1;31m${NEWVER}\033[0m"
echo -n "Patching Ramdisk."
PATURL=""
PATSUM=""
# Clean old pat file
rm -f "${PART3_PATH}/dl/${MODEL}-${PRODUCTVER}.pat" 2>/dev/null || true
fi
# Update new buildnumber
PRODUCTVER=${majorversion}.${minorversion}
BUILDNUM=${buildnumber}
SMALLNUM=${smallfixnumber}
writeConfigKey "productver" "${PRODUCTVER}" "${USER_CONFIG_FILE}"
writeConfigKey "buildnum" "${BUILDNUM}" "${USER_CONFIG_FILE}"
writeConfigKey "smallnum" "${SMALLNUM}" "${USER_CONFIG_FILE}"
echo -n "."
# Read model data
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${WORK_PATH}/platforms.yml")"
KPRE="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kpre" "${WORK_PATH}/platforms.yml")"
@ -78,6 +35,44 @@ if [ -z "${PLATFORM}" ] || [ -z "${KVER}" ]; then
exit 1
fi
[ "${PATURL:0:1}" = "#" ] && PATURL=""
[ "${PATSUM:0:1}" = "#" ] && PATSUM=""
# Sanity check
if [ ! -f "${ORI_RDGZ_FILE}" ]; then
echo "ERROR: ${ORI_RDGZ_FILE} not found!" >"${LOG_FILE}"
exit 1
fi
# Unzipping ramdisk
rm -rf "${RAMDISK_PATH}" # Force clean
mkdir -p "${RAMDISK_PATH}"
(cd "${RAMDISK_PATH}" && xz -dc <"${ORI_RDGZ_FILE}" | cpio -idm) >/dev/null 2>&1
# Check if DSM buildnumber changed
. "${RAMDISK_PATH}/etc/VERSION"
if [ -n "${PRODUCTVER}" ] && [ -n "${BUILDNUM}" ] && [ -n "${SMALLNUM}" ] &&
([ ! "${PRODUCTVER}" = "${majorversion}.${minorversion}" ] || [ ! "${BUILDNUM}" = "${buildnumber}" ] || [ ! "${SMALLNUM}" = "${smallfixnumber}" ]); then
OLDVER="${PRODUCTVER}(${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))"
NEWVER="${majorversion}.${minorversion}(${buildnumber}$([ ${smallfixnumber:-0} -ne 0 ] && echo "u${smallfixnumber}"))"
echo -e "\033[A\n\033[1;32mBuild number changed from \033[1;31m${OLDVER}\033[1;32m to \033[1;31m${NEWVER}\033[0m"
PATURL=""
PATSUM=""
# Clean old pat file
rm -f "${PART3_PATH}/dl/${MODEL}-${PRODUCTVER}.pat" 2>/dev/null || true
fi
echo -n "Patching Ramdisk"
# Update new buildnumber
PRODUCTVER=${majorversion}.${minorversion}
BUILDNUM=${buildnumber}
SMALLNUM=${smallfixnumber}
writeConfigKey "productver" "${PRODUCTVER}" "${USER_CONFIG_FILE}"
writeConfigKey "buildnum" "${BUILDNUM}" "${USER_CONFIG_FILE}"
writeConfigKey "smallnum" "${SMALLNUM}" "${USER_CONFIG_FILE}"
declare -A SYNOINFO
declare -A ADDONS
declare -A MODULES
@ -108,7 +103,6 @@ for PE in "${PATCHS[@]}"; do
echo "Patching with ${PE}" >"${LOG_FILE}"
# ${PE} contains *, so double quotes cannot be added
for PF in $(ls ${WORK_PATH}/patch/${PE} 2>/dev/null); do
echo -n "."
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
@ -131,7 +125,6 @@ for KEY in "${!SYNOINFO[@]}"; do
done
# Patch /sbin/init.post
echo -n "."
grep -v -e '^[\t ]*#' -e '^$' "${WORK_PATH}/patch/config-manipulators.sh" >"${TMP_PATH}/rp.txt"
sed -e "/@@@CONFIG-MANIPULATORS-TOOLS@@@/ {" -e "r ${TMP_PATH}/rp.txt" -e 'd' -e '}' -i "${RAMDISK_PATH}/sbin/init.post"
rm -f "${TMP_PATH}/rp.txt"
@ -149,7 +142,6 @@ rm -f "${TMP_PATH}/rp.txt"
echo -n "."
installModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}" "${!MODULES[@]}" || exit 1
echo -n "."
# Copying fake modprobe
[ $(echo "${KVER:-4}" | cut -d'.' -f1) -lt 5 ] && cp -f "${WORK_PATH}/patch/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
# Copying LKM to /usr/lib/modules
@ -254,7 +246,7 @@ for F in $(ls -1 "${SCRIPTS_PATH}/"*.sh 2>/dev/null); do
done
# Reassembly ramdisk
echo -n "."
rm -f "${MOD_RDGZ_FILE}"
if [ "${RD_COMPRESSED}" = "true" ]; then
(cd "${RAMDISK_PATH}" && find . 2>/dev/null | cpio -o -H newc -R root:root | xz -9 --format=lzma >"${MOD_RDGZ_FILE}") >"${LOG_FILE}" 2>&1 || exit 1
else
@ -267,8 +259,8 @@ sync
rm -rf "${RAMDISK_PATH}"
# Update SHA256 hash
echo -n "."
RAMDISK_HASH_CUR="$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')"
writeConfigKey "ramdisk-hash" "${RAMDISK_HASH_CUR}" "${USER_CONFIG_FILE}"
echo -n "."
echo

View File

@ -13,7 +13,6 @@ if [ ! -f "${ORI_ZIMAGE_FILE}" ]; then
fi
echo -n "Patching zImage"
rm -f "${MOD_ZIMAGE_FILE}"
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
@ -25,6 +24,7 @@ if [ "${KERNEL}" = "custom" ]; then
KPRE="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kpre" "${WORK_PATH}/platforms.yml")"
# Extract bzImage
gzip -dc "${CKS_PATH}/bzImage-${PLATFORM}-$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}.gz" >"${MOD_ZIMAGE_FILE}"
echo -n "..."
else
echo -n "."
# Extract vmlinux
@ -35,6 +35,7 @@ else
echo -n "."
# Rebuild zImage
"${WORK_PATH}/vmlinux-to-bzImage.sh" "${TMP_PATH}/vmlinux-mod" "${MOD_ZIMAGE_FILE}" >"${LOG_FILE}" 2>&1 || exit 1
echo -n "."
fi
sync
@ -44,4 +45,5 @@ echo -n "."
HASH="$(sha256sum "${ORI_ZIMAGE_FILE}" | awk '{print $1}')"
writeConfigKey "zimage-hash" "${HASH}" "${USER_CONFIG_FILE}"
echo -n "."
echo

View File

@ -75,10 +75,10 @@ function set_gfxpayload {
fi
}
set RR_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=disable"
set RR_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=disable nox2apic nomodeset"
search --set=root --label "RR3"
if [ -s /zImage-dsm ] && [ -s /initrd-dsm ]; then
if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
if [ "${default}" = "direct" ]; then
set timeout="1"
menuentry 'Boot DSM kernel directly' --id direct {

View File

@ -49,7 +49,6 @@ function create() {
sudo locale-gen ar_SA.UTF-8 de_DE.UTF-8 en_US.UTF-8 es_ES.UTF-8 fr_FR.UTF-8 ja_JP.UTF-8 ko_KR.UTF-8 ru_RU.UTF-8 th_TH.UTF-8 tr_TR.UTF-8 uk_UA.UTF-8 vi_VN.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_TW.UTF-8
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${RRIMGPATH}"
@ -66,23 +65,21 @@ function create() {
echo "Create WORKSPACE"
rm -rf "${WORKSPACE}"
mkdir -p "${WORKSPACE}/mnt" "${WORKSPACE}/tmp" "${WORKSPACE}/initrd"
cp -rf /tmp/mnt/p{1,2,3} "${WORKSPACE}/mnt/"
cp -rpf /tmp/mnt/p{1,2,3} "${WORKSPACE}/mnt/"
INITRD_FILE="${WORKSPACE}/mnt/p3/initrd-rr"
INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}")
(
cd "${WORKSPACE}/initrd"
case "${INITRD_FORMAT}" in
*'x-cpio'*) sudo cpio -idm <"${INITRD_FILE}" ;;
*'x-xz'*) xz -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'x-lz4'*) lz4 -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'x-lzma'*) lzma -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'x-bzip2'*) bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'gzip'*) gzip -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'zstd'*) zstd -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'x-cpio'*) (cd "${WORKSPACE}/initrd" && sudo cpio -idm <"${INITRD_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${WORKSPACE}/initrd" && xz -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${WORKSPACE}/initrd" && lz4 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${WORKSPACE}/initrd" && lzma -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${WORKSPACE}/initrd" && bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'gzip'*) (cd "${WORKSPACE}/initrd" && gzip -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'zstd'*) (cd "${WORKSPACE}/initrd" && zstd -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*) ;;
esac
) 2>/dev/null
sudo sync
for i in {1..3}; do

View File

@ -45,13 +45,13 @@ function getExtractor() {
fi
mkdir -p "${CACHE_DIR}/ramdisk"
tar -C "${CACHE_DIR}/ramdisk/" -xf "${CACHE_DIR}/${PAT_FILE}" rd.gz 2>&1
tar -C "${CACHE_DIR}/ramdisk/" -xf "${CACHE_DIR}/${PAT_FILE}" "rd.gz" 2>&1
if [ $? -ne 0 ]; then
echo "[E] extractor rd.gz error!"
rm -rf "${CACHE_DIR}"
exit 1
fi
(cd "${CACHE_DIR}/ramdisk" && xz -dc <rd.gz | cpio -idm) >/dev/null 2>&1 || true
(cd "${CACHE_DIR}/ramdisk" && xz -dc <"rd.gz" | cpio -idm) >/dev/null 2>&1 || true
rm -rf "${DEST_PATH}"
mkdir -p "${DEST_PATH}"
@ -251,34 +251,31 @@ function repackInitrd() {
local RDXZ_PATH="rdxz_tmp"
mkdir -p "${RDXZ_PATH}"
local INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}")
(
cd "${RDXZ_PATH}"
case "${INITRD_FORMAT}" in
*'x-cpio'*) sudo cpio -idm <"${INITRD_FILE}" ;;
*'x-xz'*) xz -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'x-lz4'*) lz4 -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'x-lzma'*) lzma -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'x-bzip2'*) bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'gzip'*) gzip -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'zstd'*) zstd -dc "${INITRD_FILE}" | sudo cpio -idm ;;
*'x-cpio'*) (cd "${RDXZ_PATH}" && sudo cpio -idm <"${INITRD_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${RDXZ_PATH}" && xz -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${RDXZ_PATH}" && lz4 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${RDXZ_PATH}" && lzma -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${RDXZ_PATH}" && bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'gzip'*) (cd "${RDXZ_PATH}" && gzip -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'zstd'*) (cd "${RDXZ_PATH}" && zstd -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*) ;;
esac
) || true
sudo cp -rf "${PLUGIN_PATH}/"* "${RDXZ_PATH}/"
[ -f "${OUTPUT_PATH}" ] && rm -rf "${OUTPUT_PATH}"
(
cd "${RDXZ_PATH}"
case "${INITRD_FORMAT}" in
*'x-cpio'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root >"${OUTPUT_PATH}" ;;
*'x-xz'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | xz -9 -C crc32 -c - >"${OUTPUT_PATH}" ;;
*'x-lz4'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | lz4 -9 -l -c - >"${OUTPUT_PATH}" ;;
*'x-lzma'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | lzma -9 -c - >"${OUTPUT_PATH}" ;;
*'x-bzip2'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | bzip2 -9 -c - >"${OUTPUT_PATH}" ;;
*'gzip'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | gzip -9 -c - >"${OUTPUT_PATH}" ;;
*'zstd'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | zstd -19 -T0 -f -c - >"${OUTPUT_PATH}" ;;
*'x-cpio'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | xz -9 -C crc32 -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | lz4 -9 -l -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | lzma -9 -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | bzip2 -9 -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
*'gzip'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | gzip -9 -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
*'zstd'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | zstd -19 -T0 -f -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
*) ;;
esac
) || true
sudo rm -rf "${RDXZ_PATH}"
}
@ -401,6 +398,9 @@ ethernet0.virtualDev = "vmxnet3"
ethernet0.connectionType = "nat"
ethernet0.allowguestconnectioncontrol = "true"
ethernet0.present = "TRUE"
serial0.fileType = "file"
serial0.fileName = "serial0.log"
serial0.present = "TRUE"
sata0.present = "TRUE"
sata0:0.fileName = "${VMNAME}-disk1.vmdk"
sata0:0.present = "TRUE"