Compare commits

..

No commits in common. "main" and "25.9.6" have entirely different histories.
main ... 25.9.6

24 changed files with 358 additions and 12874 deletions

View File

@ -41,10 +41,11 @@ jobs:
TAG="" TAG=""
for i in {1..3}; do for i in {1..3}; do
if [ "${PRERELEASE}" = "true" ]; then if [ "${PRERELEASE}" = "true" ]; then
TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1 | sed 's/^[v|V]//g')" TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1)"
else else
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')" TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}')"
fi fi
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
rm -f rr-${TAG}.img.zip rm -f rr-${TAG}.img.zip
STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/rr-${TAG}.img.zip" -o "rr-${TAG}.img.zip") STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/rr-${TAG}.img.zip" -o "rr-${TAG}.img.zip")
if [ $? -eq 0 ] && [ ${STATUS:-0} -eq 200 ]; then if [ $? -eq 0 ] && [ ${STATUS:-0} -eq 200 ]; then
@ -61,15 +62,6 @@ jobs:
unzip rr-${TAG}.img.zip -d rr rr.img unzip rr-${TAG}.img.zip -d rr rr.img
sudo apt update
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
sudo apt install -y build-essential libtool pkgconf libzstd-dev liblzma-dev libssl-dev # kmodule dependencies
# Backup the original python3 executable.
sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true
sudo pip3 install -U -r scripts/requirements.txt
. scripts/func.sh "${{ secrets.RRORG }}" . scripts/func.sh "${{ secrets.RRORG }}"
LOOPX=$(sudo losetup -f) LOOPX=$(sudo losetup -f)
@ -79,6 +71,15 @@ jobs:
sudo mount "${LOOPX}p3" "/tmp/mnt/p3" sudo mount "${LOOPX}p3" "/tmp/mnt/p3"
unpackInitrd /tmp/mnt/p3/initrd-rr "rr/initrd" unpackInitrd /tmp/mnt/p3/initrd-rr "rr/initrd"
sudo apt update
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
sudo apt install -y build-essential libtool pkgconf libzstd-dev liblzma-dev libssl-dev # kmodule dependencies
# Backup the original python3 executable.
sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true
sudo pip3 install -U -r scripts/requirements.txt
python3 scripts/func.py getmodels -w "rr/initrd" -j "docs/models.json" -x "docs/models.xlsx" python3 scripts/func.py getmodels -w "rr/initrd" -j "docs/models.json" -x "docs/models.xlsx"
python3 scripts/func.py getpats -w "rr/initrd" -j "docs/pats.json" -x "docs/pats.xlsx" python3 scripts/func.py getpats -w "rr/initrd" -j "docs/pats.json" -x "docs/pats.xlsx"
python3 scripts/func.py getaddons -w "/tmp" -j "docs/addons.json" -x "docs/addons.xlsx" python3 scripts/func.py getaddons -w "/tmp" -j "docs/addons.json" -x "docs/addons.xlsx"

View File

@ -29,12 +29,10 @@ jobs:
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json import json
import os import os
import subprocess
def set_env(name, value): def set_env(name, value):
subprocess.call(f'echo "{name}<<EOF" >> $GITHUB_ENV', shell=True) with open(os.environ['GITHUB_ENV'], 'a', encoding='utf-8') as f:
subprocess.call(f'echo "{value}" >> $GITHUB_ENV', shell=True) f.write(f'{name}={value}\n')
subprocess.call(f'echo "EOF" >> $GITHUB_ENV', shell=True)
issuetitle = """${{ github.event.issue.title }}""" issuetitle = """${{ github.event.issue.title }}"""
issuebody = """${{ github.event.issue.body }}""" issuebody = """${{ github.event.issue.body }}"""
@ -150,10 +148,6 @@ jobs:
run: | run: |
# 累了, 毁灭吧! # 累了, 毁灭吧!
sudo apt update
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils dosfstools cpio xz-utils lz4 lzma bzip2 gzip zstd
. scripts/func.sh "${{ secrets.RRORG }}" . scripts/func.sh "${{ secrets.RRORG }}"
REPO="${{ github.server_url }}/${{ github.repository }}" REPO="${{ github.server_url }}/${{ github.repository }}"
@ -161,10 +155,11 @@ jobs:
TAG="" TAG=""
if [ "${PRERELEASE}" = "true" ]; then if [ "${PRERELEASE}" = "true" ]; then
TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1 | sed 's/^[v|V]//g')" TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1)"
else else
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')" TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}')"
fi fi
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
rm -f rr-${TAG}.img.zip rm -f rr-${TAG}.img.zip
STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/rr-${TAG}.img.zip" -o "rr-${TAG}.img.zip") STATUS=$(curl -kL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/rr-${TAG}.img.zip" -o "rr-${TAG}.img.zip")
if [ $? -ne 0 ] || [ ${STATUS:-0} -ne 200 ]; then if [ $? -ne 0 ] || [ ${STATUS:-0} -ne 200 ]; then
@ -269,7 +264,7 @@ jobs:
;; ;;
vmdk) vmdk)
echo "VMDK" echo "VMDK"
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicSparse,compat6' rr/rr.vmdk qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' rr/rr.vmdk
(cd rr && sha256sum rr.vmdk >../sha256sum) (cd rr && sha256sum rr.vmdk >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk sha256sum README.txt zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk sha256sum README.txt
;; ;;

View File

@ -45,45 +45,6 @@ If you cannot connect to the Internet, please build a pre-compiled bootloader th
--img <path> Local image path, use local image if set --img <path> Local image path, use local image if set
``` ```
- Docker Compose:
```yml
# 请从最新版本中下载 rr.img 文件。
# 并将 <path_to_rr.img> 替换为你的 rr.img 文件的实际路径.
# Please download the rr.img file from the latest release.
# And replace <path_to_rr.img> with the actual path to your rr.img file.
version: "3.9"
services:
rr:
image: qemux/qemu:latest
container_name: rr
environment:
BOOT: ""
RAM_SIZE: "4G" # >= 4G recommended for DSM
CPU_CORES: "2"
DISK_FMT: "qcow2"
DISK_TYPE: "sata"
DISK_SIZE: "32G" # data disk size
ARGUMENTS: "-device nec-usb-xhci,id=usb0,multifunction=on -drive file=/rr.img,media=disk,format=raw,if=none,id=udisk1 -device usb-storage,bus=usb0.0,port=1,drive=udisk1,bootindex=999,removable=on"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 5000:5000 # For DSM management
- 5001:5001 # For DSM management
- 7681:7681 # For RR management
- 7304:7304 # For RR management
- 7080:7080 # For RR management
- 8006:8006 # For QEMU management
volumes:
- ./rr.img:/rr.img # <path_to_rr.img>:/rr.img
- ./data:/storage
restart: always
stop_grace_period: 2m
```
### 4: GPU: ### 4: GPU:

View File

@ -1 +1 @@
25.12.0 25.9.6

View File

@ -399,26 +399,6 @@
"zh_TW": "在 DSM 系統下掛載引導磁碟和升級引導的腳本, 供 rr-manager 應用程序使用." "zh_TW": "在 DSM 系統下掛載引導磁碟和升級引導的腳本, 供 rr-manager 應用程序使用."
} }
}, },
"netfix": {
"system": true,
"description": {
"en_US": "Fix network interface mac.",
"ar_SA": "إصلاح عنوان MAC لواجهة الشبكة.",
"de_DE": "Netzwerkschnittstellen-MAC beheben.",
"es_ES": "Corregir la dirección MAC de la interfaz de red.",
"fr_FR": "Corriger l'adresse MAC de l'interface réseau.",
"ja_JP": "ネットワークインターフェースのMACアドレスを修正します.",
"ko_KR": "네트워크 인터페이스의 MAC 주소를 수정합니다.",
"ru_RU": "Исправить MAC-адрес сетевой интерфейса.",
"th_TH": "แก้ไขที่อยู่ MAC ของช่องทางเครือข่าย.",
"tr_TR": "Netzwerkschnittstellen-MAC beheben.",
"uk_UA": "Виправте MAC-адресу сетевого інтерфейсу.",
"vi_VN": "Sửa địa chỉ MAC của giao diện mạng.",
"zh_CN": "修复网络接口mac地址.",
"zh_HK": "修复网络接口mac地址.",
"zh_TW": "修复网络接口mac地址."
}
},
"notify": { "notify": {
"system": true, "system": true,
"description": { "description": {

Binary file not shown.

View File

@ -3,8 +3,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"DS1019+", "DS1019+",
@ -19,8 +18,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"FS3400", "FS3400",
@ -38,8 +36,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"DS1621xs+", "DS1621xs+",
@ -59,8 +56,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"FS3410", "FS3410",
@ -72,8 +68,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"SA3200D", "SA3200D",
@ -84,8 +79,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"DS1819+", "DS1819+",
@ -105,8 +99,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"DS1520+", "DS1520+",
@ -123,8 +116,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"HD6500", "HD6500",
@ -135,8 +127,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"DS1522+", "DS1522+",
@ -149,8 +140,7 @@
"productvers": { "productvers": {
"7.0": "4.4.180", "7.0": "4.4.180",
"7.1": "4.4.180", "7.1": "4.4.180",
"7.2": "4.4.302", "7.2": "4.4.302"
"7.3": "4.4.302"
}, },
"models": [ "models": [
"DS1621+", "DS1621+",
@ -172,8 +162,7 @@
"epyc7002": { "epyc7002": {
"productvers": { "productvers": {
"7.1": "7.1-5.10.55", "7.1": "7.1-5.10.55",
"7.2": "7.2-5.10.55", "7.2": "7.2-5.10.55"
"7.3": "7.3-5.10.55"
}, },
"models": [ "models": [
"SA6400" "SA6400"
@ -182,8 +171,7 @@
"geminilakenk": { "geminilakenk": {
"productvers": { "productvers": {
"7.1": "7.1-5.10.55", "7.1": "7.1-5.10.55",
"7.2": "7.2-5.10.55", "7.2": "7.2-5.10.55"
"7.3": "7.3-5.10.55"
}, },
"models": [ "models": [
"DS225+", "DS225+",
@ -193,8 +181,7 @@
"r1000nk": { "r1000nk": {
"productvers": { "productvers": {
"7.1": "7.1-5.10.55", "7.1": "7.1-5.10.55",
"7.2": "7.2-5.10.55", "7.2": "7.2-5.10.55"
"7.3": "7.3-5.10.55"
}, },
"models": [ "models": [
"DS725+" "DS725+"
@ -203,8 +190,7 @@
"v1000nk": { "v1000nk": {
"productvers": { "productvers": {
"7.1": "7.1-5.10.55", "7.1": "7.1-5.10.55",
"7.2": "7.2-5.10.55", "7.2": "7.2-5.10.55"
"7.3": "7.3-5.10.55"
}, },
"models": [ "models": [
"DS1525+", "DS1525+",

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -164,15 +164,6 @@ fi
CMDLINE['skip_vender_mac_interfaces']="$(seq -s, 0 $((${CMDLINE['netif_num']:-1} - 1)))" CMDLINE['skip_vender_mac_interfaces']="$(seq -s, 0 $((${CMDLINE['netif_num']:-1} - 1)))"
ETHX="$(find /sys/class/net/ -mindepth 1 -maxdepth 1 ! -name lo -exec basename {} \; | sort)"
for N in ${ETHX}; do
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
BUS="$(ethtool -i "${N}" 2>/dev/null | grep "bus-info" | cut -d' ' -f2)" || BUS="0000:00:00.0"
if [ ! "${MAC}" = "00:00:00:00:00:00" ] && [ ! "${BUS}" = "0000:00:00.0" ]; then
CMDLINE["R${BUS}"]="${MAC}"
fi
done
# set fixed cmdline # set fixed cmdline
if grep -q "force_junior" /proc/cmdline; then if grep -q "force_junior" /proc/cmdline; then
CMDLINE['force_junior']="" CMDLINE['force_junior']=""
@ -345,7 +336,7 @@ function _bootwait() {
} }
DIRECT="$(readConfigKey "directboot" "${USER_CONFIG_FILE}")" DIRECT="$(readConfigKey "directboot" "${USER_CONFIG_FILE}")"
if [ "${DIRECT}" = "true" ] || echo "parallels xen" | grep -qw "${MEV:-physical}"; then if [ "${DIRECT}" = "true" ] || [ "${MEV:-physical}" = "parallels" ]; then
# grubenv file limit is 1024 bytes. # grubenv file limit is 1024 bytes.
grub-editenv "${USER_RSYSENVFILE}" create grub-editenv "${USER_RSYSENVFILE}" create
grub-editenv "${USER_RSYSENVFILE}" set rr_version="${WTITLE}" grub-editenv "${USER_RSYSENVFILE}" set rr_version="${WTITLE}"
@ -444,8 +435,11 @@ else
IP="$(getIP)" IP="$(getIP)"
echo "${IP}" | grep -q "^169\.254\." && IP="" echo "${IP}" | grep -q "^169\.254\." && IP=""
[ -n "${IP}" ] && URL="http://${IP}:5000" || URL="http://find.synology.com/" [ -n "${IP}" ] && URL="http://${IP}:5000" || URL="http://find.synology.com/"
python3 "${WORK_PATH}/include/functions.py" "makeqr" -d "${URL}" -l "7" -o "${TMP_PATH}/qrcode_boot.png" python3 "${WORK_PATH}/include/functions.py" "makeqr" -d "${URL}" -l "6" -o "${TMP_PATH}/qrcode_boot.png"
[ -f "${TMP_PATH}/qrcode_boot.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_boot.png" >/dev/null 2>&1 || true [ -f "${TMP_PATH}/qrcode_boot.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_boot.png" >/dev/null 2>&1 || true
python3 "${WORK_PATH}/include/functions.py" "makeqr" -f "${WORK_PATH}/include/qhxg.png" -l "7" -o "${TMP_PATH}/qrcode_qhxg.png"
[ -f "${TMP_PATH}/qrcode_qhxg.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_qhxg.png" >/dev/null 2>&1 || true
fi fi
# Executes DSM kernel via KEXEC # Executes DSM kernel via KEXEC

View File

@ -8,7 +8,7 @@
# shellcheck disable=SC2034 # shellcheck disable=SC2034
RR_VERSION="25.12.0" RR_VERSION="25.9.6"
RR_RELEASE="" RR_RELEASE=""
RR_TITLE="RR v${RR_VERSION}" RR_TITLE="RR v${RR_VERSION}"

View File

@ -61,16 +61,15 @@ function getAllModules() {
UNPATH="${TMP_PATH}/modules" UNPATH="${TMP_PATH}/modules"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}" unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
for D in "" "update"; do for F in ${UNPATH}/*.ko; do
for F in ${UNPATH}/${D:+${D}/}*.ko; do
[ ! -e "${F}" ] && continue [ ! -e "${F}" ] && continue
local N DESC local N DESC
N="$(basename "${F}" .ko)" N="$(basename "${F}" .ko)"
DESC="$(modinfo -F description "${F}" 2>/dev/null)" DESC="$(modinfo -F description "${F}" 2>/dev/null)"
DESC="$(echo "${DESC}" | tr -d '\n\r\t\\' | sed "s/\"/'/g")" DESC="$(echo "${DESC}" | tr -d '\n\r\t\\' | sed "s/\"/'/g")"
echo "${D:+${D}/}${N} \"${DESC:-${D:+${D}/}${N}}\"" echo "${N} \"${DESC:-${N}}\""
done
done done
rm -rf "${UNPATH}" rm -rf "${UNPATH}"
} }
@ -123,19 +122,16 @@ function installModules() {
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}" unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")" ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
for D in "" "update"; do for F in ${UNPATH}/*.ko; do
for F in ${UNPATH}/${D:+${D}/}*.ko; do
[ ! -e "${F}" ] && continue [ ! -e "${F}" ] && continue
M=$(basename "${F}") M=$(basename "${F}")
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}${M}" ] && continue # TODO: check if module is already loaded [ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
if echo "${MLIST}" | grep -wq "${D:+${D}/}$(basename "${M}" .ko)"; then if echo "${MLIST}" | grep -wq "$(basename "${M}" .ko)"; then
mkdir -p "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}" cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}${M}" 2>"${LOG_FILE}"
else else
rm -f "${RAMDISK_PATH}/usr/lib/modules/${D:+${D}/}${M}" 2>"${LOG_FILE}" rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
fi fi
done done
done
rm -rf "${UNPATH}" rm -rf "${UNPATH}"
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware" mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

View File

@ -263,6 +263,9 @@ if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ] && [ ! -f "/.dockerenv" ]; the
[ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}" [ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}"
python3 "${WORK_PATH}/include/functions.py" makeqr -d "${URL}" -l "0" -o "${TMP_PATH}/qrcode_init.png" python3 "${WORK_PATH}/include/functions.py" makeqr -d "${URL}" -l "0" -o "${TMP_PATH}/qrcode_init.png"
[ -f "${TMP_PATH}/qrcode_init.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_init.png" >/dev/null 2>&1 || true [ -f "${TMP_PATH}/qrcode_init.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_init.png" >/dev/null 2>&1 || true
python3 "${WORK_PATH}/include/functions.py" makeqr -f "${WORK_PATH}/include/qhxg.png" -l "7" -o "${TMP_PATH}/qrcode_qhxg.png"
[ -f "${TMP_PATH}/qrcode_qhxg.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_qhxg.png" >/dev/null 2>&1 || true
fi fi
WEBHOOKURL="$(readConfigKey "webhookurl" "${USER_CONFIG_FILE}")" WEBHOOKURL="$(readConfigKey "webhookurl" "${USER_CONFIG_FILE}")"
if [ -n "${WEBHOOKURL}" ] && [ ! -f "${TMP_PATH}/WebhookSent" ] && [ ! -f "/.dockerenv" ]; then if [ -n "${WEBHOOKURL}" ] && [ ! -f "${TMP_PATH}/WebhookSent" ] && [ ! -f "/.dockerenv" ]; then

View File

@ -456,7 +456,6 @@ function reconfiguringV() {
deleteConfigKey "addons.\"${ADDON}\"" "${USER_CONFIG_FILE}" deleteConfigKey "addons.\"${ADDON}\"" "${USER_CONFIG_FILE}"
fi fi
done <<<"$(readConfigMap "addons" "${USER_CONFIG_FILE}")" done <<<"$(readConfigMap "addons" "${USER_CONFIG_FILE}")"
# Rewrite modules # Rewrite modules
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}" writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
mergeConfigModules "$(getAllModules "${PLATFORM}" "${KPRE:+${KPRE}-}${KVER}" | awk '{print $1}')" "${USER_CONFIG_FILE}" mergeConfigModules "$(getAllModules "${PLATFORM}" "${KPRE:+${KPRE}-}${KVER}" | awk '{print $1}')" "${USER_CONFIG_FILE}"
@ -3550,10 +3549,11 @@ function downloadExts() {
TAG="" TAG=""
if [ "${PRERELEASE}" = "true" ]; then if [ "${PRERELEASE}" = "true" ]; then
# TAG="$(curl -skL --connect-timeout 10 "${PROXY}${3}/tags" | pup 'a[class="Link--muted"] attr{href}' | grep ".zip" | head -1)" # TAG="$(curl -skL --connect-timeout 10 "${PROXY}${3}/tags" | pup 'a[class="Link--muted"] attr{href}' | grep ".zip" | head -1)"
TAG="$(curl -skL --connect-timeout 10 "${PROXY}${3}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1 | sed 's/^[v|V]//g')" TAG="$(curl -skL --connect-timeout 10 "${PROXY}${3}/tags" | grep "/refs/tags/.*\.zip" | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1)"
else else
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${PROXY}${3}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')" TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${PROXY}${3}/releases/latest" | awk -F'/' '{print $NF}')"
fi fi
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
if [ "${TAG:-latest}" = "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}")"
DIALOG --title "${T}" \ DIALOG --title "${T}" \

View File

@ -31,8 +31,6 @@ productvers4: &productvers4
kver: "4.4.180" kver: "4.4.180"
"7.2": "7.2":
kver: "4.4.302" kver: "4.4.302"
"7.3":
kver: "4.4.302"
productvers5: &productvers5 productvers5: &productvers5
"7.1": "7.1":
@ -41,9 +39,6 @@ productvers5: &productvers5
"7.2": "7.2":
kpre: "7.2" kpre: "7.2"
kver: "5.10.55" kver: "5.10.55"
"7.3":
kpre: "7.3"
kver: "5.10.55"
platforms: platforms:
apollolake: apollolake:

View File

@ -37,7 +37,7 @@ KVER="$(readConfigKey "kver" "${USER_CONFIG_FILE}")"
KPRE="$(readConfigKey "kpre" "${USER_CONFIG_FILE}")" KPRE="$(readConfigKey "kpre" "${USER_CONFIG_FILE}")"
# Sanity check # Sanity check
if [ -z "${PLATFORM}" ] || [ -z "${KPRE:+${KPRE}-}${KVER}" ]; then if [ -z "${PLATFORM}" ] || [ -z "${KVER}" ]; then
echo "ERROR: Configuration for model ${MODEL} and productversion ${PRODUCTVER} not found." >"${LOG_FILE}" echo "ERROR: Configuration for model ${MODEL} and productversion ${PRODUCTVER} not found." >"${LOG_FILE}"
exit 1 exit 1
fi fi
@ -100,7 +100,6 @@ while IFS=': ' read -r KEY VALUE; do
done <<<"$(readConfigMap "synoinfo" "${USER_CONFIG_FILE}")" done <<<"$(readConfigMap "synoinfo" "${USER_CONFIG_FILE}")"
# Patches (diff -Naru OLDFILE NEWFILE > xxx.patch) # Patches (diff -Naru OLDFILE NEWFILE > xxx.patch)
echo -n "."
PATCHS=( PATCHS=(
"ramdisk-etc-rc-*.patch" "ramdisk-etc-rc-*.patch"
"ramdisk-init-script-*.patch" "ramdisk-init-script-*.patch"
@ -120,26 +119,11 @@ for PE in "${PATCHS[@]}"; do
done done
[ ${RET} -ne 0 ] && exit 1 [ ${RET} -ne 0 ] && exit 1
done done
# for DSM 7.3
sed -i 's#/usr/syno/sbin/broadcom_update.sh#/usr/syno/sbin/broadcom_update.sh.rr#g' "${RAMDISK_PATH}/linuxrc.syno.impl"
# LKM
gzip -dc "${LKMS_PATH}/rp-${PLATFORM}-${KPRE:+${KPRE}-}${KVER}-${LKM}.ko.gz" >"${RAMDISK_PATH}/usr/lib/modules/rp.ko" 2>"${LOG_FILE}" || exit 1
if [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ]; then
# Copying fake modprobe
cp -f "${WORK_PATH}/patch/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
else
# for issues/313
sed -i 's#/dev/console#/var/log/lrc#g' "${RAMDISK_PATH}/usr/bin/busybox"
sed -i '/^echo "START/a \\nmknod -m 0666 /dev/console c 1 3' "${RAMDISK_PATH}/linuxrc.syno"
fi
if [ "${PLATFORM}" = "broadwellntbap" ]; then mkdir -p "${RAMDISK_PATH}/addons"
sed -i 's/IsUCOrXA="yes"/XIsUCOrXA="yes"/g; s/IsUCOrXA=yes/XIsUCOrXA=yes/g' "${RAMDISK_PATH}/usr/syno/share/environments.sh"
fi
# Addons # Addons
echo -n "." echo -n "."
mkdir -p "${RAMDISK_PATH}/addons"
echo "Create addons.sh" >"${LOG_FILE}" echo "Create addons.sh" >"${LOG_FILE}"
{ {
echo "#!/bin/sh" echo "#!/bin/sh"
@ -158,7 +142,7 @@ echo "Create addons.sh" >"${LOG_FILE}"
chmod +x "${RAMDISK_PATH}/addons/addons.sh" chmod +x "${RAMDISK_PATH}/addons/addons.sh"
# This order cannot be changed. # This order cannot be changed.
for ADDON in "redpill" "revert" "misc" "eudev" "netfix" "disks" "localrss" "notify" "wol"; do for ADDON in "redpill" "revert" "misc" "eudev" "disks" "localrss" "notify" "wol"; do
PARAMS="" PARAMS=""
if [ "${ADDON}" = "disks" ]; then if [ "${ADDON}" = "disks" ]; then
[ -f "${USER_UP_PATH}/model.dts" ] && cp -f "${USER_UP_PATH}/model.dts" "${RAMDISK_PATH}/addons/model.dts" [ -f "${USER_UP_PATH}/model.dts" ] && cp -f "${USER_UP_PATH}/model.dts" "${RAMDISK_PATH}/addons/model.dts"
@ -175,17 +159,14 @@ for ADDON in "${!ADDONS[@]}"; do
echo "/addons/${ADDON}.sh \${1} ${PARAMS}" >>"${RAMDISK_PATH}/addons/addons.sh" 2>>"${LOG_FILE}" || exit 1 echo "/addons/${ADDON}.sh \${1} ${PARAMS}" >>"${RAMDISK_PATH}/addons/addons.sh" 2>>"${LOG_FILE}" || exit 1
done done
# Modules # Extract ck modules to ramdisk
echo -n "." echo -n "."
installModules "${PLATFORM}" "${KPRE:+${KPRE}-}${KVER}" "${!MODULES[@]}" || exit 1 installModules "${PLATFORM}" "${KPRE:+${KPRE}-}${KVER}" "${!MODULES[@]}" || exit 1
# Build modules dependencies
# ${WORK_PATH}/depmod -a -b ${RAMDISK_PATH} 2>/dev/null # addon eudev will do this # Copying fake modprobe
# Copying modulelist [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ] && cp -f "${WORK_PATH}/patch/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
if [ -f "${USER_UP_PATH}/modulelist" ]; then # Copying LKM to /usr/lib/modules
cp -f "${USER_UP_PATH}/modulelist" "${RAMDISK_PATH}/addons/modulelist" gzip -dc "${LKMS_PATH}/rp-${PLATFORM}-${KPRE:+${KPRE}-}${KVER}-${LKM}.ko.gz" >"${RAMDISK_PATH}/usr/lib/modules/rp.ko" 2>"${LOG_FILE}" || exit 1
else
cp -f "${WORK_PATH}/patch/modulelist" "${RAMDISK_PATH}/addons/modulelist"
fi
# Patch synoinfo.conf # Patch synoinfo.conf
echo -n "." echo -n "."
@ -208,7 +189,17 @@ fi
echo -n "." echo -n "."
echo "Modify files" >"${LOG_FILE}" echo "Modify files" >"${LOG_FILE}"
# Remove function from scripts # Remove function from scripts
[ "${BUILDNUM}" -le 25556 ] && find "${RAMDISK_PATH}/addons/" -type f -name "*.sh" -exec sed -i 's/function //g' {} \; [ "2" = "${BUILDNUM:0:1}" ] && find "${RAMDISK_PATH}/addons/" -type f -name "*.sh" -exec sed -i 's/function //g' {} \;
# Build modules dependencies
# ${WORK_PATH}/depmod -a -b ${RAMDISK_PATH} 2>/dev/null # addon eudev will do this
# Copying modulelist
if [ -f "${USER_UP_PATH}/modulelist" ]; then
cp -f "${USER_UP_PATH}/modulelist" "${RAMDISK_PATH}/addons/modulelist"
else
cp -f "${WORK_PATH}/patch/modulelist" "${RAMDISK_PATH}/addons/modulelist"
fi
# backup current loader configs # backup current loader configs
mkdir -p "${RAMDISK_PATH}/usr/rr" mkdir -p "${RAMDISK_PATH}/usr/rr"
@ -241,6 +232,18 @@ for N in $(seq 0 7); do
echo -e "DEVICE=eth${N}\nBOOTPROTO=dhcp\nONBOOT=yes\nIPV6INIT=auto_dhcp\nIPV6_ACCEPT_RA=1" >"${RAMDISK_PATH}/etc/sysconfig/network-scripts/ifcfg-eth${N}" echo -e "DEVICE=eth${N}\nBOOTPROTO=dhcp\nONBOOT=yes\nIPV6INIT=auto_dhcp\nIPV6_ACCEPT_RA=1" >"${RAMDISK_PATH}/etc/sysconfig/network-scripts/ifcfg-eth${N}"
done done
# issues/313
if [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ]; then
:
else
sed -i 's#/dev/console#/var/log/lrc#g' "${RAMDISK_PATH}/usr/bin/busybox"
sed -i '/^echo "START/a \\nmknod -m 0666 /dev/console c 1 3' "${RAMDISK_PATH}/linuxrc.syno"
fi
if [ "${PLATFORM}" = "broadwellntbap" ]; then
sed -i 's/IsUCOrXA="yes"/XIsUCOrXA="yes"/g; s/IsUCOrXA=yes/XIsUCOrXA=yes/g' "${RAMDISK_PATH}/usr/syno/share/environments.sh"
fi
# Call user patch scripts # Call user patch scripts
echo -n "." echo -n "."
for F in ${SCRIPTS_PATH}/*.sh; do for F in ${SCRIPTS_PATH}/*.sh; do

View File

@ -1 +1 @@
25.12.0 25.9.6

View File

@ -49,7 +49,7 @@
# brew install qemu-img # MacOS # brew install qemu-img # MacOS
# img to vmdk (VMWare / ESXi6 / ESXi7) # img to vmdk (VMWare / ESXi6 / ESXi7)
qemu-img convert -O vmdk -o adapter_type=lsilogic,subformat=monolithicSparse,compat6 rr.img rr.vmdk qemu-img convert -O vmdk -o adapter_type=lsilogic,subformat=streamOptimized,compat6 rr.img rr.vmdk
# img to vmdk (ESXi8) # img to vmdk (ESXi8)
qemu-img convert -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat,compat6 rr.img rr.vmdk qemu-img convert -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat,compat6 rr.img rr.vmdk

View File

@ -365,7 +365,7 @@ function createvmx() {
# Convert raw image to VMDK # Convert raw image to VMDK
rm -rf "VMX_${VMNAME}" rm -rf "VMX_${VMNAME}"
mkdir -p "VMX_${VMNAME}" mkdir -p "VMX_${VMNAME}"
qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicSparse,compat6' "${BLIMAGE}" "VMX_${VMNAME}/${VMNAME}-disk1.vmdk" # 'adapter_type=lsilogic,subformat=streamOptimized,compat6' qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${BLIMAGE}" "VMX_${VMNAME}/${VMNAME}-disk1.vmdk"
qemu-img create -f vmdk "VMX_${VMNAME}/${VMNAME}-disk2.vmdk" "32G" qemu-img create -f vmdk "VMX_${VMNAME}/${VMNAME}-disk2.vmdk" "32G"
# Create VM configuration # Create VM configuration
@ -466,7 +466,7 @@ function convertova() {
# Download and install ovftool if it doesn't exist # Download and install ovftool if it doesn't exist
if [ ! -x ovftool/ovftool ]; then if [ ! -x ovftool/ovftool ]; then
rm -rf ovftool ovftool.zip rm -rf ovftool ovftool.zip
curl -skL https://github.com/rgl/ovftool-binaries/raw/main/archive/VMware-ovftool-4.6.3-24031167-lin.x86_64.zip -o ovftool.zip curl -skL https://github.com/rgl/ovftool-binaries/raw/main/archive/VMware-ovftool-4.6.0-21452615-lin.x86_64.zip -o ovftool.zip
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "Failed to download ovftool" echo "Failed to download ovftool"
exit 1 exit 1

View File

@ -71,7 +71,8 @@ while true; do
shift 2 shift 2
;; ;;
--tag) --tag)
TAG="$(echo "$2" | sed 's/^[v|V]//g')" TAG="$2"
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
shift 2 shift 2
;; ;;
--img) --img)
@ -96,7 +97,8 @@ if ! command -v qm >/dev/null 2>&1; then
fi fi
if [ -z "$TAG" ]; then if [ -z "$TAG" ]; then
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')" TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}')"
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
fi fi
if [ -n "${IMG}" ] && [ -f "${IMG}" ]; then if [ -n "${IMG}" ] && [ -f "${IMG}" ]; then
@ -137,14 +139,7 @@ fi
echo "Creating VM with RR ... " echo "Creating VM with RR ... "
# 获取可用的 VMID # 获取可用的 VMID
last_vmid=$(qm list | awk 'NR>1{print$1}' | sort -n | tail -1 2>/dev/null) VMID="$(($(qm list | awk 'NR>1{print $1}' | sort -n | tail -1 2>/dev/null || echo 99) + 1))"
if [ -z "$last_vmid" ]; then
# 如果 last_vmid 是空字符串说明没有VM设置一个起始ID
VMID=100
else
# 否则在最后一个ID的基础上加1
VMID=$((last_vmid + 1))
fi
ARGS="" ARGS=""
SATAIDX=0 SATAIDX=0