mirror of
https://github.com/RROrg/rr.git
synced 2025-06-21 05:51:05 +08:00
RR init 2
This commit is contained in:
parent
a0e446c002
commit
ab83c4b696
1
.gitignore
vendored
1
.gitignore
vendored
@ -11,3 +11,4 @@ cache
|
|||||||
files/initrd/opt/rr/lang/*.mo
|
files/initrd/opt/rr/lang/*.mo
|
||||||
tests
|
tests
|
||||||
/extractor
|
/extractor
|
||||||
|
/br
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||||
|
|
||||||
. /opt/rr/include/functions.sh
|
. ${WORK_PATH}/include/functions.sh
|
||||||
|
|
||||||
|
[ -z "${LOADER_DISK}" ] && die "$(TEXT "Loader is not init!")"
|
||||||
# Sanity check
|
# Sanity check
|
||||||
loaderIsConfigured || die "$(TEXT "Loader is not configured!")"
|
loaderIsConfigured || die "$(TEXT "Loader is not configured!")"
|
||||||
|
|
||||||
# Check if machine has EFI
|
# Check if machine has EFI
|
||||||
[ -d /sys/firmware/efi ] && EFI=1 || EFI=0
|
[ -d /sys/firmware/efi ] && EFI=1 || EFI=0
|
||||||
|
|
||||||
LOADER_DISK="$(blkid | grep 'LABEL="RR3"' | cut -d3 -f1)"
|
BUS=$(getBus "${LOADER_DISK}")
|
||||||
BUS=$(udevadm info --query property --name ${LOADER_DISK} | grep ID_BUS | cut -d= -f2)
|
|
||||||
[ "${BUS}" = "ata" ] && BUS="sata"
|
|
||||||
|
|
||||||
# Print text centralized
|
# Print text centralized
|
||||||
clear
|
clear
|
||||||
@ -23,20 +23,15 @@ printf "\033[1;44m%*s\033[A\n" ${COLUMNS} ""
|
|||||||
printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
|
printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
|
||||||
printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} ""
|
printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} ""
|
||||||
TITLE="BOOTING:"
|
TITLE="BOOTING:"
|
||||||
[ -d "/sys/firmware/efi" ] && TITLE+=" [UEFI]" || TITLE+=" [BIOS]"
|
[ ${EFI} -eq 1 ] && TITLE+=" [UEFI]" || TITLE+=" [BIOS]"
|
||||||
[ "${BUS}" = "usb" ] && TITLE+=" [${BUS^^} flashdisk]" || TITLE+=" [${BUS^^} DoM]"
|
[ "${BUS}" = "usb" ] && TITLE+=" [${BUS^^} flashdisk]" || TITLE+=" [${BUS^^} DoM]"
|
||||||
printf "\033[1;33m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
|
printf "\033[1;33m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
|
||||||
|
|
||||||
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
|
|
||||||
if [ "${DSMLOGO}" = "true" -a -c "/dev/fb0" -a -f "${CACHE_PATH}/logo.png" ]; then
|
|
||||||
echo | fbv -acuf "${CACHE_PATH}/logo.png" >/dev/null 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check if DSM zImage changed, patch it if necessary
|
# Check if DSM zImage changed, patch it if necessary
|
||||||
ZIMAGE_HASH="$(readConfigKey "zimage-hash" "${USER_CONFIG_FILE}")"
|
ZIMAGE_HASH="$(readConfigKey "zimage-hash" "${USER_CONFIG_FILE}")"
|
||||||
if [ "$(sha256sum "${ORI_ZIMAGE_FILE}" | awk '{print$1}')" != "${ZIMAGE_HASH}" ]; then
|
if [ -f ${PART1_PATH}/.build -o "$(sha256sum "${ORI_ZIMAGE_FILE}" | awk '{print$1}')" != "${ZIMAGE_HASH}" ]; then
|
||||||
echo -e "\033[1;43m$(TEXT "DSM zImage changed")\033[0m"
|
echo -e "\033[1;43m$(TEXT "DSM zImage changed")\033[0m"
|
||||||
/opt/rr/zimage-patch.sh
|
${WORK_PATH}/zimage-patch.sh
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Error")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Error")" \
|
||||||
--msgbox "$(TEXT "zImage not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")" 12 70
|
--msgbox "$(TEXT "zImage not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")" 12 70
|
||||||
@ -47,9 +42,9 @@ fi
|
|||||||
# Check if DSM ramdisk changed, patch it if necessary
|
# Check if DSM ramdisk changed, patch it if necessary
|
||||||
RAMDISK_HASH="$(readConfigKey "ramdisk-hash" "${USER_CONFIG_FILE}")"
|
RAMDISK_HASH="$(readConfigKey "ramdisk-hash" "${USER_CONFIG_FILE}")"
|
||||||
RAMDISK_HASH_CUR="$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')"
|
RAMDISK_HASH_CUR="$(sha256sum "${ORI_RDGZ_FILE}" | awk '{print $1}')"
|
||||||
if [ "${RAMDISK_HASH_CUR}" != "${RAMDISK_HASH}" ]; then
|
if [ -f ${PART1_PATH}/.build -o "${RAMDISK_HASH_CUR}" != "${RAMDISK_HASH}" ]; then
|
||||||
echo -e "\033[1;43m$(TEXT "DSM Ramdisk changed")\033[0m"
|
echo -e "\033[1;43m$(TEXT "DSM Ramdisk changed")\033[0m"
|
||||||
/opt/rr/ramdisk-patch.sh
|
${WORK_PATH}/ramdisk-patch.sh
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Error")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Error")" \
|
||||||
--msgbox "$(TEXT "Ramdisk not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")" 12 70
|
--msgbox "$(TEXT "Ramdisk not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")" 12 70
|
||||||
@ -58,6 +53,7 @@ if [ "${RAMDISK_HASH_CUR}" != "${RAMDISK_HASH}" ]; then
|
|||||||
# Update SHA256 hash
|
# Update SHA256 hash
|
||||||
writeConfigKey "ramdisk-hash" "${RAMDISK_HASH_CUR}" "${USER_CONFIG_FILE}"
|
writeConfigKey "ramdisk-hash" "${RAMDISK_HASH_CUR}" "${USER_CONFIG_FILE}"
|
||||||
fi
|
fi
|
||||||
|
[ -f ${PART1_PATH}/.build ] && rm -f ${PART1_PATH}/.build
|
||||||
|
|
||||||
# Load necessary variables
|
# Load necessary variables
|
||||||
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
||||||
@ -77,20 +73,20 @@ echo -e "$(TEXT "DMI: ") \033[1;36m${DMI}\033[0m"
|
|||||||
echo -e "$(TEXT "CPU: ") \033[1;36m${CPU}\033[0m"
|
echo -e "$(TEXT "CPU: ") \033[1;36m${CPU}\033[0m"
|
||||||
echo -e "$(TEXT "MEM: ") \033[1;36m${MEM}\033[0m"
|
echo -e "$(TEXT "MEM: ") \033[1;36m${MEM}\033[0m"
|
||||||
|
|
||||||
if [ ! -f "${MODEL_CONFIG_PATH}/${MODEL}.yml" ] || [ -z "$(readConfigKey "productvers.[${PRODUCTVER}]" "${MODEL_CONFIG_PATH}/${MODEL}.yml")" ]; then
|
if [ ! -f "${WORK_PATH}/model-configs/${MODEL}.yml" ] || [ -z "$(readModelKey ${MODEL} "productvers.[${PRODUCTVER}]")" ]; then
|
||||||
echo -e "\033[1;33m*** $(printf "$(TEXT "The current version of bootloader does not support booting %s-%s, please upgrade and rebuild.")" "${MODEL}" "${PRODUCTVER}") ***\033[0m"
|
echo -e "\033[1;33m*** $(printf "$(TEXT "The current version of bootloader does not support booting %s-%s, please upgrade and rebuild.")" "${MODEL}" "${PRODUCTVER}") ***\033[0m"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
HASATA=0
|
HASATA=0
|
||||||
for D in $(lsblk -dnp -o name); do
|
for D in $(lsblk -dpno NAME); do
|
||||||
[ "${D}" = "${LOADER_DISK}" ] && continue
|
[ "${D}" = "${LOADER_DISK}" ] && continue
|
||||||
if [ "$(udevadm info --query property --name ${D} | grep ID_BUS | cut -d= -f2)" = "ata" ]; then
|
if [ "$(getBus "${D}")" = "sata" -o "$(getBus "${D}")" = "scsi" ]; then
|
||||||
HASATA=1
|
HASATA=1
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
[ ${HASATA} = "0" ] && echo -e "\033[1;33m*** $(TEXT "Please insert at least one sata disk for system installation, except for the bootloader disk.") ***\033[0m"
|
[ ${HASATA} = "0" ] && echo -e "\033[1;33m*** $(TEXT "Please insert at least one sata/scsi disk for system installation, except for the bootloader disk.") ***\033[0m"
|
||||||
|
|
||||||
VID="$(readConfigKey "vid" "${USER_CONFIG_FILE}")"
|
VID="$(readConfigKey "vid" "${USER_CONFIG_FILE}")"
|
||||||
PID="$(readConfigKey "pid" "${USER_CONFIG_FILE}")"
|
PID="$(readConfigKey "pid" "${USER_CONFIG_FILE}")"
|
||||||
@ -98,6 +94,8 @@ SN="$(readConfigKey "sn" "${USER_CONFIG_FILE}")"
|
|||||||
MAC1="$(readConfigKey "mac1" "${USER_CONFIG_FILE}")"
|
MAC1="$(readConfigKey "mac1" "${USER_CONFIG_FILE}")"
|
||||||
KERNELPANIC="$(readConfigKey "kernelpanic" "${USER_CONFIG_FILE}")"
|
KERNELPANIC="$(readConfigKey "kernelpanic" "${USER_CONFIG_FILE}")"
|
||||||
|
|
||||||
|
NETIFNUM=$(ls /sys/class/net/ | grep eth | wc -l); [ ${NETIFNUM} -eq 0 ] && NETIFNUM=1
|
||||||
|
|
||||||
declare -A CMDLINE
|
declare -A CMDLINE
|
||||||
|
|
||||||
# Automatic values
|
# Automatic values
|
||||||
@ -108,7 +106,7 @@ CMDLINE['vid']="${VID}"
|
|||||||
CMDLINE['pid']="${PID}"
|
CMDLINE['pid']="${PID}"
|
||||||
CMDLINE['sn']="${SN}"
|
CMDLINE['sn']="${SN}"
|
||||||
CMDLINE['mac1']="${MAC1}"
|
CMDLINE['mac1']="${MAC1}"
|
||||||
CMDLINE['netif_num']="1"
|
CMDLINE['netif_num']="${NETIFNUM}"
|
||||||
|
|
||||||
# set fixed cmdline
|
# set fixed cmdline
|
||||||
if grep -q "force_junior" /proc/cmdline; then
|
if grep -q "force_junior" /proc/cmdline; then
|
||||||
@ -120,8 +118,7 @@ else
|
|||||||
CMDLINE['noefi']=""
|
CMDLINE['noefi']=""
|
||||||
fi
|
fi
|
||||||
if [ ! "${BUS}" = "usb" ]; then
|
if [ ! "${BUS}" = "usb" ]; then
|
||||||
LOADER_DEVICE_NAME=$(echo ${LOADER_DISK} | sed 's|/dev/||')
|
SIZE=$(($(cat /sys/block/${LOADER_DISK/\/dev\//}/size) / 2048 + 10))
|
||||||
SIZE=$(($(cat /sys/block/${LOADER_DEVICE_NAME}/size) / 2048 + 10))
|
|
||||||
# Read SATADoM type
|
# Read SATADoM type
|
||||||
DOM="$(readModelKey "${MODEL}" "dom")"
|
DOM="$(readModelKey "${MODEL}" "dom")"
|
||||||
CMDLINE['synoboot_satadom']="${DOM}"
|
CMDLINE['synoboot_satadom']="${DOM}"
|
||||||
@ -204,7 +201,7 @@ else
|
|||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
COUNT=$((${COUNT} + 1))
|
COUNT=$((${COUNT} + 1))
|
||||||
IP=$(ip route show dev ${ETHX[${N}]} 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p')
|
IP="$(getIP ${ETHX[${N}]})"
|
||||||
if [ -n "${IP}" ]; then
|
if [ -n "${IP}" ]; then
|
||||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:5000\033[0m to connect the DSM via web.")" "${IP}")\n"
|
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:5000\033[0m to connect the DSM via web.")" "${IP}")\n"
|
||||||
break
|
break
|
||||||
@ -234,6 +231,14 @@ else
|
|||||||
|
|
||||||
echo -e "\033[1;37m$(TEXT "Loading DSM kernel...")\033[0m"
|
echo -e "\033[1;37m$(TEXT "Loading DSM kernel...")\033[0m"
|
||||||
|
|
||||||
|
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
|
||||||
|
if [ "${DSMLOGO}" = "true" -a -c "/dev/fb0" ]; then
|
||||||
|
IP="$(getIP)"
|
||||||
|
[ -n "${IP}" ] && URL="http://${IP}:5000" || URL="http://find.synology.com/"
|
||||||
|
python ${WORK_PATH}/include/functions.py makeqr -d "${URL}" -l "br" -o "${TMP_PATH}/qrcode.png"
|
||||||
|
[ -f "${TMP_PATH}/qrcode.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode.png" >/dev/null 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
# Executes DSM kernel via KEXEC
|
# Executes DSM kernel via KEXEC
|
||||||
KVER=$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kver")
|
KVER=$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kver")
|
||||||
if [ "${KVER:0:1}" = "3" -a ${EFI} -eq 1 ]; then
|
if [ "${KVER:0:1}" = "3" -a ${EFI} -eq 1 ]; then
|
||||||
@ -244,9 +249,9 @@ else
|
|||||||
fi
|
fi
|
||||||
echo -e "\033[1;37m$(TEXT "Booting...")\033[0m"
|
echo -e "\033[1;37m$(TEXT "Booting...")\033[0m"
|
||||||
for T in $(w | grep -v "TTY" | awk -F' ' '{print $2}'); do
|
for T in $(w | grep -v "TTY" | awk -F' ' '{print $2}'); do
|
||||||
echo -e "\n\033[1;43m$(TEXT "[This interface will not be operational.\nPlease wait for a few minutes before using the http://find.synology.com/ or Synology Assistant find DSM and connect.]")\033[0m\n" >"/dev/${T}" 2>/dev/null || true
|
echo -e "\n\033[1;43m$(TEXT "[This interface will not be operational. Please wait a few minutes.\nFind DSM via http://find.synology.com/ or Synology Assistant and connect.]")\033[0m\n" >"/dev/${T}" 2>/dev/null || true
|
||||||
done
|
done
|
||||||
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
|
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
|
||||||
[ "${KERNELWAY}" = "kexec" ] && kexec -f -e || poweroff
|
[ "${KERNELWAY}" = "kexec" ] && kexec -f -e || poweroff
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
@ -53,7 +53,7 @@ function installAddon() {
|
|||||||
[ ${HAS_FILES} -ne 1 ] && return 1
|
[ ${HAS_FILES} -ne 1 ] && return 1
|
||||||
cp -f "${TMP_PATH}/${ADDON}/install.sh" "${RAMDISK_PATH}/addons/${ADDON}.sh" 2>"${LOG_FILE}" || dieLog
|
cp -f "${TMP_PATH}/${ADDON}/install.sh" "${RAMDISK_PATH}/addons/${ADDON}.sh" 2>"${LOG_FILE}" || dieLog
|
||||||
chmod +x "${RAMDISK_PATH}/addons/${ADDON}.sh"
|
chmod +x "${RAMDISK_PATH}/addons/${ADDON}.sh"
|
||||||
[ -d ${TMP_PATH}/${ADDON}/root ] && (cp -Rf "${TMP_PATH}/${ADDON}/root/"* "${RAMDISK_PATH}/" 2>"${LOG_FILE}" || dieLog)
|
[ -d ${TMP_PATH}/${ADDON}/root ] && (cp -rnf "${TMP_PATH}/${ADDON}/root/"* "${RAMDISK_PATH}/" 2>"${LOG_FILE}" || dieLog)
|
||||||
rm -rf "${TMP_PATH}/${ADDON}"
|
rm -rf "${TMP_PATH}/${ADDON}"
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -72,3 +72,16 @@ function untarAddon() {
|
|||||||
mv -f "${TMP_PATH}/addon" "${ADDONS_PATH}/${ADDON}"
|
mv -f "${TMP_PATH}/addon" "${ADDONS_PATH}/${ADDON}"
|
||||||
echo "${ADDON}"
|
echo "${ADDON}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Detect if has new local plugins to install/reinstall
|
||||||
|
function updateAddons() {
|
||||||
|
for F in $(ls ${PART3_PATH}/*.addon 2>/dev/null); do
|
||||||
|
ADDON=$(basename "${F}" | sed 's|.addon||')
|
||||||
|
rm -rf "${ADDONS_PATH}/${ADDON}"
|
||||||
|
mkdir -p "${ADDONS_PATH}/${ADDON}"
|
||||||
|
echo "Installing ${F} to ${ADDONS_PATH}/${ADDON}"
|
||||||
|
tar -xaf "${F}" -C "${ADDONS_PATH}/${ADDON}"
|
||||||
|
rm -f "${F}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
@ -25,6 +25,15 @@ function readConfigKey() {
|
|||||||
[ "${RESULT}" == "null" ] && echo "" || echo ${RESULT}
|
[ "${RESULT}" == "null" ] && echo "" || echo ${RESULT}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Write to yaml config file if key not exists
|
||||||
|
# 1 - Path of Key
|
||||||
|
# 2 - Value
|
||||||
|
# 3 - Path of yaml config file
|
||||||
|
function initConfigKey() {
|
||||||
|
[ -z "$(readConfigKey "${1}" "${3}")" ] && writeConfigKey "${1}" "${2}" "${3}" || true
|
||||||
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Read Entries as map(key=value) from yaml config file
|
# Read Entries as map(key=value) from yaml config file
|
||||||
# 1 - Path of key
|
# 1 - Path of key
|
||||||
|
@ -1,27 +1,30 @@
|
|||||||
RR_VERSION="23.10.4"
|
RR_VERSION="23.10.4"
|
||||||
RR_TITLE="rr v${RR_VERSION}"
|
RR_TITLE="RR v${RR_VERSION}"
|
||||||
|
|
||||||
# Define paths
|
# Define paths
|
||||||
|
|
||||||
|
PART1_PATH="/mnt/p1"
|
||||||
|
PART2_PATH="/mnt/p2"
|
||||||
|
PART3_PATH="/mnt/p3"
|
||||||
|
DSMROOT_PATH="/mnt/dsmroot"
|
||||||
TMP_PATH="/tmp"
|
TMP_PATH="/tmp"
|
||||||
|
|
||||||
UNTAR_PAT_PATH="${TMP_PATH}/pat"
|
UNTAR_PAT_PATH="${TMP_PATH}/pat"
|
||||||
RAMDISK_PATH="${TMP_PATH}/ramdisk"
|
RAMDISK_PATH="${TMP_PATH}/ramdisk"
|
||||||
LOG_FILE="${TMP_PATH}/log.txt"
|
LOG_FILE="${TMP_PATH}/log.txt"
|
||||||
|
|
||||||
USER_CONFIG_FILE="${BOOTLOADER_PATH}/user-config.yml"
|
USER_CONFIG_FILE="${PART1_PATH}/user-config.yml"
|
||||||
GRUB_PATH="${BOOTLOADER_PATH}/boot/grub"
|
GRUB_PATH="${PART1_PATH}/boot/grub"
|
||||||
|
|
||||||
ORI_ZIMAGE_FILE="${SLPART_PATH}/zImage"
|
ORI_ZIMAGE_FILE="${PART2_PATH}/zImage"
|
||||||
ORI_RDGZ_FILE="${SLPART_PATH}/rd.gz"
|
ORI_RDGZ_FILE="${PART2_PATH}/rd.gz"
|
||||||
|
|
||||||
RR_BZIMAGE_FILE="${CACHE_PATH}/bzImage-rr"
|
RR_BZIMAGE_FILE="${PART3_PATH}/bzImage-rr"
|
||||||
RR_RAMDISK_FILE="${CACHE_PATH}/initrd-rr"
|
RR_RAMDISK_FILE="${PART3_PATH}/initrd-rr"
|
||||||
MOD_ZIMAGE_FILE="${CACHE_PATH}/zImage-dsm"
|
MOD_ZIMAGE_FILE="${PART3_PATH}/zImage-dsm"
|
||||||
MOD_RDGZ_FILE="${CACHE_PATH}/initrd-dsm"
|
MOD_RDGZ_FILE="${PART3_PATH}/initrd-dsm"
|
||||||
ADDONS_PATH="${CACHE_PATH}/addons"
|
|
||||||
LKM_PATH="${CACHE_PATH}/lkms"
|
|
||||||
MODULES_PATH="${CACHE_PATH}/modules"
|
|
||||||
USER_UP_PATH="${CACHE_PATH}/users"
|
|
||||||
|
|
||||||
MODEL_CONFIG_PATH="/opt/rr/model-configs"
|
LKM_PATH="${PART3_PATH}/lkms"
|
||||||
INCLUDE_PATH="/opt/rr/include"
|
ADDONS_PATH="${PART3_PATH}/addons"
|
||||||
PATCH_PATH="/opt/rr/patch"
|
MODULES_PATH="${PART3_PATH}/modules"
|
||||||
|
USER_UP_PATH="${PART3_PATH}/users"
|
||||||
|
63
files/initrd/opt/rr/include/functions.py
Normal file
63
files/initrd/opt/rr/include/functions.py
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# Copyright (C) 2022 Ing <https://github.com/wjz304>
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the MIT License.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
import os, click
|
||||||
|
|
||||||
|
WORK_PATH = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
@click.group()
|
||||||
|
def cli():
|
||||||
|
"""
|
||||||
|
The CLI is a commands to arpl.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@cli.command()
|
||||||
|
@click.option('-d', "--data", type=str, required=True, help="The data of QRCode.")
|
||||||
|
@click.option('-l', "--location", type=str, required=True, help="The location of QRCode. (tl, tr, bl, br, mid)")
|
||||||
|
@click.option('-o', "--output", type=str, required=True, help="The output file of QRCode.")
|
||||||
|
def makeqr(data, location, output):
|
||||||
|
"""
|
||||||
|
Generate a QRCode.
|
||||||
|
"""
|
||||||
|
import qrcode
|
||||||
|
from PIL import Image
|
||||||
|
qr = qrcode.QRCode(version=1, box_size=10, error_correction=qrcode.constants.ERROR_CORRECT_H, border=4)
|
||||||
|
qr.add_data(data)
|
||||||
|
qr.make(fit=True)
|
||||||
|
img = qr.make_image(fill_color="purple", back_color="white")
|
||||||
|
img = img.convert("RGBA")
|
||||||
|
pixels = img.load()
|
||||||
|
for i in range(img.size[0]):
|
||||||
|
for j in range(img.size[1]):
|
||||||
|
if pixels[i, j] == (255, 255, 255, 255):
|
||||||
|
pixels[i, j] = (255, 255, 255, 0)
|
||||||
|
|
||||||
|
if os.path.exists(os.path.join(WORK_PATH, "logo.png")):
|
||||||
|
icon = Image.open(os.path.join(WORK_PATH, "logo.png"))
|
||||||
|
icon = icon.convert("RGBA")
|
||||||
|
img.paste(icon.resize((int(img.size[0] / 5), int(img.size[1] / 5))), (int((img.size[0] - int(img.size[0] / 5)) / 2), int((img.size[1] - int(img.size[1] / 5)) / 2)))
|
||||||
|
|
||||||
|
alpha = Image.new("RGBA", (img.size[0] * 4, img.size[1] * 3), (0, 0, 0, 0))
|
||||||
|
if location == "tl":
|
||||||
|
loc = (0, 0)
|
||||||
|
elif location == "tr":
|
||||||
|
loc = (alpha.size[0] - img.size[0], 0)
|
||||||
|
elif location == "bl":
|
||||||
|
loc = (0, alpha.size[1] - img.size[1])
|
||||||
|
elif location == "br":
|
||||||
|
loc = (alpha.size[0] - img.size[0], alpha.size[1] - img.size[1])
|
||||||
|
else: # elif location == "mid":
|
||||||
|
loc = (int((alpha.size[0] - img.size[0]) / 2), int((alpha.size[1] - img.size[1]) / 2))
|
||||||
|
|
||||||
|
alpha.paste(img, loc)
|
||||||
|
alpha.save(output)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
cli()
|
@ -1,6 +1,9 @@
|
|||||||
. /opt/rr/include/i18n.sh
|
|
||||||
. /opt/rr/include/consts.sh
|
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
|
||||||
. /opt/rr/include/configFile.sh
|
|
||||||
|
. ${WORK_PATH}/include/consts.sh
|
||||||
|
. ${WORK_PATH}/include/configFile.sh
|
||||||
|
. ${WORK_PATH}/include/i18n.sh
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Read key value from model config file
|
# Read key value from model config file
|
||||||
@ -8,7 +11,7 @@
|
|||||||
# 2 - Key
|
# 2 - Key
|
||||||
# Return Value
|
# Return Value
|
||||||
function readModelKey() {
|
function readModelKey() {
|
||||||
readConfigKey "${2}" "${MODEL_CONFIG_PATH}/${1}.yml"
|
readConfigKey "${2}" "${WORK_PATH}/model-configs/${1}.yml"
|
||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -17,7 +20,7 @@ function readModelKey() {
|
|||||||
# 2 - Path of key
|
# 2 - Path of key
|
||||||
# Returns map of values
|
# Returns map of values
|
||||||
function readModelMap() {
|
function readModelMap() {
|
||||||
readConfigMap "${2}" "${MODEL_CONFIG_PATH}/${1}.yml"
|
readConfigMap "${2}" "${WORK_PATH}/model-configs/${1}.yml"
|
||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -26,7 +29,7 @@ function readModelMap() {
|
|||||||
# 2 - Path of key
|
# 2 - Path of key
|
||||||
# Returns array/map of values
|
# Returns array/map of values
|
||||||
function readModelArray() {
|
function readModelArray() {
|
||||||
readConfigArray "${2}" "${MODEL_CONFIG_PATH}/${1}.yml"
|
readConfigArray "${2}" "${WORK_PATH}/model-configs/${1}.yml"
|
||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -239,37 +242,81 @@ EOF
|
|||||||
fi
|
fi
|
||||||
ETHLIST="$(echo -e "${ETHLIST}" | grep -v '^$')"
|
ETHLIST="$(echo -e "${ETHLIST}" | grep -v '^$')"
|
||||||
|
|
||||||
echo -e "${ETHLIST}" > /tmp/ethlist
|
echo -e "${ETHLIST}" >${TMP_PATH}/ethlist
|
||||||
# cat /tmp/ethlist
|
# cat ${TMP_PATH}/ethlist
|
||||||
|
|
||||||
# sort
|
# sort
|
||||||
IDX=0
|
IDX=0
|
||||||
while true; do
|
while true; do
|
||||||
# cat /tmp/ethlist
|
# cat ${TMP_PATH}/ethlist
|
||||||
[ ${IDX} -ge $(wc -l < /tmp/ethlist) ] && break
|
[ ${IDX} -ge $(wc -l <${TMP_PATH}/ethlist) ] && break
|
||||||
ETH=$(cat /tmp/ethlist | sed -n "$((${IDX} + 1))p" | awk '{print $3}')
|
ETH=$(cat ${TMP_PATH}/ethlist | sed -n "$((${IDX} + 1))p" | awk '{print $3}')
|
||||||
# echo "ETH: ${ETH}"
|
# echo "ETH: ${ETH}"
|
||||||
if [ -n "${ETH}" ] && [ ! "${ETH}" = "eth${IDX}" ]; then
|
if [ -n "${ETH}" ] && [ ! "${ETH}" = "eth${IDX}" ]; then
|
||||||
# echo "change ${ETH} <=> eth${IDX}"
|
# echo "change ${ETH} <=> eth${IDX}"
|
||||||
ip link set dev eth${IDX} down
|
ip link set dev eth${IDX} down
|
||||||
ip link set dev ${ETH} down
|
ip link set dev ${ETH} down
|
||||||
sleep 1
|
sleep 1
|
||||||
ip link set dev eth${IDX} name tmp
|
ip link set dev eth${IDX} name ethN
|
||||||
ip link set dev ${ETH} name eth${IDX}
|
ip link set dev ${ETH} name eth${IDX}
|
||||||
ip link set dev tmp name ${ETH}
|
ip link set dev ethN name ${ETH}
|
||||||
sleep 1
|
sleep 1
|
||||||
ip link set dev eth${IDX} up
|
ip link set dev eth${IDX} up
|
||||||
ip link set dev ${ETH} up
|
ip link set dev ${ETH} up
|
||||||
sleep 1
|
sleep 1
|
||||||
sed -i "s/eth${IDX}/tmp/" /tmp/ethlist
|
sed -i "s/eth${IDX}/ethN/" ${TMP_PATH}/ethlist
|
||||||
sed -i "s/${ETH}/eth${IDX}/" /tmp/ethlist
|
sed -i "s/${ETH}/eth${IDX}/" ${TMP_PATH}/ethlist
|
||||||
sed -i "s/tmp/${ETH}/" /tmp/ethlist
|
sed -i "s/ethN/${ETH}/" ${TMP_PATH}/ethlist
|
||||||
sleep 1
|
sleep 1
|
||||||
fi
|
fi
|
||||||
IDX=$((${IDX} + 1))
|
IDX=$((${IDX} + 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
rm -f /tmp/ethlist
|
rm -f ${TMP_PATH}/ethlist
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# get bus of disk
|
||||||
|
# 1 - device path
|
||||||
|
function getBus() {
|
||||||
|
BUS=""
|
||||||
|
# usb/ata(sata/ide)/scsi
|
||||||
|
[ -z "${BUS}" ] && BUS=$(udevadm info --query property --name "${1}" 2>/dev/null | grep ID_BUS | cut -d= -f2 | sed 's/ata/sata/')
|
||||||
|
# usb/sata(sata/ide)/nvme
|
||||||
|
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,TRAN 2>/dev/null | grep "${1}" | awk '{print $2}')
|
||||||
|
# usb/scsi(sata/ide)/virtio(scsi/virtio)/nvme
|
||||||
|
[ -z "${BUS}" ] && BUS=$(lsblk -dpno KNAME,SUBSYSTEMS 2>/dev/null | grep "${1}" | awk -F':' '{print $(NF-1)}')
|
||||||
|
echo "${BUS}"
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# get IP
|
||||||
|
# 1 - ethN
|
||||||
|
function getIP() {
|
||||||
|
IP=""
|
||||||
|
if [ -n "${1}" -a -d "/sys/class/net/${1}" ]; then
|
||||||
|
IP=$(ip route show dev ${1} 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p')
|
||||||
|
[ -z "${IP}" ] && IP=$(ip addr show ${1} | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | head -1)
|
||||||
|
else
|
||||||
|
IP=$(ip route show 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1)
|
||||||
|
[ -z "${IP}" ] && IP=$(ip addr show | grep -E "inet .* eth" | awk '{print $2}' | cut -f1 -d'/' | head -1)
|
||||||
|
fi
|
||||||
|
echo "${IP}"
|
||||||
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# get logo of model
|
||||||
|
# 1 - model
|
||||||
|
function getLogo() {
|
||||||
|
MODEL="${1}"
|
||||||
|
rm -f "${PART3_PATH}/logo.png"
|
||||||
|
fastest=$(_get_fastest "www.synology.com" "www.synology.cn")
|
||||||
|
STATUS=$(curl -skL -w "%{http_code}" "https://${fastest}/api/products/getPhoto?product=${MODEL/+/%2B}&type=img_s&sort=0" -o "${PART3_PATH}/logo.png")
|
||||||
|
if [ $? -ne 0 -o ${STATUS} -ne 200 -o -f "${PART3_PATH}/logo.png" ]; then
|
||||||
|
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
|
||||||
|
magick montage "${PART3_PATH}/logo.png" -background 'none' -tile '3x3' -geometry '350x210' "${PART3_PATH}/logo.png" 2>/dev/null
|
||||||
|
convert -rotate 180 "${PART3_PATH}/logo.png" "${PART3_PATH}/logo.png" 2>/dev/null
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -277,7 +324,7 @@ EOF
|
|||||||
# (based on pocopico's TCRP code)
|
# (based on pocopico's TCRP code)
|
||||||
function findAndMountDSMRoot() {
|
function findAndMountDSMRoot() {
|
||||||
[ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -gt 0 ] && return 0
|
[ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -gt 0 ] && return 0
|
||||||
dsmrootdisk="$(blkid /dev/sd* | grep -i raid | awk '{print $1 " " $4}' | grep UUID | grep sd[a-z]1 | head -1 | awk -F ":" '{print $1}')"
|
dsmrootdisk="$(blkid | grep -i linux_raid_member | grep /dev/.*1: | head -1)"
|
||||||
[ -z "${dsmrootdisk}" ] && return -1
|
[ -z "${dsmrootdisk}" ] && return -1
|
||||||
[ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -eq 0 ] && mount -t ext4 "${dsmrootdisk}" "${DSMROOT_PATH}"
|
[ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -eq 0 ] && mount -t ext4 "${dsmrootdisk}" "${DSMROOT_PATH}"
|
||||||
if [ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -eq 0 ]; then
|
if [ $(mount | grep -i "${DSMROOT_PATH}" | wc -l) -eq 0 ]; then
|
||||||
@ -286,3 +333,16 @@ function findAndMountDSMRoot() {
|
|||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Rebooting
|
||||||
|
# (based on pocopico's TCRP code)
|
||||||
|
function rebootTo() {
|
||||||
|
[ "${1}" != "junior" -a "${1}" != "config" ] && exit 1
|
||||||
|
# echo "Rebooting to ${1} mode"
|
||||||
|
GRUBPATH="$(dirname $(find ${PART1_PATH}/ -name grub.cfg | head -1))"
|
||||||
|
ENVFILE="${GRUBPATH}/grubenv"
|
||||||
|
[ ! -f "${ENVFILE}" ] && grub-editenv ${ENVFILE} create
|
||||||
|
grub-editenv ${ENVFILE} set next_entry="${1}"
|
||||||
|
reboot
|
||||||
|
}
|
||||||
|
@ -1,6 +1,19 @@
|
|||||||
if [ -f ${BOOTLOADER_PATH}/.locale ]; then
|
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")/../" >/dev/null 2>&1 && pwd)"
|
||||||
export LANG="$(cat ${BOOTLOADER_PATH}/.locale)"
|
|
||||||
fi
|
|
||||||
|
|
||||||
alias TEXT='gettext "rr"'
|
if [ -d "/usr/share/locale" ]; then
|
||||||
shopt -s expand_aliases
|
if [ $(ls ${WORK_PATH}/lang/*.mo 2>/dev/null | wc -l) -gt 0 ]; then
|
||||||
|
for F in $(ls ${WORK_PATH}/lang/*.mo); do
|
||||||
|
install "${F}" "/usr/share/locale/$(basename "${F}" .mo)/LC_MESSAGES/rr.mo"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f ${PART1_PATH}/.locale ]; then
|
||||||
|
export LANG="$(cat ${PART1_PATH}/.locale)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
alias TEXT='gettext "rr"'
|
||||||
|
shopt -s expand_aliases
|
||||||
|
else
|
||||||
|
alias TEXT='echo'
|
||||||
|
shopt -s expand_aliases
|
||||||
|
fi
|
BIN
files/initrd/opt/rr/include/logo.png
Normal file
BIN
files/initrd/opt/rr/include/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.2 KiB |
@ -1,71 +1,22 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||||
|
|
||||||
. /opt/rr/include/functions.sh
|
. ${WORK_PATH}/include/functions.sh
|
||||||
|
. ${WORK_PATH}/include/addons.sh
|
||||||
|
|
||||||
# Wait kernel enumerate the disks
|
[ -z "${LOADER_DISK}" ] && die "$(TEXT "Loader is not init!")"
|
||||||
CNT=3
|
|
||||||
while true; do
|
|
||||||
[ ${CNT} -eq 0 ] && break
|
|
||||||
LOADER_DISK="$(blkid | grep 'LABEL="RR3"' | cut -d3 -f1)"
|
|
||||||
[ -n "${LOADER_DISK}" ] && break
|
|
||||||
CNT=$((${CNT} - 1))
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
[ -z "${LOADER_DISK}" ] && die "$(TEXT "Loader disk not found!")"
|
|
||||||
NUM_PARTITIONS=$(blkid | grep "${LOADER_DISK}[0-9]\+" | cut -d: -f1 | wc -l)
|
|
||||||
[ ${NUM_PARTITIONS} -lt 3 ] && die "$(TEXT "Loader disk seems to be damaged!")"
|
|
||||||
[ ${NUM_PARTITIONS} -gt 3 ] && die "$(TEXT "There are multiple loader disks, please insert only one loader disk!")"
|
|
||||||
|
|
||||||
# Check partitions and ignore errors
|
|
||||||
fsck.vfat -aw ${LOADER_DISK}1 >/dev/null 2>&1 || true
|
|
||||||
fsck.ext2 -p ${LOADER_DISK}2 >/dev/null 2>&1 || true
|
|
||||||
fsck.ext4 -p ${LOADER_DISK}3 >/dev/null 2>&1 || true
|
|
||||||
# Make folders to mount partitions
|
|
||||||
mkdir -p ${BOOTLOADER_PATH}
|
|
||||||
mkdir -p ${SLPART_PATH}
|
|
||||||
mkdir -p ${CACHE_PATH}
|
|
||||||
mkdir -p ${DSMROOT_PATH}
|
|
||||||
# Mount the partitions
|
|
||||||
mount ${LOADER_DISK}1 ${BOOTLOADER_PATH} || die "$(printf "$(TEXT "Can't mount %s")" "${BOOTLOADER_PATH}")"
|
|
||||||
mount ${LOADER_DISK}2 ${SLPART_PATH} || die "$(printf "$(TEXT "Can't mount %s")" "${SLPART_PATH}")"
|
|
||||||
mount ${LOADER_DISK}3 ${CACHE_PATH} || die "$(printf "$(TEXT "Can't mount %s")" "${CACHE_PATH}")"
|
|
||||||
|
|
||||||
# Although i18n.sh is included in functions.sh, but i18n.sh dependent ${BOOTLOADER_PATH}/${LOADER_DISK}1, so need to call it again.
|
|
||||||
. /opt/rr/include/i18n.sh
|
|
||||||
|
|
||||||
# Shows title
|
# Shows title
|
||||||
clear
|
clear
|
||||||
|
[ -z "${COLUMNS}" ] && COLUMNS=50
|
||||||
TITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}")"
|
TITLE="$(printf "$(TEXT "Welcome to %s")" "${RR_TITLE}")"
|
||||||
printf "\033[1;44m%*s\n" ${COLUMNS} ""
|
printf "\033[1;44m%*s\n" ${COLUMNS} ""
|
||||||
printf "\033[1;44m%*s\033[A\n" ${COLUMNS} ""
|
printf "\033[1;44m%*s\033[A\n" ${COLUMNS} ""
|
||||||
printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
|
printf "\033[1;32m%*s\033[0m\n" $(((${#TITLE} + ${COLUMNS}) / 2)) "${TITLE}"
|
||||||
printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} ""
|
printf "\033[1;44m%*s\033[0m\n" ${COLUMNS} ""
|
||||||
|
|
||||||
# Move/link SSH machine keys to/from cache volume
|
|
||||||
[ ! -d "${CACHE_PATH}/ssh" ] && cp -R "/etc/ssh" "${CACHE_PATH}/ssh"
|
|
||||||
rm -rf "/etc/ssh"
|
|
||||||
ln -s "${CACHE_PATH}/ssh" "/etc/ssh"
|
|
||||||
# Link bash history to cache volume
|
|
||||||
rm -rf ~/.bash_history
|
|
||||||
ln -s ${CACHE_PATH}/.bash_history ~/.bash_history
|
|
||||||
touch ~/.bash_history
|
|
||||||
if ! grep -q "menu.sh" ~/.bash_history; then
|
|
||||||
echo "menu.sh " >>~/.bash_history
|
|
||||||
fi
|
|
||||||
# Check if exists directories into P3 partition, if yes remove and link it
|
|
||||||
if [ -d "${CACHE_PATH}/model-configs" ]; then
|
|
||||||
rm -rf "${MODEL_CONFIG_PATH}"
|
|
||||||
ln -s "${CACHE_PATH}/model-configs" "${MODEL_CONFIG_PATH}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d "${CACHE_PATH}/patch" ]; then
|
|
||||||
rm -rf "${PATCH_PATH}"
|
|
||||||
ln -s "${CACHE_PATH}/patch" "${PATCH_PATH}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get first MAC address
|
# Get first MAC address
|
||||||
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list
|
ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list
|
||||||
# No network devices
|
# No network devices
|
||||||
@ -74,36 +25,36 @@ ETHX=($(ls /sys/class/net/ | grep eth)) # real network cards list
|
|||||||
# If user config file not exists, initialize it
|
# If user config file not exists, initialize it
|
||||||
if [ ! -f "${USER_CONFIG_FILE}" ]; then
|
if [ ! -f "${USER_CONFIG_FILE}" ]; then
|
||||||
touch "${USER_CONFIG_FILE}"
|
touch "${USER_CONFIG_FILE}"
|
||||||
writeConfigKey "lkm" "prod" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "dsmlogo" "true" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "directboot" "false" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "prerelease" "false" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "bootwait" "10" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "bootipwait" "10" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "kernelway" "power" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "kernelpanic" "5" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "odp" "false" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "model" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "productver" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "buildnum" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "smallnum" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "paturl" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "patsum" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "sn" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "mac1" "" "${USER_CONFIG_FILE}"
|
|
||||||
# writeConfigKey "maxdisks" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "layout" "qwerty" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "keymap" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "zimage-hash" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "ramdisk-hash" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "cmdline" "{}" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "synoinfo" "{}" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "addons" "{}" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "addons.misc" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "addons.reboottorr" "" "${USER_CONFIG_FILE}"
|
|
||||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
|
||||||
fi
|
fi
|
||||||
|
initConfigKey "lkm" "prod" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "dsmlogo" "true" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "directboot" "false" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "prerelease" "false" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "bootwait" "10" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "bootipwait" "10" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "kernelway" "power" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "kernelpanic" "5" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "odp" "false" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "model" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "productver" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "buildnum" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "smallnum" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "paturl" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "patsum" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "sn" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "mac1" "" "${USER_CONFIG_FILE}"
|
||||||
|
# initConfigKey "maxdisks" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "layout" "qwerty" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "keymap" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "zimage-hash" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "ramdisk-hash" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "cmdline" "{}" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "synoinfo" "{}" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "addons" "{}" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "addons.misc" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "addons.acpid" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "addons.reboottoloader" "" "${USER_CONFIG_FILE}"
|
||||||
|
initConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||||
|
|
||||||
# _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
|
# _sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
|
||||||
|
|
||||||
@ -119,14 +70,13 @@ done
|
|||||||
# Get the VID/PID if we are in USB
|
# Get the VID/PID if we are in USB
|
||||||
VID="0x46f4"
|
VID="0x46f4"
|
||||||
PID="0x0001"
|
PID="0x0001"
|
||||||
BUS=$(udevadm info --query property --name ${LOADER_DISK} | grep ID_BUS | cut -d= -f2)
|
BUS=$(getBus "${LOADER_DISK}")
|
||||||
[ "${BUS}" = "ata" ] && BUS="sata"
|
|
||||||
|
|
||||||
if [ "${BUS}" = "usb" ]; then
|
if [ "${BUS}" = "usb" ]; then
|
||||||
VID="0x$(udevadm info --query property --name ${LOADER_DISK} | grep ID_VENDOR_ID | cut -d= -f2)"
|
VID="0x$(udevadm info --query property --name ${LOADER_DISK} | grep ID_VENDOR_ID | cut -d= -f2)"
|
||||||
PID="0x$(udevadm info --query property --name ${LOADER_DISK} | grep ID_MODEL_ID | cut -d= -f2)"
|
PID="0x$(udevadm info --query property --name ${LOADER_DISK} | grep ID_MODEL_ID | cut -d= -f2)"
|
||||||
elif [ "${BUS}" != "sata" -a "${BUS}" != "scsi" ]; then
|
elif [ "${BUS}" != "sata" -a "${BUS}" != "scsi" -a "${BUS}" != "nvme" ]; then
|
||||||
die "$(TEXT "Loader disk neither USB or DoM")"
|
die "$(TEXT "Loader disk neither USB or SATA/SCSI/NVME DoM")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Save variables to user config file
|
# Save variables to user config file
|
||||||
@ -136,16 +86,6 @@ writeConfigKey "pid" ${PID} "${USER_CONFIG_FILE}"
|
|||||||
# Inform user
|
# Inform user
|
||||||
echo -e "$(TEXT "Loader disk:") \033[1;32m${LOADER_DISK}\033[0m (\033[1;32m${BUS^^} flashdisk\033[0m)"
|
echo -e "$(TEXT "Loader disk:") \033[1;32m${LOADER_DISK}\033[0m (\033[1;32m${BUS^^} flashdisk\033[0m)"
|
||||||
|
|
||||||
# Check if partition 3 occupies all free space, resize if needed
|
|
||||||
LOADER_DEVICE_NAME=$(echo ${LOADER_DISK} | sed 's|/dev/||')
|
|
||||||
SIZEOFDISK=$(cat /sys/block/${LOADER_DEVICE_NAME}/size)
|
|
||||||
ENDSECTOR=$(($(fdisk -l ${LOADER_DISK} | awk '/'${LOADER_DEVICE_NAME}3'/{print$3}') + 1))
|
|
||||||
if [ ${SIZEOFDISK} -ne ${ENDSECTOR} ]; then
|
|
||||||
echo -e "\033[1;36m$(printf "$(TEXT "Resizing %s")" "${LOADER_DISK}3")\033[0m"
|
|
||||||
echo -e "d\n\nn\n\n\n\n\nn\nw" | fdisk "${LOADER_DISK}" >"${LOG_FILE}" 2>&1 || dieLog
|
|
||||||
resize2fs "${LOADER_DISK}3" >"${LOG_FILE}" 2>&1 || dieLog
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Load keymap name
|
# Load keymap name
|
||||||
LAYOUT="$(readConfigKey "layout" "${USER_CONFIG_FILE}")"
|
LAYOUT="$(readConfigKey "layout" "${USER_CONFIG_FILE}")"
|
||||||
KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")"
|
KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")"
|
||||||
@ -210,7 +150,7 @@ for N in $(seq 0 $(expr ${#ETHX[@]} - 1)); do
|
|||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
COUNT=$((${COUNT} + 1))
|
COUNT=$((${COUNT} + 1))
|
||||||
IP=$(ip route show dev ${ETHX[${N}]} 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p')
|
IP="$(getIP ${ETHX[${N}]})"
|
||||||
if [ -n "${IP}" ]; then
|
if [ -n "${IP}" ]; then
|
||||||
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:7681\033[0m to configure the loader via web terminal.")" "${IP}")\n"
|
echo -en "\r${ETHX[${N}]}(${DRIVER}): $(printf "$(TEXT "Access \033[1;34mhttp://%s:7681\033[0m to configure the loader via web terminal.")" "${IP}")\n"
|
||||||
break
|
break
|
||||||
@ -228,6 +168,14 @@ echo -e "$(TEXT "User config is on") \033[1;32m${USER_CONFIG_FILE}\033[0m"
|
|||||||
echo -e "$(TEXT "Default SSH Root password is") \033[1;31mrr\033[0m"
|
echo -e "$(TEXT "Default SSH Root password is") \033[1;31mrr\033[0m"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
DSMLOGO="$(readConfigKey "dsmlogo" "${USER_CONFIG_FILE}")"
|
||||||
|
if [ "${DSMLOGO}" = "true" -a -c "/dev/fb0" ]; then
|
||||||
|
IP="$(getIP)"
|
||||||
|
[ -n "${IP}" ] && URL="http://${IP}:7681" || URL="http://arpl:7681/"
|
||||||
|
python ${WORK_PATH}/include/functions.py makeqr -d "${URL}" -l "bl" -o "${TMP_PATH}/qrcode.png"
|
||||||
|
[ -f "${TMP_PATH}/qrcode.png" ] && echo | fbv -acufi "${TMP_PATH}/qrcode.png" >/dev/null 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
# Check memory
|
# Check memory
|
||||||
RAM=$(free -m | awk '/Mem:/{print$2}')
|
RAM=$(free -m | awk '/Mem:/{print$2}')
|
||||||
if [ ${RAM} -le 3500 ]; then
|
if [ ${RAM} -le 3500 ]; then
|
||||||
@ -238,4 +186,4 @@ mkdir -p "${ADDONS_PATH}"
|
|||||||
mkdir -p "${LKM_PATH}"
|
mkdir -p "${LKM_PATH}"
|
||||||
mkdir -p "${MODULES_PATH}"
|
mkdir -p "${MODULES_PATH}"
|
||||||
|
|
||||||
install-addons.sh
|
updateAddons
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
. /opt/rr/include/functions.sh
|
|
||||||
|
|
||||||
# Detect if has new local plugins to install/reinstall
|
|
||||||
for F in $(ls ${CACHE_PATH}/*.addon 2>/dev/null); do
|
|
||||||
ADDON=$(basename "${F}" | sed 's|.addon||')
|
|
||||||
rm -rf "${ADDONS_PATH}/${ADDON}"
|
|
||||||
mkdir -p "${ADDONS_PATH}/${ADDON}"
|
|
||||||
echo "Installing ${F} to ${ADDONS_PATH}/${ADDON}"
|
|
||||||
tar -xaf "${F}" -C "${ADDONS_PATH}/${ADDON}"
|
|
||||||
rm -f "${F}"
|
|
||||||
done
|
|
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,22 +1,22 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
. /opt/rr/include/functions.sh
|
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||||
. /opt/rr/include/addons.sh
|
|
||||||
. /opt/rr/include/modules.sh
|
. ${WORK_PATH}/include/functions.sh
|
||||||
|
. ${WORK_PATH}/include/addons.sh
|
||||||
|
. ${WORK_PATH}/include/modules.sh
|
||||||
|
|
||||||
|
[ -z "${LOADER_DISK}" ] && die "$(TEXT "Loader is not init!")"
|
||||||
|
|
||||||
# Check partition 3 space, if < 2GiB is necessary clean cache folder
|
# Check partition 3 space, if < 2GiB is necessary clean cache folder
|
||||||
CLEARCACHE=0
|
CLEARCACHE=0
|
||||||
LOADER_DISK="$(blkid | grep 'LABEL="RR3"' | cut -d3 -f1)"
|
if [ $(cat "/sys/block/${LOADER_DISK/\/dev\//}/${LOADER_DISK_PART3/\/dev\//}/size") -lt 4194304 ]; then
|
||||||
LOADER_DEVICE_NAME=$(echo "${LOADER_DISK}" | sed 's|/dev/||')
|
|
||||||
if [ $(cat "/sys/block/${LOADER_DEVICE_NAME}/${LOADER_DEVICE_NAME}3/size") -lt 4194304 ]; then
|
|
||||||
CLEARCACHE=1
|
CLEARCACHE=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get actual IP
|
# Get actual IP
|
||||||
IP=$(ip route 2>/dev/null | sed -n 's/.* via .* dev \(.*\) src \(.*\) metric .*/\1: \2 /p' | head -1)
|
IP="$(getIP)"
|
||||||
|
|
||||||
# Dirty flag
|
|
||||||
DIRTY=0
|
|
||||||
# Debug flag
|
# Debug flag
|
||||||
# DEBUG=0
|
# DEBUG=0
|
||||||
|
|
||||||
@ -93,10 +93,11 @@ function modelMenu() {
|
|||||||
Y=$(echo ${M} | tr -cd "[0-9]")
|
Y=$(echo ${M} | tr -cd "[0-9]")
|
||||||
Y=${Y:0-2}
|
Y=${Y:0-2}
|
||||||
echo "${M} ${Y}" >>"${TMP_PATH}/modellist"
|
echo "${M} ${Y}" >>"${TMP_PATH}/modellist"
|
||||||
done < <(find "${MODEL_CONFIG_PATH}" -maxdepth 1 -name \*.yml | sed 's/.*\///; s/\.yml//')
|
done < <(find "${WORK_PATH}/model-configs" -maxdepth 1 -name \*.yml | sed 's/.*\///; s/\.yml//')
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
echo -n "" >"${TMP_PATH}/menu"
|
echo -n "" >"${TMP_PATH}/menu"
|
||||||
|
echo "c \"\Z1$(TEXT "Compatibility judgment")\Zn\"" >>"${TMP_PATH}/menu"
|
||||||
FLGNEX=0
|
FLGNEX=0
|
||||||
while read M Y; do
|
while read M Y; do
|
||||||
PLATFORM=$(readModelKey "${M}" "platform")
|
PLATFORM=$(readModelKey "${M}" "platform")
|
||||||
@ -119,21 +120,12 @@ function modelMenu() {
|
|||||||
done < <(cat "${TMP_PATH}/modellist" | sort -r -n -k 2)
|
done < <(cat "${TMP_PATH}/modellist" | sort -r -n -k 2)
|
||||||
[ ${FLGNEX} -eq 1 ] && echo "f \"\Z1$(TEXT "Disable flags restriction")\Zn\"" >>"${TMP_PATH}/menu"
|
[ ${FLGNEX} -eq 1 ] && echo "f \"\Z1$(TEXT "Disable flags restriction")\Zn\"" >>"${TMP_PATH}/menu"
|
||||||
[ ${FLGBETA} -eq 0 ] && echo "b \"\Z1$(TEXT "Show all models")\Zn\"" >>"${TMP_PATH}/menu"
|
[ ${FLGBETA} -eq 0 ] && echo "b \"\Z1$(TEXT "Show all models")\Zn\"" >>"${TMP_PATH}/menu"
|
||||||
echo "c \"\Z1$(TEXT "Compatibility judgment")\Zn\"" >>"${TMP_PATH}/menu"
|
|
||||||
dialog --backtitle "$(backtitle)" --colors \
|
dialog --backtitle "$(backtitle)" --colors \
|
||||||
--menu "$(TEXT "Choose the model")" 0 0 0 --file "${TMP_PATH}/menu" \
|
--menu "$(TEXT "Choose the model")" 0 0 0 --file "${TMP_PATH}/menu" \
|
||||||
2>${TMP_PATH}/resp
|
2>${TMP_PATH}/resp
|
||||||
[ $? -ne 0 ] && return
|
[ $? -ne 0 ] && return
|
||||||
resp=$(<${TMP_PATH}/resp)
|
resp=$(<${TMP_PATH}/resp)
|
||||||
[ -z "${resp}" ] && return
|
[ -z "${resp}" ] && return
|
||||||
if [ "${resp}" = "f" ]; then
|
|
||||||
RESTRICT=0
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ "${resp}" = "b" ]; then
|
|
||||||
FLGBETA=1
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ "${resp}" = "c" ]; then
|
if [ "${resp}" = "c" ]; then
|
||||||
models=(DS918+ RS1619xs+ DS419+ DS1019+ DS719+ DS1621xs+)
|
models=(DS918+ RS1619xs+ DS419+ DS1019+ DS719+ DS1621xs+)
|
||||||
[ $(lspci -d ::300 | grep 8086 | wc -l) -gt 0 ] && iGPU=1 || iGPU=0
|
[ $(lspci -d ::300 | grep 8086 | wc -l) -gt 0 ] && iGPU=1 || iGPU=0
|
||||||
@ -165,7 +157,7 @@ function modelMenu() {
|
|||||||
[ "${DT}" = "true" ] && M_2="* "
|
[ "${DT}" = "true" ] && M_2="* "
|
||||||
fi
|
fi
|
||||||
if [ "${NVME}" = "2" ]; then
|
if [ "${NVME}" = "2" ]; then
|
||||||
if echo ${models[@]} | grep -q ${M}; then
|
if echo ${models[@]} | grep -q ${M}; then
|
||||||
M_2="* "
|
M_2="* "
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -175,6 +167,14 @@ function modelMenu() {
|
|||||||
--textbox "${TMP_PATH}/opts" 0 0
|
--textbox "${TMP_PATH}/opts" 0 0
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
if [ "${resp}" = "f" ]; then
|
||||||
|
RESTRICT=0
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
if [ "${resp}" = "b" ]; then
|
||||||
|
FLGBETA=1
|
||||||
|
continue
|
||||||
|
fi
|
||||||
break
|
break
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
@ -199,14 +199,14 @@ function modelMenu() {
|
|||||||
for I in $(seq 1 ${NETIF_NUM}); do
|
for I in $(seq 1 ${NETIF_NUM}); do
|
||||||
writeConfigKey "mac${I}" "${MACS[$((${I} - 1))]}" "${USER_CONFIG_FILE}"
|
writeConfigKey "mac${I}" "${MACS[$((${I} - 1))]}" "${USER_CONFIG_FILE}"
|
||||||
done
|
done
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Shows available buildnumbers from a model to user choose one
|
# Shows available buildnumbers from a model to user choose one
|
||||||
function productversMenu() {
|
function productversMenu() {
|
||||||
ITEMS="$(readConfigEntriesArray "productvers" "${MODEL_CONFIG_PATH}/${MODEL}.yml" | sort -r)"
|
ITEMS="$(readConfigEntriesArray "productvers" "${WORK_PATH}/model-configs/${MODEL}.yml" | sort -r)"
|
||||||
if [ -z "${1}" ]; then
|
if [ -z "${1}" ]; then
|
||||||
dialog --backtitle "$(backtitle)" --colors \
|
dialog --backtitle "$(backtitle)" --colors \
|
||||||
--no-items --menu "$(TEXT "Choose a product version")" 0 0 0 ${ITEMS} \
|
--no-items --menu "$(TEXT "Choose a product version")" 0 0 0 ${ITEMS} \
|
||||||
@ -229,15 +229,15 @@ function productversMenu() {
|
|||||||
--msgbox "$(TEXT "This version does not support UEFI startup, Please select another version or switch the startup mode.")" 0 0
|
--msgbox "$(TEXT "This version does not support UEFI startup, Please select another version or switch the startup mode.")" 0 0
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
if [ ! "usb" = "$(udevadm info --query property --name ${LOADER_DISK} | grep ID_BUS | cut -d= -f2)" -a "${KVER:0:1}" = "5" ]; then
|
# if [ ! "usb" = "$(getBus "${LOADER_DISK}")" -a "${KVER:0:1}" = "5" ]; then
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Product Version")" \
|
# dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Product Version")" \
|
||||||
--msgbox "$(TEXT "This version only support usb startup, Please select another version or switch the startup mode.")" 0 0
|
# --msgbox "$(TEXT "This version only support usb startup, Please select another version or switch the startup mode.")" 0 0
|
||||||
# return
|
# # return
|
||||||
fi
|
# fi
|
||||||
while true; do
|
while true; do
|
||||||
# get online pat data
|
# get online pat data
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Product Version")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Product Version")" \
|
||||||
--infobox "$(TEXT "Get pat data ..")" 0 0
|
--infobox "$(TEXT "Get pat data ...")" 0 0
|
||||||
idx=0
|
idx=0
|
||||||
while [ ${idx} -le 3 ]; do # Loop 3 times, if successful, break
|
while [ ${idx} -le 3 ]; do # Loop 3 times, if successful, break
|
||||||
fastest=$(_get_fastest "www.synology.com" "www.synology.cn")
|
fastest=$(_get_fastest "www.synology.com" "www.synology.cn")
|
||||||
@ -306,7 +306,7 @@ function productversMenu() {
|
|||||||
done < <(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}")
|
done < <(getAllModules "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}")
|
||||||
# Remove old files
|
# Remove old files
|
||||||
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}"
|
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}"
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -362,7 +362,7 @@ function addonMenu() {
|
|||||||
VALUE="$(<"${TMP_PATH}/resp")"
|
VALUE="$(<"${TMP_PATH}/resp")"
|
||||||
ADDONS[${ADDON}]="${VALUE}"
|
ADDONS[${ADDON}]="${VALUE}"
|
||||||
writeConfigKey "addons.${ADDON}" "${VALUE}" "${USER_CONFIG_FILE}"
|
writeConfigKey "addons.${ADDON}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
NEXT='d'
|
NEXT='d'
|
||||||
@ -385,7 +385,7 @@ function addonMenu() {
|
|||||||
unset ADDONS[${I}]
|
unset ADDONS[${I}]
|
||||||
deleteConfigKey "addons.${I}" "${USER_CONFIG_FILE}"
|
deleteConfigKey "addons.${I}" "${USER_CONFIG_FILE}"
|
||||||
done
|
done
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
;;
|
;;
|
||||||
s)
|
s)
|
||||||
NEXT='s'
|
NEXT='s'
|
||||||
@ -441,7 +441,7 @@ function addonMenu() {
|
|||||||
fi
|
fi
|
||||||
ADDON="$(untarAddon "${TMP_UP_PATH}/${USER_FILE}")"
|
ADDON="$(untarAddon "${TMP_UP_PATH}/${USER_FILE}")"
|
||||||
if [ -n "${ADDON}" ]; then
|
if [ -n "${ADDON}" ]; then
|
||||||
[ -f "${CACHE_PATH}/addons/VERSION" ] && rm -f "${CACHE_PATH}/addons/VERSION"
|
[ -f "${PART3_PATH}/addons/VERSION" ] && rm -f "${PART3_PATH}/addons/VERSION"
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Addons")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Addons")" \
|
||||||
--msgbox "$(printf "$(TEXT "Addon '%s' added to loader, Please enable it in 'Add an addon' menu.")" "${ADDON}")" 0 0
|
--msgbox "$(printf "$(TEXT "Addon '%s' added to loader, Please enable it in 'Add an addon' menu.")" "${ADDON}")" 0 0
|
||||||
else
|
else
|
||||||
@ -501,7 +501,7 @@ function moduleMenu() {
|
|||||||
for ID in ${resp}; do
|
for ID in ${resp}; do
|
||||||
writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}"
|
writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}"
|
||||||
done
|
done
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
break
|
break
|
||||||
;;
|
;;
|
||||||
3) # extra-button
|
3) # extra-button
|
||||||
@ -509,11 +509,11 @@ function moduleMenu() {
|
|||||||
while read ID DESC; do
|
while read ID DESC; do
|
||||||
writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}"
|
writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}"
|
||||||
done <<<${ALLMODULES}
|
done <<<${ALLMODULES}
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
;;
|
;;
|
||||||
2) # help-button
|
2) # help-button
|
||||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
;;
|
;;
|
||||||
1) # cancel-button
|
1) # cancel-button
|
||||||
break
|
break
|
||||||
@ -536,7 +536,7 @@ function moduleMenu() {
|
|||||||
for ID in ${KOLIST[@]}; do
|
for ID in ${KOLIST[@]}; do
|
||||||
writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}"
|
writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}"
|
||||||
done
|
done
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
;;
|
;;
|
||||||
o)
|
o)
|
||||||
MSG=""
|
MSG=""
|
||||||
@ -563,7 +563,7 @@ function moduleMenu() {
|
|||||||
popd
|
popd
|
||||||
if [ -n "${USER_FILE}" -a "${USER_FILE##*.}" = "ko" ]; then
|
if [ -n "${USER_FILE}" -a "${USER_FILE##*.}" = "ko" ]; then
|
||||||
addToModules ${PLATFORM} "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}" "${TMP_UP_PATH}/${USER_FILE}"
|
addToModules ${PLATFORM} "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}" "${TMP_UP_PATH}/${USER_FILE}"
|
||||||
[ -f "${CACHE_PATH}/modules/VERSION" ] && rm -f "${CACHE_PATH}/modules/VERSION"
|
[ -f "${PART3_PATH}/modules/VERSION" ] && rm -f "${PART3_PATH}/modules/VERSION"
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Modules")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Modules")" \
|
||||||
--msgbox "$(printf "$(TEXT "Module '%s' added to %s-%s")" "${USER_FILE}" "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}")" 0 0
|
--msgbox "$(printf "$(TEXT "Module '%s' added to %s-%s")" "${USER_FILE}" "${PLATFORM}" "$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}")" 0 0
|
||||||
rm -f "${TMP_UP_PATH}/${USER_FILE}"
|
rm -f "${TMP_UP_PATH}/${USER_FILE}"
|
||||||
@ -736,7 +736,7 @@ function synoinfoMenu() {
|
|||||||
VALUE="$(<"${TMP_PATH}/resp")"
|
VALUE="$(<"${TMP_PATH}/resp")"
|
||||||
SYNOINFO[${NAME}]="${VALUE}"
|
SYNOINFO[${NAME}]="${VALUE}"
|
||||||
writeConfigKey "synoinfo.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
|
writeConfigKey "synoinfo.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
if [ ${#SYNOINFO[@]} -eq 0 ]; then
|
if [ ${#SYNOINFO[@]} -eq 0 ]; then
|
||||||
@ -758,7 +758,7 @@ function synoinfoMenu() {
|
|||||||
unset SYNOINFO[${I}]
|
unset SYNOINFO[${I}]
|
||||||
deleteConfigKey "synoinfo.${I}" "${USER_CONFIG_FILE}"
|
deleteConfigKey "synoinfo.${I}" "${USER_CONFIG_FILE}"
|
||||||
done
|
done
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
;;
|
;;
|
||||||
s)
|
s)
|
||||||
ITEMS=""
|
ITEMS=""
|
||||||
@ -779,11 +779,12 @@ function extractDsmFiles() {
|
|||||||
PATURL="$(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
|
PATURL="$(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
|
||||||
PATSUM="$(readConfigKey "patsum" "${USER_CONFIG_FILE}")"
|
PATSUM="$(readConfigKey "patsum" "${USER_CONFIG_FILE}")"
|
||||||
|
|
||||||
SPACELEFT=$(df --block-size=1 | awk '/'${LOADER_DEVICE_NAME}'3/{print $4}') # Check disk space left
|
# Check disk space left
|
||||||
|
SPACELEFT=$(df --block-size=1 | grep ${LOADER_DISK_PART3} | awk '{print $4}')
|
||||||
|
|
||||||
PAT_FILE="${MODEL}-${PRODUCTVER}.pat"
|
PAT_FILE="${MODEL}-${PRODUCTVER}.pat"
|
||||||
PAT_PATH="${CACHE_PATH}/dl/${PAT_FILE}"
|
PAT_PATH="${PART3_PATH}/dl/${PAT_FILE}"
|
||||||
EXTRACTOR_PATH="${CACHE_PATH}/extractor"
|
EXTRACTOR_PATH="${PART3_PATH}/extractor"
|
||||||
EXTRACTOR_BIN="syno_extract_system_patch"
|
EXTRACTOR_BIN="syno_extract_system_patch"
|
||||||
OLDPATURL="https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat"
|
OLDPATURL="https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_DS3622xs%2B_42218.pat"
|
||||||
|
|
||||||
@ -793,10 +794,11 @@ function extractDsmFiles() {
|
|||||||
# If we have little disk space, clean cache folder
|
# If we have little disk space, clean cache folder
|
||||||
if [ ${CLEARCACHE} -eq 1 ]; then
|
if [ ${CLEARCACHE} -eq 1 ]; then
|
||||||
echo "$(TEXT "Cleaning cache")"
|
echo "$(TEXT "Cleaning cache")"
|
||||||
rm -rf "${CACHE_PATH}/dl"
|
rm -rf "${PART3_PATH}/dl"
|
||||||
fi
|
fi
|
||||||
mkdir -p "${CACHE_PATH}/dl"
|
mkdir -p "${PART3_PATH}/dl"
|
||||||
fastest=$(_get_fastest "global.synologydownload.com" "global.download.synology.com" "cndl.synology.cn")
|
mirrors=("global.synologydownload.com" "global.download.synology.com" "cndl.synology.cn")
|
||||||
|
fastest=$(_get_fastest ${mirrors[@]})
|
||||||
mirror="$(echo ${PATURL} | sed 's|^http[s]*://\([^/]*\).*|\1|')"
|
mirror="$(echo ${PATURL} | sed 's|^http[s]*://\([^/]*\).*|\1|')"
|
||||||
if echo "${mirrors[@]}" | grep -wq "${mirror}" && [ "${mirror}" != "${fastest}" ]; then
|
if echo "${mirrors[@]}" | grep -wq "${mirror}" && [ "${mirror}" != "${fastest}" ]; then
|
||||||
echo "$(printf "$(TEXT "Based on the current network situation, switch to %s mirror to downloading.")" "${fastest}")"
|
echo "$(printf "$(TEXT "Based on the current network situation, switch to %s mirror to downloading.")" "${fastest}")"
|
||||||
@ -810,7 +812,7 @@ function extractDsmFiles() {
|
|||||||
# No disk space to download, change it to RAMDISK
|
# No disk space to download, change it to RAMDISK
|
||||||
PAT_PATH="${TMP_PATH}/${PAT_FILE}"
|
PAT_PATH="${TMP_PATH}/${PAT_FILE}"
|
||||||
fi
|
fi
|
||||||
STATUS=$(curl -k -w "%{http_code}" -L "${PATURL}" -o "${PAT_PATH}" --progress-bar)
|
STATUS=$(curl -k -w "%{http_code}" -L "${PATURL}" -o "${PAT_PATH}")
|
||||||
if [ $? -ne 0 -o ${STATUS} -ne 200 ]; then
|
if [ $? -ne 0 -o ${STATUS} -ne 200 ]; then
|
||||||
rm -f "${PAT_PATH}"
|
rm -f "${PAT_PATH}"
|
||||||
MSG="$(printf "$(TEXT "Check internet or cache disk space.\nError: %d")" "${STATUS}")"
|
MSG="$(printf "$(TEXT "Check internet or cache disk space.\nError: %d")" "${STATUS}")"
|
||||||
@ -854,7 +856,7 @@ function extractDsmFiles() {
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
SPACELEFT=$(df --block-size=1 | awk '/'${LOADER_DEVICE_NAME}'3/{print$4}') # Check disk space left
|
SPACELEFT=$(df --block-size=1 | grep ${LOADER_DISK_PART3} | awk '{print $4}') # Check disk space left
|
||||||
|
|
||||||
if [ "${isencrypted}" = "yes" ]; then
|
if [ "${isencrypted}" = "yes" ]; then
|
||||||
# Check existance of extractor
|
# Check existance of extractor
|
||||||
@ -864,7 +866,7 @@ function extractDsmFiles() {
|
|||||||
# Extractor not exists, get it.
|
# Extractor not exists, get it.
|
||||||
mkdir -p "${EXTRACTOR_PATH}"
|
mkdir -p "${EXTRACTOR_PATH}"
|
||||||
# Check if old pat already downloaded
|
# Check if old pat already downloaded
|
||||||
OLDPAT_PATH="${CACHE_PATH}/dl/DS3622xs+-42218.pat"
|
OLDPAT_PATH="${PART3_PATH}/dl/DS3622xs+-42218.pat"
|
||||||
if [ ! -f "${OLDPAT_PATH}" ]; then
|
if [ ! -f "${OLDPAT_PATH}" ]; then
|
||||||
echo "$(TEXT "Downloading old pat to extract synology .pat extractor...")"
|
echo "$(TEXT "Downloading old pat to extract synology .pat extractor...")"
|
||||||
# Discover remote file size
|
# Discover remote file size
|
||||||
@ -873,7 +875,7 @@ function extractDsmFiles() {
|
|||||||
# No disk space to download, change it to RAMDISK
|
# No disk space to download, change it to RAMDISK
|
||||||
OLDPAT_PATH="${TMP_PATH}/DS3622xs+-42218.pat"
|
OLDPAT_PATH="${TMP_PATH}/DS3622xs+-42218.pat"
|
||||||
fi
|
fi
|
||||||
STATUS=$(curl -k -w "%{http_code}" -L "${OLDPATURL}" -o "${OLDPAT_PATH}" --progress-bar)
|
STATUS=$(curl -k -w "%{http_code}" -L "${OLDPATURL}" -o "${OLDPAT_PATH}")
|
||||||
if [ $? -ne 0 -o ${STATUS} -ne 200 ]; then
|
if [ $? -ne 0 -o ${STATUS} -ne 200 ]; then
|
||||||
rm -f "${OLDPAT_PATH}"
|
rm -f "${OLDPAT_PATH}"
|
||||||
MSG="$(printf "$(TEXT "Check internet or cache disk space.\nError: %d")" "${STATUS}")"
|
MSG="$(printf "$(TEXT "Check internet or cache disk space.\nError: %d")" "${STATUS}")"
|
||||||
@ -933,38 +935,19 @@ function extractDsmFiles() {
|
|||||||
echo "$(TEXT "OK")"
|
echo "$(TEXT "OK")"
|
||||||
|
|
||||||
echo -n "$(TEXT "Copying files: ")"
|
echo -n "$(TEXT "Copying files: ")"
|
||||||
cp -f "${UNTAR_PAT_PATH}/grub_cksum.syno" "${BOOTLOADER_PATH}"
|
cp -f "${UNTAR_PAT_PATH}/grub_cksum.syno" "${PART1_PATH}"
|
||||||
cp -f "${UNTAR_PAT_PATH}/GRUB_VER" "${BOOTLOADER_PATH}"
|
cp -f "${UNTAR_PAT_PATH}/GRUB_VER" "${PART1_PATH}"
|
||||||
cp -f "${UNTAR_PAT_PATH}/grub_cksum.syno" "${SLPART_PATH}"
|
cp -f "${UNTAR_PAT_PATH}/grub_cksum.syno" "${PART2_PATH}"
|
||||||
cp -f "${UNTAR_PAT_PATH}/GRUB_VER" "${SLPART_PATH}"
|
cp -f "${UNTAR_PAT_PATH}/GRUB_VER" "${PART2_PATH}"
|
||||||
cp -f "${UNTAR_PAT_PATH}/zImage" "${ORI_ZIMAGE_FILE}"
|
cp -f "${UNTAR_PAT_PATH}/zImage" "${ORI_ZIMAGE_FILE}"
|
||||||
cp -f "${UNTAR_PAT_PATH}/rd.gz" "${ORI_RDGZ_FILE}"
|
cp -f "${UNTAR_PAT_PATH}/rd.gz" "${ORI_RDGZ_FILE}"
|
||||||
rm -rf "${UNTAR_PAT_PATH}"
|
rm -rf "${UNTAR_PAT_PATH}"
|
||||||
echo "$(TEXT "OK")"
|
echo "$(TEXT "OK")"
|
||||||
}
|
}
|
||||||
|
|
||||||
# 1 - model
|
|
||||||
function getLogo() {
|
|
||||||
rm -f "${CACHE_PATH}/logo.png"
|
|
||||||
if [ "${DSMLOGO}" = "true" ]; then
|
|
||||||
fastest=$(_get_fastest "www.synology.com" "www.synology.cn")
|
|
||||||
STATUS=$(curl -skL -w "%{http_code}" "https://${fastest}/api/products/getPhoto?product=${MODEL/+/%2B}&type=img_s&sort=0" -o "${CACHE_PATH}/logo.png")
|
|
||||||
if [ $? -ne 0 -o ${STATUS} -ne 200 -o -f "${CACHE_PATH}/logo.png" ]; then
|
|
||||||
convert -rotate 180 "${CACHE_PATH}/logo.png" "${CACHE_PATH}/logo.png" 2>/dev/null
|
|
||||||
magick montage "${CACHE_PATH}/logo.png" -background 'none' -tile '3x3' -geometry '350x210' "${CACHE_PATH}/logo.png" 2>/dev/null
|
|
||||||
convert -rotate 180 "${CACHE_PATH}/logo.png" "${CACHE_PATH}/logo.png" 2>/dev/null
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Where the magic happens!
|
# Where the magic happens!
|
||||||
function make() {
|
function make() {
|
||||||
# clear
|
|
||||||
clear
|
|
||||||
# get logo.png
|
|
||||||
getLogo "${MODEL}"
|
|
||||||
|
|
||||||
PLATFORM="$(readModelKey "${MODEL}" "platform")"
|
PLATFORM="$(readModelKey "${MODEL}" "platform")"
|
||||||
KVER="$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kver")"
|
KVER="$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kver")"
|
||||||
KPRE="$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kpre")"
|
KPRE="$(readModelKey "${MODEL}" "productvers.[${PRODUCTVER}].kpre")"
|
||||||
@ -983,19 +966,24 @@ function make() {
|
|||||||
[ $? -ne 0 ] && return 1
|
[ $? -ne 0 ] && return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
/opt/rr/zimage-patch.sh
|
# Check disk space left
|
||||||
|
SPACELEFT=$(df --block-size=1 | grep ${LOADER_DISK_PART3} | awk '{print $4}')
|
||||||
|
[ ${SPACELEFT} -le 268435456 ] && rm -rf "${PART3_PATH}/dl"
|
||||||
|
|
||||||
|
${WORK_PATH}/zimage-patch.sh
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Error")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Error")" \
|
||||||
--msgbox "$(TEXT "zImage not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")" 0 0
|
--msgbox "$(TEXT "zImage not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")" 0 0
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
/opt/rr/ramdisk-patch.sh
|
${WORK_PATH}/ramdisk-patch.sh
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Error")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Error")" \
|
||||||
--msgbox "$(TEXT "Ramdisk not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")" 0 0
|
--msgbox "$(TEXT "Ramdisk not patched,\nPlease upgrade the bootloader version and try again.\nPatch error:\n")$(<"${LOG_FILE}")" 0 0
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
rm -f ${PART1_PATH}/.build
|
||||||
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||||
BUILDNUM="$(readConfigKey "buildnum" "${USER_CONFIG_FILE}")"
|
BUILDNUM="$(readConfigKey "buildnum" "${USER_CONFIG_FILE}")"
|
||||||
SMALLNUM="$(readConfigKey "smallnum" "${USER_CONFIG_FILE}")"
|
SMALLNUM="$(readConfigKey "smallnum" "${USER_CONFIG_FILE}")"
|
||||||
@ -1003,7 +991,6 @@ function make() {
|
|||||||
rm -rf "${UNTAR_PAT_PATH}"
|
rm -rf "${UNTAR_PAT_PATH}"
|
||||||
echo "$(TEXT "Ready!")"
|
echo "$(TEXT "Ready!")"
|
||||||
sleep 3
|
sleep 3
|
||||||
DIRTY=0
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1045,7 +1032,7 @@ function advancedMenu() {
|
|||||||
echo "r \"$(TEXT "Restore bootloader disk # test")\"" >>"${TMP_PATH}/menu"
|
echo "r \"$(TEXT "Restore bootloader disk # test")\"" >>"${TMP_PATH}/menu"
|
||||||
fi
|
fi
|
||||||
echo "o \"$(TEXT "Install development tools")\"" >>"${TMP_PATH}/menu"
|
echo "o \"$(TEXT "Install development tools")\"" >>"${TMP_PATH}/menu"
|
||||||
echo "g \"$(TEXT "Show dsm logo:") \Z4${DSMLOGO}\Zn\"" >>"${TMP_PATH}/menu"
|
echo "g \"$(TEXT "Show QR logo:") \Z4${DSMLOGO}\Zn\"" >>"${TMP_PATH}/menu"
|
||||||
echo "e \"$(TEXT "Exit")\"" >>"${TMP_PATH}/menu"
|
echo "e \"$(TEXT "Exit")\"" >>"${TMP_PATH}/menu"
|
||||||
|
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
||||||
@ -1056,7 +1043,7 @@ function advancedMenu() {
|
|||||||
l)
|
l)
|
||||||
LKM=$([ "${LKM}" = "dev" ] && echo 'prod' || ([ "${LKM}" = "test" ] && echo 'dev' || echo 'test'))
|
LKM=$([ "${LKM}" = "dev" ] && echo 'prod' || ([ "${LKM}" = "test" ] && echo 'dev' || echo 'test'))
|
||||||
writeConfigKey "lkm" "${LKM}" "${USER_CONFIG_FILE}"
|
writeConfigKey "lkm" "${LKM}" "${USER_CONFIG_FILE}"
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
NEXT="l"
|
NEXT="l"
|
||||||
;;
|
;;
|
||||||
q)
|
q)
|
||||||
@ -1144,7 +1131,7 @@ function advancedMenu() {
|
|||||||
IDX=$((${IDX} + 1))
|
IDX=$((${IDX} + 1))
|
||||||
done
|
done
|
||||||
sleep 1
|
sleep 1
|
||||||
IP=$(ip route 2>/dev/null | sed -n 's/.* via .* dev \(.*\) src \(.*\) metric .*/\1: \2 /p' | head -1)
|
IP="$(getIP)"
|
||||||
) 2>&1 | dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
) 2>&1 | dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
||||||
--progressbox "$(TEXT "Setting IP ...")" 20 100
|
--progressbox "$(TEXT "Setting IP ...")" 20 100
|
||||||
NEXT="e"
|
NEXT="e"
|
||||||
@ -1226,7 +1213,7 @@ function advancedMenu() {
|
|||||||
writeConfigKey "paturl" "${paturl}" "${USER_CONFIG_FILE}"
|
writeConfigKey "paturl" "${paturl}" "${USER_CONFIG_FILE}"
|
||||||
writeConfigKey "patsum" "${patsum}" "${USER_CONFIG_FILE}"
|
writeConfigKey "patsum" "${patsum}" "${USER_CONFIG_FILE}"
|
||||||
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}"
|
rm -f "${ORI_ZIMAGE_FILE}" "${ORI_RDGZ_FILE}" "${MOD_ZIMAGE_FILE}" "${MOD_RDGZ_FILE}"
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
a)
|
a)
|
||||||
@ -1239,7 +1226,7 @@ function advancedMenu() {
|
|||||||
[ $? -ne 0 ] && return
|
[ $? -ne 0 ] && return
|
||||||
(
|
(
|
||||||
mkdir -p "${TMP_PATH}/sdX1"
|
mkdir -p "${TMP_PATH}/sdX1"
|
||||||
for I in $(ls /dev/sd*1 2>/dev/null | grep -v "${LOADER_DISK}1"); do
|
for I in $(ls /dev/sd.*1 2>/dev/null | grep -v "${LOADER_DISK_PART1}"); do
|
||||||
mount "${I}" "${TMP_PATH}/sdX1"
|
mount "${I}" "${TMP_PATH}/sdX1"
|
||||||
[ -f "${TMP_PATH}/sdX1/etc/VERSION" ] && rm -f "${TMP_PATH}/sdX1/etc/VERSION"
|
[ -f "${TMP_PATH}/sdX1/etc/VERSION" ] && rm -f "${TMP_PATH}/sdX1/etc/VERSION"
|
||||||
[ -f "${TMP_PATH}/sdX1/etc.defaults/VERSION" ] && rm -f "${TMP_PATH}/sdX1/etc.defaults/VERSION"
|
[ -f "${TMP_PATH}/sdX1/etc.defaults/VERSION" ] && rm -f "${TMP_PATH}/sdX1/etc.defaults/VERSION"
|
||||||
@ -1257,7 +1244,7 @@ function advancedMenu() {
|
|||||||
rm -f "${TMP_PATH}/opts"
|
rm -f "${TMP_PATH}/opts"
|
||||||
while read POSITION NAME; do
|
while read POSITION NAME; do
|
||||||
[ -z "${POSITION}" -o -z "${NAME}" ] && continue
|
[ -z "${POSITION}" -o -z "${NAME}" ] && continue
|
||||||
echo "${POSITION}" | grep -q "${LOADER_DEVICE_NAME}" && continue
|
echo "${POSITION}" | grep -q "${LOADER_DISK}" && continue
|
||||||
echo "\"${POSITION}\" \"${NAME}\" \"off\"" >>"${TMP_PATH}/opts"
|
echo "\"${POSITION}\" \"${NAME}\" \"off\"" >>"${TMP_PATH}/opts"
|
||||||
done < <(ls -l /dev/disk/by-id/ | sed 's|../..|/dev|g' | grep -E "/dev/sd|/dev/nvme" | awk -F' ' '{print $NF" "$(NF-2)}' | sort -uk 1,1)
|
done < <(ls -l /dev/disk/by-id/ | sed 's|../..|/dev|g' | grep -E "/dev/sd|/dev/nvme" | awk -F' ' '{print $NF" "$(NF-2)}' | sort -uk 1,1)
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
||||||
@ -1289,7 +1276,7 @@ function advancedMenu() {
|
|||||||
x)
|
x)
|
||||||
SHADOW_FILE=""
|
SHADOW_FILE=""
|
||||||
mkdir -p "${TMP_PATH}/sdX1"
|
mkdir -p "${TMP_PATH}/sdX1"
|
||||||
for I in $(ls /dev/sd*1 2>/dev/null | grep -v "${LOADER_DISK}1"); do
|
for I in $(ls /dev/sd*1 2>/dev/null | grep -v "${LOADER_DISK_PART1}"); do
|
||||||
mount ${I} "${TMP_PATH}/sdX1"
|
mount ${I} "${TMP_PATH}/sdX1"
|
||||||
if [ -f "${TMP_PATH}/sdX1/etc/shadow" ]; then
|
if [ -f "${TMP_PATH}/sdX1/etc/shadow" ]; then
|
||||||
cp -f "${TMP_PATH}/sdX1/etc/shadow" "${TMP_PATH}/shadow_bak"
|
cp -f "${TMP_PATH}/sdX1/etc/shadow" "${TMP_PATH}/shadow_bak"
|
||||||
@ -1325,7 +1312,7 @@ function advancedMenu() {
|
|||||||
NEWPASSWD="$(python -c "import crypt,getpass;pw=\"${VALUE}\";print(crypt.crypt(pw))")"
|
NEWPASSWD="$(python -c "import crypt,getpass;pw=\"${VALUE}\";print(crypt.crypt(pw))")"
|
||||||
(
|
(
|
||||||
mkdir -p "${TMP_PATH}/sdX1"
|
mkdir -p "${TMP_PATH}/sdX1"
|
||||||
for I in $(ls /dev/sd*1 2>/dev/null | grep -v ${LOADER_DISK}1); do
|
for I in $(ls /dev/sd.*1 2>/dev/null | grep -v ${LOADER_DISK_PART1}); do
|
||||||
mount "${I}" "${TMP_PATH}/sdX1"
|
mount "${I}" "${TMP_PATH}/sdX1"
|
||||||
sed -i "s|${OLDPASSWD}|${NEWPASSWD}|g" "${TMP_PATH}/sdX1/etc/shadow"
|
sed -i "s|${OLDPASSWD}|${NEWPASSWD}|g" "${TMP_PATH}/sdX1/etc/shadow"
|
||||||
sync
|
sync
|
||||||
@ -1391,7 +1378,7 @@ function advancedMenu() {
|
|||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
||||||
--msgbox "$(TEXT "A valid dts file, Automatically import at compile time.")" 0 0
|
--msgbox "$(TEXT "A valid dts file, Automatically import at compile time.")" 0 0
|
||||||
fi
|
fi
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
;;
|
;;
|
||||||
b)
|
b)
|
||||||
if ! tty | grep -q "/dev/pts"; then
|
if ! tty | grep -q "/dev/pts"; then
|
||||||
@ -1412,7 +1399,7 @@ function advancedMenu() {
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
if [ -z "${SSH_TTY}" ]; then # web
|
if [ -z "${SSH_TTY}" ]; then # web
|
||||||
IP_HEAD="$(ip route show 2>/dev/null | sed -n 's/.* via .* src \(.*\) metric .*/\1/p' | head -1)"
|
IP_HEAD="$(getIP)"
|
||||||
echo "http://${IP_HEAD}/backup.img.gz" >${TMP_PATH}/resp
|
echo "http://${IP_HEAD}/backup.img.gz" >${TMP_PATH}/resp
|
||||||
echo " ↑ " >>${TMP_PATH}/resp
|
echo " ↑ " >>${TMP_PATH}/resp
|
||||||
echo "$(TEXT "Click on the address above to download.")" >>${TMP_PATH}/resp
|
echo "$(TEXT "Click on the address above to download.")" >>${TMP_PATH}/resp
|
||||||
@ -1448,19 +1435,19 @@ function advancedMenu() {
|
|||||||
break
|
break
|
||||||
done
|
done
|
||||||
popd
|
popd
|
||||||
if [ -z "${IFTOOL}" -o -z "${TMP_UP_PATH}/${USER_FILE}" ]; then
|
if [ -z "${IFTOOL}" -o ! -f "${TMP_UP_PATH}/${USER_FILE}" ]; then
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
||||||
--msgbox "$(printf "$(TEXT "Not a valid .zip/.img.gz file, please try again!")" "${USER_FILE}")" 0 0
|
--msgbox "$(printf "$(TEXT "Not a valid .zip/.img.gz file, please try again!")" "${USER_FILE}")" 0 0
|
||||||
else
|
else
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
||||||
--yesno "$(TEXT "Warning:\nDo not terminate midway, otherwise it may cause damage to the RR. Do you want to continue?")" 0 0
|
--yesno "$(TEXT "Warning:\nDo not terminate midway, otherwise it may cause damage to the RR. Do you want to continue?")" 0 0
|
||||||
[ $? -ne 0 ] && (
|
[ $? -ne 0 ] && (
|
||||||
rm -f "${LOADER_DISK}"
|
rm -f "${TMP_UP_PATH}/${USER_FILE}"
|
||||||
return
|
return
|
||||||
)
|
)
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Advanced")" \
|
||||||
--infobox "$(TEXT "Writing...")" 0 0
|
--infobox "$(TEXT "Writing...")" 0 0
|
||||||
umount "${BOOTLOADER_PATH}" "${SLPART_PATH}" "${CACHE_PATH}"
|
umount "${PART1_PATH}" "${PART2_PATH}" "${PART3_PATH}"
|
||||||
if [ "${IFTOOL}" = "zip" ]; then
|
if [ "${IFTOOL}" = "zip" ]; then
|
||||||
unzip -p "${TMP_UP_PATH}/${USER_FILE}" | dd of="${LOADER_DISK}" bs=1M conv=fsync
|
unzip -p "${TMP_UP_PATH}/${USER_FILE}" | dd of="${LOADER_DISK}" bs=1M conv=fsync
|
||||||
elif [ "${IFTOOL}" = "gzip" ]; then
|
elif [ "${IFTOOL}" = "gzip" ]; then
|
||||||
@ -1520,12 +1507,12 @@ function tryRecoveryDSM() {
|
|||||||
[ "${unique}" = "${UNIQUE}" ] || continue
|
[ "${unique}" = "${UNIQUE}" ] || continue
|
||||||
# Found
|
# Found
|
||||||
modelMenu "${M}"
|
modelMenu "${M}"
|
||||||
done < <(find "${MODEL_CONFIG_PATH}" -maxdepth 1 -name \*.yml | sort)
|
done < <(find "${WORK_PATH}/model-configs" -maxdepth 1 -name \*.yml | sort)
|
||||||
if [ -n "${MODEL}" ]; then
|
if [ -n "${MODEL}" ]; then
|
||||||
productversMenu "${majorversion}.${minorversion}"
|
productversMenu "${majorversion}.${minorversion}"
|
||||||
if [ -n "${PRODUCTVER}" ]; then
|
if [ -n "${PRODUCTVER}" ]; then
|
||||||
cp -f "${DSMROOT_PATH}/.syno/patch/zImage" "${SLPART_PATH}"
|
cp -f "${DSMROOT_PATH}/.syno/patch/zImage" "${PART2_PATH}"
|
||||||
cp -f "${DSMROOT_PATH}/.syno/patch/rd.gz" "${SLPART_PATH}"
|
cp -f "${DSMROOT_PATH}/.syno/patch/rd.gz" "${PART2_PATH}"
|
||||||
MSG="$(printf "$(TEXT "Found a installation:\nModel: %s\nProductversion: %s")" "${MODEL}" "${PRODUCTVER}")"
|
MSG="$(printf "$(TEXT "Found a installation:\nModel: %s\nProductversion: %s")" "${MODEL}" "${PRODUCTVER}")"
|
||||||
SN=$(_get_conf_kv SN "${DSMROOT_PATH}/etc/synoinfo.conf")
|
SN=$(_get_conf_kv SN "${DSMROOT_PATH}/etc/synoinfo.conf")
|
||||||
if [ -n "${SN}" ]; then
|
if [ -n "${SN}" ]; then
|
||||||
@ -1574,7 +1561,7 @@ function editUserConfig() {
|
|||||||
rm -f "${MOD_ZIMAGE_FILE}"
|
rm -f "${MOD_ZIMAGE_FILE}"
|
||||||
rm -f "${MOD_RDGZ_FILE}"
|
rm -f "${MOD_RDGZ_FILE}"
|
||||||
fi
|
fi
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -1592,12 +1579,13 @@ function editGrubCfg() {
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
# Calls boot.sh to boot into DSM kernel/ramdisk
|
# Calls boot.sh to boot into DSM kernel/ramdisk
|
||||||
function boot() {
|
function boot() {
|
||||||
[ ${DIRTY} -eq 1 ] && dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Alert")" \
|
[ -f ${PART1_PATH}/.build ] && dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Alert")" \
|
||||||
--yesno "$(TEXT "Config changed, would you like to rebuild the loader?")" 0 0
|
--yesno "$(TEXT "Config changed, would you like to rebuild the loader?")" 0 0
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
make || return
|
make 2>&1 | dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Main menu")" --cr-wrap --no-collapse \
|
||||||
|
--progressbox "$(TEXT "Making ...")" 20 100 || return
|
||||||
fi
|
fi
|
||||||
boot.sh
|
${WORK_PATH}/boot.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@ -1610,7 +1598,7 @@ function languageMenu() {
|
|||||||
resp=$(cat ${TMP_PATH}/resp 2>/dev/null)
|
resp=$(cat ${TMP_PATH}/resp 2>/dev/null)
|
||||||
[ -z "${resp}" ] && return
|
[ -z "${resp}" ] && return
|
||||||
LANGUAGE=${resp}
|
LANGUAGE=${resp}
|
||||||
echo "${LANGUAGE}.UTF-8" >${BOOTLOADER_PATH}/.locale
|
echo "${LANGUAGE}.UTF-8" >${PART1_PATH}/.locale
|
||||||
export LANG="${LANGUAGE}.UTF-8"
|
export LANG="${LANGUAGE}.UTF-8"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1684,10 +1672,11 @@ function downloadExts() {
|
|||||||
[ $? -ne 0 ] && return 1
|
[ $? -ne 0 ] && return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "${T}" \
|
(
|
||||||
--infobox "$(TEXT "Downloading last version")" 0 0
|
rm -f "${TMP_PATH}/${4}.zip"
|
||||||
rm -f "${TMP_PATH}/${4}.zip"
|
STATUS=$(curl -kL -w "%{http_code}" "${PROXY}${3}/releases/download/${TAG}/${4}.zip" -o "${TMP_PATH}/${4}.zip")
|
||||||
STATUS=$(curl -kL -w "%{http_code}" "${PROXY}${3}/releases/download/${TAG}/${4}.zip" -o "${TMP_PATH}/${4}.zip")
|
) 2>&1 | dialog --backtitle "$(backtitle)" --colors --title "${T}" \
|
||||||
|
--progressbox "$(TEXT "Downloading ...")" 20 100
|
||||||
if [ $? -ne 0 -o ${STATUS} -ne 200 ]; then
|
if [ $? -ne 0 -o ${STATUS} -ne 200 ]; then
|
||||||
if [ ! "${5}" = "0" ]; then
|
if [ ! "${5}" = "0" ]; then
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "${T}" \
|
dialog --backtitle "$(backtitle)" --colors --title "${T}" \
|
||||||
@ -1748,7 +1737,7 @@ function updateRR() {
|
|||||||
done < <(readConfigMap "replace" "${TMP_PATH}/update-list.yml")
|
done < <(readConfigMap "replace" "${TMP_PATH}/update-list.yml")
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "${T}" \
|
dialog --backtitle "$(backtitle)" --colors --title "${T}" \
|
||||||
--msgbox "$(printf "$(TEXT "RR updated with success to %s!\nReboot?")" "${TAG}")" 0 0
|
--msgbox "$(printf "$(TEXT "RR updated with success to %s!\nReboot?")" "${TAG}")" 0 0
|
||||||
rr-reboot.sh config
|
rebootTo config
|
||||||
}
|
}
|
||||||
|
|
||||||
# 1 - ext name
|
# 1 - ext name
|
||||||
@ -1788,7 +1777,7 @@ function updateExts() {
|
|||||||
rm -rf "${LKM_PATH}/"*
|
rm -rf "${LKM_PATH}/"*
|
||||||
unzip "${TMP_PATH}/rp-lkms.zip" -d "${LKM_PATH}" >/dev/null 2>&1
|
unzip "${TMP_PATH}/rp-lkms.zip" -d "${LKM_PATH}" >/dev/null 2>&1
|
||||||
fi
|
fi
|
||||||
DIRTY=1
|
touch ${PART1_PATH}/.build
|
||||||
if [ ! "${2}" = "0" ]; then
|
if [ ! "${2}" = "0" ]; then
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "${T}" \
|
dialog --backtitle "$(backtitle)" --colors --title "${T}" \
|
||||||
--infobox "$(printf "$(TEXT "%s updated with success!")" "${1}")" 0 0
|
--infobox "$(printf "$(TEXT "%s updated with success!")" "${1}")" 0 0
|
||||||
@ -1802,9 +1791,9 @@ function updateExts() {
|
|||||||
function updateMenu() {
|
function updateMenu() {
|
||||||
while true; do
|
while true; do
|
||||||
CUR_RR_VER="${RR_VERSION:-0}"
|
CUR_RR_VER="${RR_VERSION:-0}"
|
||||||
CUR_ADDONS_VER="$(cat "${CACHE_PATH}/addons/VERSION" 2>/dev/null)"
|
CUR_ADDONS_VER="$(cat "${PART3_PATH}/addons/VERSION" 2>/dev/null)"
|
||||||
CUR_MODULES_VER="$(cat "${CACHE_PATH}/modules/VERSION" 2>/dev/null)"
|
CUR_MODULES_VER="$(cat "${PART3_PATH}/modules/VERSION" 2>/dev/null)"
|
||||||
CUR_LKMS_VER="$(cat "${CACHE_PATH}/lkms/VERSION" 2>/dev/null)"
|
CUR_LKMS_VER="$(cat "${PART3_PATH}/lkms/VERSION" 2>/dev/null)"
|
||||||
PROXY="$(readConfigKey "proxy" "${USER_CONFIG_FILE}")"
|
PROXY="$(readConfigKey "proxy" "${USER_CONFIG_FILE}")"
|
||||||
[ -n "${PROXY}" ] && [[ "${PROXY: -1}" != "/" ]] && PROXY="${PROXY}/"
|
[ -n "${PROXY}" ] && [[ "${PROXY: -1}" != "/" ]] && PROXY="${PROXY}/"
|
||||||
rm -f "${TMP_PATH}/menu"
|
rm -f "${TMP_PATH}/menu"
|
||||||
@ -1963,7 +1952,7 @@ function notepadMenu() {
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
if [ "x$1" = "xb" -a -n "${MODEL}" -a -n "${PRODUCTVER}" -a loaderIsConfigured ]; then
|
if [ "x$1" = "xb" -a -n "${MODEL}" -a -n "${PRODUCTVER}" -a loaderIsConfigured ]; then
|
||||||
install-addons.sh
|
updateAddons
|
||||||
make
|
make
|
||||||
boot && exit 0 || sleep 5
|
boot && exit 0 || sleep 5
|
||||||
fi
|
fi
|
||||||
@ -1991,7 +1980,7 @@ while true; do
|
|||||||
fi
|
fi
|
||||||
echo "l \"$(TEXT "Choose a language")\"" >>"${TMP_PATH}/menu"
|
echo "l \"$(TEXT "Choose a language")\"" >>"${TMP_PATH}/menu"
|
||||||
echo "k \"$(TEXT "Choose a keymap")\"" >>"${TMP_PATH}/menu"
|
echo "k \"$(TEXT "Choose a keymap")\"" >>"${TMP_PATH}/menu"
|
||||||
if [ ${CLEARCACHE} -eq 1 -a -d "${CACHE_PATH}/dl" ]; then
|
if [ ${CLEARCACHE} -eq 1 -a -d "${PART3_PATH}/dl" ]; then
|
||||||
echo "c \"$(TEXT "Clean disk cache")\"" >>"${TMP_PATH}/menu"
|
echo "c \"$(TEXT "Clean disk cache")\"" >>"${TMP_PATH}/menu"
|
||||||
fi
|
fi
|
||||||
echo "p \"$(TEXT "Update menu")\"" >>"${TMP_PATH}/menu"
|
echo "p \"$(TEXT "Update menu")\"" >>"${TMP_PATH}/menu"
|
||||||
@ -2032,7 +2021,8 @@ while true; do
|
|||||||
NEXT="d"
|
NEXT="d"
|
||||||
;;
|
;;
|
||||||
d)
|
d)
|
||||||
make
|
make 2>&1 | dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Main menu")" --cr-wrap --no-collapse \
|
||||||
|
--progressbox "$(TEXT "Making ...")" 20 100
|
||||||
NEXT="b"
|
NEXT="b"
|
||||||
;;
|
;;
|
||||||
b)
|
b)
|
||||||
@ -2048,7 +2038,7 @@ while true; do
|
|||||||
;;
|
;;
|
||||||
c)
|
c)
|
||||||
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Cleaning")" \
|
dialog --backtitle "$(backtitle)" --colors --title "$(TEXT "Cleaning")" \
|
||||||
--prgbox "rm -rfv \"${CACHE_PATH}/dl\"" 0 0
|
--prgbox "rm -rfv \"${PART3_PATH}/dl\"" 0 0
|
||||||
NEXT="d"
|
NEXT="d"
|
||||||
;;
|
;;
|
||||||
p)
|
p)
|
||||||
@ -2079,7 +2069,7 @@ while true; do
|
|||||||
reboot
|
reboot
|
||||||
;;
|
;;
|
||||||
c)
|
c)
|
||||||
rr-reboot.sh config
|
rebootTo config
|
||||||
;;
|
;;
|
||||||
s)
|
s)
|
||||||
break 2
|
break 2
|
||||||
|
@ -7,6 +7,8 @@ synoinfo: &synoinfo
|
|||||||
supportadt7490: "no"
|
supportadt7490: "no"
|
||||||
support_syno_hybrid_raid:
|
support_syno_hybrid_raid:
|
||||||
supportraidgroup:
|
supportraidgroup:
|
||||||
|
supportsas: "no"
|
||||||
|
supportsas_v2: "yes"
|
||||||
maxlanport: "8"
|
maxlanport: "8"
|
||||||
netif_seq: "0 1 2 3 4 5 6 7"
|
netif_seq: "0 1 2 3 4 5 6 7"
|
||||||
buzzeroffen: "0xffff"
|
buzzeroffen: "0xffff"
|
||||||
@ -17,6 +19,7 @@ cmdline: &cmdline
|
|||||||
syno_ttyS0: "serial,0x3f8"
|
syno_ttyS0: "serial,0x3f8"
|
||||||
syno_ttyS1: "serial,0x2f8"
|
syno_ttyS1: "serial,0x2f8"
|
||||||
elevator: elevator
|
elevator: elevator
|
||||||
|
modprobe.blacklist: mpt3sas
|
||||||
patch: &patch
|
patch: &patch
|
||||||
- "ramdisk-etc-rc-*.patch"
|
- "ramdisk-etc-rc-*.patch"
|
||||||
- "ramdisk-init-script-v4-*.patch"
|
- "ramdisk-init-script-v4-*.patch"
|
||||||
|
@ -5,6 +5,8 @@ synoinfo: &synoinfo
|
|||||||
support_led_brightness_adjustment: "no"
|
support_led_brightness_adjustment: "no"
|
||||||
support_syno_hybrid_raid:
|
support_syno_hybrid_raid:
|
||||||
supportraidgroup:
|
supportraidgroup:
|
||||||
|
supportsas: "no"
|
||||||
|
supportsas_v2: "yes"
|
||||||
maxlanport: "8"
|
maxlanport: "8"
|
||||||
netif_seq: "0 1 2 3 4 5 6 7"
|
netif_seq: "0 1 2 3 4 5 6 7"
|
||||||
buzzeroffen: "0xffff"
|
buzzeroffen: "0xffff"
|
||||||
@ -15,6 +17,7 @@ cmdline: &cmdline
|
|||||||
syno_ttyS0: "serial,0x3f8"
|
syno_ttyS0: "serial,0x3f8"
|
||||||
syno_ttyS1: "serial,0x2f8"
|
syno_ttyS1: "serial,0x2f8"
|
||||||
elevator: elevator
|
elevator: elevator
|
||||||
|
modprobe.blacklist: mpt3sas
|
||||||
patch: &patch
|
patch: &patch
|
||||||
- "ramdisk-etc-rc-*.patch"
|
- "ramdisk-etc-rc-*.patch"
|
||||||
- "ramdisk-init-script-v4-*.patch"
|
- "ramdisk-init-script-v4-*.patch"
|
||||||
|
@ -3,9 +3,6 @@ synoinfo: &synoinfo
|
|||||||
support_disk_compatibility: "no"
|
support_disk_compatibility: "no"
|
||||||
support_memory_compatibility: "no"
|
support_memory_compatibility: "no"
|
||||||
support_led_brightness_adjustment: "no"
|
support_led_brightness_adjustment: "no"
|
||||||
support_leds_atmega1608: "no"
|
|
||||||
support_leds_lp3943: "no"
|
|
||||||
supportadt7490: "no"
|
|
||||||
support_syno_hybrid_raid:
|
support_syno_hybrid_raid:
|
||||||
supportraidgroup:
|
supportraidgroup:
|
||||||
maxlanport: "8"
|
maxlanport: "8"
|
||||||
|
@ -7,6 +7,7 @@ synoinfo: &synoinfo
|
|||||||
support_syno_hybrid_raid:
|
support_syno_hybrid_raid:
|
||||||
supportraidgroup:
|
supportraidgroup:
|
||||||
supportsas: "no"
|
supportsas: "no"
|
||||||
|
supportsas_v2: "yes"
|
||||||
maxlanport: "8"
|
maxlanport: "8"
|
||||||
netif_seq: "0 1 2 3 4 5 6 7"
|
netif_seq: "0 1 2 3 4 5 6 7"
|
||||||
cmdline: &cmdline
|
cmdline: &cmdline
|
||||||
@ -17,6 +18,7 @@ cmdline: &cmdline
|
|||||||
SMBusHddDynamicPower: 1
|
SMBusHddDynamicPower: 1
|
||||||
vender_format_version: 2
|
vender_format_version: 2
|
||||||
elevator: elevator
|
elevator: elevator
|
||||||
|
modprobe.blacklist: mpt3sas
|
||||||
patch: &patch
|
patch: &patch
|
||||||
- "ramdisk-etc-rc-*.patch"
|
- "ramdisk-etc-rc-*.patch"
|
||||||
- "ramdisk-init-script-v4-*.patch"
|
- "ramdisk-init-script-v4-*.patch"
|
||||||
|
@ -8,6 +8,7 @@ synoinfo: &synoinfo
|
|||||||
support_syno_hybrid_raid:
|
support_syno_hybrid_raid:
|
||||||
supportraidgroup:
|
supportraidgroup:
|
||||||
supportsas: "no"
|
supportsas: "no"
|
||||||
|
supportsas_v2: "yes"
|
||||||
maxlanport: "8"
|
maxlanport: "8"
|
||||||
netif_seq: "0 1 2 3 4 5 6 7"
|
netif_seq: "0 1 2 3 4 5 6 7"
|
||||||
cmdline: &cmdline
|
cmdline: &cmdline
|
||||||
@ -16,6 +17,7 @@ cmdline: &cmdline
|
|||||||
syno_hdd_powerup_seq: 0
|
syno_hdd_powerup_seq: 0
|
||||||
vender_format_version: 2
|
vender_format_version: 2
|
||||||
elevator: elevator
|
elevator: elevator
|
||||||
|
modprobe.blacklist: mpt3sas
|
||||||
patch: &patch
|
patch: &patch
|
||||||
- "ramdisk-etc-rc-*.patch"
|
- "ramdisk-etc-rc-*.patch"
|
||||||
- "ramdisk-init-script-v4-*.patch"
|
- "ramdisk-init-script-v4-*.patch"
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
. /opt/rr/include/functions.sh
|
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||||
. /opt/rr/include/addons.sh
|
|
||||||
|
. ${WORK_PATH}/include/functions.sh
|
||||||
|
. ${WORK_PATH}/include/addons.sh
|
||||||
|
|
||||||
set -o pipefail # Get exit code from process piped
|
set -o pipefail # Get exit code from process piped
|
||||||
|
|
||||||
@ -13,12 +15,6 @@ echo -n "Patching Ramdisk"
|
|||||||
# Remove old rd.gz patched
|
# Remove old rd.gz patched
|
||||||
rm -f "${MOD_RDGZ_FILE}"
|
rm -f "${MOD_RDGZ_FILE}"
|
||||||
|
|
||||||
# Check disk space left
|
|
||||||
LOADER_DISK="$(blkid | grep 'LABEL="RR3"' | cut -d3 -f1)"
|
|
||||||
LOADER_DEVICE_NAME=$(echo ${LOADER_DISK} | sed 's|/dev/||')
|
|
||||||
SPACELEFT=$(df --block-size=1 | awk '/'${LOADER_DEVICE_NAME}'3/{print$4}')
|
|
||||||
[ ${SPACELEFT} -le 268435456 ] && rm -rf "${CACHE_PATH}/dl"
|
|
||||||
|
|
||||||
# Unzipping ramdisk
|
# Unzipping ramdisk
|
||||||
echo -n "."
|
echo -n "."
|
||||||
rm -rf "${RAMDISK_PATH}" # Force clean
|
rm -rf "${RAMDISK_PATH}" # Force clean
|
||||||
@ -93,7 +89,7 @@ done < <(readConfigMap "modules" "${USER_CONFIG_FILE}")
|
|||||||
while read PE; do
|
while read PE; do
|
||||||
RET=1
|
RET=1
|
||||||
echo "Patching with ${PE}" >"${LOG_FILE}" 2>&1
|
echo "Patching with ${PE}" >"${LOG_FILE}" 2>&1
|
||||||
for PF in $(ls ${PATCH_PATH}/${PE}); do
|
for PF in $(ls ${WORK_PATH}/patch/${PE}); do
|
||||||
echo -n "."
|
echo -n "."
|
||||||
echo "Patching with ${PF}" >>"${LOG_FILE}" 2>&1
|
echo "Patching with ${PF}" >>"${LOG_FILE}" 2>&1
|
||||||
(
|
(
|
||||||
@ -116,7 +112,7 @@ _set_conf_kv "SN" "${SN}" "${RAMDISK_PATH}/etc/synoinfo.conf" >"${LOG_FILE}" 2>&
|
|||||||
|
|
||||||
# Patch /sbin/init.post
|
# Patch /sbin/init.post
|
||||||
echo -n "."
|
echo -n "."
|
||||||
grep -v -e '^[\t ]*#' -e '^$' "${PATCH_PATH}/config-manipulators.sh" >"${TMP_PATH}/rp.txt"
|
grep -v -e '^[\t ]*#' -e '^$' "${WORK_PATH}/patch/config-manipulators.sh" >"${TMP_PATH}/rp.txt"
|
||||||
sed -e "/@@@CONFIG-MANIPULATORS-TOOLS@@@/ {" -e "r ${TMP_PATH}/rp.txt" -e 'd' -e '}' -i "${RAMDISK_PATH}/sbin/init.post"
|
sed -e "/@@@CONFIG-MANIPULATORS-TOOLS@@@/ {" -e "r ${TMP_PATH}/rp.txt" -e 'd' -e '}' -i "${RAMDISK_PATH}/sbin/init.post"
|
||||||
rm -f "${TMP_PATH}/rp.txt"
|
rm -f "${TMP_PATH}/rp.txt"
|
||||||
touch "${TMP_PATH}/rp.txt"
|
touch "${TMP_PATH}/rp.txt"
|
||||||
@ -150,7 +146,7 @@ rm -rf "${TMP_PATH}/modules"
|
|||||||
|
|
||||||
echo -n "."
|
echo -n "."
|
||||||
# Copying fake modprobe
|
# Copying fake modprobe
|
||||||
cp -f "${PATCH_PATH}/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
|
cp -f "${WORK_PATH}/patch/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
|
||||||
# Copying LKM to /usr/lib/modules
|
# Copying LKM to /usr/lib/modules
|
||||||
gzip -dc "${LKM_PATH}/rp-${PLATFORM}-$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}-${LKM}.ko.gz" >"${RAMDISK_PATH}/usr/lib/modules/rp.ko"
|
gzip -dc "${LKM_PATH}/rp-${PLATFORM}-$([ -n "${KPRE}" ] && echo "${KPRE}-")${KVER}-${LKM}.ko.gz" >"${RAMDISK_PATH}/usr/lib/modules/rp.ko"
|
||||||
|
|
||||||
@ -171,6 +167,10 @@ echo "export LAYOUT=${LAYOUT}" >>"${RAMDISK_PATH}/addons/addons.sh"
|
|||||||
echo "export KEYMAP=${KEYMAP}" >>"${RAMDISK_PATH}/addons/addons.sh"
|
echo "export KEYMAP=${KEYMAP}" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||||
chmod +x "${RAMDISK_PATH}/addons/addons.sh"
|
chmod +x "${RAMDISK_PATH}/addons/addons.sh"
|
||||||
|
|
||||||
|
# Required addons: restore
|
||||||
|
installAddon revert
|
||||||
|
echo "/addons/revert.sh \${1} " >>"${RAMDISK_PATH}/addons/addons.sh" 2>"${LOG_FILE}" || dieLog
|
||||||
|
|
||||||
# Required addons: eudev, disks, localrss, wol
|
# Required addons: eudev, disks, localrss, wol
|
||||||
installAddon eudev
|
installAddon eudev
|
||||||
echo "/addons/eudev.sh \${1} " >>"${RAMDISK_PATH}/addons/addons.sh" 2>"${LOG_FILE}" || dieLog
|
echo "/addons/eudev.sh \${1} " >>"${RAMDISK_PATH}/addons/addons.sh" 2>"${LOG_FILE}" || dieLog
|
||||||
@ -198,7 +198,7 @@ echo "inetd" >>"${RAMDISK_PATH}/addons/addons.sh"
|
|||||||
[ "2" = "${BUILDNUM:0:1}" ] && sed -i 's/function //g' $(find "${RAMDISK_PATH}/addons/" -type f -name "*.sh")
|
[ "2" = "${BUILDNUM:0:1}" ] && sed -i 's/function //g' $(find "${RAMDISK_PATH}/addons/" -type f -name "*.sh")
|
||||||
|
|
||||||
# Build modules dependencies
|
# Build modules dependencies
|
||||||
/opt/rr/depmod -a -b ${RAMDISK_PATH} 2>/dev/null
|
${WORK_PATH}/depmod -a -b ${RAMDISK_PATH} 2>/dev/null
|
||||||
|
|
||||||
# Network card configuration file
|
# Network card configuration file
|
||||||
for N in $(seq 0 7); do
|
for N in $(seq 0 7); do
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Based on code and ideas from @jumkey
|
# Based on code and ideas from @jumkey
|
||||||
|
|
||||||
. /opt/rr/include/functions.sh
|
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||||
|
|
||||||
|
. ${WORK_PATH}/include/functions.sh
|
||||||
|
|
||||||
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
||||||
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
. /opt/rr/include/functions.sh
|
[ -z "${WORK_PATH}" -o ! -d "${WORK_PATH}/include" ] && WORK_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
|
||||||
|
|
||||||
|
. ${WORK_PATH}/include/functions.sh
|
||||||
|
|
||||||
set -o pipefail # Get exit code from process piped
|
set -o pipefail # Get exit code from process piped
|
||||||
|
|
||||||
@ -12,13 +14,13 @@ echo -n "Patching zImage"
|
|||||||
rm -f "${MOD_ZIMAGE_FILE}"
|
rm -f "${MOD_ZIMAGE_FILE}"
|
||||||
echo -n "."
|
echo -n "."
|
||||||
# Extract vmlinux
|
# Extract vmlinux
|
||||||
/opt/rr/bzImage-to-vmlinux.sh "${ORI_ZIMAGE_FILE}" "${TMP_PATH}/vmlinux" >"${LOG_FILE}" 2>&1 || dieLog
|
${WORK_PATH}/bzImage-to-vmlinux.sh "${ORI_ZIMAGE_FILE}" "${TMP_PATH}/vmlinux" >"${LOG_FILE}" 2>&1 || dieLog
|
||||||
echo -n "."
|
echo -n "."
|
||||||
# Patch boot params and ramdisk check
|
# Patch boot params and ramdisk check
|
||||||
/opt/rr/kpatch "${TMP_PATH}/vmlinux" "${TMP_PATH}/vmlinux-mod" >"${LOG_FILE}" 2>&1 || dieLog
|
${WORK_PATH}/kpatch "${TMP_PATH}/vmlinux" "${TMP_PATH}/vmlinux-mod" >"${LOG_FILE}" 2>&1 || dieLog
|
||||||
echo -n "."
|
echo -n "."
|
||||||
# rebuild zImage
|
# rebuild zImage
|
||||||
/opt/rr/vmlinux-to-bzImage.sh "${TMP_PATH}/vmlinux-mod" "${MOD_ZIMAGE_FILE}" >"${LOG_FILE}" 2>&1 || dieLog
|
${WORK_PATH}/vmlinux-to-bzImage.sh "${TMP_PATH}/vmlinux-mod" "${MOD_ZIMAGE_FILE}" >"${LOG_FILE}" 2>&1 || dieLog
|
||||||
echo -n "."
|
echo -n "."
|
||||||
# Update HASH of new DSM zImage
|
# Update HASH of new DSM zImage
|
||||||
HASH="$(sha256sum ${ORI_ZIMAGE_FILE} | awk '{print$1}')"
|
HASH="$(sha256sum ${ORI_ZIMAGE_FILE} | awk '{print$1}')"
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
serial --unit=1 --speed=115200
|
|
||||||
terminal serial
|
|
||||||
default 1
|
|
||||||
timeout 3
|
|
||||||
verbose
|
|
||||||
hiddenmenu
|
|
||||||
fallback 0
|
|
||||||
|
|
||||||
title SYNOLOGY_1
|
|
||||||
root (hd0,0)
|
|
||||||
kernel /zImage root=/dev/md0
|
|
||||||
initrd /rd.gz
|
|
||||||
|
|
||||||
title SYNOLOGY_2
|
|
||||||
root (hd0,1)
|
|
||||||
cksum /grub_cksum.syno
|
|
||||||
vender /vender show
|
|
||||||
kernel /zImage root=/dev/md0
|
|
||||||
initrd /rd.gz
|
|
10
guide.md
10
guide.md
@ -107,6 +107,15 @@
|
|||||||
## DEBUG
|
## DEBUG
|
||||||
* log:
|
* log:
|
||||||
```
|
```
|
||||||
|
# 内核相关
|
||||||
|
sysctl -n kernel.syno_serial # 查看当前鉴权的SN
|
||||||
|
cat /proc/sys/kernel/syno_serial # 查看当前鉴权的SN
|
||||||
|
sysctl -n kernel.syno_mac_address1 # 查看当前鉴权的mcac1 (kernel.syno_mac_addresses)
|
||||||
|
cat /proc/sys/kernel/syno_mac_address1 # 查看当前鉴权的mcac1 (/proc/sys/kernel/syno_mac_addresses)
|
||||||
|
sysctl -n kernel.syno_internal_netif_num # 查看当前鉴权的网卡数量
|
||||||
|
cat /proc/sys/kernel/syno_internal_netif_num # 查看当前鉴权的网卡数量
|
||||||
|
nproc # 查看当前线程数
|
||||||
|
|
||||||
# 驱动相关
|
# 驱动相关
|
||||||
lsmod # 查看已加载驱动
|
lsmod # 查看已加载驱动
|
||||||
ls -ld /sys/class/net/*/device/driver # 查看已加载网卡和对应驱动
|
ls -ld /sys/class/net/*/device/driver # 查看已加载网卡和对应驱动
|
||||||
@ -128,6 +137,7 @@
|
|||||||
# 服务相关
|
# 服务相关
|
||||||
systemctl # 查看服务
|
systemctl # 查看服务
|
||||||
netstat -tunlp # 查看端口
|
netstat -tunlp # 查看端口
|
||||||
|
systemctl disable cpufreq.service # 禁用 CPU 频率调节器
|
||||||
|
|
||||||
# 日志相关
|
# 日志相关
|
||||||
dmesg # 内核日志
|
dmesg # 内核日志
|
||||||
|
19
img-gen.sh
19
img-gen.sh
@ -4,13 +4,8 @@ set -e
|
|||||||
|
|
||||||
. scripts/func.sh
|
. scripts/func.sh
|
||||||
|
|
||||||
# Convert po2mo, Get extractor, LKM, addons and Modules
|
# Convert po2mo
|
||||||
convertpo2mo "files/initrd/opt/rr/lang"
|
convertpo2mo "files/initrd/opt/rr/lang"
|
||||||
getExtractor "files/p3/extractor"
|
|
||||||
getLKMs "files/p3/lkms" true
|
|
||||||
getAddons "files/p3/addons" true
|
|
||||||
getModules "files/p3/modules" true
|
|
||||||
|
|
||||||
|
|
||||||
IMAGE_FILE="rr.img"
|
IMAGE_FILE="rr.img"
|
||||||
gzip -dc "files/grub.img.gz" >"${IMAGE_FILE}"
|
gzip -dc "files/grub.img.gz" >"${IMAGE_FILE}"
|
||||||
@ -30,12 +25,20 @@ getBuildroot "2023.02.x" "br"
|
|||||||
[ ! -f "br/bzImage-rr" -o ! -f "br/initrd-rr" ] && return 1
|
[ ! -f "br/bzImage-rr" -o ! -f "br/initrd-rr" ] && return 1
|
||||||
|
|
||||||
echo "Repack initrd"
|
echo "Repack initrd"
|
||||||
cp -f "br/bzImage-rr" "files/p3/bzImage-rr"
|
cp -f "br/bzImage-rr" "/tmp/p3/bzImage-rr"
|
||||||
repackInitrd "br/initrd-rr" "files/initrd" "files/p3/initrd-rr"
|
repackInitrd "br/initrd-rr" "files/initrd" "/tmp/p3/initrd-rr"
|
||||||
|
|
||||||
echo "Copying files"
|
echo "Copying files"
|
||||||
sudo cp -Rf "files/p1/"* "/tmp/p1"
|
sudo cp -Rf "files/p1/"* "/tmp/p1"
|
||||||
sudo cp -Rf "files/p3/"* "/tmp/p3"
|
sudo cp -Rf "files/p3/"* "/tmp/p3"
|
||||||
|
# Get extractor, LKM, addons and Modules
|
||||||
|
getLKMs "/tmp/p3/lkms" true
|
||||||
|
getAddons "/tmp/p3/addons" true
|
||||||
|
getModules "/tmp/p3/modules" true
|
||||||
|
getExtractor "/tmp/p3/extractor"
|
||||||
|
|
||||||
|
read -p "Press enter to continue"
|
||||||
|
|
||||||
sync
|
sync
|
||||||
|
|
||||||
echo "Unmount image file"
|
echo "Unmount image file"
|
||||||
|
@ -176,7 +176,7 @@ function getModules() {
|
|||||||
# repack initrd
|
# repack initrd
|
||||||
# $1 initrd file
|
# $1 initrd file
|
||||||
# $2 plugin path
|
# $2 plugin path
|
||||||
# $3 output path
|
# $3 output file
|
||||||
function repackInitrd() {
|
function repackInitrd() {
|
||||||
INITRD_FILE="${1}"
|
INITRD_FILE="${1}"
|
||||||
PLUGIN_PATH="${2}"
|
PLUGIN_PATH="${2}"
|
||||||
|
@ -1,40 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# 23.5.0
|
# rr
|
||||||
[ ! -f /mnt/p1/boot/grub/grub.cfg ] && exit 1
|
[ ! "rr" = "$(hostname)" ] && exit 1
|
||||||
|
|
||||||
# 23.7.0
|
|
||||||
. /opt/rr/include/functions.sh
|
|
||||||
if loaderIsConfigured; then
|
|
||||||
if [ -f "${ORI_RDGZ_FILE}" ]; then
|
|
||||||
rm -rf "${RAMDISK_PATH}"
|
|
||||||
mkdir -p "${RAMDISK_PATH}"
|
|
||||||
(
|
|
||||||
cd "${RAMDISK_PATH}"
|
|
||||||
xz -dc <"${ORI_RDGZ_FILE}" | cpio -idm
|
|
||||||
) >/dev/null 2>&1
|
|
||||||
. "${RAMDISK_PATH}/etc/VERSION"
|
|
||||||
[ -n "$(readConfigKey "build" "${USER_CONFIG_FILE}")" ] && deleteConfigKey "build" "${USER_CONFIG_FILE}"
|
|
||||||
[ -n "$(readConfigKey "smallfixnumber" "${USER_CONFIG_FILE}")" ] && deleteConfigKey "smallfixnumber" "${USER_CONFIG_FILE}"
|
|
||||||
[ -z "$(readConfigKey "paturl" "${USER_CONFIG_FILE}")" ] && writeConfigKey "paturl" "" "${USER_CONFIG_FILE}"
|
|
||||||
[ -z "$(readConfigKey "patsum" "${USER_CONFIG_FILE}")" ] && writeConfigKey "patsum" "" "${USER_CONFIG_FILE}"
|
|
||||||
[ -z "$(readConfigKey "productver" "${USER_CONFIG_FILE}")" ] && writeConfigKey "productver" "${majorversion}.${minorversion}" "${USER_CONFIG_FILE}"
|
|
||||||
[ -z "$(readConfigKey "buildnum" "${USER_CONFIG_FILE}")" ] && writeConfigKey "buildnum" "${buildnumber}" "${USER_CONFIG_FILE}"
|
|
||||||
[ -z "$(readConfigKey "smallnum" "${USER_CONFIG_FILE}")" ] && writeConfigKey "smallnum" "${smallfixnumber}" "${USER_CONFIG_FILE}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 23.9.7
|
|
||||||
MAC1="$(readConfigKey "cmdline.mac1" "${USER_CONFIG_FILE}")"
|
|
||||||
deleteConfigKey "notsetmacs" "${USER_CONFIG_FILE}"
|
|
||||||
for N in $(1 8); do
|
|
||||||
deleteConfigKey "cmdline.mac${N}" "${USER_CONFIG_FILE}"
|
|
||||||
deleteConfigKey "original-mac${N}" "${USER_CONFIG_FILE}"
|
|
||||||
done
|
|
||||||
deleteConfigKey "cmdline.netif_num" "${USER_CONFIG_FILE}"
|
|
||||||
[ -n "${MAC1}" ] && writeConfigKey "mac1" "${MAC1}" "${USER_CONFIG_FILE}"
|
|
||||||
|
|
||||||
MAC1="$(readConfigKey "mac1" "${USER_CONFIG_FILE}")"
|
|
||||||
[ -z "${MAC1}" ] && writeConfigKey "mac1" "001132$(printf '%02x%02x%02x' $((${RANDOM} % 256)) $((${RANDOM} % 256)) $((${RANDOM} % 256)))" "${USER_CONFIG_FILE}"
|
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user