Compare commits

..

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

46 changed files with 8495 additions and 8228 deletions

View File

@ -38,7 +38,7 @@ jobs:
echo "Delaying for 1 minutes..." echo "Delaying for 1 minutes..."
sleep 60 sleep 60
- name: Get Data - name: Get Release RR
run: | run: |
REPO="${{ github.server_url }}/${{ github.repository }}" REPO="${{ github.server_url }}/${{ github.repository }}"
PRERELEASE="true" PRERELEASE="true"
@ -57,17 +57,18 @@ jobs:
exit 1 exit 1
fi fi
unzip rr-${TAG}.img.zip -d rr rr.img unzip rr-${TAG}.img.zip -d "rr"
. scripts/func.sh "${{ secrets.RRORG }}" export TERM=xterm
LOOPX=$(sudo losetup -f) sudo ./localbuild.sh create rr/ws rr/rr.img
sudo losetup -P "${LOOPX}" "rr/rr.img" if [ $? -ne 0 ]; then
rm -rf "/tmp/mnt/p3" echo "create failed"
mkdir -p "/tmp/mnt/p3" exit 1
mount "${LOOPX}p3" "/tmp/mnt/p3" fi
unpackInitrd /tmp/mnt/p3/initrd-rr "rr/initrd"
- name: Get data
run: |
sudo apt update sudo apt update
sudo apt install -y locales busybox dialog gettext sed gawk jq curl 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 python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
@ -77,14 +78,10 @@ jobs:
sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true 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 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/ws/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/ws/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 "rr/ws" -j "docs/addons.json" -x "docs/addons.xlsx"
python3 scripts/func.py getmodules -w "/tmp" -j "docs/modules.json" -x "docs/modules.xlsx" python3 scripts/func.py getmodules -w "rr/ws" -j "docs/modules.json" -x "docs/modules.xlsx"
sudo umount "/tmp/mnt/p3"
sudo losetup -d "${LOOPX}"
rm -rf "/tmp/mnt/p3"
- name: Upload to Artifacts - name: Upload to Artifacts
if: success() if: success()

View File

@ -27,51 +27,68 @@ jobs:
shell: python shell: python
run: | run: |
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json import json, subprocess
import os def set_output(name, value):
subprocess.call(f'echo "{name}<<EOF" >> $GITHUB_ENV', shell=True)
subprocess.call(f'echo "{value}" >> $GITHUB_ENV', shell=True)
subprocess.call(f'echo "EOF" >> $GITHUB_ENV', shell=True)
def set_env(name, value): issuetitle = ${{ toJSON(github.event.issue.title) }}
with open(os.environ['GITHUB_ENV'], 'a', encoding='utf-8') as f: issuebody = ${{ toJSON(github.event.issue.body) }}
f.write(f'{name}={value}\n')
issuetitle = """${{ github.event.issue.title }}"""
issuebody = """${{ github.event.issue.body }}"""
iscustom = 'false' iscustom = 'false'
warinfo = 'false' warinfo = 'false'
fields = { format = ''
"format": "", size = ''
"size": "", template = ''
"template": "", language= ''
"language": "", sn = ''
"sn": "", macs = ''
"macs": "", tips = ''
"tips": "", model = ''
"model": "", version = ''
"version": "", kernel = ''
"kernel": "", addons = ''
"addons": "", modules = ''
"modules": ""
}
try: try:
if issuetitle.strip().lower().startswith('custom'): if issuetitle.lower().startswith('custom'):
jsonbody = json.loads(issuebody) jsonbody = json.loads(issuebody)
iscustom = 'true' iscustom = 'true'
for k in fields: format = jsonbody.get('format', '')
fields[k] = jsonbody.get(k, "") size = jsonbody.get('size', '')
except Exception: template = jsonbody.get('template', '')
language = jsonbody.get('language', '')
sn = jsonbody.get('sn', '')
macs = jsonbody.get('macs', '')
tips = jsonbody.get('tips', '')
model = jsonbody.get('model', '')
version = jsonbody.get('version', '')
kernel = jsonbody.get('kernel', '')
addons = jsonbody.get('addons', '')
modules = jsonbody.get('modules', '')
except ValueError as e:
pass pass
if iscustom == 'false': if iscustom == 'false':
if not any(x in issuebody for x in ['DMI', 'CPU', 'NIC']): if issuebody.find('DMI') < 0 and issuebody.find('CPU') < 0 and issuebody.find('NIC') < 0:
warinfo = 'true' warinfo = 'true'
set_env("iscustom", iscustom) set_output("iscustom", iscustom)
set_env("warinfo", warinfo) set_output("warinfo", warinfo)
for k, v in fields.items():
set_env(k, v) set_output("format", format)
set_output("size", size)
set_output("template", template)
set_output("language", language)
set_output("sn", sn)
set_output("macs", macs)
set_output("tips", tips)
set_output("model", model)
set_output("version", version)
set_output("kernel", kernel)
set_output("addons", addons)
set_output("modules", modules)
- name: Update Comment Warinfo - name: Update Comment Warinfo
if: env.warinfo == 'true' if: env.warinfo == 'true'
@ -148,9 +165,39 @@ jobs:
run: | run: |
# 累了, 毁灭吧! # 累了, 毁灭吧!
. scripts/func.sh "${{ secrets.RRORG }}" # yq need sudo !!!
function deleteConfigKey() {
sudo yq eval "del(.${1})" --inplace "${2}" 2>/dev/null
}
function writeConfigKey() {
local value="${2}"
[ "${value}" = "{}" ] && sudo yq eval ".${1} = {}" --inplace "${3}" 2>/dev/null || sudo yq eval ".${1} = \"${value}\"" --inplace "${3}" 2>/dev/null
}
function readConfigKey() {
local result
result=$(sudo yq eval ".${1} | explode(.)" "${2}" 2>/dev/null)
[ "${result}" = "null" ] && echo "" || echo "${result}"
}
function mergeConfigModules() {
# Error: bad file '-': cannot index array with '8139cp' (strconv.ParseInt: parsing "8139cp": invalid syntax)
# When the first key is a pure number, yq will not process it as a string by default. The current solution is to insert a placeholder key.
local MS ML XF
MS="RRORG\n${1// /\\n}"
ML="$(echo -en "${MS}" | awk '{print "modules."$1":"}')"
XF=$(mktemp 2>/dev/null)
XF=${XF:-/tmp/tmp.XXXXXXXXXX}
echo -en "${ML}" | sudo yq -p p -o y >"${XF}"
deleteConfigKey "modules.\"RRORG\"" "${XF}"
sudo yq eval-all --inplace '. as $item ireduce ({}; . * $item)' --inplace "${2}" "${XF}" 2>/dev/null
rm -f "${XF}"
}
REPO="${{ github.server_url }}/${{ github.repository }}" REPO="${{ github.server_url }}/${{ github.repository }}"
MODEL="${{ env.model }}"
VERSION="${{ env.version }}"
PRERELEASE="true" PRERELEASE="true"
TAG="" TAG=""
@ -167,39 +214,63 @@ jobs:
exit 1 exit 1
fi fi
unzip rr-${TAG}.img.zip -d rr rr.img unzip rr-${TAG}.img.zip -d "rr"
echo "TAG=${TAG}" >> $GITHUB_ENV export TERM=xterm
case "${{ env.size }}" in sudo ./localbuild.sh create rr/ws rr/rr.img
2GB) if [ $? -ne 0 ]; then
echo "2GB" echo "create failed"
;; exit 1
4GB) fi
echo "4GB"
resizeImg rr/rr.img +2048M
;;
8GB)
echo "8GB"
resizeImg rr/rr.img +6144M
;;
*)
echo "unknown size"
;;
esac
LOOPX=$(sudo losetup -f) # sudo cp -rf files/initrd/opt/rr/* rr/ws/initrd/opt/rr/
sudo losetup -P "${LOOPX}" rr/rr.img # sudo sed -i "s/set -e/set -ex/" rr/ws/initrd/opt/rr/init.sh
# sudo sed -i '/^alias/i\set -x' rr/ws/initrd/opt/rr/menu.sh
echo "Building..." [ -n "${{ env.language }}" ] && echo "${{ env.language }}.UTF-8" | sudo tee rr/ws/mnt/p1/.locale
{
[ -n "${{ env.language }}" ] && echo "echo \"${{ env.language }}.UTF-8\" >/mnt/p1/.locale" sudo ./localbuild.sh init
[ -n "${{ env.tips }}" ] && echo "echo -e \"${{ env.tips }}\" >/mnt/p3/AddTips" if [ $? -ne 0 ]; then
[ -n "${{ env.kernel }}" ] && echo "menu.sh writeConfigKey \"kernel\" \"${{ env.kernel }}\" \"\${USER_CONFIG_FILE}\"" echo "init failed"
echo "menu.sh modelMenu \"${{ env.model }}\"" exit 1
echo "menu.sh productversMenu \"${{ env.version }}\"" fi
[ -n "${{ env.addons }}" ] && {
echo "menu.sh writeConfigKey \"addons\" \"{}\" \"\${USER_CONFIG_FILE}\"" if [ -n "${{ env.kernel }}" ]; then
echo "set kernel"
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
writeConfigKey "kernel" "${{ env.kernel }}" "${USER_CONFIG_FILE}"
fi
sudo ./localbuild.sh config "${MODEL}" "${VERSION}"
if [ $? -ne 0 ]; then
echo "config failed"
exit 1
fi
if [ -n "${{ env.sn }}" ]; then
echo "set sn: ${{ env.sn }}"
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
writeConfigKey "sn" "${{ env.sn }}" "${USER_CONFIG_FILE}"
fi
if [ -n "${{ env.macs }}" ]; then
echo "set macs: ${{ env.macs }}"
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
MACS=($(echo "${{ env.macs }}" | sed 's/[:-]//g' | sed 's/.*/\U&/' | sed 's/[;,]/ /g'))
writeConfigKey "mac1" "${MACS[0]}" "${USER_CONFIG_FILE}"
writeConfigKey "mac2" "${MACS[1]}" "${USER_CONFIG_FILE}"
fi
if [ -n "${{ env.tips }}" ]; then
echo "set tips: ${{ env.tips }}"
echo -e "${{ env.tips }}" | sudo tee rr/ws/mnt/p3/AddTips
fi
if [ -n "${{ env.addons }}" ]; then
echo "set addons: ${{ env.addons }}"
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
writeConfigKey "addons" "{}" "${USER_CONFIG_FILE}"
IFS=',' read -ra ADDON_ARR <<< "${{ env.addons }}" IFS=',' read -ra ADDON_ARR <<< "${{ env.addons }}"
for A in "${ADDON_ARR[@]}"; do for A in "${ADDON_ARR[@]}"; do
if echo "${A}" | grep -qE '^[^:]+:[^:]+$'; then if echo "${A}" | grep -qE '^[^:]+:[^:]+$'; then
@ -209,41 +280,74 @@ jobs:
KEY="${A}" KEY="${A}"
VAL="" VAL=""
fi fi
echo "menu.sh writeConfigKey \"addons.\\\"${KEY}\\\"\" \"${VAL}\" \"\${USER_CONFIG_FILE}\"" writeConfigKey "addons.\"${KEY}\"" "${VAL}" "${USER_CONFIG_FILE}"
done done
} fi
[ ! "custom" = "${{ env.kernel }}" ] && [ -n "${{ env.modules }}" ] && {
echo "menu.sh writeConfigKey \"modules\" \"{}\" \"\${USER_CONFIG_FILE}\""
echo "menu.sh mergeConfigModules \"$(echo "${{ env.modules }}" | sed 's/,/\\n/g')\" \"\${USER_CONFIG_FILE}\""
}
echo "menu.sh make"
echo "menu.sh cleanCache"
[ -n "${{ env.sn }}" ] && echo "menu.sh writeConfigKey \"sn\" \"${{ env.sn }}\" \"\${USER_CONFIG_FILE}\""
[ -n "${{ env.macs }}" ] && {
MACS=($(echo "${{ env.macs }}" | sed 's/[:-]//g' | sed 's/.*/\U&/' | sed 's/[;,]/ /g'))
[ -n "${MACS[0]}" ] && echo "menu.sh writeConfigKey \"mac1\" \"${MACS[0]}\" \"\${USER_CONFIG_FILE}\""
[ -n "${MACS[1]}" ] && echo "menu.sh writeConfigKey \"mac2\" \"${MACS[1]}\" \"\${USER_CONFIG_FILE}\""
}
[ "true" = "${{ env.template }}" ] && {
echo "menu.sh writeConfigKey \"sn\" \"\" \"\${USER_CONFIG_FILE}\""
echo "menu.sh writeConfigKey \"mac1\" \"\" \"\${USER_CONFIG_FILE}\""
echo "menu.sh writeConfigKey \"mac2\" \"\" \"\${USER_CONFIG_FILE}\""
}
} > build.sh
chmod +x build.sh
docker pull wjz304/rr:${TAG} if [ ! "custom" = "${{ env.kernel }}" ] && [ -n "${{ env.modules }}" ]; then
docker run --rm --privileged -p 7681:7681 -p 7304:7304 -p 7080:7080 -p 7022:22 -v ${PWD}/build.sh:/opt/rr/build.sh wjz304/rr:${TAG} bash build.sh echo "set modules: ${{ env.modules }}"
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
mergeConfigModules "$(echo "${{ env.modules }}" | sed 's/,/\n/g')" "${USER_CONFIG_FILE}"
# for M in $(echo "${{ env.modules }}" | sed 's/,/ /g'); do
# writeConfigKey "modules.\"${M}\"" "" "${USER_CONFIG_FILE}"
# done
fi
sudo losetup --detach "${LOOPX}" sudo ./localbuild.sh build
if [ $? -ne 0 ]; then
echo "build failed"
exit 1
fi
if [ "true" = "${{ env.template }}" ]; then
echo "set template: ${{ env.template }}"
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
writeConfigKey "sn" "" "${USER_CONFIG_FILE}"
writeConfigKey "mac1" "" "${USER_CONFIG_FILE}"
writeConfigKey "mac2" "" "${USER_CONFIG_FILE}"
fi
sudo ./localbuild.sh pack rr/rr.img
if [ $? -ne 0 ]; then
echo "pack failed"
exit 1
fi
case "${{ env.size }}" in
2GB)
echo "2GB"
;;
4GB)
echo "4GB"
sudo ./localbuild.sh resize rr/rr.img +2048M
;;
8GB)
echo "8GB"
sudo ./localbuild.sh resize rr/rr.img +6144M
;;
*)
echo "unknown size"
;;
esac
ls rr -al ls rr -al
RR_VERSION_FILE="rr/ws/mnt/p1/RR_VERSION"
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
{ {
echo "RR: " echo "RR: "
echo " VERSION: ${TAG}" echo " VERSION: $(cat "${RR_VERSION_FILE}" 2>/dev/null | head -1)"
echo " CUSTOM: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" echo " CUSTOM: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
echo echo
echo "DSM:"
echo " MODEL: $(readConfigKey "model" "${USER_CONFIG_FILE}")"
echo " VERSION: $(readConfigKey "productver" "${USER_CONFIG_FILE}")"
echo " KERNEL: $(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
echo " PATURL: $(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
echo " PATSUM: $(readConfigKey "patsum" "${USER_CONFIG_FILE}")"
echo
echo
echo "After the image is written to the disk, it will boot directly into DSM without the need to compile again." echo "After the image is written to the disk, it will boot directly into DSM without the need to compile again."
echo "Of course, you can also modify the settings yourself." echo "Of course, you can also modify the settings yourself."
} >README.txt } >README.txt
@ -251,47 +355,52 @@ jobs:
case "${{ env.format }}" in case "${{ env.format }}" in
ova) ova)
echo "OVA" echo "OVA"
. scripts/func.sh "${{ secrets.RRORG }}"
convertova "rr/rr.img" "rr/rr.ova" convertova "rr/rr.img" "rr/rr.ova"
(cd rr && sha256sum rr.ova >../sha256sum) (cd rr && sha256sum rr.ova >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.ova.zip" -j rr/rr.ova sha256sum README.txt zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.ova.zip" -j rr/rr.ova ${USER_CONFIG_FILE} sha256sum README.txt
;; ;;
vmx) vmx)
echo "VMX" echo "VMX"
. scripts/func.sh "${{ secrets.RRORG }}"
convertvmx "rr/rr.img" "rr.vmx" # rr.vmx is a directory convertvmx "rr/rr.img" "rr.vmx" # rr.vmx is a directory
(cd rr.vmx && sha256sum * >../sha256sum) (cd rr.vmx && sha256sum * >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vmx.zip" -r rr.vmx sha256sum README.txt zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vmx.zip" -r rr.vmx ${USER_CONFIG_FILE} sha256sum README.txt
;; ;;
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=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-${MODEL}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk ${USER_CONFIG_FILE} sha256sum README.txt
;; ;;
flat) flat)
echo "FLAT" echo "FLAT"
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicFlat,compat6' rr/rr.vmdk qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicFlat,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 }}.flat.zip" -j rr/rr*.vmdk sha256sum README.txt zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.flat.zip" -j rr/rr*.vmdk ${USER_CONFIG_FILE} sha256sum README.txt
;; ;;
vhd) vhd)
echo "VHD" echo "VHD"
. scripts/func.sh "${{ secrets.RRORG }}"
qemu-img convert rr/rr.img -O vpc rr/rr.vhd qemu-img convert rr/rr.img -O vpc rr/rr.vhd
createvmc "rr/rr.vhd" "rr/rr.vmc" createvmc "rr/rr.vhd" "rr/rr.vmc"
(cd rr && sha256sum rr.vhd >../sha256sum) (cd rr && sha256sum rr.vhd >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vhd.zip" -j rr/rr.vmc rr/rr.vhd sha256sum README.txt zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vhd.zip" -j rr/rr.vmc rr/rr.vhd ${USER_CONFIG_FILE} sha256sum README.txt
;; ;;
vhdx) vhdx)
echo "VHDX" echo "VHDX"
qemu-img convert rr/rr.img -O vhdx -o subformat=dynamic rr/rr.vhdx qemu-img convert rr/rr.img -O vhdx -o subformat=dynamic rr/rr.vhdx
(cd rr && sha256sum rr.vhdx >../sha256sum) (cd rr && sha256sum rr.vhdx >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vhdx.zip" -j rr/rr.vhdx sha256sum README.txt zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vhdx.zip" -j rr/rr.vhdx ${USER_CONFIG_FILE} sha256sum README.txt
;; ;;
*) *)
echo "IMG" echo "IMG"
(cd rr && sha256sum rr.img >../sha256sum) (cd rr && sha256sum rr.img >../sha256sum)
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img sha256sum README.txt zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img ${USER_CONFIG_FILE} sha256sum README.txt
esac esac
echo "TAG=${TAG}" >> $GITHUB_ENV
- name: Upload to Artifacts - name: Upload to Artifacts
if: env.iscustom == 'true' && success() if: env.iscustom == 'true' && success()
uses: actions/upload-artifact@v4 uses: actions/upload-artifact@v4

View File

@ -32,19 +32,6 @@ If you cannot connect to the Internet, please build a pre-compiled bootloader th
- Addons: [addons](https://github.com/RROrg/rr/raw/main/docs/addons.xlsx) - Addons: [addons](https://github.com/RROrg/rr/raw/main/docs/addons.xlsx)
- Modules: [modules](https://github.com/RROrg/rr/raw/main/docs/modules.xlsx) - Modules: [modules](https://github.com/RROrg/rr/raw/main/docs/modules.xlsx)
- Proxmox VE One Click Install:
```
curl -fsSL https://github.com/RROrg/rr/raw/refs/heads/main/scripts/pve.sh | bash -s -- --bltype usb
# Optional Parameters:
--onboot <0|1> Enable VM on boot, default 1 (enable)
--efi <0|1> Enable UEFI boot, default 1 (enable)
--bltype <sata|usb|nvme> Bootloader disk type, default sata
--9ppath <path> Set to /path/to/9p to mount 9p share
--tag <tag> Image tag, download latest release if not set
--img <path> Local image path, use local image if set
```
### 4: GPU: ### 4: GPU:

View File

@ -1 +1 @@
25.9.5 25.9.0

View File

@ -359,26 +359,6 @@
"zh_TW": "雜項功能. (一些必要的修改的集合.)" "zh_TW": "雜項功能. (一些必要的修改的集合.)"
} }
}, },
"monitor": {
"system": false,
"description": {
"en_US": "Monitor Power Management (Only supports graphics card drivers).",
"ar_SA": "إدارة الطاقة للمراقبة(يدعم فقط برامج تشغيل بطاقة الرسومات).",
"de_DE": "Überwachung der Energieverwaltung (nur unterstützt Graphikkartendrivers).",
"es_ES": "Monitoreo de la gestión de energía (solo admite controladores de tarjeta gráfica).",
"fr_FR": "Surveillance de la gestion de l'alimentation (seulement les pilotes de carte graphique sont pris en charge).",
"ja_JP": "電源管理の監視 (グラフィックスカードドライバーのみサポート)。",
"ko_KR": "모니터 전원 관리 (그래픽 카드 드라이버만 지원)。",
"ru_RU": "Мониторинг управления питанием (только поддерживает драйверы графических карт).",
"th_TH": "การตรวจสอบการบริหารจัดการพลังงาน (แค่สนับสนุนไดรเวอร์การทำงานของการ์ดราฟิก).",
"tr_TR": "Monitör Güç Yönetimi (grafik kart sürücüsü destekliyor).",
"uk_UA": "Моніторинг управління живленням (тільки підтримує драйвери графічних карток).",
"vi_VN": "Quản lý nguồn điện (chỉ hỗ trợ các driver của card đồ họa).",
"zh_CN": "显示器电源管理 (仅支持显卡已驱动的环境)。",
"zh_HK": "顯示器電源管理 (僅支持显卡已驅動的环境)。",
"zh_TW": "顯示器電源管理 (僅支持显卡已驅動的环境)。"
}
},
"mountloader": { "mountloader": {
"system": false, "system": false,
"description": { "description": {
@ -779,26 +759,6 @@
"zh_TW": "作者: GXNAS. 強制將 UPS 供電時的待機模式修改為關機. 參數: -f - 關機前觸發關機任務; -e - 待機模式前發關機任務(不修改為關機)." "zh_TW": "作者: GXNAS. 強制將 UPS 供電時的待機模式修改為關機. 參數: -f - 關機前觸發關機任務; -e - 待機模式前發關機任務(不修改為關機)."
} }
}, },
"virtiofs": {
"system": false,
"description": {
"en_US": "Auto mount virtio9p and virtiofs file systems (effective after rebooting the system after creating the storage space for the first time since it is mounted to the first storage space by default).",
"ar_SA": "تلقائيا تركيب أنظمة ملفات virtio9p و virtiofs (تدخل حيز التنفيذ بعد إعادة تشغيل النظام بعد إنشاء مساحة التخزين لأول مرة حيث يتم تركيبها في مساحة التخزين الأولى بشكل افتراضي).",
"de_DE": "Installiert virtio9p und virtiofs automatisch (da sie standardmäßig im ersten Speicherplatz gemountet werden, werden sie wirksam, nachdem das System zum ersten Mal installiert und der Speicherplatz erstellt und neu gestartet wurde).",
"es_ES": "Installs virtio9p and virtiofs automatically (effective after rebooting the system after creating the storage space for the first time since it is mounted to the first storage space by default).",
"fr_FR": "Monte automatiquement les systèmes de fichiers virtio9p et virtiofs (efficace après le redémarrage du système après la création de l'espace de stockage pour la première fois car il est monté sur le premier espace de stockage par défaut).",
"ja_JP": "virtio9pおよびvirtiofsファイルシステムを自動的にマウントしますデフォルトで最初のストレージスペースにマウントされるため、システムを再起動して最初にストレージスペースを作成した後に有効になります。",
"ko_KR": "virtio9p 및 virtiofs 파일 시스템을 자동으로 마운트합니다(기본적으로 첫 번째 스토리지 공간에 마운트되므로 시스템을 재부팅한 후 처음으로 스토리지 공간을 만든 후에 적용됨).",
"ru_RU": "Автоматически монтирует файловые системы virtio9p и virtiofs (вступает в силу после перезагрузки системы после создания хранилища в первый раз, так как по умолчанию оно монтируется в первое хранилище).",
"th_TH": "ติดตั้งระบบไฟล์ virtio9p และ virtiofs โดยอัตโนมัติ (มีผลหลังจากรีบูตระบบหลังจากสร้างพื้นที่จัดเก็บข้อมูลเป็นครั้งแรกเนื่องจากจะถูกเมานต์ไปยังพื้นที่จัดเก็บข้อมูลแรกโดยค่าเริ่มต้น)",
"tr_TR": "virtio9p ve virtiofs dosya sistemlerini otomatik olarak bağlar (varsayılan olarak ilk depolama alanına bağlandığından, depolama alanı ilk kez oluşturulduktan sonra sistemi yeniden başlattıktan sonra geçerlidir).",
"uk_UA": "Автоматично монтує файлові системи virtio9p та virtiofs (вступає в силу після перезавантаження системи після створення сховища у перший раз, оскільки за замовчуванням воно монтується у перший сховище).",
"vi_VN": "Tự động gắn hệ thống tệp virtio9p và virtiofs (có hiệu lực sau khi khởi động lại hệ thống sau khi tạo không gian lưu trữ lần đầu tiên vì nó được gắn vào không gian lưu trữ đầu tiên theo mặc định).",
"zh_CN": "自动挂载 virtio9p 和 virtiofs 文件系统(由于默认挂载到第一个存储空间,所以首次安装系统创建存储空间后重启生效).",
"zh_HK": "自動掛載 virtio9p 和 virtiofs 文件系統(由於默認掛載到第一個存儲空間,所以首次安裝系統創建存儲空間後重启生效).",
"zh_TW": "自動掛載 virtio9p 和 virtiofs 檔案系統(由於預設掛載到第一個儲存空間,所以首次安裝系統建立儲存空間後重新啟動生效)."
}
},
"vmtools": { "vmtools": {
"system": false, "system": false,
"description": { "description": {

Binary file not shown.

Binary file not shown.

View File

@ -812,10 +812,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -2070,10 +2066,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -3088,10 +3080,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -4274,10 +4262,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -5276,10 +5260,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -6462,10 +6442,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -7464,10 +7440,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -8650,10 +8622,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -9664,10 +9632,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -10858,10 +10822,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -11872,10 +11832,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -13070,10 +13026,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -13672,10 +13624,6 @@
"description": "Fairchild FUSB302 Type-C Chip Driver", "description": "Fairchild FUSB302 Type-C Chip Driver",
"depends": "tcpm,usb-common" "depends": "tcpm,usb-common"
}, },
"fuse": {
"description": "Filesystem in Userspace",
"depends": ""
},
"gpio-beeper": { "gpio-beeper": {
"description": "Generic GPIO beeper driver", "description": "Generic GPIO beeper driver",
"depends": "" "depends": ""
@ -14584,10 +14532,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -14792,10 +14736,6 @@
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)", "description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
"depends": "virtio,virtio_ring,blk-mq-virtio" "depends": "virtio,virtio_ring,blk-mq-virtio"
}, },
"virtiofs": {
"description": "Virtio Filesystem (Compiled by RR for DSM)",
"depends": "fuse,virtio_ring,virtio"
},
"vmw_pvscsi": { "vmw_pvscsi": {
"description": "VMware PVSCSI driver (Compiled by RR for DSM)", "description": "VMware PVSCSI driver (Compiled by RR for DSM)",
"depends": "" "depends": ""
@ -15334,10 +15274,6 @@
"description": "Fairchild FUSB302 Type-C Chip Driver", "description": "Fairchild FUSB302 Type-C Chip Driver",
"depends": "tcpm,usb-common" "depends": "tcpm,usb-common"
}, },
"fuse": {
"description": "Filesystem in Userspace",
"depends": ""
},
"gasket": { "gasket": {
"description": "Google Gasket driver framework", "description": "Google Gasket driver framework",
"depends": "dmabuf" "depends": "dmabuf"
@ -16250,10 +16186,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -16478,10 +16410,6 @@
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)", "description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
"depends": "virtio,virtio_ring,blk-mq-virtio" "depends": "virtio,virtio_ring,blk-mq-virtio"
}, },
"virtiofs": {
"description": "Virtio Filesystem (Compiled by RR for DSM)",
"depends": "fuse,virtio_ring,virtio"
},
"vmw_pvscsi": { "vmw_pvscsi": {
"description": "VMware PVSCSI driver (Compiled by RR for DSM)", "description": "VMware PVSCSI driver (Compiled by RR for DSM)",
"depends": "" "depends": ""
@ -17457,10 +17385,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -18703,10 +18627,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -19313,10 +19233,6 @@
"description": "Fairchild FUSB302 Type-C Chip Driver", "description": "Fairchild FUSB302 Type-C Chip Driver",
"depends": "tcpm,usb-common" "depends": "tcpm,usb-common"
}, },
"fuse": {
"description": "Filesystem in Userspace",
"depends": ""
},
"gpio-beeper": { "gpio-beeper": {
"description": "Generic GPIO beeper driver", "description": "Generic GPIO beeper driver",
"depends": "" "depends": ""
@ -20141,10 +20057,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -20365,10 +20277,6 @@
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)", "description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
"depends": "virtio,virtio_ring,blk-mq-virtio" "depends": "virtio,virtio_ring,blk-mq-virtio"
}, },
"virtiofs": {
"description": "Virtio Filesystem (Compiled by RR for DSM)",
"depends": "fuse,virtio_ring,virtio"
},
"vmw_pvscsi": { "vmw_pvscsi": {
"description": "VMware PVSCSI driver (Compiled by RR for DSM)", "description": "VMware PVSCSI driver (Compiled by RR for DSM)",
"depends": "" "depends": ""
@ -21319,10 +21227,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -22521,10 +22425,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -23559,10 +23459,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -24781,10 +24677,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -25371,10 +25263,6 @@
"description": "Fairchild FUSB302 Type-C Chip Driver", "description": "Fairchild FUSB302 Type-C Chip Driver",
"depends": "tcpm" "depends": "tcpm"
}, },
"fuse": {
"description": "Filesystem in Userspace",
"depends": ""
},
"gpio-beeper": { "gpio-beeper": {
"description": "Generic GPIO beeper driver", "description": "Generic GPIO beeper driver",
"depends": "" "depends": ""
@ -26263,10 +26151,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_sas": { "scsi_transport_sas": {
"description": "SAS Transport Attributes", "description": "SAS Transport Attributes",
"depends": "" "depends": ""
@ -26487,10 +26371,6 @@
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)", "description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
"depends": "virtio,virtio_ring,blk-mq-virtio" "depends": "virtio,virtio_ring,blk-mq-virtio"
}, },
"virtiofs": {
"description": "Virtio Filesystem (Compiled by RR for DSM)",
"depends": "fuse,virtio_ring,virtio"
},
"vmw_pvscsi": { "vmw_pvscsi": {
"description": "VMware PVSCSI driver (Compiled by RR for DSM)", "description": "VMware PVSCSI driver (Compiled by RR for DSM)",
"depends": "" "depends": ""
@ -27469,10 +27349,6 @@
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)", "description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -28703,10 +28579,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -29301,10 +29173,6 @@
"description": "Fairchild FUSB302 Type-C Chip Driver", "description": "Fairchild FUSB302 Type-C Chip Driver",
"depends": "tcpm" "depends": "tcpm"
}, },
"fuse": {
"description": "Filesystem in Userspace",
"depends": ""
},
"gpio-beeper": { "gpio-beeper": {
"description": "Generic GPIO beeper driver", "description": "Generic GPIO beeper driver",
"depends": "" "depends": ""
@ -30197,10 +30065,6 @@
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)", "description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
"depends": "" "depends": ""
}, },
"scsi_debug": {
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
"depends": ""
},
"scsi_transport_fc": { "scsi_transport_fc": {
"description": "FC Transport Attributes", "description": "FC Transport Attributes",
"depends": "" "depends": ""
@ -30425,10 +30289,6 @@
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)", "description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
"depends": "virtio,virtio_ring,blk-mq-virtio" "depends": "virtio,virtio_ring,blk-mq-virtio"
}, },
"virtiofs": {
"description": "Virtio Filesystem (Compiled by RR for DSM)",
"depends": "fuse,virtio_ring,virtio"
},
"vmw_pvscsi": { "vmw_pvscsi": {
"description": "VMware PVSCSI driver (Compiled by RR for DSM)", "description": "VMware PVSCSI driver (Compiled by RR for DSM)",
"depends": "" "depends": ""

Binary file not shown.

View File

@ -251,25 +251,394 @@
"sum": "00000000000000000000000000000000" "sum": "00000000000000000000000000000000"
} }
}, },
"DS220+": {}, "DS220+": {
"DS224+": {}, "7.2.2-72806-0": {
"DS2419+": {}, "url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS220%2B_72806.pat",
"DS2419+II": {}, "sum": "00000000000000000000000000000000"
"DS2422+": {}, },
"DS3622xs+": {}, "7.0.1-42218-0": {
"DS420+": {}, "url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS220%2B_42218.pat",
"DS423+": {}, "sum": "00000000000000000000000000000000"
"DS620slim": {}, },
"DS720+": {}, "7.2.1-69057-1": {
"DS723+": {}, "url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS220%2B_69057.pat",
"DS920+": {}, "sum": "00000000000000000000000000000000"
"DS923+": {}, },
"DVA1622": {}, "7.2.0-64570-1": {
"DVA3219": {}, "url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS220%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS220%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS220%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS224+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS224%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS224%2B_69057.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS2419+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS2419%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS2419%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS2419%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS2419%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS2419%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS2419%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS2419+II": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS2419%2BII_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS2419%2BII_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS2419%2BII_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS2419%2BII_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS2419%2BII_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS2419%2BII_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS2422+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS2422%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS2422%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS2422%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS2422%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS2422%2B_42661.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS2422%2B_42218.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS3622xs+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS3622xs%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS3622xs%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS3622xs%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS3622xs%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS3622xs%2B_42661.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS420+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS420%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS420%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS420%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS420%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS420%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS420%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS423+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS423%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS423%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS423%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_DS423%2B_42962.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS620slim": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS620slim_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS620slim_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057/DSM_DS620slim_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS620slim_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS620slim_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS620slim_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS720+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS720%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS720%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS720%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS720%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS720%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS720%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS723+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS723%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS723%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS723%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_DS723%2B_42962.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS920+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS920%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS920%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS920%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS920%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS920%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS920%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"DS923+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS923%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS923%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS923%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_DS923%2B_42962.pat",
"sum": "00000000000000000000000000000000"
}
},
"DVA1622": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DVA1622_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DVA1622_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DVA1622_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DVA1622_42962.pat",
"sum": "00000000000000000000000000000000"
}
},
"DVA3219": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DVA3219_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DVA3219_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DVA3219_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DVA3219_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DVA3219_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DVA3219_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"DVA3221": {}, "DVA3221": {},
"FS2500": {}, "FS2500": {},
"FS3400": {}, "FS3400": {
"FS3410": {}, "7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_FS3400_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_FS3400_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_FS3400_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_FS3400_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_FS3400_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_FS3400_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"FS3410": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_FS3410_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_FS3410_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_FS3410_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_FS3410_42962.pat",
"sum": "00000000000000000000000000000000"
}
},
"FS3600": { "FS3600": {
"7.2.2-72806-0": { "7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_FS3600_72806.pat", "url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_FS3600_72806.pat",
@ -652,6 +1021,14 @@
"7.2.0-64570-1": { "7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS820%2B_64570.pat", "url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS820%2B_64570.pat",
"sum": "00000000000000000000000000000000" "sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_RS820%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_RS820%2B_42661.pat",
"sum": "00000000000000000000000000000000"
} }
}, },
"RS820RP+": { "RS820RP+": {
@ -732,11 +1109,78 @@
"7.2.0-64570-1": { "7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3200D_64570.pat", "url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3200D_64570.pat",
"sum": "00000000000000000000000000000000" "sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_SA3200D_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_SA3200D_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"SA3400": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3400_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_SA3400_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_SA3400_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3400_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_SA3400_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_SA3400_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"SA3400D": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3400D_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_SA3400D_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3400D_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_SA3400D_42962.pat",
"sum": "00000000000000000000000000000000"
}
},
"SA3410": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3410_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057/DSM_SA3410_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3410_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_SA3410_42962.pat",
"sum": "00000000000000000000000000000000"
} }
}, },
"SA3400": {},
"SA3400D": {},
"SA3410": {},
"SA3600": { "SA3600": {
"7.2.2-72806-0": { "7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3600_72806.pat", "url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3600_72806.pat",
@ -1049,13 +1493,196 @@
"7.2.0-64570-1": { "7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_FS2017_64570.pat", "url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_FS2017_64570.pat",
"sum": "00000000000000000000000000000000" "sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_FS2017_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_FS2017_42661.pat",
"sum": "00000000000000000000000000000000"
} }
}, },
"RS18017xs+": {}, "RS18017xs+": {
"RS2418+": {}, "7.2.2-72806-0": {
"RS2418RP+": {}, "url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_RS18017xs%2B_72806.pat",
"RS2818RP+": {}, "sum": "00000000000000000000000000000000"
"RS3617RPxs": {}, },
"RS3617xs+": {}, "7.0.1-42218-0": {
"RS4017xs+": {} "url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_RS18017xs%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_RS18017xs%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS18017xs%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_RS18017xs%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_RS18017xs%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"RS2418+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_RS2418%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_RS2418%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_RS2418%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS2418%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_RS2418%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_RS2418%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"RS2418RP+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_RS2418RP%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_RS2418RP%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_RS2418RP%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS2418RP%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_RS2418RP%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_RS2418RP%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"RS2818RP+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_RS2818RP%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_RS2818RP%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_RS2818RP%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS2818RP%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_RS2818RP%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_RS2818RP%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"RS3617RPxs": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_RS3617RPxs_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_RS3617RPxs_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_RS3617RPxs_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS3617RPxs_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_RS3617RPxs_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_RS3617RPxs_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"RS3617xs+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_RS3617xs%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_RS3617xs%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_RS3617xs%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS3617xs%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_RS3617xs%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_RS3617xs%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
},
"RS4017xs+": {
"7.2.2-72806-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_RS4017xs%2B_72806.pat",
"sum": "00000000000000000000000000000000"
},
"7.0.1-42218-0": {
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_RS4017xs%2B_42218.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.1-69057-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_RS4017xs%2B_69057.pat",
"sum": "00000000000000000000000000000000"
},
"7.2.0-64570-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS4017xs%2B_64570.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.1-42962-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_RS4017xs%2B_42962.pat",
"sum": "00000000000000000000000000000000"
},
"7.1.0-42661-1": {
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_RS4017xs%2B_42661.pat",
"sum": "00000000000000000000000000000000"
}
}
} }

Binary file not shown.

View File

@ -49,12 +49,12 @@ if [ -f "${PART1_PATH}/.upgraded" ]; then
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")" PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
PATURL="$(readConfigKey "paturl" "${USER_CONFIG_FILE}")" PATURL="$(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
PATSUM="$(readConfigKey "patsum" "${USER_CONFIG_FILE}")" PATSUM="$(readConfigKey "patsum" "${USER_CONFIG_FILE}")"
./menu.sh reconfiguringM "${MODEL}" "${PLATFORM}" || { ./menu.sh modelMenu "${MODEL}" "${PLATFORM}" || {
echo -e "$(TEXT "Reconfiguration failed!")" echo -e "$(TEXT "Reconfiguration failed!")"
exit 1 exit 1
} }
if [ -n "${PRODUCTVER}" ] && [ -n "${PATURL}" ]; then if [ -n "${PRODUCTVER}" ] && [ -n "${PATURL}" ]; then
./menu.sh reconfiguringV "${PRODUCTVER}" "${PATURL}" "${PATSUM}" || { ./menu.sh productversMenu "${PRODUCTVER}" "${PATURL}" "${PATSUM}" || {
echo -e "$(TEXT "Reconfiguration failed!")" echo -e "$(TEXT "Reconfiguration failed!")"
exit 1 exit 1
} }
@ -112,7 +112,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
HASATA=0 HASATA=0
for D in $(lsblk -dpno KNAME); do for D in $(lsblk -dpno NAME); do
[ "${D}" = "${LOADER_DISK}" ] && continue [ "${D}" = "${LOADER_DISK}" ] && continue
if echo "sata sas scsi" | grep -wq "$(getBus "${D}")"; then if echo "sata sas scsi" | grep -wq "$(getBus "${D}")"; then
HASATA=1 HASATA=1
@ -363,7 +363,7 @@ if [ "${DIRECT}" = "true" ] || [ "${MEV:-physical}" = "parallels" ]; then
_bootwait || exit 0 _bootwait || exit 0
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Reboot to boot directly in DSM")" printf "\033[1;33m%s\033[0m\n" "$(TEXT "Reboot to boot directly in DSM")"
[ ! -f "/.dockerenv" ] && reboot reboot
exit 0 exit 0
else else
rm -f "${USER_RSYSENVFILE}" 2>/dev/null || true rm -f "${USER_RSYSENVFILE}" 2>/dev/null || true
@ -390,14 +390,14 @@ else
printf "." printf "."
sleep 1 sleep 1
done done
if [ ! -f "/.dockerenv" ]; then
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true [ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
fi
printf "$(TEXT "Waiting IP.\n")" printf "$(TEXT "Waiting IP.\n")"
for N in ${ETHX}; do for N in ${ETHX}; do
COUNT=0 COUNT=0
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)" DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00" MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)"
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}" printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
while true; do while true; do
if false && [ ! "${N::3}" = "eth" ]; then if false && [ ! "${N::3}" = "eth" ]; then
@ -464,7 +464,6 @@ else
fi fi
done done
if [ ! -f "/.dockerenv" ]; then
# Disconnect wireless # Disconnect wireless
lsmod | grep -q iwlwifi && for F in /sys/class/net/wlan*; do lsmod | grep -q iwlwifi && for F in /sys/class/net/wlan*; do
[ ! -e "${F}" ] && continue [ ! -e "${F}" ] && continue
@ -482,6 +481,5 @@ else
# Reboot # Reboot
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")" KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff [ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff
fi
exit 0 exit 0
fi fi

0
files/initrd/opt/rr/extract-vmlinux Executable file → Normal file
View File

Binary file not shown.

View File

@ -1,34 +0,0 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# shellcheck disable=SC2059
[ -z "${WORK_PATH}" ] || [ ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
. "${WORK_PATH}/include/functions.sh"
# lock
exec 911>"${TMP_PATH}/helper.lock"
flock -n 911 || {
MSG="$(TEXT "Another instance is already running.")"
dialog --colors --aspect 50 --title "$(TEXT "Online Assistance")" --msgbox "${MSG}" 0 0
exit 1
}
trap 'flock -u 911; rm -f "${TMP_PATH}/helper.lock"' EXIT INT TERM HUP
{
printf "$(TEXT "Closing this window or press 'ctrl + c' to exit the assistance.")\n"
printf "$(TEXT "Please give the following link to the helper. (Click to open and copy)")\n"
printf " 👇\n"
sshx -q --name "RR-Helper" 2>&1
[ $? -ne 0 ] && while true; do sleep 1; done
} | dialog --colors --aspect 50 --title "$(TEXT "Online Assistance")" --progressbox "$(TEXT "Notice: Please keep this window open.")" 20 100 2>&1
clear
echo -e "$(TEXT "Call \033[1;32mmenu.sh\033[0m to return to menu")"
"${WORK_PATH}/init.sh"

View File

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

View File

@ -246,7 +246,6 @@ function _sort_netif() {
ETHLIST="" ETHLIST=""
for F in /sys/class/net/eth*; do for F in /sys/class/net/eth*; do
[ ! -e "${F}" ] && continue [ ! -e "${F}" ] && continue
local ETH MAC BUS
ETH="$(basename "${F}")" ETH="$(basename "${F}")"
MAC="$(cat "/sys/class/net/${ETH}/address" 2>/dev/null | sed 's/://g; s/.*/\L&/')" MAC="$(cat "/sys/class/net/${ETH}/address" 2>/dev/null | sed 's/://g; s/.*/\L&/')"
BUS="$(ethtool -i "${ETH}" 2>/dev/null | grep bus-info | cut -d' ' -f2)" BUS="$(ethtool -i "${ETH}" 2>/dev/null | grep bus-info | cut -d' ' -f2)"
@ -289,11 +288,10 @@ function _sort_netif() {
# 1 - device path # 1 - device path
function getBus() { function getBus() {
local BUS="" local BUS=""
[ -f "/.dockerenv" ] && BUS="docker"
# usb/ata(ide)/sata/sas/spi(scsi)/virtio/mmc/nvme # usb/ata(ide)/sata/sas/spi(scsi)/virtio/mmc/nvme
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,TRAN 2>/dev/null | grep "${1} " | awk '{print $2}' | sed 's/^ata$/ide/' | sed 's/^spi$/scsi/') #Spaces are intentional [ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,TRAN 2>/dev/null | grep "${1} " | awk '{print $2}' | sed 's/^ata$/ide/' | sed 's/^spi$/scsi/') #Spaces are intentional
# usb/scsi(ide/sata/sas)/virtio/mmc/nvme/vmbus/xen(xvd) # usb/scsi(ide/sata/sas)/virtio/mmc/nvme/vmbus/xen(xvd)
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,SUBSYSTEMS 2>/dev/null | grep "${1} " | awk '{split($2,a,":"); if(length(a)>1) print a[length(a)-1]}' | sed 's/_host//' | sed 's/^.*xen.*$/xen/') # Spaces are intentional [ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,SUBSYSTEMS 2>/dev/null | grep "${1} " | awk '{print $2}' | awk -F':' '{print $(NF-1)}' | sed 's/_host//' | sed 's/^.*xen.*$/xen/') # Spaces are intentional
[ -z "${BUS}" ] && BUS="unknown" [ -z "${BUS}" ] && BUS="unknown"
echo "${BUS}" echo "${BUS}"
return 0 return 0

View File

@ -10,20 +10,18 @@
# Unpack modules from a tgz file # Unpack modules from a tgz file
# 1 - Platform # 1 - Platform
# 2 - Kernel Version # 2 - Kernel Version
# 3 - dummy path
function unpackModules() { function unpackModules() {
local PLATFORM=${1} local PLATFORM=${1}
local PKVER=${2} local PKVER=${2}
local UNPATH=${3:-"${TMP_PATH}/modules"}
local KERNEL local KERNEL
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")" KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
rm -rf "${UNPATH}" rm -rf "${TMP_PATH}/modules"
mkdir -p "${UNPATH}" mkdir -p "${TMP_PATH}/modules"
if [ "${KERNEL}" = "custom" ]; then if [ "${KERNEL}" = "custom" ]; then
tar -zxf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" tar -zxf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules"
else else
tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules"
fi fi
} }
@ -31,18 +29,16 @@ function unpackModules() {
# Packag modules to a tgz file # Packag modules to a tgz file
# 1 - Platform # 1 - Platform
# 2 - Kernel Version # 2 - Kernel Version
# 3 - dummy path
function packagModules() { function packagModules() {
local PLATFORM=${1} local PLATFORM=${1}
local PKVER=${2} local PKVER=${2}
local UNPATH=${3:-"${TMP_PATH}/modules"}
local KERNEL local KERNEL
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")" KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
if [ "${KERNEL}" = "custom" ]; then if [ "${KERNEL}" = "custom" ]; then
tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" . tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules" .
else else
tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" . tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules" .
fi fi
} }
@ -58,10 +54,9 @@ function getAllModules() {
return 1 return 1
fi fi
UNPATH="${TMP_PATH}/modules" unpackModules "${PLATFORM}" "${PKVER}"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
for F in ${UNPATH}/*.ko; do for F in ${TMP_PATH}/modules/*.ko; do
[ ! -e "${F}" ] && continue [ ! -e "${F}" ] && continue
local N DESC local N DESC
N="$(basename "${F}" .ko)" N="$(basename "${F}" .ko)"
@ -70,35 +65,7 @@ function getAllModules() {
echo "${N} \"${DESC:-${N}}\"" echo "${N} \"${DESC:-${N}}\""
done done
rm -rf "${UNPATH}" rm -rf "${TMP_PATH}/modules"
}
function getLoadedModules() {
local PLATFORM=${1}
local PKVER=${2}
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ]; then
return 1
fi
UNPATH="${TMP_PATH}/lib/modules/$(uname -r)"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
depmod -a -b "${TMP_PATH}" >/dev/null 2>&1
ALL_KO=$(
find /sys/devices -name modalias -exec cat {} \; | while read -r modalias; do
modprobe -d "${TMP_PATH}" --resolve-alias "${modalias}" 2>/dev/null
done | sort -u
)
rm -rf "${UNPATH}"
ALL_DEPS=""
for M in ${ALL_KO}; do
ALL_DEPS="${ALL_DEPS} $(getdepends "${PLATFORM}" "${PKVER}" "${M}")"
done
echo "${ALL_DEPS}" | tr ' ' '\n' | grep -v '^$' | sort -u
return 0
} }
############################################################################### ###############################################################################
@ -118,11 +85,10 @@ function installModules() {
shift 2 shift 2
MLIST="${*}" MLIST="${*}"
UNPATH="${TMP_PATH}/modules" unpackModules "${PLATFORM}" "${PKVER}"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")" ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
for F in ${UNPATH}/*.ko; do for F in ${TMP_PATH}/modules/*.ko; do
[ ! -e "${F}" ] && continue [ ! -e "${F}" ] && continue
M=$(basename "${F}") M=$(basename "${F}")
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue [ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
@ -132,7 +98,6 @@ function installModules() {
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}" rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
fi fi
done done
rm -rf "${UNPATH}"
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware" mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"
KERNEL=$(readConfigKey "kernel" "${USER_CONFIG_FILE}") KERNEL=$(readConfigKey "kernel" "${USER_CONFIG_FILE}")
@ -144,6 +109,8 @@ function installModules() {
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
return 1 return 1
fi fi
rm -rf "${TMP_PATH}/modules"
return 0 return 0
} }
@ -162,12 +129,11 @@ function addToModules() {
return 1 return 1
fi fi
UNPATH="${TMP_PATH}/modules" unpackModules "${PLATFORM}" "${PKVER}"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
cp -f "${KOFILE}" "${UNPATH}" cp -f "${KOFILE}" "${TMP_PATH}/modules"
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}" packagModules "${PLATFORM}" "${PKVER}"
} }
############################################################################### ###############################################################################
@ -185,12 +151,11 @@ function delToModules() {
return 1 return 1
fi fi
UNPATH="${TMP_PATH}/modules" unpackModules "${PLATFORM}" "${PKVER}"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
rm -f "${UNPATH}/${KONAME}" rm -f "${TMP_PATH}/modules/${KONAME}"
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}" packagModules "${PLATFORM}" "${PKVER}"
} }
############################################################################### ###############################################################################
@ -200,9 +165,9 @@ function delToModules() {
# 3 - ko name # 3 - ko name
function getdepends() { function getdepends() {
function _getdepends() { function _getdepends() {
if [ -f "${UNPATH}/${1}.ko" ]; then if [ -f "${TMP_PATH}/modules/${1}.ko" ]; then
local depends local depends
depends="$(modinfo -F depends "${UNPATH}/${1}.ko" 2>/dev/null | sed 's/,/\n/g')" depends="$(modinfo -F depends "${TMP_PATH}/modules/${1}.ko" 2>/dev/null | sed 's/,/\n/g')"
if [ "$(echo "${depends}" | wc -w)" -gt 0 ]; then if [ "$(echo "${depends}" | wc -w)" -gt 0 ]; then
for k in ${depends}; do for k in ${depends}; do
echo "${k}" echo "${k}"
@ -221,10 +186,9 @@ function getdepends() {
return 1 return 1
fi fi
UNPATH="${TMP_PATH}/modules" unpackModules "${PLATFORM}" "${PKVER}"
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
_getdepends "${KONAME}" | sort -u _getdepends "${KONAME}" | sort -u
echo "${KONAME}" echo "${KONAME}"
rm -rf "${UNPATH}" rm -rf "${TMP_PATH}/modules"
} }

View File

@ -86,7 +86,6 @@ if [ -z "$(readConfigMap "addons" "${USER_CONFIG_FILE}")" ]; then
initConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}" initConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.trivial" "" "${USER_CONFIG_FILE}" initConfigKey "addons.trivial" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.vmtools" "" "${USER_CONFIG_FILE}" initConfigKey "addons.vmtools" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.monitor" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.mountloader" "" "${USER_CONFIG_FILE}" initConfigKey "addons.mountloader" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.powersched" "" "${USER_CONFIG_FILE}" initConfigKey "addons.powersched" "" "${USER_CONFIG_FILE}"
initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}" initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}"
@ -94,7 +93,7 @@ fi
initConfigKey "modules" "{}" "${USER_CONFIG_FILE}" initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
initConfigKey "modblacklist" "evbug,cdc_ether" "${USER_CONFIG_FILE}" initConfigKey "modblacklist" "evbug,cdc_ether" "${USER_CONFIG_FILE}"
if [ ! -f "/.dockerenv" ]; then if [ ! "LOCALBUILD" = "${LOADER_DISK}" ]; then
if arrayExistItem "sortnetif:" "$(readConfigMap "addons" "${USER_CONFIG_FILE}")"; then if arrayExistItem "sortnetif:" "$(readConfigMap "addons" "${USER_CONFIG_FILE}")"; then
_sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")" _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
fi fi
@ -129,17 +128,20 @@ PID="0x0001"
TYPE="DoM" TYPE="DoM"
BUS=$(getBus "${LOADER_DISK}") BUS=$(getBus "${LOADER_DISK}")
BUSLIST="usb sata sas scsi nvme mmc ide virtio vmbus xen docker" BUSLIST="usb sata sas scsi nvme mmc ide virtio vmbus xen"
if [ "${BUS}" = "usb" ]; then if [ "${BUS}" = "usb" ]; then
VID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_VENDOR_ID" | cut -d= -f2)" VID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_VENDOR_ID" | cut -d= -f2)"
PID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_MODEL_ID" | cut -d= -f2)" PID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_MODEL_ID" | cut -d= -f2)"
[ "${VID}" = "0x" ] || [ "${PID}" = "0x" ] && die "$(TEXT "The loader disk does not support the current USB Portable Hard Disk.")" [ "${VID}" = "0x" ] || [ "${PID}" = "0x" ] && die "$(TEXT "The loader disk does not support the current USB Portable Hard Disk.")"
TYPE="flashdisk" TYPE="flashdisk"
elif [ "${BUS}" = "docker" ]; then
TYPE="PC"
elif ! echo "${BUSLIST}" | grep -wq "${BUS}"; then elif ! echo "${BUSLIST}" | grep -wq "${BUS}"; then
if [ "LOCALBUILD" = "${LOADER_DISK}" ]; then
echo "LOCALBUILD MODE"
TYPE="PC"
else
die "$(printf "$(TEXT "The loader disk does not support the current %s, only %s DoM is supported.")" "${BUS}" "${BUSLIST// /\/}")" die "$(printf "$(TEXT "The loader disk does not support the current %s, only %s DoM is supported.")" "${BUS}" "${BUSLIST// /\/}")"
fi fi
fi
# Save variables to user config file # Save variables to user config file
writeConfigKey "vid" "${VID}" "${USER_CONFIG_FILE}" writeConfigKey "vid" "${VID}" "${USER_CONFIG_FILE}"
@ -166,9 +168,6 @@ if ! loaderIsConfigured; then
elif grep -q "IWANTTOCHANGETHECONFIG" /proc/cmdline; then elif grep -q "IWANTTOCHANGETHECONFIG" /proc/cmdline; then
printf "\033[1;33m%s\033[0m\n" "$(TEXT "User requested edit settings.")" printf "\033[1;33m%s\033[0m\n" "$(TEXT "User requested edit settings.")"
BOOT=0 BOOT=0
elif [ -f "/.dockerenv" ]; then
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Docker edit settings.")"
BOOT=0
fi fi
# If is to boot automatically, do it # If is to boot automatically, do it
@ -200,15 +199,13 @@ while [ ${COUNT} -lt 30 ]; do
sleep 1 sleep 1
done done
if [ ! -f "/.dockerenv" ]; then
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true [ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
fi
printf "$(TEXT "Waiting IP.\n")" printf "$(TEXT "Waiting IP.\n")"
for N in ${ETHX}; do for N in ${ETHX}; do
COUNT=0 COUNT=0
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)" DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00" MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)"
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}" printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
while true; do while true; do
if [ -z "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then if [ -z "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
@ -257,7 +254,7 @@ fi
printf "\n" printf "\n"
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")" DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ] && [ ! -f "/.dockerenv" ]; then if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ] && [ ! "LOCALBUILD" = "${LOADER_DISK}" ]; then
IP="$(getIP)" IP="$(getIP)"
echo "${IP}" | grep -q "^169\.254\." && IP="" echo "${IP}" | grep -q "^169\.254\." && IP=""
[ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}" [ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}"
@ -268,7 +265,7 @@ if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ] && [ ! -f "/.dockerenv" ]; the
[ -f "${TMP_PATH}/qrcode_qhxg.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_qhxg.png" >/dev/null 2>&1 || true [ -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" ]; then
DMI="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')" DMI="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
IP="$(getIP)" IP="$(getIP)"
echo "${IP}" | grep -q "^169\.254\." && IP="" echo "${IP}" | grep -q "^169\.254\." && IP=""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -19,8 +19,6 @@ N acpi_call.ko
N check_signature.ko N check_signature.ko
N rfkill.ko N rfkill.ko
N rfkill-gpio.ko N rfkill-gpio.ko
N scsi_debug.ko
N drivetemp.ko
# sensors # sensors
N coretemp.ko N coretemp.ko

View File

@ -3,7 +3,6 @@ synoinfo: &synoinfo
support_uasp: "yes" support_uasp: "yes"
support_printer: "yes" support_printer: "yes"
support_usb_printer: "yes" support_usb_printer: "yes"
support_nvidia_gpu: "yes"
support_disk_compatibility: "no" support_disk_compatibility: "no"
support_synodrive_ability: "no" # DS925+ support_synodrive_ability: "no" # DS925+
support_memory_compatibility: "no" support_memory_compatibility: "no"

View File

@ -229,7 +229,7 @@ done
# Network card configuration file # Network card configuration file
for N in $(seq 0 7); do 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=dhcp\nIPV6_ACCEPT_RA=1" >"${RAMDISK_PATH}/etc/sysconfig/network-scripts/ifcfg-eth${N}"
done done
# issues/313 # issues/313

View File

@ -1 +1 @@
25.9.5 25.9.0

View File

@ -49,6 +49,8 @@ else
font=${prefix}/fonts/unicode.pf2 font=${prefix}/fonts/unicode.pf2
fi fi
terminal_output console
if loadfont ${font}; then if loadfont ${font}; then
set gfxmode=auto set gfxmode=auto
load_video load_video
@ -56,10 +58,9 @@ if loadfont ${font}; then
set locale_dir=$prefix/locale set locale_dir=$prefix/locale
set lang=en_US set lang=en_US
insmod gettext insmod gettext
terminal_output --append gfxterm
fi fi
terminal_output gfxterm
if serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1; then if serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1; then
terminal_input --append serial terminal_input --append serial
terminal_output --append serial terminal_output --append serial

View File

@ -340,7 +340,7 @@
# API # API
# 获取系统信息 # 获取系统信息
synowebapi --exec api=SYNO.Core.System method=info version=3 synowebapi --exec api=SYNO.Core.System method=info version=3
synowebapi --exec api=SYNO.Core.System method=info version=3 type='"firmware"' synowebapi --exec api=SYNO.Core.System method=info version=3 type="firmware"
# 获取设备信息 # 获取设备信息
synowebapi --exec api=SYNO.Core.System.Utilization method=get version=1 synowebapi --exec api=SYNO.Core.System.Utilization method=get version=1
# 关机 # 关机
@ -353,25 +353,6 @@
# 开启 telnet/ssh # 开启 telnet/ssh
synowebapi --exec api=SYNO.Core.Terminal method=set version=3 enable_telnet=true enable_ssh=true ssh_port=22 forbid_console=false synowebapi --exec api=SYNO.Core.Terminal method=set version=3 enable_telnet=true enable_ssh=true ssh_port=22 forbid_console=false
# 强制以下用户启用双重验证
synowebapi --exec api=SYNO.Core.OTP.EnforcePolicy method=set version=1 enable_otp_enforcement=true otp_enforce_option='"none"' # 开 管理员群组用户
synowebapi --exec api=SYNO.Core.OTP.EnforcePolicy method=set version=1 enable_otp_enforcement=true otp_enforce_option='"user"' # 开 所有用户
synowebapi --exec api=SYNO.Core.OTP.EnforcePolicy method=custom_set version=1 type='"local_user"' settings='[{"id":"1026","is_enforced":true}]'
synowebapi --exec api=SYNO.Core.OTP.EnforcePolicy method=set version=1 enable_otp_enforcement=true otp_enforce_option='"custom"' # 开 指定用户或群组
synowebapi --exec api=SYNO.Core.OTP.EnforcePolicy method=set version=1 enable_otp_enforcement=false otp_enforce_option='"none"' # 关
# 为管理员群组的用户启用自适应多重验证
synowebapi --exec api=SYNO.SecureSignIn.AMFA.Policy method=set version=1 type='"admin"' # 开
synowebapi --exec api=SYNO.SecureSignIn.AMFA.Policy method=set version=1 type='"none"' # 关
# 启用帐户保护
synowebapi --exec api=SYNO.Core.SmartBlock method=set version=1 enabled=true untrust_try=5 untrust_minute=1 untrust_lock=30 trust_try=10 trust_minute=1 trust_lock=30 # 开
synowebapi --exec api=SYNO.Core.SmartBlock method=set version=1 enabled=false untrust_try=5 untrust_minute=1 untrust_lock=30 trust_try=10 trust_minute=1 trust_lock=30 # 关
# 禁用双重验证 (admin 用户)
synowebapi --exec api=SYNO.SecureSignIn.Method.Admin method=reset version=1 account='"admin"' keep_amfa_settings=true
# Get MD5 # Get MD5
certutil -hashfile xxx.pat MD5 # windows certutil -hashfile xxx.pat MD5 # windows
md5sum xxx.pat # linux/mac md5sum xxx.pat # linux/mac

251
localbuild.sh Executable file
View File

@ -0,0 +1,251 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
if [ "$(id -u)" -ne 0 ]; then
echo "This script must be run as root"
exit 1
fi
function help() {
cat <<EOF
Usage: $0 <command> [args]
Commands:
create [workspace] [rr.img] - Create the workspace
init - Initialize the environment
config [model] [version] - Config the DSM system
build - Build the DSM system
pack [rr.img] - Pack to rr.img
help - Show this help
EOF
exit 1
}
function create() {
local WORKSPACE RRIMGPATH LOOPX INITRD_FILE INITRD_FORMAT
WORKSPACE="$(realpath "${1:-workspace}")"
RRIMGPATH="$(realpath "${2:-rr.img}")"
if [ ! -f "${RRIMGPATH}" ]; then
echo "File not found: ${RRIMGPATH}"
exit 1
fi
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
# sudo snap install yq
if ! type yq >/dev/null 2>&1 || ! yq --version 2>/dev/null | grep -q "v4."; then
sudo curl -kL https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -o /usr/bin/yq && sudo chmod a+x /usr/bin/yq
fi
# 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 click requests requests-toolbelt qrcode[pil] beautifulsoup4
sudo locale-gen ar_SA.UTF-8 de_DE.UTF-8 en_US.UTF-8 es_ES.UTF-8 fr_FR.UTF-8 ja_JP.UTF-8 ko_KR.UTF-8 ru_RU.UTF-8 th_TH.UTF-8 tr_TR.UTF-8 uk_UA.UTF-8 vi_VN.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_TW.UTF-8
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${RRIMGPATH}"
# Check partitions and ignore errors
fsck.vfat -aw "${LOOPX}p1" >/dev/null 2>&1 || true
fsck.ext2 -p "${LOOPX}p2" >/dev/null 2>&1 || true
fsck.ext4 -p "${LOOPX}p3" >/dev/null 2>&1 || true
echo "Mounting image file"
for i in {1..3}; do
rm -rf "/tmp/mnt/p${i}"
mkdir -p "/tmp/mnt/p${i}"
sudo mount "${LOOPX}p${i}" "/tmp/mnt/p${i}" || {
echo "Can't mount ${LOOPX}p${i}."
exit 1
}
done
echo "Create WORKSPACE"
rm -rf "${WORKSPACE}"
mkdir -p "${WORKSPACE}/mnt" "${WORKSPACE}/tmp" "${WORKSPACE}/initrd"
cp -rpf /tmp/mnt/p{1,2,3} "${WORKSPACE}/mnt/"
INITRD_FILE="${WORKSPACE}/mnt/p3/initrd-rr"
INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}")
case "${INITRD_FORMAT}" in
*'x-cpio'*) (cd "${WORKSPACE}/initrd" && sudo cpio -idm <"${INITRD_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${WORKSPACE}/initrd" && xz -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${WORKSPACE}/initrd" && lz4 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${WORKSPACE}/initrd" && lzma -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${WORKSPACE}/initrd" && bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'gzip'*) (cd "${WORKSPACE}/initrd" && gzip -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'zstd'*) (cd "${WORKSPACE}/initrd" && zstd -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*) ;;
esac
sudo sync
for i in {1..3}; do
sudo umount "/tmp/mnt/p${i}"
rm -rf "/tmp/mnt/p${i}"
done
sudo losetup --detach "${LOOPX}"
if [ ! -f "${WORKSPACE}/initrd/opt/rr/init.sh" ] || [ ! -f "${WORKSPACE}/initrd/opt/rr/menu.sh" ]; then
echo "initrd decompression failed."
exit 1
fi
rm -f "$(dirname "${BASH_SOURCE[0]}")/rr.env"
cat <<EOF >"$(dirname "${BASH_SOURCE[0]}")/rr.env"
export LOADER_DISK="LOCALBUILD"
export CHROOT_PATH="${WORKSPACE}"
EOF
echo "OK."
}
function init() {
if [ ! -f "$(dirname "${BASH_SOURCE[0]}")/rr.env" ]; then
echo "Please run init first"
exit 1
fi
. "$(dirname "${BASH_SOURCE[0]}")/rr.env"
pushd "${CHROOT_PATH}/initrd/opt/rr" || exit 1
echo "init"
./init.sh
local RET=$?
popd || exit 1
[ ${RET} -ne 0 ] && echo "Failed." || echo "Success."
exit ${RET}
}
function config() {
if [ ! -f "$(dirname "${BASH_SOURCE[0]}")/rr.env" ]; then
echo "Please run init first"
exit 1
fi
. "$(dirname "${BASH_SOURCE[0]}")/rr.env"
local RET=1
pushd "${CHROOT_PATH}/initrd/opt/rr" || exit 1
while true; do
if [ -z "${1}" ]; then
echo "menu"
./menu.sh || break
RET=0
else
echo "model"
./menu.sh modelMenu "${1:-SA6400}" || break
echo "version"
./menu.sh productversMenu "${2:-7.2}" || break
RET=0
fi
break
done
popd || exit 1
[ ${RET} -ne 0 ] && echo "Failed." || echo "Success."
exit ${RET}
}
function build() {
if [ ! -f "$(dirname "${BASH_SOURCE[0]}")/rr.env" ]; then
echo "Please run init first"
exit 1
fi
. "$(dirname "${BASH_SOURCE[0]}")/rr.env"
local RET=1
pushd "${CHROOT_PATH}/initrd/opt/rr" || exit 1
while true; do
echo "build"
./menu.sh make -1 || break
echo "clean"
./menu.sh cleanCache -1 || break
RET=0
break
done
popd || exit 1
[ ${RET} -ne 0 ] && echo "Failed." || echo "Success."
exit ${RET}
}
function pack() {
if [ ! -f "$(dirname "${BASH_SOURCE[0]}")/rr.env" ]; then
echo "Please run init first"
exit 1
fi
. "$(dirname "${BASH_SOURCE[0]}")/rr.env"
local RRIMGPATH LOOPX
RRIMGPATH="$(realpath "${1:-rr.img}")"
rm -f "${RRIMGPATH}"
gzip -dc "${CHROOT_PATH}/initrd/opt/rr/grub.img.gz" >"${RRIMGPATH}"
fdisk -l "${RRIMGPATH}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${RRIMGPATH}"
# Check partitions and ignore errors
fsck.vfat -aw "${LOOPX}p1" >/dev/null 2>&1 || true
fsck.ext2 -p "${LOOPX}p2" >/dev/null 2>&1 || true
fsck.ext4 -p "${LOOPX}p3" >/dev/null 2>&1 || true
echo "Mounting image file"
for i in {1..3}; do
rm -rf "/tmp/mnt/p${i}"
mkdir -p "/tmp/mnt/p${i}"
sudo mount "${LOOPX}p${i}" "/tmp/mnt/p${i}" || {
echo "Can't mount ${LOOPX}p${i}."
exit 1
}
done
echo "Pack image file"
for i in {1..3}; do
[ ${i} -eq 1 ] && sudo cp -af "${CHROOT_PATH}/mnt/p${i}/"{.locale,.timezone} "/tmp/mnt/p${i}/" 2>/dev/null
sudo cp -rf "${CHROOT_PATH}/mnt/p${i}/"* "/tmp/mnt/p${i}" || {
echo "Can't cp ${LOOPX}p${i}."
exit 1
}
done
sudo sync
for i in {1..3}; do
sudo umount "/tmp/mnt/p${i}"
rm -rf "/tmp/mnt/p${i}"
done
sudo losetup --detach "${LOOPX}"
echo "OK."
exit 0
}
function resize() {
local INPUT_FILE="${1}"
local CHANGE_SIZE="${2}"
local OUTPUT_FILE="${3:-${INPUT_FILE}}"
[ -z "${INPUT_FILE}" ] || [ ! -f "${INPUT_FILE}" ] && exit 1
[ -z "${CHANGE_SIZE}" ] && exit 1
INPUT_FILE="$(realpath "${INPUT_FILE}")"
OUTPUT_FILE="$(realpath "${OUTPUT_FILE}")"
local SIZE=$(($(du -sm "${INPUT_FILE}" 2>/dev/null | awk '{print $1}')$(echo "${CHANGE_SIZE}" | sed 's/M//g; s/b//g')))
[ "${SIZE:-0}" -lt 0 ] && exit 1
if [ ! "${INPUT_FILE}" = "${OUTPUT_FILE}" ]; then
sudo cp -f "${INPUT_FILE}" "${OUTPUT_FILE}"
fi
sudo truncate -s ${SIZE}M "${OUTPUT_FILE}"
echo -e "d\n\nn\n\n\n\n\nn\nw" | sudo fdisk "${OUTPUT_FILE}" >/dev/null 2>&1
local LOOPX LOOPXPY
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${OUTPUT_FILE}"
LOOPXPY="$(find "${LOOPX}p"* -maxdepth 0 2>/dev/null | sort -n | tail -1)"
sudo e2fsck -fp "${LOOPXPY:-${LOOPX}p3}"
sudo resize2fs "${LOOPXPY:-${LOOPX}p3}"
sudo losetup -d "${LOOPX}"
}
"$@"

View File

@ -242,34 +242,6 @@ function getModules() {
echo "Getting Modules end" echo "Getting Modules end"
} }
# unpack initrd
# $1 initrd file
# $2 output path
function unpackInitrd() {
local INITRD_FILE="${1}"
local OUTPUT_PATH="${2}"
[ -z "${INITRD_FILE}" ] || [ ! -f "${INITRD_FILE}" ] && exit 1
INITRD_FILE="$(realpath "${INITRD_FILE}")"
OUTPUT_PATH="$(realpath "${OUTPUT_PATH}")"
mkdir -p "${OUTPUT_PATH}"
local INITRD_FORMAT
INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}")
case "${INITRD_FORMAT}" in
*'x-cpio'*) (cd "${OUTPUT_PATH}" && sudo cpio -idm <"${INITRD_FILE}") >/dev/null 2>&1 ;;
*'x-xz'*) (cd "${OUTPUT_PATH}" && xz -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lz4'*) (cd "${OUTPUT_PATH}" && lz4 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-lzma'*) (cd "${OUTPUT_PATH}" && lzma -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'x-bzip2'*) (cd "${OUTPUT_PATH}" && bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'gzip'*) (cd "${OUTPUT_PATH}" && gzip -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*'zstd'*) (cd "${OUTPUT_PATH}" && zstd -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
*) ;;
esac
}
# repack initrd # repack initrd
# $1 initrd file # $1 initrd file
# $2 plugin path # $2 plugin path

View File

@ -1,233 +0,0 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
REPO="https://github.com/RROrg/rr"
# 参数
ONBOOT=1 # 开机启动默认1
EFI=1 # 启用 UEFI 引导默认1
BLTYPE="sata" # 引导盘类型, 支持 sata,usb,nvme 默认 sata
STORAGE="" # 存储,默认自动获取
V9PPATH="" # 添加 virtio9p 挂载目录,默认空不添加
VFSDIRID="" # 添加 virtiofs 挂载文件夹id默认空不添加
TAG="" # 镜像tag默认自动获取
IMG="" # 本地镜像路径,默认空
usage() {
echo "Usage: $0 [--onboot <0|1>] [--efi <0|1>] [--bltype <sata|usb|nvme>] [--storage <name>]"
echo " [--v9ppath <path>] [--vfsdirid <dirid>] [--tag <tag>] [--img <path>]"
echo ""
echo " --onboot <0|1> Enable VM on boot, default 1 (enable)"
echo " --efi <0|1> Enable UEFI boot, default 1 (enable)"
echo " --bltype <sata|usb|nvme> Bootloader disk type, default sata"
echo " --storage <name> Storage name for images, as local-lvm, default auto get"
echo " --v9ppath <path> Set to /path/to/9p to mount virtio 9p share"
echo " --vfsdirid <dirid> Set to <dirid> to mount virtio fs share"
echo " --tag <tag> Image tag, download latest release if not set"
echo " --img <path> Local image path, use local image if set"
}
ARGS=$(getopt -o '' --long onboot:,efi:,bltype:,storage:,v9ppath:,vfsdirid:,tag:,img: -n "$0" -- "$@")
if [ $? -ne 0 ]; then
usage
exit 1
fi
eval set -- "$ARGS"
while true; do
case "$1" in
--onboot)
ONBOOT="$2"
echo "$ONBOOT" | grep -qvE '^(0|1)$' && ONBOOT=1
shift 2
;;
--efi)
EFI="$2"
echo "$EFI" | grep -qvE '^(0|1)$' && EFI=1
shift 2
;;
--bltype)
BLTYPE="$2"
echo "$BLTYPE" | grep -qvE '^(sata|usb|nvme)$' && BLTYPE="sata"
shift 2
;;
--storage)
STORAGE="$2"
[ -n "${STORAGE}" ] && pvesm status -content images | grep -qw "^${STORAGE}" || STORAGE=""
shift 2
;;
--v9ppath)
V9PPATH="$2"
[ -d "${V9PPATH}" ] && V9PPATH="$(realpath "${V9PPATH}")" || V9PPATH=""
shift 2
;;
--vfsdirid)
VFSDIRID="$2"
[ -n "${VFSDIRID}" ] && pvesh ls /cluster/mapping/dir | grep -qw "${VFSDIRID}" || VFSDIRID=""
shift 2
;;
--tag)
TAG="$2"
[ "${TAG:0:1}" = "v" ] && TAG="${TAG:1}"
shift 2
;;
--img)
IMG="$2"
[ -f "${IMG}" ] && IMG="$(realpath "${IMG}")" || IMG=""
shift 2
;;
--)
shift
break
;;
*)
usage
exit 1
;;
esac
done
if ! command -v qm >/dev/null 2>&1; then
echo "Not a Proxmox VE environment"
exit 1
fi
if [ -z "$TAG" ]; then
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
if [ -n "${IMG}" ] && [ -f "${IMG}" ]; then
IMG_PATH="${IMG}"
else
if ! command -v curl >/dev/null 2>&1; then
apt-get update >/dev/null 2>&1 && apt-get install -y curl >/dev/null 2>&1
fi
rm -f "/tmp/rr-${TAG}.img.zip"
echo "Downloading rr-${TAG}.img.zip ... "
STATUS=$(curl -skL --connect-timeout 10 -w "%{http_code}" "${REPO}/releases/download/${TAG}/rr-${TAG}.img.zip" -o "/tmp/rr-${TAG}.img.zip")
if [ $? -ne 0 ] || [ "${STATUS:-0}" -ne 200 ]; then
rm -f "/tmp/rr-${TAG}.img.zip"
echo "Download failed rr-${TAG}.img.zip"
exit 1
fi
if ! command -v unzip >/dev/null 2>&1; then
apt-get update >/dev/null 2>&1 && apt-get install -y unzip >/dev/null 2>&1
fi
IMG_FILE=$(unzip -l "/tmp/rr-${TAG}.img.zip" | awk '{print $4}' | grep '\.img$' | head -1)
if [ -z "${IMG_FILE}" ]; then
echo "No img file found in rr-${TAG}.img.zip"
exit 1
fi
IMG_PATH="/tmp/${IMG_FILE}"
rm -f "${IMG_PATH}"
echo "Unzipping rr-${TAG}.img.zip ... "
unzip -o "/tmp/rr-${TAG}.img.zip" -d /tmp/ "${IMG_FILE}" >/dev/null 2>&1
STATUS=$?
rm -f "/tmp/rr-${TAG}.img.zip"
if [ "${STATUS:-0}" -ne 0 ]; then
rm -f "${IMG_PATH}"
echo "Unzip failed rr-${TAG}.img.zip"
exit 1
fi
fi
echo "Creating VM with RR ... "
# 获取可用的 VMID
VMID="$(($(qm list | awk 'NR>1{print $1}' | sort -n | tail -1 2>/dev/null || echo 99) + 1))"
ARGS=""
SATAIDX=0
# 创建 VM
qm create ${VMID} --name RR-DSM --machine q35 --ostype l26 --vga virtio --sockets 1 --cores 2 --cpu host --numa 0 --memory 4096 --scsihw virtio-scsi-single
if [ $? -ne 0 ]; then
echo "Create VM failed"
exit 1
fi
# 获取 存储
[ -z "${STORAGE}" ] && STORAGE=$(pvesm status -content images | awk 'NR>1 {print $1}' | grep local | tail -1)
if [ -z "${STORAGE}" ]; then
echo "No storage for images"
qm destroy ${VMID} --purge
exit 1
fi
# 启用 UEFI 引导
if [ "${EFI:-1}" -eq 1 ]; then
if ! qm set ${VMID} --bios ovmf --efidisk0 ${STORAGE}:4,efitype=4m,pre-enrolled-keys=0; then
echo "Set UEFI failed"
qm destroy ${VMID} --purge
exit 1
fi
fi
# 导入 RR 镜像
BLDISK=$(qm importdisk ${VMID} "${IMG_PATH}" "${STORAGE}" | grep 'successfully imported disk' | sed -n "s/.*'\(.*\)'.*/\1/p")
STATUS=$?
if [ "${STATUS:-0}" -ne 0 ] || [ -z "${BLDISK}" ]; then
echo "Import disk failed"
qm destroy ${VMID} --purge
exit 1
fi
[ -n "${IMG}" ] || rm -f "${IMG_PATH}"
case "${BLTYPE}" in
usb)
ARGS+="-device nec-usb-xhci,id=usb-bus0,multifunction=on -drive file=$(pvesm path ${BLDISK}),media=disk,format=raw,if=none,id=usb1 -device usb-storage,bus=usb-bus0.0,port=1,drive=usb1,bootindex=999,removable=on "
;;
nvme)
ARGS+="-drive file=$(pvesm path ${BLDISK}),media=disk,format=raw,if=none,id=nvme1 -device nvme,drive=nvme1,serial=nvme001 "
;;
sata)
qm set ${VMID} --sata$((SATAIDX++)) "${BLDISK}"
;;
*)
echo "Setting bootloader disk failed"
qm destroy ${VMID} --purge
exit 1
;;
esac
X86_VENDOR=$(awk -F: '/vendor_id/ {gsub(/^[ \t]+/, "", $2); print $2; exit}' /proc/cpuinfo)
VT_FLAGS=$(grep '^flags' /proc/cpuinfo | head -n 1 | grep -wEo 'vmx|svm')
ARGS+="-cpu host,+kvm_pv_eoi,+kvm_pv_unhalt,${VT_FLAGS:+${VT_FLAGS},}hv_vendor_id=${X86_VENDOR:-unknown} "
if [ -d "${V9PPATH}" ]; then
[ "virtio9p" = "${VFSDIRID}" ] && V9PTAG="virtio9p0" || V9PTAG="virtio9p"
ARGS+="-fsdev local,security_model=passthrough,id=fsdev0,path=${V9PPATH} -device virtio-9p-pci,id=fs0,fsdev=fsdev0,mount_tag=${V9PTAG} "
fi
qm set ${VMID} --args "${ARGS}"
if [ $? -ne 0 ]; then
echo "Set args failed"
qm destroy ${VMID} --purge
exit 1
fi
if [ -n "${VFSDIRID}" ]; then
# pvesh create /cluster/mapping/dir --id "${VFSDIRID}" -map node=node1,path=/path/to/share1 --map node=node2,path=/path/to/share2
qm set ${VMID} --virtiofs0 dirid=${VFSDIRID},cache=always,direct-io=1
fi
# 添加 32G 数据盘
qm set ${VMID} --sata$((SATAIDX++)) ${STORAGE}:32
BRIDGE=$(awk -F: '/^iface vmbr/ {print $1}' /etc/network/interfaces | awk '{print $2}' | head -1)
if [ -z "${BRIDGE}" ]; then
echo "Get bridge failed"
qm destroy ${VMID} --purge
exit 1
fi
qm set ${VMID} --net0 virtio,bridge=${BRIDGE}
qm set ${VMID} --serial0 socket
qm set ${VMID} --agent enabled=1
qm set ${VMID} --smbios1 "uuid=$(cat /proc/sys/kernel/random/uuid),manufacturer=$(echo -n "RROrg" | base64),product=$(echo -n "RR" | base64),version=$(echo -n "$TAG" | base64),base64=1"
qm set ${VMID} --onboot "${ONBOOT}"
echo "Created success, VMID=${VMID}"

117
sourcebuild.sh Executable file
View File

@ -0,0 +1,117 @@
#!/usr/bin/env bash
#
# Copyright (C) 2022 Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
# 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
# # sudo snap install yq
# if ! type yq >/dev/null 2>&1 || ! yq --version 2>/dev/null | grep -q "v4."; then
# sudo curl -kL https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -o /usr/bin/yq && sudo chmod a+x /usr/bin/yq
# fi
#
# # 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 click requests requests-toolbelt qrcode[pil] beautifulsoup4
#
# sudo locale-gen ar_SA.UTF-8 de_DE.UTF-8 en_US.UTF-8 es_ES.UTF-8 fr_FR.UTF-8 ja_JP.UTF-8 ko_KR.UTF-8 ru_RU.UTF-8 th_TH.UTF-8 tr_TR.UTF-8 uk_UA.UTF-8 vi_VN.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_TW.UTF-8
#
# export TOKEN="${1}"
#
if [ "$(id -u)" -ne 0 ]; then
echo "This script must be run as root"
exit 1
fi
. scripts/func.sh "${TOKEN}"
echo "Get extractor"
getCKs "files/mnt/p3/cks" "true"
getLKMs "files/mnt/p3/lkms" "true"
getAddons "files/mnt/p3/addons" "true"
getModules "files/mnt/p3/modules" "true"
getBuildroot "files/mnt/p3" "true"
getExtractor "files/mnt/p3/extractor"
echo "Repack initrd"
convertpo2mo "files/initrd/opt/rr/lang"
repackInitrd "files/mnt/p3/initrd-rr" "files/initrd"
if [ -n "${1}" ]; then
LOADER_DISK="LOCALBUILD"
CHROOT_PATH="$(realpath files)"
export LOADER_DISK="LOCALBUILD"
export CHROOT_PATH="${CHROOT_PATH}"
(
cd "${CHROOT_PATH}/initrd/opt/rr" || exit 1
./init.sh
./menu.sh modelMenu "${1}"
./menu.sh productversMenu "${2:-7.2}"
./menu.sh make -1
./menu.sh cleanCache -1
)
fi
IMAGE_FILE="rr.img"
gzip -dc "files/initrd/opt/rr/grub.img.gz" >"${IMAGE_FILE}"
fdisk -l "${IMAGE_FILE}"
LOOPX=$(sudo losetup -f)
sudo losetup -P "${LOOPX}" "${IMAGE_FILE}"
# Check partitions and ignore errors
fsck.vfat -aw "${LOOPX}p1" >/dev/null 2>&1 || true
fsck.ext2 -p "${LOOPX}p2" >/dev/null 2>&1 || true
fsck.ext4 -p "${LOOPX}p3" >/dev/null 2>&1 || true
for i in {1..3}; do
[ ! -d "files/mnt/p${i}" ] && continue
rm -rf "/tmp/mnt/p${i}"
mkdir -p "/tmp/mnt/p${i}"
echo "Mounting ${LOOPX}p${i}"
sudo mount "${LOOPX}p${i}" "/tmp/mnt/p${i}" || {
echo "Can't mount ${LOOPX}p${i}."
break
}
echo "Copying files to ${LOOPX}p${i}"
[ ${i} -eq 1 ] && sudo cp -af "files/mnt/p${i}/"{.locale,.timezone} "/tmp/mnt/p${i}/" 2>/dev/null || true
sudo cp -rf "files/mnt/p${i}/"* "/tmp/mnt/p${i}" || true
sudo sync
echo "Unmounting ${LOOPX}p${i}"
sudo umount "/tmp/mnt/p${i}" || {
echo "Can't umount ${LOOPX}p${i}."
break
}
rm -rf "/tmp/mnt/p${i}"
done
sudo losetup --detach "${LOOPX}"
resizeImg "${IMAGE_FILE}" "+2560M"
# convertova "${IMAGE_FILE}" "${IMAGE_FILE/.img/.ova}"
# update.zip
sha256sum update-list.yml update-check.sh >sha256sum
zip -9j "update.zip" update-list.yml update-check.sh
while read -r F; do
if [ -d "${F}" ]; then
FTGZ="$(basename "${F}").tgz"
tar -zcf "${FTGZ}" -C "${F}" .
sha256sum "${FTGZ}" >>sha256sum
zip -9j "update.zip" "${FTGZ}"
rm -f "${FTGZ}"
else
(cd "$(dirname "${F}")" && sha256sum "$(basename "${F}")") >>sha256sum
zip -9j "update.zip" "${F}"
fi
done <<<"$(yq '.replace | explode(.) | to_entries | map([.key])[] | .[]' update-list.yml)"
zip -9j "update.zip" sha256sum