From 9761d64501499c82ff9a55f3ee5b51323a650533 Mon Sep 17 00:00:00 2001 From: Ing Date: Fri, 15 Nov 2024 22:07:59 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20menu.sh=E3=80=81localbuild?= =?UTF-8?q?.sh=20=E5=92=8C=20func.sh=EF=BC=8C=E4=BC=98=E5=8C=96=20initrd?= =?UTF-8?q?=20=E6=96=87=E4=BB=B6=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E6=94=AF=E6=8C=81=E5=A4=9A=E7=A7=8D=E5=8E=8B=E7=BC=A9?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files/initrd/opt/rr/menu.sh | 96 ++++++++++++++++++++++++++++++++----- localbuild.sh | 14 +++++- scripts/func.sh | 23 ++++++++- 3 files changed, 117 insertions(+), 16 deletions(-) diff --git a/files/initrd/opt/rr/menu.sh b/files/initrd/opt/rr/menu.sh index 2a17b2b4..82de43e5 100755 --- a/files/initrd/opt/rr/menu.sh +++ b/files/initrd/opt/rr/menu.sh @@ -2431,21 +2431,45 @@ function savemodrr() { 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}" - xz -dc <"${RR_RAMDISK_FILE}" | cpio -idm + 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 ;; + *) ;; + 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}" RDSIZE=$(du -sb ${RDXZ_PATH} 2>/dev/null | awk '{print $1}') - find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | xz -9 --check=crc32 >"${RR_RAMDISK_FILE}" + 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}" ;; + *) ;; + 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 + --msgbox "$(TEXT "Save is complete.")" 0 0 return } @@ -2624,10 +2648,24 @@ function changePassword() { RDXZ_PATH="${TMP_PATH}/rdxz_tmp" rm -rf "${RDXZ_PATH}" mkdir -p "${RDXZ_PATH}" - [ -f "${RR_RAMUSER_FILE}" ] && ( - cd "${RDXZ_PATH}" - xz -dc <"${RR_RAMUSER_FILE}" | cpio -idm - ) >/dev/null 2>&1 || true + 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 ;; + *) ;; + esac + ) >/dev/null 2>&1 || true + else + INITRD_FORMAT="application/zstd" + fi if [ "${STRPASSWD:-rr}" = "rr" ]; then rm -f ${RDXZ_PATH}/etc/shadow* 2>/dev/null else @@ -2638,7 +2676,16 @@ function changePassword() { ( cd "${RDXZ_PATH}" RDSIZE=$(du -sb ${RDXZ_PATH} 2>/dev/null | awk '{print $1}') - find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | xz -9 --check=crc32 >"${RR_RAMUSER_FILE}" + 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}" ;; + *) ;; + esac ) 2>&1 | DIALOG --title "$(TEXT "Settings")" else rm -f "${RR_RAMUSER_FILE}" @@ -2695,10 +2742,24 @@ function changePorts() { RDXZ_PATH="${TMP_PATH}/rdxz_tmp" rm -rf "${RDXZ_PATH}" mkdir -p "${RDXZ_PATH}" - [ -f "${RR_RAMUSER_FILE}" ] && ( - cd "${RDXZ_PATH}" - xz -dc <"${RR_RAMUSER_FILE}" | cpio -idm - ) >/dev/null 2>&1 || true + 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 ;; + *) ;; + esac + ) >/dev/null 2>&1 || true + else + INITRD_FORMAT="application/zstd" + fi if [ ! -f "/etc/rrorg.conf" ]; then rm -f "${RDXZ_PATH}/etc/rrorg.conf" 2>/dev/null else @@ -2709,7 +2770,16 @@ function changePorts() { ( cd "${RDXZ_PATH}" RDSIZE=$(du -sb ${RDXZ_PATH} 2>/dev/null | awk '{print $1}') - find . 2>/dev/null | cpio -o -H newc -R root:root | pv -n -s ${RDSIZE:-1} | xz -9 --check=crc32 >"${RR_RAMUSER_FILE}" + 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}" ;; + *) ;; + esac ) 2>&1 | DIALOG --title "$(TEXT "Settings")" else rm -f "${RR_RAMUSER_FILE}" diff --git a/localbuild.sh b/localbuild.sh index 655e96da..e587f797 100755 --- a/localbuild.sh +++ b/localbuild.sh @@ -75,9 +75,21 @@ function create() { cp -rf "/tmp/mnt/p1" "${WORKSPACE}/mnt/p1" cp -rf "/tmp/mnt/p2" "${WORKSPACE}/mnt/p2" cp -rf "/tmp/mnt/p3" "${WORKSPACE}/mnt/p3" + + INITRD_FILE="${WORKSPACE}/mnt/p3/initrd-rr" + INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}") ( cd "${WORKSPACE}/initrd" - xz -dc <"${WORKSPACE}/mnt/p3/initrd-rr" | cpio -idm + 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 ;; + *) ;; + esac ) 2>/dev/null sudo sync sudo umount "/tmp/mnt/p1" diff --git a/scripts/func.sh b/scripts/func.sh index e2bb6050..03f17663 100755 --- a/scripts/func.sh +++ b/scripts/func.sh @@ -244,15 +244,34 @@ function repackInitrd() { RDXZ_PATH="rdxz_tmp" mkdir -p "${RDXZ_PATH}" + INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}") ( cd "${RDXZ_PATH}" - sudo xz -dc <"${INITRD_FILE}" | sudo cpio -idm + 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 ;; + *) ;; + esac ) || true sudo cp -rf "${PLUGIN_PATH}/"* "${RDXZ_PATH}/" [ -f "${OUTPUT_PATH}" ] && rm -rf "${OUTPUT_PATH}" ( cd "${RDXZ_PATH}" - sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | xz -9 --check=crc32 >"${OUTPUT_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}" ;; + *) ;; + esac ) || true sudo rm -rf "${RDXZ_PATH}" }