mirror of
https://github.com/RROrg/rr.git
synced 2025-09-25 21:28:35 +08:00
Compare commits
38 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3ad6ba68a6 | ||
|
0c77bada57 | ||
|
03f2cea7f9 | ||
|
cb56fa695d | ||
|
95235c314e | ||
|
b2f7dac7ba | ||
|
80d03e0e3c | ||
|
4e5edb325a | ||
|
a51c5f7c27 | ||
|
885c5e4a28 | ||
|
12fc9c218d | ||
|
9dca1fe830 | ||
|
e8dc96a9b3 | ||
|
c939661a45 | ||
|
4884158996 | ||
|
ef6ed60c46 | ||
|
2f02843dff | ||
|
38caa773d7 | ||
|
59112312c6 | ||
|
9710c33f35 | ||
|
32cfc2b257 | ||
|
c1de95e364 | ||
|
db85e17b02 | ||
|
801c0396a3 | ||
|
cac93e6a5c | ||
|
5b5fbd501e | ||
|
903c292e35 | ||
|
0c1b7d6a2e | ||
|
2ee5707a84 | ||
|
5e8527e6ac | ||
|
2c7c35b4a7 | ||
|
cdd30e0e5e | ||
|
34fb3e1968 | ||
|
1b191a4e2b | ||
|
c1fe7f7bfe | ||
|
c850e8be28 | ||
|
9c11315756 | ||
|
f2a34edeff |
31
.github/workflows/data.yml
vendored
31
.github/workflows/data.yml
vendored
@ -38,7 +38,7 @@ jobs:
|
||||
echo "Delaying for 1 minutes..."
|
||||
sleep 60
|
||||
|
||||
- name: Get Release RR
|
||||
- name: Get Data
|
||||
run: |
|
||||
REPO="${{ github.server_url }}/${{ github.repository }}"
|
||||
PRERELEASE="true"
|
||||
@ -57,18 +57,17 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
unzip rr-${TAG}.img.zip -d "rr"
|
||||
unzip rr-${TAG}.img.zip -d rr rr.img
|
||||
|
||||
export TERM=xterm
|
||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||
|
||||
sudo ./localbuild.sh create rr/ws rr/rr.img
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "create failed"
|
||||
exit 1
|
||||
fi
|
||||
LOOPX=$(sudo losetup -f)
|
||||
sudo losetup -P "${LOOPX}" "rr/rr.img"
|
||||
rm -rf "/tmp/mnt/p3"
|
||||
mkdir -p "/tmp/mnt/p3"
|
||||
mount "${LOOPX}p3" "/tmp/mnt/p3"
|
||||
unpackInitrd /tmp/mnt/p3/initrd-rr "rr/initrd"
|
||||
|
||||
- name: Get data
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
|
||||
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
|
||||
@ -78,10 +77,14 @@ jobs:
|
||||
sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true
|
||||
sudo pip3 install -U -r scripts/requirements.txt
|
||||
|
||||
python3 scripts/func.py getmodels -w "rr/ws/initrd" -j "docs/models.json" -x "docs/models.xlsx"
|
||||
python3 scripts/func.py getpats -w "rr/ws/initrd" -j "docs/pats.json" -x "docs/pats.xlsx"
|
||||
python3 scripts/func.py getaddons -w "rr/ws" -j "docs/addons.json" -x "docs/addons.xlsx"
|
||||
python3 scripts/func.py getmodules -w "rr/ws" -j "docs/modules.json" -x "docs/modules.xlsx"
|
||||
python3 scripts/func.py getmodels -w "rr/initrd" -j "docs/models.json" -x "docs/models.xlsx"
|
||||
python3 scripts/func.py getpats -w "rr/initrd" -j "docs/pats.json" -x "docs/pats.xlsx"
|
||||
python3 scripts/func.py getaddons -w "/tmp" -j "docs/addons.json" -x "docs/addons.xlsx"
|
||||
python3 scripts/func.py getmodules -w "/tmp" -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
|
||||
if: success()
|
||||
|
297
.github/workflows/issues.yml
vendored
297
.github/workflows/issues.yml
vendored
@ -27,68 +27,51 @@ jobs:
|
||||
shell: python
|
||||
run: |
|
||||
# -*- coding: utf-8 -*-
|
||||
import json, subprocess
|
||||
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)
|
||||
import json
|
||||
import os
|
||||
|
||||
issuetitle = ${{ toJSON(github.event.issue.title) }}
|
||||
issuebody = ${{ toJSON(github.event.issue.body) }}
|
||||
def set_env(name, value):
|
||||
with open(os.environ['GITHUB_ENV'], 'a', encoding='utf-8') as f:
|
||||
f.write(f'{name}={value}\n')
|
||||
|
||||
issuetitle = """${{ github.event.issue.title }}"""
|
||||
issuebody = """${{ github.event.issue.body }}"""
|
||||
|
||||
iscustom = 'false'
|
||||
warinfo = 'false'
|
||||
|
||||
format = ''
|
||||
size = ''
|
||||
template = ''
|
||||
language= ''
|
||||
sn = ''
|
||||
macs = ''
|
||||
tips = ''
|
||||
model = ''
|
||||
version = ''
|
||||
kernel = ''
|
||||
addons = ''
|
||||
modules = ''
|
||||
fields = {
|
||||
"format": "",
|
||||
"size": "",
|
||||
"template": "",
|
||||
"language": "",
|
||||
"sn": "",
|
||||
"macs": "",
|
||||
"tips": "",
|
||||
"model": "",
|
||||
"version": "",
|
||||
"kernel": "",
|
||||
"addons": "",
|
||||
"modules": ""
|
||||
}
|
||||
|
||||
try:
|
||||
if issuetitle.lower().startswith('custom'):
|
||||
if issuetitle.strip().lower().startswith('custom'):
|
||||
jsonbody = json.loads(issuebody)
|
||||
iscustom = 'true'
|
||||
format = jsonbody.get('format', '')
|
||||
size = jsonbody.get('size', '')
|
||||
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:
|
||||
for k in fields:
|
||||
fields[k] = jsonbody.get(k, "")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if iscustom == 'false':
|
||||
if issuebody.find('DMI') < 0 and issuebody.find('CPU') < 0 and issuebody.find('NIC') < 0:
|
||||
if not any(x in issuebody for x in ['DMI', 'CPU', 'NIC']):
|
||||
warinfo = 'true'
|
||||
|
||||
set_output("iscustom", iscustom)
|
||||
set_output("warinfo", warinfo)
|
||||
|
||||
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)
|
||||
set_env("iscustom", iscustom)
|
||||
set_env("warinfo", warinfo)
|
||||
for k, v in fields.items():
|
||||
set_env(k, v)
|
||||
|
||||
- name: Update Comment Warinfo
|
||||
if: env.warinfo == 'true'
|
||||
@ -165,39 +148,9 @@ jobs:
|
||||
run: |
|
||||
# 累了, 毁灭吧!
|
||||
|
||||
# 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}"
|
||||
}
|
||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||
|
||||
REPO="${{ github.server_url }}/${{ github.repository }}"
|
||||
MODEL="${{ env.model }}"
|
||||
VERSION="${{ env.version }}"
|
||||
PRERELEASE="true"
|
||||
|
||||
TAG=""
|
||||
@ -214,63 +167,39 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
unzip rr-${TAG}.img.zip -d "rr"
|
||||
unzip rr-${TAG}.img.zip -d rr rr.img
|
||||
|
||||
export TERM=xterm
|
||||
echo "TAG=${TAG}" >> $GITHUB_ENV
|
||||
|
||||
sudo ./localbuild.sh create rr/ws rr/rr.img
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "create failed"
|
||||
exit 1
|
||||
fi
|
||||
case "${{ env.size }}" in
|
||||
2GB)
|
||||
echo "2GB"
|
||||
;;
|
||||
4GB)
|
||||
echo "4GB"
|
||||
resizeImg rr/rr.img +2048M
|
||||
;;
|
||||
8GB)
|
||||
echo "8GB"
|
||||
resizeImg rr/rr.img +6144M
|
||||
;;
|
||||
*)
|
||||
echo "unknown size"
|
||||
;;
|
||||
esac
|
||||
|
||||
# sudo cp -rf files/initrd/opt/rr/* rr/ws/initrd/opt/rr/
|
||||
# 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
|
||||
LOOPX=$(sudo losetup -f)
|
||||
sudo losetup -P "${LOOPX}" rr/rr.img
|
||||
|
||||
[ -n "${{ env.language }}" ] && echo "${{ env.language }}.UTF-8" | sudo tee rr/ws/mnt/p1/.locale
|
||||
|
||||
sudo ./localbuild.sh init
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "init failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
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}"
|
||||
echo "Building..."
|
||||
{
|
||||
[ -n "${{ env.language }}" ] && echo "echo \"${{ env.language }}.UTF-8\" >/mnt/p1/.locale"
|
||||
[ -n "${{ env.tips }}" ] && echo "echo -e \"${{ env.tips }}\" >/mnt/p3/AddTips"
|
||||
[ -n "${{ env.kernel }}" ] && echo "menu.sh writeConfigKey \"kernel\" \"${{ env.kernel }}\" \"\${USER_CONFIG_FILE}\""
|
||||
echo "menu.sh modelMenu \"${{ env.model }}\""
|
||||
echo "menu.sh productversMenu \"${{ env.version }}\""
|
||||
[ -n "${{ env.addons }}" ] && {
|
||||
echo "menu.sh writeConfigKey \"addons\" \"{}\" \"\${USER_CONFIG_FILE}\""
|
||||
IFS=',' read -ra ADDON_ARR <<< "${{ env.addons }}"
|
||||
for A in "${ADDON_ARR[@]}"; do
|
||||
if echo "${A}" | grep -qE '^[^:]+:[^:]+$'; then
|
||||
@ -280,74 +209,41 @@ jobs:
|
||||
KEY="${A}"
|
||||
VAL=""
|
||||
fi
|
||||
writeConfigKey "addons.\"${KEY}\"" "${VAL}" "${USER_CONFIG_FILE}"
|
||||
echo "menu.sh writeConfigKey \"addons.\\\"${KEY}\\\"\" \"${VAL}\" \"\${USER_CONFIG_FILE}\""
|
||||
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
|
||||
|
||||
if [ ! "custom" = "${{ env.kernel }}" ] && [ -n "${{ env.modules }}" ]; then
|
||||
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
|
||||
docker pull wjz304/rr:${TAG}
|
||||
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
|
||||
|
||||
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
|
||||
sudo losetup --detach "${LOOPX}"
|
||||
|
||||
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 " VERSION: $(cat "${RR_VERSION_FILE}" 2>/dev/null | head -1)"
|
||||
echo " VERSION: ${TAG}"
|
||||
echo " CUSTOM: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||
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 "Of course, you can also modify the settings yourself."
|
||||
} >README.txt
|
||||
@ -355,52 +251,47 @@ jobs:
|
||||
case "${{ env.format }}" in
|
||||
ova)
|
||||
echo "OVA"
|
||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||
convertova "rr/rr.img" "rr/rr.ova"
|
||||
(cd rr && sha256sum rr.ova >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.ova.zip" -j rr/rr.ova ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.ova.zip" -j rr/rr.ova sha256sum README.txt
|
||||
;;
|
||||
vmx)
|
||||
echo "VMX"
|
||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||
convertvmx "rr/rr.img" "rr.vmx" # rr.vmx is a directory
|
||||
(cd rr.vmx && sha256sum * >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vmx.zip" -r rr.vmx ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vmx.zip" -r rr.vmx sha256sum README.txt
|
||||
;;
|
||||
vmdk)
|
||||
echo "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)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk sha256sum README.txt
|
||||
;;
|
||||
flat)
|
||||
echo "FLAT"
|
||||
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicFlat,compat6' rr/rr.vmdk
|
||||
(cd rr && sha256sum rr*.vmdk >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.flat.zip" -j rr/rr*.vmdk ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.flat.zip" -j rr/rr*.vmdk sha256sum README.txt
|
||||
;;
|
||||
vhd)
|
||||
echo "VHD"
|
||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||
qemu-img convert rr/rr.img -O vpc rr/rr.vhd
|
||||
createvmc "rr/rr.vhd" "rr/rr.vmc"
|
||||
(cd rr && sha256sum rr.vhd >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vhd.zip" -j rr/rr.vmc rr/rr.vhd ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vhd.zip" -j rr/rr.vmc rr/rr.vhd sha256sum README.txt
|
||||
;;
|
||||
vhdx)
|
||||
echo "VHDX"
|
||||
qemu-img convert rr/rr.img -O vhdx -o subformat=dynamic rr/rr.vhdx
|
||||
(cd rr && sha256sum rr.vhdx >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vhdx.zip" -j rr/rr.vhdx ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.vhdx.zip" -j rr/rr.vhdx sha256sum README.txt
|
||||
;;
|
||||
*)
|
||||
echo "IMG"
|
||||
(cd rr && sha256sum rr.img >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${{ env.model }}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img sha256sum README.txt
|
||||
esac
|
||||
|
||||
echo "TAG=${TAG}" >> $GITHUB_ENV
|
||||
|
||||
- name: Upload to Artifacts
|
||||
if: env.iscustom == 'true' && success()
|
||||
uses: actions/upload-artifact@v4
|
||||
|
13
README.md
13
README.md
@ -32,6 +32,19 @@ 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)
|
||||
- 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:
|
||||
|
||||
|
@ -359,6 +359,26 @@
|
||||
"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": {
|
||||
"system": false,
|
||||
"description": {
|
||||
@ -759,6 +779,26 @@
|
||||
"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": {
|
||||
"system": false,
|
||||
"description": {
|
||||
|
BIN
docs/addons.xlsx
BIN
docs/addons.xlsx
Binary file not shown.
BIN
docs/models.xlsx
BIN
docs/models.xlsx
Binary file not shown.
@ -812,6 +812,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -2066,6 +2070,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -3080,6 +3088,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -4262,6 +4274,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -5260,6 +5276,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -6442,6 +6462,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -7440,6 +7464,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -8622,6 +8650,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -9632,6 +9664,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -10822,6 +10858,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -11832,6 +11872,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -13026,6 +13070,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -13624,6 +13672,10 @@
|
||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||
"depends": "tcpm,usb-common"
|
||||
},
|
||||
"fuse": {
|
||||
"description": "Filesystem in Userspace",
|
||||
"depends": ""
|
||||
},
|
||||
"gpio-beeper": {
|
||||
"description": "Generic GPIO beeper driver",
|
||||
"depends": ""
|
||||
@ -14532,6 +14584,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -14736,6 +14792,10 @@
|
||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||
},
|
||||
"virtiofs": {
|
||||
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||
"depends": "fuse,virtio_ring,virtio"
|
||||
},
|
||||
"vmw_pvscsi": {
|
||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
@ -15274,6 +15334,10 @@
|
||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||
"depends": "tcpm,usb-common"
|
||||
},
|
||||
"fuse": {
|
||||
"description": "Filesystem in Userspace",
|
||||
"depends": ""
|
||||
},
|
||||
"gasket": {
|
||||
"description": "Google Gasket driver framework",
|
||||
"depends": "dmabuf"
|
||||
@ -16186,6 +16250,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -16410,6 +16478,10 @@
|
||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||
},
|
||||
"virtiofs": {
|
||||
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||
"depends": "fuse,virtio_ring,virtio"
|
||||
},
|
||||
"vmw_pvscsi": {
|
||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
@ -17385,6 +17457,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -18627,6 +18703,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -19233,6 +19313,10 @@
|
||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||
"depends": "tcpm,usb-common"
|
||||
},
|
||||
"fuse": {
|
||||
"description": "Filesystem in Userspace",
|
||||
"depends": ""
|
||||
},
|
||||
"gpio-beeper": {
|
||||
"description": "Generic GPIO beeper driver",
|
||||
"depends": ""
|
||||
@ -20057,6 +20141,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -20277,6 +20365,10 @@
|
||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||
},
|
||||
"virtiofs": {
|
||||
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||
"depends": "fuse,virtio_ring,virtio"
|
||||
},
|
||||
"vmw_pvscsi": {
|
||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
@ -21227,6 +21319,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -22425,6 +22521,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -23459,6 +23559,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -24677,6 +24781,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -25263,6 +25371,10 @@
|
||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||
"depends": "tcpm"
|
||||
},
|
||||
"fuse": {
|
||||
"description": "Filesystem in Userspace",
|
||||
"depends": ""
|
||||
},
|
||||
"gpio-beeper": {
|
||||
"description": "Generic GPIO beeper driver",
|
||||
"depends": ""
|
||||
@ -26151,6 +26263,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_sas": {
|
||||
"description": "SAS Transport Attributes",
|
||||
"depends": ""
|
||||
@ -26371,6 +26487,10 @@
|
||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||
},
|
||||
"virtiofs": {
|
||||
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||
"depends": "fuse,virtio_ring,virtio"
|
||||
},
|
||||
"vmw_pvscsi": {
|
||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
@ -27349,6 +27469,10 @@
|
||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -28579,6 +28703,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -29173,6 +29301,10 @@
|
||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||
"depends": "tcpm"
|
||||
},
|
||||
"fuse": {
|
||||
"description": "Filesystem in Userspace",
|
||||
"depends": ""
|
||||
},
|
||||
"gpio-beeper": {
|
||||
"description": "Generic GPIO beeper driver",
|
||||
"depends": ""
|
||||
@ -30065,6 +30197,10 @@
|
||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_debug": {
|
||||
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
},
|
||||
"scsi_transport_fc": {
|
||||
"description": "FC Transport Attributes",
|
||||
"depends": ""
|
||||
@ -30289,6 +30425,10 @@
|
||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||
},
|
||||
"virtiofs": {
|
||||
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||
"depends": "fuse,virtio_ring,virtio"
|
||||
},
|
||||
"vmw_pvscsi": {
|
||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||
"depends": ""
|
||||
|
Binary file not shown.
681
docs/pats.json
681
docs/pats.json
@ -251,394 +251,25 @@
|
||||
"sum": "00000000000000000000000000000000"
|
||||
}
|
||||
},
|
||||
"DS220+": {
|
||||
"7.2.2-72806-0": {
|
||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS220%2B_72806.pat",
|
||||
"sum": "00000000000000000000000000000000"
|
||||
},
|
||||
"7.0.1-42218-0": {
|
||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS220%2B_42218.pat",
|
||||
"sum": "00000000000000000000000000000000"
|
||||
},
|
||||
"7.2.1-69057-1": {
|
||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS220%2B_69057.pat",
|
||||
"sum": "00000000000000000000000000000000"
|
||||
},
|
||||
"7.2.0-64570-1": {
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"DS220+": {},
|
||||
"DS224+": {},
|
||||
"DS2419+": {},
|
||||
"DS2419+II": {},
|
||||
"DS2422+": {},
|
||||
"DS3622xs+": {},
|
||||
"DS420+": {},
|
||||
"DS423+": {},
|
||||
"DS620slim": {},
|
||||
"DS720+": {},
|
||||
"DS723+": {},
|
||||
"DS920+": {},
|
||||
"DS923+": {},
|
||||
"DVA1622": {},
|
||||
"DVA3219": {},
|
||||
"DVA3221": {},
|
||||
"FS2500": {},
|
||||
"FS3400": {
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"FS3400": {},
|
||||
"FS3410": {},
|
||||
"FS3600": {
|
||||
"7.2.2-72806-0": {
|
||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_FS3600_72806.pat",
|
||||
@ -1021,14 +652,6 @@
|
||||
"7.2.0-64570-1": {
|
||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS820%2B_64570.pat",
|
||||
"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+": {
|
||||
@ -1109,78 +732,11 @@
|
||||
"7.2.0-64570-1": {
|
||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3200D_64570.pat",
|
||||
"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": {
|
||||
"7.2.2-72806-0": {
|
||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3600_72806.pat",
|
||||
@ -1493,196 +1049,13 @@
|
||||
"7.2.0-64570-1": {
|
||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_FS2017_64570.pat",
|
||||
"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+": {
|
||||
"7.2.2-72806-0": {
|
||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_RS18017xs%2B_72806.pat",
|
||||
"sum": "00000000000000000000000000000000"
|
||||
},
|
||||
"7.0.1-42218-0": {
|
||||
"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"
|
||||
}
|
||||
}
|
||||
"RS18017xs+": {},
|
||||
"RS2418+": {},
|
||||
"RS2418RP+": {},
|
||||
"RS2818RP+": {},
|
||||
"RS3617RPxs": {},
|
||||
"RS3617xs+": {},
|
||||
"RS4017xs+": {}
|
||||
}
|
BIN
docs/pats.xlsx
BIN
docs/pats.xlsx
Binary file not shown.
@ -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
|
||||
HASATA=0
|
||||
for D in $(lsblk -dpno NAME); do
|
||||
for D in $(lsblk -dpno KNAME); do
|
||||
[ "${D}" = "${LOADER_DISK}" ] && continue
|
||||
if echo "sata sas scsi" | grep -wq "$(getBus "${D}")"; then
|
||||
HASATA=1
|
||||
@ -363,7 +363,7 @@ if [ "${DIRECT}" = "true" ] || [ "${MEV:-physical}" = "parallels" ]; then
|
||||
_bootwait || exit 0
|
||||
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Reboot to boot directly in DSM")"
|
||||
reboot
|
||||
[ ! -f "/.dockerenv" ] && reboot
|
||||
exit 0
|
||||
else
|
||||
rm -f "${USER_RSYSENVFILE}" 2>/dev/null || true
|
||||
@ -390,14 +390,14 @@ else
|
||||
printf "."
|
||||
sleep 1
|
||||
done
|
||||
|
||||
if [ ! -f "/.dockerenv" ]; then
|
||||
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
|
||||
|
||||
fi
|
||||
printf "$(TEXT "Waiting IP.\n")"
|
||||
for N in ${ETHX}; do
|
||||
COUNT=0
|
||||
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="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
|
||||
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
|
||||
while true; do
|
||||
if false && [ ! "${N::3}" = "eth" ]; then
|
||||
@ -464,6 +464,7 @@ else
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ! -f "/.dockerenv" ]; then
|
||||
# Disconnect wireless
|
||||
lsmod | grep -q iwlwifi && for F in /sys/class/net/wlan*; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
@ -481,5 +482,6 @@ else
|
||||
# Reboot
|
||||
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
|
||||
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
0
files/initrd/opt/rr/extract-vmlinux
Normal file → Executable file
0
files/initrd/opt/rr/extract-vmlinux
Normal file → Executable file
Binary file not shown.
34
files/initrd/opt/rr/helper.sh
Executable file
34
files/initrd/opt/rr/helper.sh
Executable file
@ -0,0 +1,34 @@
|
||||
#!/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"
|
@ -8,7 +8,7 @@
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
|
||||
RR_VERSION="25.9.0"
|
||||
RR_VERSION="25.9.5"
|
||||
RR_RELEASE=""
|
||||
RR_TITLE="RR v${RR_VERSION}"
|
||||
|
||||
|
@ -246,6 +246,7 @@ function _sort_netif() {
|
||||
ETHLIST=""
|
||||
for F in /sys/class/net/eth*; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
local ETH MAC BUS
|
||||
ETH="$(basename "${F}")"
|
||||
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)"
|
||||
@ -288,10 +289,11 @@ function _sort_netif() {
|
||||
# 1 - device path
|
||||
function getBus() {
|
||||
local BUS=""
|
||||
[ -f "/.dockerenv" ] && BUS="docker"
|
||||
# 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
|
||||
# usb/scsi(ide/sata/sas)/virtio/mmc/nvme/vmbus/xen(xvd)
|
||||
[ -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=$(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="unknown"
|
||||
echo "${BUS}"
|
||||
return 0
|
||||
|
@ -10,18 +10,20 @@
|
||||
# Unpack modules from a tgz file
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
# 3 - dummy path
|
||||
function unpackModules() {
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
local UNPATH=${3:-"${TMP_PATH}/modules"}
|
||||
local KERNEL
|
||||
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
rm -rf "${UNPATH}"
|
||||
mkdir -p "${UNPATH}"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
tar -zxf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -29,16 +31,18 @@ function unpackModules() {
|
||||
# Packag modules to a tgz file
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
# 3 - dummy path
|
||||
function packagModules() {
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
local UNPATH=${3:-"${TMP_PATH}/modules"}
|
||||
local KERNEL
|
||||
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
|
||||
else
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
|
||||
fi
|
||||
}
|
||||
|
||||
@ -54,9 +58,10 @@ function getAllModules() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
for F in ${TMP_PATH}/modules/*.ko; do
|
||||
for F in ${UNPATH}/*.ko; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
local N DESC
|
||||
N="$(basename "${F}" .ko)"
|
||||
@ -65,7 +70,35 @@ function getAllModules() {
|
||||
echo "${N} \"${DESC:-${N}}\""
|
||||
done
|
||||
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
rm -rf "${UNPATH}"
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -85,10 +118,11 @@ function installModules() {
|
||||
shift 2
|
||||
MLIST="${*}"
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
|
||||
for F in ${TMP_PATH}/modules/*.ko; do
|
||||
for F in ${UNPATH}/*.ko; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
M=$(basename "${F}")
|
||||
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
|
||||
@ -98,6 +132,7 @@ function installModules() {
|
||||
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
|
||||
fi
|
||||
done
|
||||
rm -rf "${UNPATH}"
|
||||
|
||||
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"
|
||||
KERNEL=$(readConfigKey "kernel" "${USER_CONFIG_FILE}")
|
||||
@ -109,8 +144,6 @@ function installModules() {
|
||||
if [ $? -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
return 0
|
||||
}
|
||||
|
||||
@ -129,11 +162,12 @@ function addToModules() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
cp -f "${KOFILE}" "${TMP_PATH}/modules"
|
||||
cp -f "${KOFILE}" "${UNPATH}"
|
||||
|
||||
packagModules "${PLATFORM}" "${PKVER}"
|
||||
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -151,11 +185,12 @@ function delToModules() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
rm -f "${TMP_PATH}/modules/${KONAME}"
|
||||
rm -f "${UNPATH}/${KONAME}"
|
||||
|
||||
packagModules "${PLATFORM}" "${PKVER}"
|
||||
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -165,9 +200,9 @@ function delToModules() {
|
||||
# 3 - ko name
|
||||
function getdepends() {
|
||||
function _getdepends() {
|
||||
if [ -f "${TMP_PATH}/modules/${1}.ko" ]; then
|
||||
if [ -f "${UNPATH}/${1}.ko" ]; then
|
||||
local depends
|
||||
depends="$(modinfo -F depends "${TMP_PATH}/modules/${1}.ko" 2>/dev/null | sed 's/,/\n/g')"
|
||||
depends="$(modinfo -F depends "${UNPATH}/${1}.ko" 2>/dev/null | sed 's/,/\n/g')"
|
||||
if [ "$(echo "${depends}" | wc -w)" -gt 0 ]; then
|
||||
for k in ${depends}; do
|
||||
echo "${k}"
|
||||
@ -186,9 +221,10 @@ function getdepends() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
_getdepends "${KONAME}" | sort -u
|
||||
echo "${KONAME}"
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
rm -rf "${UNPATH}"
|
||||
}
|
||||
|
@ -86,6 +86,7 @@ if [ -z "$(readConfigMap "addons" "${USER_CONFIG_FILE}")" ]; then
|
||||
initConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.trivial" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.vmtools" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.monitor" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.mountloader" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.powersched" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}"
|
||||
@ -93,7 +94,7 @@ fi
|
||||
initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "modblacklist" "evbug,cdc_ether" "${USER_CONFIG_FILE}"
|
||||
|
||||
if [ ! "LOCALBUILD" = "${LOADER_DISK}" ]; then
|
||||
if [ ! -f "/.dockerenv" ]; then
|
||||
if arrayExistItem "sortnetif:" "$(readConfigMap "addons" "${USER_CONFIG_FILE}")"; then
|
||||
_sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
|
||||
fi
|
||||
@ -128,19 +129,16 @@ PID="0x0001"
|
||||
TYPE="DoM"
|
||||
BUS=$(getBus "${LOADER_DISK}")
|
||||
|
||||
BUSLIST="usb sata sas scsi nvme mmc ide virtio vmbus xen"
|
||||
BUSLIST="usb sata sas scsi nvme mmc ide virtio vmbus xen docker"
|
||||
if [ "${BUS}" = "usb" ]; then
|
||||
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)"
|
||||
[ "${VID}" = "0x" ] || [ "${PID}" = "0x" ] && die "$(TEXT "The loader disk does not support the current USB Portable Hard Disk.")"
|
||||
TYPE="flashdisk"
|
||||
elif ! echo "${BUSLIST}" | grep -wq "${BUS}"; then
|
||||
if [ "LOCALBUILD" = "${LOADER_DISK}" ]; then
|
||||
echo "LOCALBUILD MODE"
|
||||
elif [ "${BUS}" = "docker" ]; then
|
||||
TYPE="PC"
|
||||
else
|
||||
elif ! echo "${BUSLIST}" | grep -wq "${BUS}"; then
|
||||
die "$(printf "$(TEXT "The loader disk does not support the current %s, only %s DoM is supported.")" "${BUS}" "${BUSLIST// /\/}")"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Save variables to user config file
|
||||
@ -168,6 +166,9 @@ if ! loaderIsConfigured; then
|
||||
elif grep -q "IWANTTOCHANGETHECONFIG" /proc/cmdline; then
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "User requested edit settings.")"
|
||||
BOOT=0
|
||||
elif [ -f "/.dockerenv" ]; then
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Docker edit settings.")"
|
||||
BOOT=0
|
||||
fi
|
||||
|
||||
# If is to boot automatically, do it
|
||||
@ -199,13 +200,15 @@ while [ ${COUNT} -lt 30 ]; do
|
||||
sleep 1
|
||||
done
|
||||
|
||||
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
|
||||
if [ ! -f "/.dockerenv" ]; then
|
||||
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
printf "$(TEXT "Waiting IP.\n")"
|
||||
for N in ${ETHX}; do
|
||||
COUNT=0
|
||||
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="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
|
||||
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
|
||||
while true; do
|
||||
if [ -z "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
||||
@ -254,7 +257,7 @@ fi
|
||||
printf "\n"
|
||||
|
||||
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
|
||||
if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ] && [ ! "LOCALBUILD" = "${LOADER_DISK}" ]; then
|
||||
if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ] && [ ! -f "/.dockerenv" ]; then
|
||||
IP="$(getIP)"
|
||||
echo "${IP}" | grep -q "^169\.254\." && IP=""
|
||||
[ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}"
|
||||
@ -265,7 +268,7 @@ if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ] && [ ! "LOCALBUILD" = "${LOADE
|
||||
[ -f "${TMP_PATH}/qrcode_qhxg.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_qhxg.png" >/dev/null 2>&1 || true
|
||||
fi
|
||||
WEBHOOKURL="$(readConfigKey "webhookurl" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${WEBHOOKURL}" ] && [ ! -f "${TMP_PATH}/WebhookSent" ]; then
|
||||
if [ -n "${WEBHOOKURL}" ] && [ ! -f "${TMP_PATH}/WebhookSent" ] && [ ! -f "/.dockerenv" ]; then
|
||||
DMI="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
|
||||
IP="$(getIP)"
|
||||
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
@ -19,6 +19,8 @@ N acpi_call.ko
|
||||
N check_signature.ko
|
||||
N rfkill.ko
|
||||
N rfkill-gpio.ko
|
||||
N scsi_debug.ko
|
||||
N drivetemp.ko
|
||||
|
||||
# sensors
|
||||
N coretemp.ko
|
||||
|
@ -229,7 +229,7 @@ done
|
||||
|
||||
# Network card configuration file
|
||||
for N in $(seq 0 7); do
|
||||
echo -e "DEVICE=eth${N}\nBOOTPROTO=dhcp\nONBOOT=yes\nIPV6INIT=dhcp\nIPV6_ACCEPT_RA=1" >"${RAMDISK_PATH}/etc/sysconfig/network-scripts/ifcfg-eth${N}"
|
||||
echo -e "DEVICE=eth${N}\nBOOTPROTO=dhcp\nONBOOT=yes\nIPV6INIT=auto_dhcp\nIPV6_ACCEPT_RA=1" >"${RAMDISK_PATH}/etc/sysconfig/network-scripts/ifcfg-eth${N}"
|
||||
done
|
||||
|
||||
# issues/313
|
||||
|
@ -1 +1 @@
|
||||
25.9.0
|
||||
25.9.5
|
||||
|
@ -49,8 +49,6 @@ else
|
||||
font=${prefix}/fonts/unicode.pf2
|
||||
fi
|
||||
|
||||
terminal_output console
|
||||
|
||||
if loadfont ${font}; then
|
||||
set gfxmode=auto
|
||||
load_video
|
||||
@ -58,9 +56,10 @@ if loadfont ${font}; then
|
||||
set locale_dir=$prefix/locale
|
||||
set lang=en_US
|
||||
insmod gettext
|
||||
terminal_output --append gfxterm
|
||||
fi
|
||||
|
||||
terminal_output gfxterm
|
||||
|
||||
if serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1; then
|
||||
terminal_input --append serial
|
||||
terminal_output --append serial
|
||||
|
21
guide.md
21
guide.md
@ -340,7 +340,7 @@
|
||||
# API
|
||||
# 获取系统信息
|
||||
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
|
||||
# 关机
|
||||
@ -353,6 +353,25 @@
|
||||
# 开启 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.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
|
||||
certutil -hashfile xxx.pat MD5 # windows
|
||||
md5sum xxx.pat # linux/mac
|
||||
|
251
localbuild.sh
251
localbuild.sh
@ -1,251 +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.
|
||||
#
|
||||
|
||||
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}"
|
||||
}
|
||||
|
||||
"$@"
|
@ -242,6 +242,34 @@ function getModules() {
|
||||
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
|
||||
# $1 initrd file
|
||||
# $2 plugin path
|
||||
|
233
scripts/pve.sh
Executable file
233
scripts/pve.sh
Executable file
@ -0,0 +1,233 @@
|
||||
#!/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
117
sourcebuild.sh
@ -1,117 +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.
|
||||
#
|
||||
# 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
|
Loading…
x
Reference in New Issue
Block a user