Compare commits

..

16 Commits
25.9.7 ... main

Author SHA1 Message Date
github-actions[bot]
f8c4589f84 update 2025-12-14 20:50:12 2025-12-14 20:50:12 +08:00
github-actions[bot]
2883364df3 update 2025-12-14 20:20:35 2025-12-14 20:20:35 +08:00
Ing
cdcceea395 优化标签提取逻辑,移除版本前缀并统一处理,更新相关脚本和配置文件 2025-12-08 16:06:41 +08:00
Ing
ce9017bae1 添加 Docker Compose 配置示例以支持 RR 容器化部署 2025-11-30 00:36:39 +08:00
Ing
cfdf7cc3fc 优化环境变量设置逻辑,使用subprocess调用替代文件写入 2025-11-29 22:31:35 +08:00
Ing
9a4103f028 移除对qhxg.png的引用 2025-11-25 18:43:19 +08:00
Ing
15e88c0b38
Merge pull request #20774 from ksqeib/main
Improve VMID generation logic in pve.sh
2025-11-24 19:54:02 +08:00
ksqeib
2909e46732
Improve VMID generation logic in pve.sh
Refactor VMID assignment logic to handle empty last VMID.
2025-11-24 19:35:36 +08:00
Ing
8e7f50c2e5 添加对 7.3 版本的内核支持 2025-11-02 17:04:36 +08:00
Ing
6093ab1bd4 修复平台和内核版本检查逻辑,确保正确读取配置 2025-11-02 17:04:22 +08:00
Ing
2b0985d276 更新菜单和ramdisk补丁脚本,优化模块重写和依赖关系处理 2025-11-02 01:19:13 +08:00
Ing
e748c366f2 优化模块处理逻辑,支持从不同目录加载和安装模块 2025-11-02 01:18:31 +08:00
Ing
c59f446006 更新 VMDK 转换参数,使用 monolithicSparse 格式以优化磁盘映像生成 2025-10-15 14:11:29 +08:00
Ing
d39b0ada77 修复直接启动条件判断,支持在 Parallels 和 Xen 环境下正常工作 2025-10-09 01:38:51 +08:00
Ing
dbc819cdd8 更新 ovftool 下载链接至最新版本 4.6.3 2025-09-28 13:38:45 +08:00
github-actions[bot]
9e24063ad7 update 2025-09-27 16:02:34 2025-09-27 16:02:34 +08:00
24 changed files with 11471 additions and 316 deletions

View File

@ -41,11 +41,10 @@ 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)" 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')"
else else
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}')" TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')"
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

View File

@ -29,10 +29,12 @@ 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):
with open(os.environ['GITHUB_ENV'], 'a', encoding='utf-8') as f: subprocess.call(f'echo "{name}<<EOF" >> $GITHUB_ENV', shell=True)
f.write(f'{name}={value}\n') subprocess.call(f'echo "{value}" >> $GITHUB_ENV', shell=True)
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 }}"""
@ -159,11 +161,10 @@ 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)" 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')"
else else
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}')" TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${REPO}/releases/latest" | awk -F'/' '{print $NF}' | sed 's/^[v|V]//g')"
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
@ -268,7 +269,7 @@ jobs:
;; ;;
vmdk) vmdk)
echo "VMDK" echo "VMDK"
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' rr/rr.vmdk qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicSparse,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,6 +45,45 @@ 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.9.7 25.12.0

View File

@ -399,6 +399,26 @@
"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,7 +3,8 @@
"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+",
@ -18,7 +19,8 @@
"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",
@ -36,7 +38,8 @@
"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+",
@ -56,7 +59,8 @@
"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",
@ -68,7 +72,8 @@
"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",
@ -79,7 +84,8 @@
"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+",
@ -99,7 +105,8 @@
"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+",
@ -116,7 +123,8 @@
"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",
@ -127,7 +135,8 @@
"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+",
@ -140,7 +149,8 @@
"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+",
@ -162,7 +172,8 @@
"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"
@ -171,7 +182,8 @@
"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+",
@ -181,7 +193,8 @@
"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+"
@ -190,7 +203,8 @@
"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

@ -113,7 +113,7 @@ printf "%s \033[1;36m%s\033[0m\n" "$(TEXT "MEM: ")" "${MEM}"
if readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q nvmesystem; then if readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q nvmesystem; then
[ -z "$(ls /dev/nvme* | grep -vE "${LOADER_DISK}[0-9]?$" 2>/dev/null)" ] && printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please insert at least one m.2 disk for system installation.")" [ -z "$(ls /dev/nvme* | grep -vE "${LOADER_DISK}[0-9]?$" 2>/dev/null)" ] && printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please insert at least one m.2 disk for system installation.")"
else else
[ -z "$(ls /dev/sd* | grep -vE "${LOADER_DISK}[0-9]?$" 2>/dev/null)" ] && printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please insert at least one sata disk for system installation.")" [ -z "$(ls /dev/sd* | grep -vE "${LOADER_DISK}[0-9]?$" 2>/dev/null)" ] && printf "\033[1;33m*** %s ***\033[0m\n" "$(TEXT "Notice: Please insert at least one sata disk for system installation.")"
fi fi
if checkBIOS_VT_d && [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ]; then if checkBIOS_VT_d && [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ]; then
@ -164,6 +164,15 @@ 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']=""
@ -336,7 +345,7 @@ function _bootwait() {
} }
DIRECT="$(readConfigKey "directboot" "${USER_CONFIG_FILE}")" DIRECT="$(readConfigKey "directboot" "${USER_CONFIG_FILE}")"
if [ "${DIRECT}" = "true" ] || [ "${MEV:-physical}" = "parallels" ]; then if [ "${DIRECT}" = "true" ] || echo "parallels xen" | grep -qw "${MEV:-physical}"; 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}"
@ -435,11 +444,8 @@ 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 "6" -o "${TMP_PATH}/qrcode_boot.png" python3 "${WORK_PATH}/include/functions.py" "makeqr" -d "${URL}" -l "7" -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.9.7" RR_VERSION="25.12.0"
RR_RELEASE="" RR_RELEASE=""
RR_TITLE="RR v${RR_VERSION}" RR_TITLE="RR v${RR_VERSION}"

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 227 KiB

View File

@ -263,9 +263,6 @@ 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,6 +456,7 @@ 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}"
@ -3549,11 +3550,10 @@ 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)" 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')"
else else
TAG="$(curl -skL --connect-timeout 10 -w "%{url_effective}" -o /dev/null "${PROXY}${3}/releases/latest" | awk -F'/' '{print $NF}')" 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')"
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,6 +31,8 @@ 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":
@ -39,6 +41,9 @@ 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 "${KVER}" ]; then if [ -z "${PLATFORM}" ] || [ -z "${KPRE:+${KPRE}-}${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,6 +100,7 @@ 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"
@ -119,11 +120,26 @@ 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
mkdir -p "${RAMDISK_PATH}/addons" 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
# 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"
@ -142,7 +158,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" "disks" "localrss" "notify" "wol"; do for ADDON in "redpill" "revert" "misc" "eudev" "netfix" "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"
@ -159,14 +175,17 @@ 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
# Extract ck modules to ramdisk # Modules
echo -n "." echo -n "."
installModules "${PLATFORM}" "${KPRE:+${KPRE}-}${KVER}" "${!MODULES[@]}" || exit 1 installModules "${PLATFORM}" "${KPRE:+${KPRE}-}${KVER}" "${!MODULES[@]}" || exit 1
# Build modules dependencies
# Copying fake modprobe # ${WORK_PATH}/depmod -a -b ${RAMDISK_PATH} 2>/dev/null # addon eudev will do this
[ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ] && cp -f "${WORK_PATH}/patch/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe" # Copying modulelist
# Copying LKM to /usr/lib/modules if [ -f "${USER_UP_PATH}/modulelist" ]; then
gzip -dc "${LKMS_PATH}/rp-${PLATFORM}-${KPRE:+${KPRE}-}${KVER}-${LKM}.ko.gz" >"${RAMDISK_PATH}/usr/lib/modules/rp.ko" 2>"${LOG_FILE}" || exit 1 cp -f "${USER_UP_PATH}/modulelist" "${RAMDISK_PATH}/addons/modulelist"
else
cp -f "${WORK_PATH}/patch/modulelist" "${RAMDISK_PATH}/addons/modulelist"
fi
# Patch synoinfo.conf # Patch synoinfo.conf
echo -n "." echo -n "."
@ -189,17 +208,7 @@ fi
echo -n "." echo -n "."
echo "Modify files" >"${LOG_FILE}" echo "Modify files" >"${LOG_FILE}"
# Remove function from scripts # Remove function from scripts
[ "2" = "${BUILDNUM:0:1}" ] && find "${RAMDISK_PATH}/addons/" -type f -name "*.sh" -exec sed -i 's/function //g' {} \; [ "${BUILDNUM}" -le 25556 ] && 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"
@ -232,18 +241,6 @@ 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.9.7 25.12.0

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=streamOptimized,compat6 rr.img rr.vmdk qemu-img convert -O vmdk -o adapter_type=lsilogic,subformat=monolithicSparse,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=streamOptimized,compat6' "${BLIMAGE}" "VMX_${VMNAME}/${VMNAME}-disk1.vmdk" 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 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.0-21452615-lin.x86_64.zip -o 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
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,8 +71,7 @@ while true; do
shift 2 shift 2
;; ;;
--tag) --tag)
TAG="$2" TAG="$(echo "$2" | sed 's/^[v|V]//g')"
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
shift 2 shift 2
;; ;;
--img) --img)
@ -97,8 +96,7 @@ 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}')" 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:0:1}" = "v" ] && TAG="${TAG:1}"
fi fi
if [ -n "${IMG}" ] && [ -f "${IMG}" ]; then if [ -n "${IMG}" ] && [ -f "${IMG}" ]; then
@ -139,7 +137,14 @@ fi
echo "Creating VM with RR ... " echo "Creating VM with RR ... "
# 获取可用的 VMID # 获取可用的 VMID
VMID="$(($(qm list | awk 'NR>1{print $1}' | sort -n | tail -1 2>/dev/null || echo 99) + 1))" last_vmid=$(qm list | awk 'NR>1{print$1}' | sort -n | tail -1 2>/dev/null)
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