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

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 # Check if machine has EFI
EFI=$([ -d /sys/firmware/efi ] && echo 1 || echo 0) 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}") BUS=$(getBus "${LOADER_DISK}")
# Print text centralized # Print text centralized
@ -167,13 +167,31 @@ CMDLINE['console']="ttyS0,115200n8"
CMDLINE['consoleblank']="600" CMDLINE['consoleblank']="600"
# CMDLINE['no_console_suspend']="1" # CMDLINE['no_console_suspend']="1"
CMDLINE['root']="/dev/md0" CMDLINE['root']="/dev/md0"
CMDLINE['rootwait']=""
CMDLINE['loglevel']="15" CMDLINE['loglevel']="15"
CMDLINE['log_buf_len']="32M" CMDLINE['log_buf_len']="32M"
CMDLINE['rootwait']=""
CMDLINE['panic']="${KERNELPANIC:-0}" CMDLINE['panic']="${KERNELPANIC:-0}"
# CMDLINE['nointremap']="" # no need
# CMDLINE['split_lock_detect']="off" # no need
CMDLINE['pcie_aspm']="off" CMDLINE['pcie_aspm']="off"
# CMDLINE['intel_pstate']="disable"
# CMDLINE['nox2apic']="" # check platform
# CMDLINE['nomodeset']=""
CMDLINE['modprobe.blacklist']="${MODBLACKLIST}" 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 [ -n "$(ls /dev/mmcblk* 2>/dev/null)" ] && [ ! "${BUS}" = "mmc" ] && [ ! "${EMMCBOOT}" = "true" ]; then
# if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "sdhci"; then # if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "sdhci"; then
# [ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE['modprobe.blacklist']+="," # [ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE['modprobe.blacklist']+=","
@ -217,6 +235,8 @@ for KEY in "${!CMDLINE[@]}"; do
done done
CMDLINE_LINE=$(echo "${CMDLINE_LINE}" | sed 's/^ //') # Remove leading space CMDLINE_LINE=$(echo "${CMDLINE_LINE}" | sed 's/^ //') # Remove leading space
printf "%s:\n \033[1;36m%s\033[0m\n" "$(TEXT "Cmdline")" "${CMDLINE_LINE}" 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() { function _bootwait() {
BOOTWAIT="$(readConfigKey "bootwait" "${USER_CONFIG_FILE}")" BOOTWAIT="$(readConfigKey "bootwait" "${USER_CONFIG_FILE}")"
[ -z "${BOOTWAIT}" ] && BOOTWAIT=10 [ -z "${BOOTWAIT}" ] && BOOTWAIT=10
@ -362,6 +382,12 @@ else
# # Unload all network interfaces # # Unload all network interfaces
# for D in $(readlink /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
# 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 # Reboot
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")" KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff [ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff

View File

@ -205,7 +205,7 @@ function _get_fastest() {
local speedlist="" local speedlist=""
if command -v ping >/dev/null 2>&1; then if command -v ping >/dev/null 2>&1; then
for I in "$@"; do 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 speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty
done done
else else
@ -215,10 +215,10 @@ function _get_fastest() {
speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty speedlist+="${I} ${speed:-999}\n" # Assign default value 999 if speed is empty
done done
fi 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}')" URL="$(echo "${fastest}" | awk '{print $1}')"
SPD="$(echo "${fastest}" | awk '{print $2}')" # It is a float type 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 [ $(echo "${SPD:-999}" | cut -d. -f1) -ge 999 ] && return 1 || return 0
} }
@ -301,10 +301,9 @@ function getIP() {
function getLogo() { function getLogo() {
local MODEL="${1}" local MODEL="${1}"
rm -f "${PART3_PATH}/logo.png" rm -f "${PART3_PATH}/logo.png"
local fastest="www.synology.com" # $(_get_fastest "www.synology.com" "www.synology.cn") local fastest="$(_get_fastest "www.synology.com" "www.synology.cn")"
if [ $? -ne 0 ]; then # [ $? -ne 0 ] && return 1
return 1
fi
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") 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 if [ $? -ne 0 ] || [ "${STATUS:-0}" -ne 200 ] || [ ! -f "${PART3_PATH}/logo.png" ]; then
rm -f "${PART3_PATH}/logo.png" rm -f "${PART3_PATH}/logo.png"

View File

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

View File

@ -8,23 +8,6 @@
set -o pipefail # Get exit code from process piped 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 # get user data
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")" PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
MODEL="$(readConfigKey "model" "${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 ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")" # official drivers priorities
HDDSORT="$(readConfigKey "hddsort" "${USER_CONFIG_FILE}")" 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 # Read model data
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${WORK_PATH}/platforms.yml")" KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${WORK_PATH}/platforms.yml")"
KPRE="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kpre" "${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 exit 1
fi 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 SYNOINFO
declare -A ADDONS declare -A ADDONS
declare -A MODULES declare -A MODULES
@ -108,7 +103,6 @@ for PE in "${PATCHS[@]}"; do
echo "Patching with ${PE}" >"${LOG_FILE}" echo "Patching with ${PE}" >"${LOG_FILE}"
# ${PE} contains *, so double quotes cannot be added # ${PE} contains *, so double quotes cannot be added
for PF in $(ls ${WORK_PATH}/patch/${PE} 2>/dev/null); do for PF in $(ls ${WORK_PATH}/patch/${PE} 2>/dev/null); do
echo -n "."
echo "Patching with ${PF}" >>"${LOG_FILE}" echo "Patching with ${PF}" >>"${LOG_FILE}"
# busybox patch and gun patch have different processing methods and parameters. # 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
@ -131,7 +125,6 @@ for KEY in "${!SYNOINFO[@]}"; do
done done
# Patch /sbin/init.post # Patch /sbin/init.post
echo -n "."
grep -v -e '^[\t ]*#' -e '^$' "${WORK_PATH}/patch/config-manipulators.sh" >"${TMP_PATH}/rp.txt" 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" 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" rm -f "${TMP_PATH}/rp.txt"
@ -149,7 +142,6 @@ rm -f "${TMP_PATH}/rp.txt"
echo -n "." echo -n "."
installModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}" "${!MODULES[@]}" || exit 1 installModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}" "${!MODULES[@]}" || exit 1
echo -n "."
# Copying fake modprobe # Copying fake modprobe
[ $(echo "${KVER:-4}" | cut -d'.' -f1) -lt 5 ] && cp -f "${WORK_PATH}/patch/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/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 # Copying LKM to /usr/lib/modules
@ -254,7 +246,7 @@ for F in $(ls -1 "${SCRIPTS_PATH}/"*.sh 2>/dev/null); do
done done
# Reassembly ramdisk # Reassembly ramdisk
echo -n "." rm -f "${MOD_RDGZ_FILE}"
if [ "${RD_COMPRESSED}" = "true" ]; then 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 (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 else
@ -267,8 +259,8 @@ sync
rm -rf "${RAMDISK_PATH}" rm -rf "${RAMDISK_PATH}"
# Update SHA256 hash # Update SHA256 hash
echo -n "."
RAMDISK_HASH_CUR="$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')" RAMDISK_HASH_CUR="$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')"
writeConfigKey "ramdisk-hash" "${RAMDISK_HASH_CUR}" "${USER_CONFIG_FILE}" writeConfigKey "ramdisk-hash" "${RAMDISK_HASH_CUR}" "${USER_CONFIG_FILE}"
echo -n "."
echo echo

View File

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

View File

@ -75,10 +75,10 @@ function set_gfxpayload {
fi 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" 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 if [ "${default}" = "direct" ]; then
set timeout="1" set timeout="1"
menuentry 'Boot DSM kernel directly' --id direct { 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 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) LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${RRIMGPATH}" sudo losetup -P "${LOOPX}" "${RRIMGPATH}"
@ -66,23 +65,21 @@ function create() {
echo "Create WORKSPACE" echo "Create WORKSPACE"
rm -rf "${WORKSPACE}" rm -rf "${WORKSPACE}"
mkdir -p "${WORKSPACE}/mnt" "${WORKSPACE}/tmp" "${WORKSPACE}/initrd" 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_FILE="${WORKSPACE}/mnt/p3/initrd-rr"
INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}") INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}")
(
cd "${WORKSPACE}/initrd"
case "${INITRD_FORMAT}" in case "${INITRD_FORMAT}" in
*'x-cpio'*) sudo cpio -idm <"${INITRD_FILE}" ;; *'x-cpio'*) (cd "${WORKSPACE}/initrd" && sudo cpio -idm <"${INITRD_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) xz -dc "${INITRD_FILE}" | sudo cpio -idm ;; *'x-xz'*) (cd "${WORKSPACE}/initrd" && xz -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lz4'*) lz4 -dc "${INITRD_FILE}" | sudo cpio -idm ;; *'x-lz4'*) (cd "${WORKSPACE}/initrd" && lz4 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lzma'*) lzma -dc "${INITRD_FILE}" | sudo cpio -idm ;; *'x-lzma'*) (cd "${WORKSPACE}/initrd" && lzma -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-bzip2'*) bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm ;; *'x-bzip2'*) (cd "${WORKSPACE}/initrd" && bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'gzip'*) gzip -dc "${INITRD_FILE}" | sudo cpio -idm ;; *'gzip'*) (cd "${WORKSPACE}/initrd" && gzip -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'zstd'*) zstd -dc "${INITRD_FILE}" | sudo cpio -idm ;; *'zstd'*) (cd "${WORKSPACE}/initrd" && zstd -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*) ;; *) ;;
esac esac
) 2>/dev/null
sudo sync sudo sync
for i in {1..3}; do for i in {1..3}; do

View File

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