mirror of
https://github.com/RROrg/rr.git
synced 2025-12-15 00:29:45 +08:00
Compare commits
No commits in common. "main" and "25.9.6" have entirely different histories.
23
.github/workflows/data.yml
vendored
23
.github/workflows/data.yml
vendored
@ -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"
|
||||||
|
|||||||
17
.github/workflows/issues.yml
vendored
17
.github/workflows/issues.yml
vendored
@ -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
|
||||||
;;
|
;;
|
||||||
|
|||||||
39
README.md
39
README.md
@ -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:
|
||||||
|
|
||||||
|
|||||||
@ -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": {
|
||||||
|
|||||||
BIN
docs/addons.xlsx
BIN
docs/addons.xlsx
Binary file not shown.
@ -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+",
|
||||||
|
|||||||
BIN
docs/models.xlsx
BIN
docs/models.xlsx
Binary file not shown.
11140
docs/modules.json
11140
docs/modules.json
File diff suppressed because it is too large
Load Diff
Binary file not shown.
1791
docs/pats.json
1791
docs/pats.json
File diff suppressed because it is too large
Load Diff
BIN
docs/pats.xlsx
BIN
docs/pats.xlsx
Binary file not shown.
@ -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
|
||||||
|
|||||||
@ -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}"
|
||||||
|
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
BIN
files/initrd/opt/rr/include/qhxg.png
Normal file
BIN
files/initrd/opt/rr/include/qhxg.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 227 KiB |
@ -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
|
||||||
|
|||||||
@ -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}" \
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
25.12.0
|
25.9.6
|
||||||
|
|||||||
2
guide.md
2
guide.md
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user