mirror of
https://github.com/RROrg/rr.git
synced 2025-09-25 21:28:35 +08:00
Compare commits
28 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 |
31
.github/workflows/data.yml
vendored
31
.github/workflows/data.yml
vendored
@ -38,7 +38,7 @@ jobs:
|
|||||||
echo "Delaying for 1 minutes..."
|
echo "Delaying for 1 minutes..."
|
||||||
sleep 60
|
sleep 60
|
||||||
|
|
||||||
- name: Get Release RR
|
- name: Get Data
|
||||||
run: |
|
run: |
|
||||||
REPO="${{ github.server_url }}/${{ github.repository }}"
|
REPO="${{ github.server_url }}/${{ github.repository }}"
|
||||||
PRERELEASE="true"
|
PRERELEASE="true"
|
||||||
@ -57,18 +57,17 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
LOOPX=$(sudo losetup -f)
|
||||||
if [ $? -ne 0 ]; then
|
sudo losetup -P "${LOOPX}" "rr/rr.img"
|
||||||
echo "create failed"
|
rm -rf "/tmp/mnt/p3"
|
||||||
exit 1
|
mkdir -p "/tmp/mnt/p3"
|
||||||
fi
|
mount "${LOOPX}p3" "/tmp/mnt/p3"
|
||||||
|
unpackInitrd /tmp/mnt/p3/initrd-rr "rr/initrd"
|
||||||
|
|
||||||
- name: Get data
|
|
||||||
run: |
|
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
|
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
|
||||||
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
|
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
|
||||||
@ -78,10 +77,14 @@ jobs:
|
|||||||
sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true
|
sudo mv -f "$(realpath $(which python3))/EXTERNALLY-MANAGED" "$(realpath $(which python3))/EXTERNALLY-MANAGED.bak" 2>/dev/null || true
|
||||||
sudo pip3 install -U -r scripts/requirements.txt
|
sudo pip3 install -U -r scripts/requirements.txt
|
||||||
|
|
||||||
python3 scripts/func.py getmodels -w "rr/ws/initrd" -j "docs/models.json" -x "docs/models.xlsx"
|
python3 scripts/func.py getmodels -w "rr/initrd" -j "docs/models.json" -x "docs/models.xlsx"
|
||||||
python3 scripts/func.py getpats -w "rr/ws/initrd" -j "docs/pats.json" -x "docs/pats.xlsx"
|
python3 scripts/func.py getpats -w "rr/initrd" -j "docs/pats.json" -x "docs/pats.xlsx"
|
||||||
python3 scripts/func.py getaddons -w "rr/ws" -j "docs/addons.json" -x "docs/addons.xlsx"
|
python3 scripts/func.py getaddons -w "/tmp" -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 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
|
- name: Upload to Artifacts
|
||||||
if: success()
|
if: success()
|
||||||
|
305
.github/workflows/issues.yml
vendored
305
.github/workflows/issues.yml
vendored
@ -27,68 +27,51 @@ jobs:
|
|||||||
shell: python
|
shell: python
|
||||||
run: |
|
run: |
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import json, subprocess
|
import json
|
||||||
def set_output(name, value):
|
import os
|
||||||
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)
|
|
||||||
|
|
||||||
issuetitle = ${{ toJSON(github.event.issue.title) }}
|
def set_env(name, value):
|
||||||
issuebody = ${{ toJSON(github.event.issue.body) }}
|
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'
|
iscustom = 'false'
|
||||||
warinfo = 'false'
|
warinfo = 'false'
|
||||||
|
|
||||||
format = ''
|
fields = {
|
||||||
size = ''
|
"format": "",
|
||||||
template = ''
|
"size": "",
|
||||||
language= ''
|
"template": "",
|
||||||
sn = ''
|
"language": "",
|
||||||
macs = ''
|
"sn": "",
|
||||||
tips = ''
|
"macs": "",
|
||||||
model = ''
|
"tips": "",
|
||||||
version = ''
|
"model": "",
|
||||||
kernel = ''
|
"version": "",
|
||||||
addons = ''
|
"kernel": "",
|
||||||
modules = ''
|
"addons": "",
|
||||||
|
"modules": ""
|
||||||
|
}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if issuetitle.lower().startswith('custom'):
|
if issuetitle.strip().lower().startswith('custom'):
|
||||||
jsonbody = json.loads(issuebody)
|
jsonbody = json.loads(issuebody)
|
||||||
iscustom = 'true'
|
iscustom = 'true'
|
||||||
format = jsonbody.get('format', '')
|
for k in fields:
|
||||||
size = jsonbody.get('size', '')
|
fields[k] = jsonbody.get(k, "")
|
||||||
template = jsonbody.get('template', '')
|
except Exception:
|
||||||
language = jsonbody.get('language', '')
|
pass
|
||||||
sn = jsonbody.get('sn', '')
|
|
||||||
macs = jsonbody.get('macs', '')
|
|
||||||
tips = jsonbody.get('tips', '')
|
|
||||||
model = jsonbody.get('model', '')
|
|
||||||
version = jsonbody.get('version', '')
|
|
||||||
kernel = jsonbody.get('kernel', '')
|
|
||||||
addons = jsonbody.get('addons', '')
|
|
||||||
modules = jsonbody.get('modules', '')
|
|
||||||
except ValueError as e:
|
|
||||||
pass
|
|
||||||
|
|
||||||
if iscustom == 'false':
|
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'
|
warinfo = 'true'
|
||||||
|
|
||||||
set_output("iscustom", iscustom)
|
set_env("iscustom", iscustom)
|
||||||
set_output("warinfo", warinfo)
|
set_env("warinfo", warinfo)
|
||||||
|
for k, v in fields.items():
|
||||||
set_output("format", format)
|
set_env(k, v)
|
||||||
set_output("size", size)
|
|
||||||
set_output("template", template)
|
|
||||||
set_output("language", language)
|
|
||||||
set_output("sn", sn)
|
|
||||||
set_output("macs", macs)
|
|
||||||
set_output("tips", tips)
|
|
||||||
set_output("model", model)
|
|
||||||
set_output("version", version)
|
|
||||||
set_output("kernel", kernel)
|
|
||||||
set_output("addons", addons)
|
|
||||||
set_output("modules", modules)
|
|
||||||
|
|
||||||
- name: Update Comment Warinfo
|
- name: Update Comment Warinfo
|
||||||
if: env.warinfo == 'true'
|
if: env.warinfo == 'true'
|
||||||
@ -165,39 +148,9 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
# 累了, 毁灭吧!
|
# 累了, 毁灭吧!
|
||||||
|
|
||||||
# yq need sudo !!!
|
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||||
function deleteConfigKey() {
|
|
||||||
sudo yq eval "del(.${1})" --inplace "${2}" 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function writeConfigKey() {
|
|
||||||
local value="${2}"
|
|
||||||
[ "${value}" = "{}" ] && sudo yq eval ".${1} = {}" --inplace "${3}" 2>/dev/null || sudo yq eval ".${1} = \"${value}\"" --inplace "${3}" 2>/dev/null
|
|
||||||
}
|
|
||||||
|
|
||||||
function readConfigKey() {
|
|
||||||
local result
|
|
||||||
result=$(sudo yq eval ".${1} | explode(.)" "${2}" 2>/dev/null)
|
|
||||||
[ "${result}" = "null" ] && echo "" || echo "${result}"
|
|
||||||
}
|
|
||||||
|
|
||||||
function mergeConfigModules() {
|
|
||||||
# Error: bad file '-': cannot index array with '8139cp' (strconv.ParseInt: parsing "8139cp": invalid syntax)
|
|
||||||
# When the first key is a pure number, yq will not process it as a string by default. The current solution is to insert a placeholder key.
|
|
||||||
local MS ML XF
|
|
||||||
MS="RRORG\n${1// /\\n}"
|
|
||||||
ML="$(echo -en "${MS}" | awk '{print "modules."$1":"}')"
|
|
||||||
XF=$(mktemp 2>/dev/null)
|
|
||||||
XF=${XF:-/tmp/tmp.XXXXXXXXXX}
|
|
||||||
echo -en "${ML}" | sudo yq -p p -o y >"${XF}"
|
|
||||||
deleteConfigKey "modules.\"RRORG\"" "${XF}"
|
|
||||||
sudo yq eval-all --inplace '. as $item ireduce ({}; . * $item)' --inplace "${2}" "${XF}" 2>/dev/null
|
|
||||||
rm -f "${XF}"
|
|
||||||
}
|
|
||||||
|
|
||||||
REPO="${{ github.server_url }}/${{ github.repository }}"
|
REPO="${{ github.server_url }}/${{ github.repository }}"
|
||||||
MODEL="${{ env.model }}"
|
|
||||||
VERSION="${{ env.version }}"
|
|
||||||
PRERELEASE="true"
|
PRERELEASE="true"
|
||||||
|
|
||||||
TAG=""
|
TAG=""
|
||||||
@ -214,105 +167,9 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
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
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
[ -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}"
|
|
||||||
IFS=',' read -ra ADDON_ARR <<< "${{ env.addons }}"
|
|
||||||
for A in "${ADDON_ARR[@]}"; do
|
|
||||||
if echo "${A}" | grep -qE '^[^:]+:[^:]+$'; then
|
|
||||||
KEY="$(echo "${A}" | cut -d':' -f1 | xargs)"
|
|
||||||
VAL="$(echo "${A}" | cut -d':' -f2 | xargs)"
|
|
||||||
else
|
|
||||||
KEY="${A}"
|
|
||||||
VAL=""
|
|
||||||
fi
|
|
||||||
writeConfigKey "addons.\"${KEY}\"" "${VAL}" "${USER_CONFIG_FILE}"
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
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
|
case "${{ env.size }}" in
|
||||||
2GB)
|
2GB)
|
||||||
@ -320,34 +177,73 @@ jobs:
|
|||||||
;;
|
;;
|
||||||
4GB)
|
4GB)
|
||||||
echo "4GB"
|
echo "4GB"
|
||||||
sudo ./localbuild.sh resize rr/rr.img +2048M
|
resizeImg rr/rr.img +2048M
|
||||||
;;
|
;;
|
||||||
8GB)
|
8GB)
|
||||||
echo "8GB"
|
echo "8GB"
|
||||||
sudo ./localbuild.sh resize rr/rr.img +6144M
|
resizeImg rr/rr.img +6144M
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "unknown size"
|
echo "unknown size"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
LOOPX=$(sudo losetup -f)
|
||||||
|
sudo losetup -P "${LOOPX}" rr/rr.img
|
||||||
|
|
||||||
|
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
|
||||||
|
KEY="$(echo "${A}" | cut -d':' -f1 | xargs)"
|
||||||
|
VAL="$(echo "${A}" | cut -d':' -f2 | xargs)"
|
||||||
|
else
|
||||||
|
KEY="${A}"
|
||||||
|
VAL=""
|
||||||
|
fi
|
||||||
|
echo "menu.sh writeConfigKey \"addons.\\\"${KEY}\\\"\" \"${VAL}\" \"\${USER_CONFIG_FILE}\""
|
||||||
|
done
|
||||||
|
}
|
||||||
|
[ ! "custom" = "${{ env.kernel }}" ] && [ -n "${{ env.modules }}" ] && {
|
||||||
|
echo "menu.sh writeConfigKey \"modules\" \"{}\" \"\${USER_CONFIG_FILE}\""
|
||||||
|
echo "menu.sh mergeConfigModules \"$(echo "${{ env.modules }}" | sed 's/,/\\n/g')\" \"\${USER_CONFIG_FILE}\""
|
||||||
|
}
|
||||||
|
echo "menu.sh make"
|
||||||
|
echo "menu.sh cleanCache"
|
||||||
|
[ -n "${{ env.sn }}" ] && echo "menu.sh writeConfigKey \"sn\" \"${{ env.sn }}\" \"\${USER_CONFIG_FILE}\""
|
||||||
|
[ -n "${{ env.macs }}" ] && {
|
||||||
|
MACS=($(echo "${{ env.macs }}" | sed 's/[:-]//g' | sed 's/.*/\U&/' | sed 's/[;,]/ /g'))
|
||||||
|
[ -n "${MACS[0]}" ] && echo "menu.sh writeConfigKey \"mac1\" \"${MACS[0]}\" \"\${USER_CONFIG_FILE}\""
|
||||||
|
[ -n "${MACS[1]}" ] && echo "menu.sh writeConfigKey \"mac2\" \"${MACS[1]}\" \"\${USER_CONFIG_FILE}\""
|
||||||
|
}
|
||||||
|
[ "true" = "${{ env.template }}" ] && {
|
||||||
|
echo "menu.sh writeConfigKey \"sn\" \"\" \"\${USER_CONFIG_FILE}\""
|
||||||
|
echo "menu.sh writeConfigKey \"mac1\" \"\" \"\${USER_CONFIG_FILE}\""
|
||||||
|
echo "menu.sh writeConfigKey \"mac2\" \"\" \"\${USER_CONFIG_FILE}\""
|
||||||
|
}
|
||||||
|
} > build.sh
|
||||||
|
chmod +x build.sh
|
||||||
|
|
||||||
|
docker pull wjz304/rr:${TAG}
|
||||||
|
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 losetup --detach "${LOOPX}"
|
||||||
|
|
||||||
ls rr -al
|
ls rr -al
|
||||||
|
|
||||||
RR_VERSION_FILE="rr/ws/mnt/p1/RR_VERSION"
|
|
||||||
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
|
|
||||||
{
|
{
|
||||||
echo "RR: "
|
echo "RR: "
|
||||||
echo " VERSION: $(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 " CUSTOM: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
echo
|
echo
|
||||||
echo "DSM:"
|
|
||||||
echo " MODEL: $(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
|
||||||
echo " VERSION: $(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
|
||||||
echo " KERNEL: $(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
|
||||||
echo " PATURL: $(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
|
|
||||||
echo " PATSUM: $(readConfigKey "patsum" "${USER_CONFIG_FILE}")"
|
|
||||||
echo
|
|
||||||
echo
|
|
||||||
echo "After the image is written to the disk, it will boot directly into DSM without the need to compile again."
|
echo "After the image is written to the disk, it will boot directly into DSM without the need to compile again."
|
||||||
echo "Of course, you can also modify the settings yourself."
|
echo "Of course, you can also modify the settings yourself."
|
||||||
} >README.txt
|
} >README.txt
|
||||||
@ -355,52 +251,47 @@ jobs:
|
|||||||
case "${{ env.format }}" in
|
case "${{ env.format }}" in
|
||||||
ova)
|
ova)
|
||||||
echo "OVA"
|
echo "OVA"
|
||||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
|
||||||
convertova "rr/rr.img" "rr/rr.ova"
|
convertova "rr/rr.img" "rr/rr.ova"
|
||||||
(cd rr && sha256sum rr.ova >../sha256sum)
|
(cd rr && sha256sum rr.ova >../sha256sum)
|
||||||
zip -9 "rr-${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)
|
vmx)
|
||||||
echo "VMX"
|
echo "VMX"
|
||||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
|
||||||
convertvmx "rr/rr.img" "rr.vmx" # rr.vmx is a directory
|
convertvmx "rr/rr.img" "rr.vmx" # rr.vmx is a directory
|
||||||
(cd rr.vmx && sha256sum * >../sha256sum)
|
(cd rr.vmx && sha256sum * >../sha256sum)
|
||||||
zip -9 "rr-${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)
|
vmdk)
|
||||||
echo "VMDK"
|
echo "VMDK"
|
||||||
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' rr/rr.vmdk
|
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' rr/rr.vmdk
|
||||||
(cd rr && sha256sum rr.vmdk >../sha256sum)
|
(cd rr && sha256sum rr.vmdk >../sha256sum)
|
||||||
zip -9 "rr-${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)
|
flat)
|
||||||
echo "FLAT"
|
echo "FLAT"
|
||||||
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicFlat,compat6' rr/rr.vmdk
|
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicFlat,compat6' rr/rr.vmdk
|
||||||
(cd rr && sha256sum rr*.vmdk >../sha256sum)
|
(cd rr && sha256sum rr*.vmdk >../sha256sum)
|
||||||
zip -9 "rr-${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)
|
vhd)
|
||||||
echo "VHD"
|
echo "VHD"
|
||||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
|
||||||
qemu-img convert rr/rr.img -O vpc rr/rr.vhd
|
qemu-img convert rr/rr.img -O vpc rr/rr.vhd
|
||||||
createvmc "rr/rr.vhd" "rr/rr.vmc"
|
createvmc "rr/rr.vhd" "rr/rr.vmc"
|
||||||
(cd rr && sha256sum rr.vhd >../sha256sum)
|
(cd rr && sha256sum rr.vhd >../sha256sum)
|
||||||
zip -9 "rr-${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)
|
vhdx)
|
||||||
echo "VHDX"
|
echo "VHDX"
|
||||||
qemu-img convert rr/rr.img -O vhdx -o subformat=dynamic rr/rr.vhdx
|
qemu-img convert rr/rr.img -O vhdx -o subformat=dynamic rr/rr.vhdx
|
||||||
(cd rr && sha256sum rr.vhdx >../sha256sum)
|
(cd rr && sha256sum rr.vhdx >../sha256sum)
|
||||||
zip -9 "rr-${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"
|
echo "IMG"
|
||||||
(cd rr && sha256sum rr.img >../sha256sum)
|
(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
|
esac
|
||||||
|
|
||||||
echo "TAG=${TAG}" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Upload to Artifacts
|
- name: Upload to Artifacts
|
||||||
if: env.iscustom == 'true' && success()
|
if: env.iscustom == 'true' && success()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
|
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)
|
- Addons: [addons](https://github.com/RROrg/rr/raw/main/docs/addons.xlsx)
|
||||||
- Modules: [modules](https://github.com/RROrg/rr/raw/main/docs/modules.xlsx)
|
- Modules: [modules](https://github.com/RROrg/rr/raw/main/docs/modules.xlsx)
|
||||||
|
|
||||||
|
- Proxmox VE One Click Install:
|
||||||
|
```
|
||||||
|
curl -fsSL https://github.com/RROrg/rr/raw/refs/heads/main/scripts/pve.sh | bash -s -- --bltype usb
|
||||||
|
|
||||||
|
# Optional Parameters:
|
||||||
|
--onboot <0|1> Enable VM on boot, default 1 (enable)
|
||||||
|
--efi <0|1> Enable UEFI boot, default 1 (enable)
|
||||||
|
--bltype <sata|usb|nvme> Bootloader disk type, default sata
|
||||||
|
--9ppath <path> Set to /path/to/9p to mount 9p share
|
||||||
|
--tag <tag> Image tag, download latest release if not set
|
||||||
|
--img <path> Local image path, use local image if set
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
### 4: GPU:
|
### 4: GPU:
|
||||||
|
|
||||||
|
@ -359,6 +359,26 @@
|
|||||||
"zh_TW": "雜項功能. (一些必要的修改的集合.)"
|
"zh_TW": "雜項功能. (一些必要的修改的集合.)"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"monitor": {
|
||||||
|
"system": false,
|
||||||
|
"description": {
|
||||||
|
"en_US": "Monitor Power Management (Only supports graphics card drivers).",
|
||||||
|
"ar_SA": "إدارة الطاقة للمراقبة(يدعم فقط برامج تشغيل بطاقة الرسومات).",
|
||||||
|
"de_DE": "Überwachung der Energieverwaltung (nur unterstützt Graphikkartendrivers).",
|
||||||
|
"es_ES": "Monitoreo de la gestión de energía (solo admite controladores de tarjeta gráfica).",
|
||||||
|
"fr_FR": "Surveillance de la gestion de l'alimentation (seulement les pilotes de carte graphique sont pris en charge).",
|
||||||
|
"ja_JP": "電源管理の監視 (グラフィックスカードドライバーのみサポート)。",
|
||||||
|
"ko_KR": "모니터 전원 관리 (그래픽 카드 드라이버만 지원)。",
|
||||||
|
"ru_RU": "Мониторинг управления питанием (только поддерживает драйверы графических карт).",
|
||||||
|
"th_TH": "การตรวจสอบการบริหารจัดการพลังงาน (แค่สนับสนุนไดรเวอร์การทำงานของการ์ดราฟิก).",
|
||||||
|
"tr_TR": "Monitör Güç Yönetimi (grafik kart sürücüsü destekliyor).",
|
||||||
|
"uk_UA": "Моніторинг управління живленням (тільки підтримує драйвери графічних карток).",
|
||||||
|
"vi_VN": "Quản lý nguồn điện (chỉ hỗ trợ các driver của card đồ họa).",
|
||||||
|
"zh_CN": "显示器电源管理 (仅支持显卡已驱动的环境)。",
|
||||||
|
"zh_HK": "顯示器電源管理 (僅支持显卡已驅動的环境)。",
|
||||||
|
"zh_TW": "顯示器電源管理 (僅支持显卡已驅動的环境)。"
|
||||||
|
}
|
||||||
|
},
|
||||||
"mountloader": {
|
"mountloader": {
|
||||||
"system": false,
|
"system": false,
|
||||||
"description": {
|
"description": {
|
||||||
@ -759,6 +779,26 @@
|
|||||||
"zh_TW": "作者: GXNAS. 強制將 UPS 供電時的待機模式修改為關機. 參數: -f - 關機前觸發關機任務; -e - 待機模式前發關機任務(不修改為關機)."
|
"zh_TW": "作者: GXNAS. 強制將 UPS 供電時的待機模式修改為關機. 參數: -f - 關機前觸發關機任務; -e - 待機模式前發關機任務(不修改為關機)."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"virtiofs": {
|
||||||
|
"system": false,
|
||||||
|
"description": {
|
||||||
|
"en_US": "Auto mount virtio9p and virtiofs file systems (effective after rebooting the system after creating the storage space for the first time since it is mounted to the first storage space by default).",
|
||||||
|
"ar_SA": "تلقائيا تركيب أنظمة ملفات virtio9p و virtiofs (تدخل حيز التنفيذ بعد إعادة تشغيل النظام بعد إنشاء مساحة التخزين لأول مرة حيث يتم تركيبها في مساحة التخزين الأولى بشكل افتراضي).",
|
||||||
|
"de_DE": "Installiert virtio9p und virtiofs automatisch (da sie standardmäßig im ersten Speicherplatz gemountet werden, werden sie wirksam, nachdem das System zum ersten Mal installiert und der Speicherplatz erstellt und neu gestartet wurde).",
|
||||||
|
"es_ES": "Installs virtio9p and virtiofs automatically (effective after rebooting the system after creating the storage space for the first time since it is mounted to the first storage space by default).",
|
||||||
|
"fr_FR": "Monte automatiquement les systèmes de fichiers virtio9p et virtiofs (efficace après le redémarrage du système après la création de l'espace de stockage pour la première fois car il est monté sur le premier espace de stockage par défaut).",
|
||||||
|
"ja_JP": "virtio9pおよびvirtiofsファイルシステムを自動的にマウントします(デフォルトで最初のストレージスペースにマウントされるため、システムを再起動して最初にストレージスペースを作成した後に有効になります)。",
|
||||||
|
"ko_KR": "virtio9p 및 virtiofs 파일 시스템을 자동으로 마운트합니다(기본적으로 첫 번째 스토리지 공간에 마운트되므로 시스템을 재부팅한 후 처음으로 스토리지 공간을 만든 후에 적용됨).",
|
||||||
|
"ru_RU": "Автоматически монтирует файловые системы virtio9p и virtiofs (вступает в силу после перезагрузки системы после создания хранилища в первый раз, так как по умолчанию оно монтируется в первое хранилище).",
|
||||||
|
"th_TH": "ติดตั้งระบบไฟล์ virtio9p และ virtiofs โดยอัตโนมัติ (มีผลหลังจากรีบูตระบบหลังจากสร้างพื้นที่จัดเก็บข้อมูลเป็นครั้งแรกเนื่องจากจะถูกเมานต์ไปยังพื้นที่จัดเก็บข้อมูลแรกโดยค่าเริ่มต้น)",
|
||||||
|
"tr_TR": "virtio9p ve virtiofs dosya sistemlerini otomatik olarak bağlar (varsayılan olarak ilk depolama alanına bağlandığından, depolama alanı ilk kez oluşturulduktan sonra sistemi yeniden başlattıktan sonra geçerlidir).",
|
||||||
|
"uk_UA": "Автоматично монтує файлові системи virtio9p та virtiofs (вступає в силу після перезавантаження системи після створення сховища у перший раз, оскільки за замовчуванням воно монтується у перший сховище).",
|
||||||
|
"vi_VN": "Tự động gắn hệ thống tệp virtio9p và virtiofs (có hiệu lực sau khi khởi động lại hệ thống sau khi tạo không gian lưu trữ lần đầu tiên vì nó được gắn vào không gian lưu trữ đầu tiên theo mặc định).",
|
||||||
|
"zh_CN": "自动挂载 virtio9p 和 virtiofs 文件系统(由于默认挂载到第一个存储空间,所以首次安装系统创建存储空间后重启生效).",
|
||||||
|
"zh_HK": "自動掛載 virtio9p 和 virtiofs 文件系統(由於默認掛載到第一個存儲空間,所以首次安裝系統創建存儲空間後重启生效).",
|
||||||
|
"zh_TW": "自動掛載 virtio9p 和 virtiofs 檔案系統(由於預設掛載到第一個儲存空間,所以首次安裝系統建立儲存空間後重新啟動生效)."
|
||||||
|
}
|
||||||
|
},
|
||||||
"vmtools": {
|
"vmtools": {
|
||||||
"system": false,
|
"system": false,
|
||||||
"description": {
|
"description": {
|
||||||
|
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)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -2066,6 +2070,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -3080,6 +3088,10 @@
|
|||||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -4262,6 +4274,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -5260,6 +5276,10 @@
|
|||||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -6442,6 +6462,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -7440,6 +7464,10 @@
|
|||||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -8622,6 +8650,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -9632,6 +9664,10 @@
|
|||||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -10822,6 +10858,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -11832,6 +11872,10 @@
|
|||||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -13026,6 +13070,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -13624,6 +13672,10 @@
|
|||||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||||
"depends": "tcpm,usb-common"
|
"depends": "tcpm,usb-common"
|
||||||
},
|
},
|
||||||
|
"fuse": {
|
||||||
|
"description": "Filesystem in Userspace",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"gpio-beeper": {
|
"gpio-beeper": {
|
||||||
"description": "Generic GPIO beeper driver",
|
"description": "Generic GPIO beeper driver",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -14532,6 +14584,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -14736,6 +14792,10 @@
|
|||||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||||
},
|
},
|
||||||
|
"virtiofs": {
|
||||||
|
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||||
|
"depends": "fuse,virtio_ring,virtio"
|
||||||
|
},
|
||||||
"vmw_pvscsi": {
|
"vmw_pvscsi": {
|
||||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -15274,6 +15334,10 @@
|
|||||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||||
"depends": "tcpm,usb-common"
|
"depends": "tcpm,usb-common"
|
||||||
},
|
},
|
||||||
|
"fuse": {
|
||||||
|
"description": "Filesystem in Userspace",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"gasket": {
|
"gasket": {
|
||||||
"description": "Google Gasket driver framework",
|
"description": "Google Gasket driver framework",
|
||||||
"depends": "dmabuf"
|
"depends": "dmabuf"
|
||||||
@ -16186,6 +16250,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -16410,6 +16478,10 @@
|
|||||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||||
},
|
},
|
||||||
|
"virtiofs": {
|
||||||
|
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||||
|
"depends": "fuse,virtio_ring,virtio"
|
||||||
|
},
|
||||||
"vmw_pvscsi": {
|
"vmw_pvscsi": {
|
||||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -17385,6 +17457,10 @@
|
|||||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -18627,6 +18703,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -19233,6 +19313,10 @@
|
|||||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||||
"depends": "tcpm,usb-common"
|
"depends": "tcpm,usb-common"
|
||||||
},
|
},
|
||||||
|
"fuse": {
|
||||||
|
"description": "Filesystem in Userspace",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"gpio-beeper": {
|
"gpio-beeper": {
|
||||||
"description": "Generic GPIO beeper driver",
|
"description": "Generic GPIO beeper driver",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -20057,6 +20141,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -20277,6 +20365,10 @@
|
|||||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||||
},
|
},
|
||||||
|
"virtiofs": {
|
||||||
|
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||||
|
"depends": "fuse,virtio_ring,virtio"
|
||||||
|
},
|
||||||
"vmw_pvscsi": {
|
"vmw_pvscsi": {
|
||||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -21227,6 +21319,10 @@
|
|||||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -22425,6 +22521,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -23459,6 +23559,10 @@
|
|||||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -24677,6 +24781,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -25263,6 +25371,10 @@
|
|||||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||||
"depends": "tcpm"
|
"depends": "tcpm"
|
||||||
},
|
},
|
||||||
|
"fuse": {
|
||||||
|
"description": "Filesystem in Userspace",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"gpio-beeper": {
|
"gpio-beeper": {
|
||||||
"description": "Generic GPIO beeper driver",
|
"description": "Generic GPIO beeper driver",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -26151,6 +26263,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_sas": {
|
"scsi_transport_sas": {
|
||||||
"description": "SAS Transport Attributes",
|
"description": "SAS Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -26371,6 +26487,10 @@
|
|||||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||||
},
|
},
|
||||||
|
"virtiofs": {
|
||||||
|
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||||
|
"depends": "fuse,virtio_ring,virtio"
|
||||||
|
},
|
||||||
"vmw_pvscsi": {
|
"vmw_pvscsi": {
|
||||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -27349,6 +27469,10 @@
|
|||||||
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
"description": "low-level driver for Silicon Image SATA controller (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -28579,6 +28703,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -29173,6 +29301,10 @@
|
|||||||
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
"description": "Fairchild FUSB302 Type-C Chip Driver",
|
||||||
"depends": "tcpm"
|
"depends": "tcpm"
|
||||||
},
|
},
|
||||||
|
"fuse": {
|
||||||
|
"description": "Filesystem in Userspace",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"gpio-beeper": {
|
"gpio-beeper": {
|
||||||
"description": "Generic GPIO beeper driver",
|
"description": "Generic GPIO beeper driver",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -30065,6 +30197,10 @@
|
|||||||
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
"description": "Stochastic Fairness Queueing discipline (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
},
|
},
|
||||||
|
"scsi_debug": {
|
||||||
|
"description": "SCSI debug adapter driver (Compiled by RR for DSM)",
|
||||||
|
"depends": ""
|
||||||
|
},
|
||||||
"scsi_transport_fc": {
|
"scsi_transport_fc": {
|
||||||
"description": "FC Transport Attributes",
|
"description": "FC Transport Attributes",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
@ -30289,6 +30425,10 @@
|
|||||||
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
"description": "Virtio SCSI HBA driver (Compiled by RR for DSM)",
|
||||||
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
"depends": "virtio,virtio_ring,blk-mq-virtio"
|
||||||
},
|
},
|
||||||
|
"virtiofs": {
|
||||||
|
"description": "Virtio Filesystem (Compiled by RR for DSM)",
|
||||||
|
"depends": "fuse,virtio_ring,virtio"
|
||||||
|
},
|
||||||
"vmw_pvscsi": {
|
"vmw_pvscsi": {
|
||||||
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
"description": "VMware PVSCSI driver (Compiled by RR for DSM)",
|
||||||
"depends": ""
|
"depends": ""
|
||||||
|
Binary file not shown.
681
docs/pats.json
681
docs/pats.json
@ -251,394 +251,25 @@
|
|||||||
"sum": "00000000000000000000000000000000"
|
"sum": "00000000000000000000000000000000"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"DS220+": {
|
"DS220+": {},
|
||||||
"7.2.2-72806-0": {
|
"DS224+": {},
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS220%2B_72806.pat",
|
"DS2419+": {},
|
||||||
"sum": "00000000000000000000000000000000"
|
"DS2419+II": {},
|
||||||
},
|
"DS2422+": {},
|
||||||
"7.0.1-42218-0": {
|
"DS3622xs+": {},
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS220%2B_42218.pat",
|
"DS420+": {},
|
||||||
"sum": "00000000000000000000000000000000"
|
"DS423+": {},
|
||||||
},
|
"DS620slim": {},
|
||||||
"7.2.1-69057-1": {
|
"DS720+": {},
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS220%2B_69057.pat",
|
"DS723+": {},
|
||||||
"sum": "00000000000000000000000000000000"
|
"DS920+": {},
|
||||||
},
|
"DS923+": {},
|
||||||
"7.2.0-64570-1": {
|
"DVA1622": {},
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS220%2B_64570.pat",
|
"DVA3219": {},
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS220%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS220%2B_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS224+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS224%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS224%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS2419+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS2419%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS2419%2B_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS2419%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS2419%2B_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS2419%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS2419%2B_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS2419+II": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS2419%2BII_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS2419%2BII_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS2419%2BII_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS2419%2BII_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS2419%2BII_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS2419%2BII_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS2422+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS2422%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS2422%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS2422%2B_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS2422%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS2422%2B_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS2422%2B_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS3622xs+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS3622xs%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS3622xs%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS3622xs%2B_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS3622xs%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS3622xs%2B_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS420+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS420%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS420%2B_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS420%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS420%2B_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS420%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS420%2B_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS423+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS423%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS423%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS423%2B_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_DS423%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS620slim": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS620slim_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS620slim_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057/DSM_DS620slim_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS620slim_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS620slim_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS620slim_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS720+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS720%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS720%2B_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS720%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS720%2B_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS720%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS720%2B_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS723+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS723%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS723%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS723%2B_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_DS723%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS920+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS920%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS920%2B_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS920%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS920%2B_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DS920%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DS920%2B_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DS923+": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DS923%2B_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DS923%2B_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DS923%2B_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_DS923%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DVA1622": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DVA1622_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DVA1622_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DVA1622_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DVA1622_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DVA3219": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_DVA3219_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DVA3219_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_DVA3219_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_DVA3219_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_DVA3219_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_DVA3219_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DVA3221": {},
|
"DVA3221": {},
|
||||||
"FS2500": {},
|
"FS2500": {},
|
||||||
"FS3400": {
|
"FS3400": {},
|
||||||
"7.2.2-72806-0": {
|
"FS3410": {},
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_FS3400_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_FS3400_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_FS3400_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_FS3400_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_FS3400_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_FS3400_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"FS3410": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_FS3410_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_FS3410_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_FS3410_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_FS3410_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"FS3600": {
|
"FS3600": {
|
||||||
"7.2.2-72806-0": {
|
"7.2.2-72806-0": {
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_FS3600_72806.pat",
|
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_FS3600_72806.pat",
|
||||||
@ -1021,14 +652,6 @@
|
|||||||
"7.2.0-64570-1": {
|
"7.2.0-64570-1": {
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS820%2B_64570.pat",
|
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_RS820%2B_64570.pat",
|
||||||
"sum": "00000000000000000000000000000000"
|
"sum": "00000000000000000000000000000000"
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_RS820%2B_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_RS820%2B_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"RS820RP+": {
|
"RS820RP+": {
|
||||||
@ -1109,78 +732,11 @@
|
|||||||
"7.2.0-64570-1": {
|
"7.2.0-64570-1": {
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3200D_64570.pat",
|
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3200D_64570.pat",
|
||||||
"sum": "00000000000000000000000000000000"
|
"sum": "00000000000000000000000000000000"
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_SA3200D_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_SA3200D_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SA3400": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3400_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.0.1-42218-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_SA3400_42218.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_SA3400_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3400_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_SA3400_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_SA3400_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SA3400D": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3400D_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057-1/DSM_SA3400D_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3400D_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_SA3400D_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"SA3410": {
|
|
||||||
"7.2.2-72806-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3410_72806.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.1-69057-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.1/69057/DSM_SA3410_69057.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.2.0-64570-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_SA3410_64570.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.1-42962-0": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962/DSM_SA3410_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"SA3400": {},
|
||||||
|
"SA3400D": {},
|
||||||
|
"SA3410": {},
|
||||||
"SA3600": {
|
"SA3600": {
|
||||||
"7.2.2-72806-0": {
|
"7.2.2-72806-0": {
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3600_72806.pat",
|
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_SA3600_72806.pat",
|
||||||
@ -1493,196 +1049,13 @@
|
|||||||
"7.2.0-64570-1": {
|
"7.2.0-64570-1": {
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_FS2017_64570.pat",
|
"url": "https://global.synologydownload.com/download/DSM/release/7.2/64570-1/DSM_FS2017_64570.pat",
|
||||||
"sum": "00000000000000000000000000000000"
|
"sum": "00000000000000000000000000000000"
|
||||||
},
|
|
||||||
"7.1.1-42962-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_FS2017_42962.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
},
|
|
||||||
"7.1.0-42661-1": {
|
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.1/42661-1/DSM_FS2017_42661.pat",
|
|
||||||
"sum": "00000000000000000000000000000000"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"RS18017xs+": {
|
"RS18017xs+": {},
|
||||||
"7.2.2-72806-0": {
|
"RS2418+": {},
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.2.2/72806/DSM_RS18017xs%2B_72806.pat",
|
"RS2418RP+": {},
|
||||||
"sum": "00000000000000000000000000000000"
|
"RS2818RP+": {},
|
||||||
},
|
"RS3617RPxs": {},
|
||||||
"7.0.1-42218-0": {
|
"RS3617xs+": {},
|
||||||
"url": "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_RS18017xs%2B_42218.pat",
|
"RS4017xs+": {}
|
||||||
"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"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
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
|
if ! readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q nvmesystem; then
|
||||||
HASATA=0
|
HASATA=0
|
||||||
for D in $(lsblk -dpno NAME); do
|
for D in $(lsblk -dpno KNAME); do
|
||||||
[ "${D}" = "${LOADER_DISK}" ] && continue
|
[ "${D}" = "${LOADER_DISK}" ] && continue
|
||||||
if echo "sata sas scsi" | grep -wq "$(getBus "${D}")"; then
|
if echo "sata sas scsi" | grep -wq "$(getBus "${D}")"; then
|
||||||
HASATA=1
|
HASATA=1
|
||||||
@ -363,7 +363,7 @@ if [ "${DIRECT}" = "true" ] || [ "${MEV:-physical}" = "parallels" ]; then
|
|||||||
_bootwait || exit 0
|
_bootwait || exit 0
|
||||||
|
|
||||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Reboot to boot directly in DSM")"
|
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Reboot to boot directly in DSM")"
|
||||||
reboot
|
[ ! -f "/.dockerenv" ] && reboot
|
||||||
exit 0
|
exit 0
|
||||||
else
|
else
|
||||||
rm -f "${USER_RSYSENVFILE}" 2>/dev/null || true
|
rm -f "${USER_RSYSENVFILE}" 2>/dev/null || true
|
||||||
@ -390,14 +390,14 @@ else
|
|||||||
printf "."
|
printf "."
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
if [ ! -f "/.dockerenv" ]; then
|
||||||
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
|
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
|
||||||
|
fi
|
||||||
printf "$(TEXT "Waiting IP.\n")"
|
printf "$(TEXT "Waiting IP.\n")"
|
||||||
for N in ${ETHX}; do
|
for N in ${ETHX}; do
|
||||||
COUNT=0
|
COUNT=0
|
||||||
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
|
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
|
||||||
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)"
|
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
|
||||||
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
|
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
|
||||||
while true; do
|
while true; do
|
||||||
if false && [ ! "${N::3}" = "eth" ]; then
|
if false && [ ! "${N::3}" = "eth" ]; then
|
||||||
@ -464,22 +464,24 @@ else
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Disconnect wireless
|
if [ ! -f "/.dockerenv" ]; then
|
||||||
lsmod | grep -q iwlwifi && for F in /sys/class/net/wlan*; do
|
# Disconnect wireless
|
||||||
[ ! -e "${F}" ] && continue
|
lsmod | grep -q iwlwifi && for F in /sys/class/net/wlan*; do
|
||||||
connectwlanif "$(basename "${F}")" 0 2>/dev/null
|
[ ! -e "${F}" ] && continue
|
||||||
done
|
connectwlanif "$(basename "${F}")" 0 2>/dev/null
|
||||||
# Unload all network drivers
|
done
|
||||||
# for F in $(realpath /sys/class/net/*/device/driver); do [ ! -e "${F}" ] && continue; rmmod -f "$(basename ${F})" 2>/dev/null || true; done
|
# Unload all network drivers
|
||||||
|
# for F in $(realpath /sys/class/net/*/device/driver); do [ ! -e "${F}" ] && continue; rmmod -f "$(basename ${F})" 2>/dev/null || true; done
|
||||||
|
|
||||||
# Unload all graphics drivers
|
# Unload all graphics drivers
|
||||||
# for D in $(lsmod | grep -E '^(nouveau|amdgpu|radeon|i915)' | awk '{print $1}'); do rmmod -f "${D}" 2>/dev/null || true; done
|
# for D in $(lsmod | grep -E '^(nouveau|amdgpu|radeon|i915)' | awk '{print $1}'); do rmmod -f "${D}" 2>/dev/null || true; done
|
||||||
# for I in $(find /sys/devices -name uevent -exec bash -c 'cat {} 2>/dev/null | grep -Eq "PCI_CLASS=0?30[0|1|2]00" && dirname {}' \;); do
|
# for I in $(find /sys/devices -name uevent -exec bash -c 'cat {} 2>/dev/null | grep -Eq "PCI_CLASS=0?30[0|1|2]00" && dirname {}' \;); do
|
||||||
# [ -e ${I}/reset ] && cat "${I}/vendor" >/dev/null | grep -iq 0x10de && echo 1 >${I}/reset || true # Proc open nvidia driver when booting
|
# [ -e ${I}/reset ] && cat "${I}/vendor" >/dev/null | grep -iq 0x10de && echo 1 >${I}/reset || true # Proc open nvidia driver when booting
|
||||||
# done
|
# done
|
||||||
|
|
||||||
# Reboot
|
# Reboot
|
||||||
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
|
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
|
||||||
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff
|
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff
|
||||||
|
fi
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
0
files/initrd/opt/rr/extract-vmlinux
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
|
# shellcheck disable=SC2034
|
||||||
|
|
||||||
RR_VERSION="25.9.2"
|
RR_VERSION="25.9.5"
|
||||||
RR_RELEASE=""
|
RR_RELEASE=""
|
||||||
RR_TITLE="RR v${RR_VERSION}"
|
RR_TITLE="RR v${RR_VERSION}"
|
||||||
|
|
||||||
|
@ -246,6 +246,7 @@ function _sort_netif() {
|
|||||||
ETHLIST=""
|
ETHLIST=""
|
||||||
for F in /sys/class/net/eth*; do
|
for F in /sys/class/net/eth*; do
|
||||||
[ ! -e "${F}" ] && continue
|
[ ! -e "${F}" ] && continue
|
||||||
|
local ETH MAC BUS
|
||||||
ETH="$(basename "${F}")"
|
ETH="$(basename "${F}")"
|
||||||
MAC="$(cat "/sys/class/net/${ETH}/address" 2>/dev/null | sed 's/://g; s/.*/\L&/')"
|
MAC="$(cat "/sys/class/net/${ETH}/address" 2>/dev/null | sed 's/://g; s/.*/\L&/')"
|
||||||
BUS="$(ethtool -i "${ETH}" 2>/dev/null | grep bus-info | cut -d' ' -f2)"
|
BUS="$(ethtool -i "${ETH}" 2>/dev/null | grep bus-info | cut -d' ' -f2)"
|
||||||
@ -288,10 +289,11 @@ function _sort_netif() {
|
|||||||
# 1 - device path
|
# 1 - device path
|
||||||
function getBus() {
|
function getBus() {
|
||||||
local BUS=""
|
local BUS=""
|
||||||
|
[ -f "/.dockerenv" ] && BUS="docker"
|
||||||
# usb/ata(ide)/sata/sas/spi(scsi)/virtio/mmc/nvme
|
# usb/ata(ide)/sata/sas/spi(scsi)/virtio/mmc/nvme
|
||||||
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,TRAN 2>/dev/null | grep "${1} " | awk '{print $2}' | sed 's/^ata$/ide/' | sed 's/^spi$/scsi/') #Spaces are intentional
|
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,TRAN 2>/dev/null | grep "${1} " | awk '{print $2}' | sed 's/^ata$/ide/' | sed 's/^spi$/scsi/') #Spaces are intentional
|
||||||
# usb/scsi(ide/sata/sas)/virtio/mmc/nvme/vmbus/xen(xvd)
|
# usb/scsi(ide/sata/sas)/virtio/mmc/nvme/vmbus/xen(xvd)
|
||||||
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,SUBSYSTEMS 2>/dev/null | grep "${1} " | awk '{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"
|
[ -z "${BUS}" ] && BUS="unknown"
|
||||||
echo "${BUS}"
|
echo "${BUS}"
|
||||||
return 0
|
return 0
|
||||||
|
@ -10,18 +10,20 @@
|
|||||||
# Unpack modules from a tgz file
|
# Unpack modules from a tgz file
|
||||||
# 1 - Platform
|
# 1 - Platform
|
||||||
# 2 - Kernel Version
|
# 2 - Kernel Version
|
||||||
|
# 3 - dummy path
|
||||||
function unpackModules() {
|
function unpackModules() {
|
||||||
local PLATFORM=${1}
|
local PLATFORM=${1}
|
||||||
local PKVER=${2}
|
local PKVER=${2}
|
||||||
|
local UNPATH=${3:-"${TMP_PATH}/modules"}
|
||||||
local KERNEL
|
local KERNEL
|
||||||
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||||
|
|
||||||
rm -rf "${TMP_PATH}/modules"
|
rm -rf "${UNPATH}"
|
||||||
mkdir -p "${TMP_PATH}/modules"
|
mkdir -p "${UNPATH}"
|
||||||
if [ "${KERNEL}" = "custom" ]; then
|
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
|
else
|
||||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules"
|
tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,16 +31,18 @@ function unpackModules() {
|
|||||||
# Packag modules to a tgz file
|
# Packag modules to a tgz file
|
||||||
# 1 - Platform
|
# 1 - Platform
|
||||||
# 2 - Kernel Version
|
# 2 - Kernel Version
|
||||||
|
# 3 - dummy path
|
||||||
function packagModules() {
|
function packagModules() {
|
||||||
local PLATFORM=${1}
|
local PLATFORM=${1}
|
||||||
local PKVER=${2}
|
local PKVER=${2}
|
||||||
|
local UNPATH=${3:-"${TMP_PATH}/modules"}
|
||||||
local KERNEL
|
local KERNEL
|
||||||
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||||
|
|
||||||
if [ "${KERNEL}" = "custom" ]; then
|
if [ "${KERNEL}" = "custom" ]; then
|
||||||
tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules" .
|
tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
|
||||||
else
|
else
|
||||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules" .
|
tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,9 +58,10 @@ function getAllModules() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
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
|
[ ! -e "${F}" ] && continue
|
||||||
local N DESC
|
local N DESC
|
||||||
N="$(basename "${F}" .ko)"
|
N="$(basename "${F}" .ko)"
|
||||||
@ -65,7 +70,35 @@ function getAllModules() {
|
|||||||
echo "${N} \"${DESC:-${N}}\""
|
echo "${N} \"${DESC:-${N}}\""
|
||||||
done
|
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
|
shift 2
|
||||||
MLIST="${*}"
|
MLIST="${*}"
|
||||||
|
|
||||||
unpackModules "${PLATFORM}" "${PKVER}"
|
UNPATH="${TMP_PATH}/modules"
|
||||||
|
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||||
|
|
||||||
ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
|
ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
|
||||||
for F in ${TMP_PATH}/modules/*.ko; do
|
for F in ${UNPATH}/*.ko; do
|
||||||
[ ! -e "${F}" ] && continue
|
[ ! -e "${F}" ] && continue
|
||||||
M=$(basename "${F}")
|
M=$(basename "${F}")
|
||||||
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
|
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
|
||||||
@ -98,6 +132,7 @@ function installModules() {
|
|||||||
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
|
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
rm -rf "${UNPATH}"
|
||||||
|
|
||||||
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"
|
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"
|
||||||
KERNEL=$(readConfigKey "kernel" "${USER_CONFIG_FILE}")
|
KERNEL=$(readConfigKey "kernel" "${USER_CONFIG_FILE}")
|
||||||
@ -109,8 +144,6 @@ function installModules() {
|
|||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -rf "${TMP_PATH}/modules"
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,11 +162,12 @@ function addToModules() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
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
|
return 1
|
||||||
fi
|
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
|
# 3 - ko name
|
||||||
function getdepends() {
|
function getdepends() {
|
||||||
function _getdepends() {
|
function _getdepends() {
|
||||||
if [ -f "${TMP_PATH}/modules/${1}.ko" ]; then
|
if [ -f "${UNPATH}/${1}.ko" ]; then
|
||||||
local depends
|
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
|
if [ "$(echo "${depends}" | wc -w)" -gt 0 ]; then
|
||||||
for k in ${depends}; do
|
for k in ${depends}; do
|
||||||
echo "${k}"
|
echo "${k}"
|
||||||
@ -186,9 +221,10 @@ function getdepends() {
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unpackModules "${PLATFORM}" "${PKVER}"
|
UNPATH="${TMP_PATH}/modules"
|
||||||
|
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||||
|
|
||||||
_getdepends "${KONAME}" | sort -u
|
_getdepends "${KONAME}" | sort -u
|
||||||
echo "${KONAME}"
|
echo "${KONAME}"
|
||||||
rm -rf "${TMP_PATH}/modules"
|
rm -rf "${UNPATH}"
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ fi
|
|||||||
initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||||
initConfigKey "modblacklist" "evbug,cdc_ether" "${USER_CONFIG_FILE}"
|
initConfigKey "modblacklist" "evbug,cdc_ether" "${USER_CONFIG_FILE}"
|
||||||
|
|
||||||
if [ ! "LOCALBUILD" = "${LOADER_DISK}" ]; then
|
if [ ! -f "/.dockerenv" ]; then
|
||||||
if arrayExistItem "sortnetif:" "$(readConfigMap "addons" "${USER_CONFIG_FILE}")"; then
|
if arrayExistItem "sortnetif:" "$(readConfigMap "addons" "${USER_CONFIG_FILE}")"; then
|
||||||
_sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
|
_sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
|
||||||
fi
|
fi
|
||||||
@ -129,19 +129,16 @@ PID="0x0001"
|
|||||||
TYPE="DoM"
|
TYPE="DoM"
|
||||||
BUS=$(getBus "${LOADER_DISK}")
|
BUS=$(getBus "${LOADER_DISK}")
|
||||||
|
|
||||||
BUSLIST="usb sata sas scsi nvme mmc ide virtio vmbus xen"
|
BUSLIST="usb sata sas scsi nvme mmc ide virtio vmbus xen docker"
|
||||||
if [ "${BUS}" = "usb" ]; then
|
if [ "${BUS}" = "usb" ]; then
|
||||||
VID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_VENDOR_ID" | cut -d= -f2)"
|
VID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_VENDOR_ID" | cut -d= -f2)"
|
||||||
PID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_MODEL_ID" | cut -d= -f2)"
|
PID="0x$(udevadm info --query property --name "${LOADER_DISK}" 2>/dev/null | grep "ID_MODEL_ID" | cut -d= -f2)"
|
||||||
[ "${VID}" = "0x" ] || [ "${PID}" = "0x" ] && die "$(TEXT "The loader disk does not support the current USB Portable Hard Disk.")"
|
[ "${VID}" = "0x" ] || [ "${PID}" = "0x" ] && die "$(TEXT "The loader disk does not support the current USB Portable Hard Disk.")"
|
||||||
TYPE="flashdisk"
|
TYPE="flashdisk"
|
||||||
|
elif [ "${BUS}" = "docker" ]; then
|
||||||
|
TYPE="PC"
|
||||||
elif ! echo "${BUSLIST}" | grep -wq "${BUS}"; then
|
elif ! echo "${BUSLIST}" | grep -wq "${BUS}"; then
|
||||||
if [ "LOCALBUILD" = "${LOADER_DISK}" ]; then
|
die "$(printf "$(TEXT "The loader disk does not support the current %s, only %s DoM is supported.")" "${BUS}" "${BUSLIST// /\/}")"
|
||||||
echo "LOCALBUILD MODE"
|
|
||||||
TYPE="PC"
|
|
||||||
else
|
|
||||||
die "$(printf "$(TEXT "The loader disk does not support the current %s, only %s DoM is supported.")" "${BUS}" "${BUSLIST// /\/}")"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Save variables to user config file
|
# Save variables to user config file
|
||||||
@ -169,6 +166,9 @@ if ! loaderIsConfigured; then
|
|||||||
elif grep -q "IWANTTOCHANGETHECONFIG" /proc/cmdline; then
|
elif grep -q "IWANTTOCHANGETHECONFIG" /proc/cmdline; then
|
||||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "User requested edit settings.")"
|
printf "\033[1;33m%s\033[0m\n" "$(TEXT "User requested edit settings.")"
|
||||||
BOOT=0
|
BOOT=0
|
||||||
|
elif [ -f "/.dockerenv" ]; then
|
||||||
|
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Docker edit settings.")"
|
||||||
|
BOOT=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If is to boot automatically, do it
|
# If is to boot automatically, do it
|
||||||
@ -200,13 +200,15 @@ while [ ${COUNT} -lt 30 ]; do
|
|||||||
sleep 1
|
sleep 1
|
||||||
done
|
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")"
|
printf "$(TEXT "Waiting IP.\n")"
|
||||||
for N in ${ETHX}; do
|
for N in ${ETHX}; do
|
||||||
COUNT=0
|
COUNT=0
|
||||||
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
|
DRIVER="$(basename "$(realpath "/sys/class/net/${N}/device/driver" 2>/dev/null)" 2>/dev/null)"
|
||||||
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)"
|
MAC="$(cat "/sys/class/net/${N}/address" 2>/dev/null)" || MAC="00:00:00:00:00:00"
|
||||||
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
|
printf "%s(%s): " "${N}" "${MAC}@${DRIVER}"
|
||||||
while true; do
|
while true; do
|
||||||
if [ -z "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
if [ -z "$(cat "/sys/class/net/${N}/carrier" 2>/dev/null)" ]; then
|
||||||
@ -255,7 +257,7 @@ fi
|
|||||||
printf "\n"
|
printf "\n"
|
||||||
|
|
||||||
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
|
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)"
|
IP="$(getIP)"
|
||||||
echo "${IP}" | grep -q "^169\.254\." && IP=""
|
echo "${IP}" | grep -q "^169\.254\." && IP=""
|
||||||
[ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}"
|
[ -n "${IP}" ] && URL="http://${IP}:${TTYD:-7681}" || URL="http://rr:${TTYD:-7681}"
|
||||||
@ -266,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
|
[ -f "${TMP_PATH}/qrcode_qhxg.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode_qhxg.png" >/dev/null 2>&1 || true
|
||||||
fi
|
fi
|
||||||
WEBHOOKURL="$(readConfigKey "webhookurl" "${USER_CONFIG_FILE}")"
|
WEBHOOKURL="$(readConfigKey "webhookurl" "${USER_CONFIG_FILE}")"
|
||||||
if [ -n "${WEBHOOKURL}" ] && [ ! -f "${TMP_PATH}/WebhookSent" ]; 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')"
|
DMI="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
|
||||||
IP="$(getIP)"
|
IP="$(getIP)"
|
||||||
echo "${IP}" | grep -q "^169\.254\." && IP=""
|
echo "${IP}" | grep -q "^169\.254\." && IP=""
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
|||||||
25.9.2
|
25.9.5
|
||||||
|
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"
|
echo "Getting Modules end"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# unpack initrd
|
||||||
|
# $1 initrd file
|
||||||
|
# $2 output path
|
||||||
|
function unpackInitrd() {
|
||||||
|
local INITRD_FILE="${1}"
|
||||||
|
local OUTPUT_PATH="${2}"
|
||||||
|
|
||||||
|
[ -z "${INITRD_FILE}" ] || [ ! -f "${INITRD_FILE}" ] && exit 1
|
||||||
|
|
||||||
|
INITRD_FILE="$(realpath "${INITRD_FILE}")"
|
||||||
|
OUTPUT_PATH="$(realpath "${OUTPUT_PATH}")"
|
||||||
|
|
||||||
|
mkdir -p "${OUTPUT_PATH}"
|
||||||
|
local INITRD_FORMAT
|
||||||
|
INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}")
|
||||||
|
|
||||||
|
case "${INITRD_FORMAT}" in
|
||||||
|
*'x-cpio'*) (cd "${OUTPUT_PATH}" && sudo cpio -idm <"${INITRD_FILE}") >/dev/null 2>&1 ;;
|
||||||
|
*'x-xz'*) (cd "${OUTPUT_PATH}" && xz -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||||
|
*'x-lz4'*) (cd "${OUTPUT_PATH}" && lz4 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||||
|
*'x-lzma'*) (cd "${OUTPUT_PATH}" && lzma -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||||
|
*'x-bzip2'*) (cd "${OUTPUT_PATH}" && bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||||
|
*'gzip'*) (cd "${OUTPUT_PATH}" && gzip -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||||
|
*'zstd'*) (cd "${OUTPUT_PATH}" && zstd -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
# repack initrd
|
# repack initrd
|
||||||
# $1 initrd file
|
# $1 initrd file
|
||||||
# $2 plugin path
|
# $2 plugin path
|
||||||
|
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