Compare commits

...

43 Commits

Author SHA1 Message Date
Fabio Belavenuto
5cc2f0bad3 Merge pull request #12 from fbelavenuto/dev
Fixing actions versioning
2022-07-06 13:23:43 -03:00
Fabio Belavenuto
20e6a1b030 Fixing actions
More drivers
2022-07-06 13:22:14 -03:00
Fabio Belavenuto
193a888417 Merge pull request #11 from fbelavenuto/dev
Implementing update function
2022-07-06 11:58:08 -03:00
Fabio Belavenuto
d9bae9bff3 Implementing update function 2022-07-06 11:57:41 -03:00
Fabio Belavenuto
4816e2b9d6 Try fix actions 2022-07-06 10:14:53 -03:00
Fabio Belavenuto
8be21e154f Merge branch 'dev' 2022-07-06 10:11:30 -03:00
Fabio Belavenuto
da0723baae Modules 2022-07-06 10:09:17 -03:00
Fabio Belavenuto
60ebe853a1 Adding i40e 2022-07-06 09:51:48 -03:00
Fabio Belavenuto
17b7e9c3d3 Adding ixgbe addon 2022-07-06 09:45:29 -03:00
Fabio Belavenuto
0fdd36fb66 Merge pull request #10 from fbelavenuto/dev
Fixing not needed modules
2022-07-06 09:38:04 -03:00
Fabio Belavenuto
9b623817d5 Fixing not needed modules 2022-07-06 09:36:22 -03:00
Fabio Belavenuto
285ef9beb8 Merge branch 'dev' 2022-07-05 21:48:48 -03:00
Fabio Belavenuto
fa46a643a3 Fix notneeded DS920
Update VERSION
2022-07-05 21:47:40 -03:00
Fabio Belavenuto
b76c39402e Detect maxdisks and internalportcfg automatically 2022-07-05 21:45:26 -03:00
Fabio Belavenuto
1adea60697 maxdisk option transfered to Synoinfo menu
Adding r816* to not needed modules section on DVA1622 config
2022-07-05 19:38:35 -03:00
Fabio Belavenuto
95957b3c0a Fixing DS920+ 2022-07-05 17:28:50 -03:00
Fabio Belavenuto
f234821abc Added geminilake platform to ehci-pci module 2022-07-05 15:30:28 -03:00
Fabio Belavenuto
8405ebb43f Merge pull request #8 from fbelavenuto/dev
wip
2022-07-05 13:46:40 -03:00
Fabio Belavenuto
5382bde2c1 wip 2022-07-05 13:27:08 -03:00
Fabio Belavenuto
67eb896d9e Update arpl_defconfig
Force actions cache rebuild
2022-07-05 10:28:27 -03:00
Fabio Belavenuto
58bb997b34 Update main.yml
Fixing git checkout branch
2022-07-05 10:27:45 -03:00
Fabio Belavenuto
3f47e24fef Merge pull request #4 from fbelavenuto/dev
Adding misc addon (based on redpill-misc from pocopico)
2022-07-05 10:13:59 -03:00
Fabio Belavenuto
970ccbee46 Adding misc addon (based on redpill-misc from pocopico) 2022-07-05 10:12:58 -03:00
Fabio Belavenuto
d7b13c9bf7 Merge pull request #3 from fbelavenuto/dev
Fixing/testing actions
2022-07-04 11:45:31 -03:00
Fabio Belavenuto
7d7c83ccc7 Fixing/testing actions 2022-07-04 11:45:04 -03:00
Fabio Belavenuto
00f5b13249 Merge branch 'dev' 2022-07-04 10:38:50 -03:00
Fabio Belavenuto
14d568e47c Fixing github actions 2022-07-04 10:36:35 -03:00
Fabio Belavenuto
5cd5a84602 Merge pull request #2 from fbelavenuto/dev
dev merge
2022-07-04 10:28:07 -03:00
Fabio Belavenuto
bbc33b9991 Fix docker build.sh 2022-07-04 10:27:12 -03:00
Fabio Belavenuto
99c2b26d8d Fix title display 2022-07-04 10:17:48 -03:00
Fabio Belavenuto
cabe06ec67 Removing purley 2022-07-04 10:12:55 -03:00
Fabio Belavenuto
27e0da70d2 Removing purley
Adding 'ata_piix' to ignored modules
2022-07-04 09:48:50 -03:00
Fabio Belavenuto
02b03e5c30 Testing actions 2022-07-02 17:21:46 -03:00
Fabio Belavenuto
be0a7ea2a6 Organizing for automation 2022-07-02 16:05:34 -03:00
Fabio Belavenuto
995b93cf30 Organizing for actions 2022-07-02 15:26:49 -03:00
Fabio Belavenuto
fb596f44bb Organizing for actions 2022-07-02 15:12:30 -03:00
Fabio Belavenuto
7f3bf6c6b0 Testing actions 2022-07-02 14:41:09 -03:00
Fabio Belavenuto
faed1e838e Testing actions 2022-07-02 14:26:01 -03:00
Fabio Belavenuto
425c043e83 Update main.yml
wip
2022-07-02 13:02:45 -03:00
Fabio Belavenuto
f028e5d8fe Testing actions 2022-07-02 12:56:20 -03:00
Fabio Belavenuto
4032413b6f Update build.sh
Little fixes
2022-07-02 02:06:40 -03:00
Fabio Belavenuto
89b76b94f1 Fix submodule addons 2022-07-02 01:49:18 -03:00
Fabio Belavenuto
5314c0694a Fix submodule addons 2022-07-02 01:21:09 -03:00
235 changed files with 1051 additions and 615 deletions

117
.github/workflows/main.yml vendored Normal file
View File

@@ -0,0 +1,117 @@
name: Build image
# Controls when the workflow will run
on:
# When a release is published
release:
types: [published]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
- uses: actions/checkout@v3
# Check cache
- name: Cache buildroot
id: cache
uses: actions/cache@v2
with:
path: .buildroot
key: ${{ runner.os }}-${{ hashFiles('files/configs/arpl_defconfig') }}
# Install missing buildroot dependency
- name: Install dependency
run: |
sudo apt-get update
sudo apt-get install -y libelf-dev
# Prepare buildroot for first make (for cache)
- name: Prepare buildroot
if: steps.cache.outputs.cache-hit != 'true'
run: |
git clone --single-branch -b 2022.02 https://github.com/buildroot/buildroot.git .buildroot
# Copy files
echo "Copying files"
cp -Ru files/* .buildroot
cd .buildroot
echo "Generating default config"
make arpl_defconfig
echo "First make"
make
# Build incremental from cache
- name: Build image
id: build
run: |
VERSION=`<VERSION`
echo "::set-output name=VERSION::${VERSION}"
# Remove old files
rm -rf .buildroot/output/target/opt/arpl
rm -rf .buildroot/board/arpl/overlayfs
rm -rf .buildroot/board/arpl/p1
rm -rf .buildroot/board/arpl/p3
# Get latest LKMs
echo "Getting latest LKMs"
TAG=`curl -s https://api.github.com/repos/fbelavenuto/redpill-lkm/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'`
curl -L "https://github.com/fbelavenuto/redpill-lkm/releases/download/${TAG}/rp-lkms.zip" -o /tmp/rp-lkms.zip
rm -rf files/board/arpl/p3/lkms/*
unzip /tmp/rp-lkms.zip -d files/board/arpl/p3/lkms
# Get latest addons and install its
echo "Getting latest Addons"
TAG=`curl -s https://api.github.com/repos/fbelavenuto/arpl-addons/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'`
curl -L "https://github.com/fbelavenuto/arpl-addons/releases/download/${TAG}/addons.zip" -o /tmp/addons.zip
mkdir -p /tmp/addons
unzip /tmp/addons.zip -d /tmp/addons
DEST_PATH="files/board/arpl/p3/addons"
echo "Installing addons to ${DEST_PATH}"
for PKG in `ls /tmp/addons/*.addon`; do
ADDON=`basename ${PKG} | sed 's|.addon||'`
mkdir -p "${DEST_PATH}/${ADDON}"
echo "Extracting ${PKG} to ${DEST_PATH}/${ADDON}"
tar xaf "${PKG}" -C "${DEST_PATH}/${ADDON}"
done
# Copy files
echo "Copying files"
sed 's/^ARPL_VERSION=.*/ARPL_VERSION="'${VERSION}'"/' -i files/board/arpl/overlayfs/opt/arpl/include/consts.sh
cp -Ru files/* .buildroot/
cd .buildroot
echo "Generating default config"
make arpl_defconfig
echo "Version: ${VERSION}"
echo "Building..."
make
cd -
# Zip image
- name: Pack
shell: bash
run: zip -9 "arpl-${{ steps.build.outputs.VERSION }}.img.zip" arpl.img
# Upload artifact
- name: Upload
uses: actions/upload-artifact@v3
with:
name: Image to burn
path: arpl.img
retention-days: 1
# Publish a release if is a tag
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
with:
files: |
arpl-${{ steps.build.outputs.VERSION }}.img.zip
.buildroot/output/images/bzImage
.buildroot/output/images/rootfs.cpio.xz

3
.gitignore vendored
View File

@@ -2,7 +2,8 @@
.vscode .vscode
arpl.img* arpl.img*
*.zip *.zip
/buildroot-2022.02.2 .buildroot
test.sh test.sh
docker/Dockerfile docker/Dockerfile
docker/cache docker/cache
*.bak

4
.gitmodules vendored
View File

@@ -1,6 +1,6 @@
[submodule "redpill-lkm"] [submodule "redpill-lkm"]
path = redpill-lkm path = redpill-lkm
url = git@github.com:fbelavenuto/redpill-lkm.git url = https://github.com/fbelavenuto/redpill-lkm
[submodule "addons"] [submodule "addons"]
path = addons path = addons
url = git@github.com:fbelavenuto/arpl-addons.git url = https://github.com/fbelavenuto/arpl-addons

View File

@@ -5,4 +5,3 @@ broadwellnk 4.4.180
denverton 4.4.180 denverton 4.4.180
geminilake 4.4.180 geminilake 4.4.180
v1000 4.4.180 v1000 4.4.180
purley 4.4.180

4
TODO
View File

@@ -18,6 +18,8 @@ Concluidos:
- Usando TTYD para acesso via web - Usando TTYD para acesso via web
- Verificar se fica legal colocar na config dos modelos os addons obrigatórios como o qjs-dtb *** Usado outra maneira *** - Verificar se fica legal colocar na config dos modelos os addons obrigatórios como o qjs-dtb *** Usado outra maneira ***
- Implementar escolha de maxdisks - Implementar escolha de maxdisks
- Limpar addons quando usuário muda de modelo
- Arrumar detecção de discos/maxdisks. 918 tem só 4 discos e dá problema com proxmox
- Melhorar opções de HD, talvez criar um menu a parte
https://kb.synology.com/en-me/DSM/tutorial/What_kind_of_CPU_does_my_NAS_have https://kb.synology.com/en-me/DSM/tutorial/What_kind_of_CPU_does_my_NAS_have

View File

@@ -1 +1 @@
0.1-alpha 0.1-alpha5

View File

@@ -1,28 +0,0 @@
#!/usr/bin/env bash
set -e
TMP_PATH="/tmp"
DEST_PATH="files/board/arpl/p3/lkms"
###############################################################################
function trap_cancel() {
echo "Press Control+C once more terminate the process (or wait 2s for it to restart)"
sleep 2 || exit 1
}
trap trap_cancel SIGINT SIGTERM
###############################################################################
function die() {
echo -e "\033[1;31m$@\033[0m"
exit 1
}
# Main
while read PLATFORM KVER; do
# Compile using docker
docker run --rm -t --user `id -u` -v "${TMP_PATH}":/output \
-v "${PWD}/redpill-lkm":/input syno-compiler compile-lkm ${PLATFORM}
mv "${TMP_PATH}/redpill-dev.ko" "${DEST_PATH}/rp-${PLATFORM}-${KVER}-dev.ko"
mv "${TMP_PATH}/redpill-prod.ko" "${DEST_PATH}/rp-${PLATFORM}-${KVER}-prod.ko"
done < PLATFORMS

View File

@@ -7,6 +7,8 @@ function trap_cancel() {
} }
trap trap_cancel SIGINT SIGTERM trap trap_cancel SIGINT SIGTERM
cd `dirname $0`
# Read platforms/kerver version # Read platforms/kerver version
echo "Reading platforms" echo "Reading platforms"
declare -A PLATFORMS declare -A PLATFORMS
@@ -15,6 +17,7 @@ while read PLATFORM KVER; do
done <../PLATFORMS done <../PLATFORMS
# Download toolkits # Download toolkits
mkdir -p cache
TOOLKIT_VER="7.0" TOOLKIT_VER="7.0"
for PLATFORM in ${!PLATFORMS[@]}; do for PLATFORM in ${!PLATFORMS[@]}; do
echo -n "Checking cache/ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz... " echo -n "Checking cache/ds.${PLATFORM}-${TOOLKIT_VER}.dev.txz... "
@@ -39,5 +42,5 @@ sed -i "s|@@@TOOLKIT_VER@@@|${TOOLKIT_VER}|g" Dockerfile
# Build # Build
echo "Building... Drink a coffee and wait!" echo "Building... Drink a coffee and wait!"
docker image rm syno-compiler >/dev/null 2>&1 docker image rm fbelavenuto/syno-compiler >/dev/null 2>&1
docker buildx build . --load --tag syno-compiler docker buildx build . --load --tag fbelavenuto/syno-compiler

View File

@@ -161,6 +161,7 @@ CONFIG_NETDEVICES=y
CONFIG_NETCONSOLE=y CONFIG_NETCONSOLE=y
CONFIG_VIRTIO_NET=m CONFIG_VIRTIO_NET=m
CONFIG_ET131X=m CONFIG_ET131X=m
CONFIG_SLICOSS=m
CONFIG_ACENIC=m CONFIG_ACENIC=m
CONFIG_AMD_XGBE=m CONFIG_AMD_XGBE=m
CONFIG_ATL1=m CONFIG_ATL1=m
@@ -170,11 +171,16 @@ CONFIG_ALX=m
CONFIG_CNIC=m CONFIG_CNIC=m
CONFIG_TIGON3=y CONFIG_TIGON3=y
CONFIG_BNX2X=m CONFIG_BNX2X=m
CONFIG_BNA=m
CONFIG_CHELSIO_T1=m CONFIG_CHELSIO_T1=m
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T3=m CONFIG_CHELSIO_T3=m
CONFIG_CHELSIO_T4=m
CONFIG_CHELSIO_T4VF=m
CONFIG_NET_TULIP=y CONFIG_NET_TULIP=y
CONFIG_DL2K=m CONFIG_DL2K=m
CONFIG_BE2NET=m CONFIG_BE2NET=m
CONFIG_HINIC=m
CONFIG_E100=y CONFIG_E100=y
CONFIG_E1000=y CONFIG_E1000=y
CONFIG_E1000E=y CONFIG_E1000E=y
@@ -183,6 +189,12 @@ CONFIG_IGBVF=m
CONFIG_IXGB=m CONFIG_IXGB=m
CONFIG_IXGBE=m CONFIG_IXGBE=m
CONFIG_IXGBEVF=m CONFIG_IXGBEVF=m
CONFIG_I40E=m
CONFIG_ICE=m
CONFIG_FM10K=m
CONFIG_IGC=m
CONFIG_JME=m
CONFIG_MVMDIO=m
CONFIG_SKGE=m CONFIG_SKGE=m
CONFIG_SKY2=y CONFIG_SKY2=y
CONFIG_MLX4_EN=m CONFIG_MLX4_EN=m
@@ -193,13 +205,23 @@ CONFIG_FORCEDETH=m
CONFIG_QLCNIC=m CONFIG_QLCNIC=m
CONFIG_NETXEN_NIC=m CONFIG_NETXEN_NIC=m
CONFIG_QED=m CONFIG_QED=m
CONFIG_BNA=m
CONFIG_QCOM_EMAC=m CONFIG_QCOM_EMAC=m
CONFIG_R8169=m CONFIG_R8169=m
CONFIG_SXGBE_ETH=m CONFIG_SXGBE_ETH=m
CONFIG_SFC=m
# CONFIG_SFC_MCDI_MON is not set
# CONFIG_SFC_MCDI_LOGGING is not set
CONFIG_SFC_FALCON=m
CONFIG_SIS190=m CONFIG_SIS190=m
CONFIG_STMMAC_ETH=m CONFIG_STMMAC_ETH=m
CONFIG_SUNGEM=m
CONFIG_CASSINI=m
CONFIG_NIU=m
CONFIG_DWC_XLGMAC=m
CONFIG_TEHUTI=m
CONFIG_VIA_VELOCITY=m
CONFIG_XILINX_AXI_EMAC=m CONFIG_XILINX_AXI_EMAC=m
CONFIG_XILINX_LL_TEMAC=m
CONFIG_REALTEK_PHY=y CONFIG_REALTEK_PHY=y
# CONFIG_USB_NET_DRIVERS is not set # CONFIG_USB_NET_DRIVERS is not set
# CONFIG_WLAN is not set # CONFIG_WLAN is not set

View File

@@ -1,5 +1,5 @@
ARPL_VERSION="0.1-alpha" ARPL_VERSION="0.1-alpha5"
# Define paths # Define paths
TMP_PATH="/tmp" TMP_PATH="/tmp"

View File

@@ -75,9 +75,10 @@ writeConfigKey "pid" ${PID} "${USER_CONFIG_FILE}"
# Shows title # Shows title
clear clear
TITLE="Welcome to Automated Redpill Loader ${ARPL_VERSION}" TITLE="Welcome to Automated Redpill Loader v${ARPL_VERSION}"
printf "\033[1;44m%*s\n" $COLUMNS "" printf "\033[1;44m%*s\n" $COLUMNS ""
printf "\033[1;32m%*s%*s \033[0m\n" $(((${#TITLE}+$COLUMNS)/2)) "${TITLE}" $(((${#TITLE}+$COLUMNS)/2-${#TITLE})) "" printf "\033[1;44m%*s\033[A\n" $COLUMNS ""
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 ""
# Inform user # Inform user

View File

@@ -103,6 +103,8 @@ function modelMenu() {
rm -f "${MOD_ZIMAGE_FILE}" rm -f "${MOD_ZIMAGE_FILE}"
rm -f "${MOD_RDGZ_FILE}" rm -f "${MOD_RDGZ_FILE}"
DIRTY=1 DIRTY=1
# Remove addons
writeConfigKey "addons" "{}" "${USER_CONFIG_FILE}"
fi fi
} }
@@ -162,6 +164,375 @@ function serialMenu() {
writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}" writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}"
} }
###############################################################################
# Detect hardware
function detectHw() {
PLATFORM="`readModelKey "${MODEL}" "platform"`"
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
# Get modules not needed
unset NOTNEEDED
declare -A NOTNEEDED
while read M; do
NOTNEEDED[${M}]="1"
done < <(readModelArray "${MODEL}" "builds.${BUILD}.modules-notneeded")
unset DEVC DEVN
declare -A DEVC
declare -A DEVN
while read L; do
F=` sed -E 's/^([0-9a-z]{2}:[0-9a-z]{2}.[0-9a-z]{1})[^\[]*\[([0-9a-z]{4})\]: (.*)/\1|\2|\3/' <<<"${L}"`
PCI="`cut -d'|' -f1 <<<"${F}"`"
CLASS="`cut -d'|' -f2 <<<"${F}"`"
NAME="`cut -d'|' -f3 <<<"${F}"`"
MODULE="`lspci -ks "${PCI}" | awk '/Kernel driver in use/{print$5}'`"
[ -z "${MODULE}" ] && continue
# If is a virtio module, change id
if grep -q "virtio" <<<"$MODULE"; then
MODULE="virtio"
fi
CLASS=${CLASSES[${CLASS}]} # Get class name of module
[ -z "${CLASS}" ] && continue # If no class, skip
arrayExistItem "${MODULE}" "${!ADDONS[@]}" && continue # Check if module already added
[ -n "${NOTNEEDED[${MODULE}]}" ] && continue # Check if module is not necessary
# Add module to list
DEVC[${MODULE}]="${CLASS}"
DEVN[${MODULE}]="${NAME}"
done < <(lspci -nn)
if [ ${#DEVC[@]} -eq 0 ]; then
dialog --backtitle "`backtitle`" --aspect 18 \
--msgbox "No device detected or already added!" 0 0
return
fi
for MODULE in ${!DEVC[@]}; do
CLASS="${DEVC[${MODULE}]}"
NAME="${DEVN[${MODULE}]}"
TEXT="Found a ${NAME}\nClass ${CLASS}\nModule ${MODULE}\nAccept?"
checkAddonExist "${MODULE}" "${PLATFORM}" "${KVER}" || TEXT+="\n\n\Z1PS: Addon for this module not found\Zn"
dialog --backtitle "`backtitle`" --title "Found Hardware" \
--colors --yesno "${TEXT}" 12 70
[ $? -ne 0 ] && continue
dialog --backtitle "`backtitle`" --title "params" \
--inputbox "Type a opcional params to module" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
VALUE="`<${TMP_PATH}/resp`"
ADDONS["${MODULE}"]="${VALUE}"
writeConfigKey "addons.${MODULE}" "${VALUE}" "${USER_CONFIG_FILE}"
DIRTY=1
done
}
###############################################################################
# Manage addons/drivers
function addonMenu() {
# Read 'platform' and kernel version to check if addon exists
PLATFORM="`readModelKey "${MODEL}" "platform"`"
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
# Read addons from user config
unset ADDONS
declare -A ADDONS
while IFS="=" read KEY VALUE; do
[ -n "${KEY}" ] && ADDONS["${KEY}"]="${VALUE}"
done < <(readConfigMap "addons" "${USER_CONFIG_FILE}")
NEXT="h"
# Loop menu
while true; do
dialog --backtitle "`backtitle`" --default-item ${NEXT} \
--menu "Choose a option" 0 0 0 \
h "Detect hardware" \
a "Add an addon" \
d "Delete addon(s)" \
s "Show user addons" \
m "Show all available addons" \
o "Download an addon" \
e "Exit" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && return
case "`<${TMP_PATH}/resp`" in
h)
detectHw
NEXT='e'
;;
a) NEXT='a'
rm "${TMP_PATH}/menu"
while read ADDON DESC; do
arrayExistItem "${ADDON}" "${!ADDONS[@]}" && continue # Check if addon has already been added
echo "${ADDON} \"${DESC}\"" >> "${TMP_PATH}/menu"
done < <(availableAddons "${PLATFORM}" "${KVER}")
if [ ! -f "${TMP_PATH}/menu" ] ; then
dialog --backtitle "`backtitle`" --msgbox "No available addons to add" 0 0
continue
fi
dialog --backtitle "`backtitle`" --menu "Select an addon" 0 0 0 \
--file "${TMP_PATH}/menu" 2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && continue
ADDON="`<"${TMP_PATH}/resp"`"
[ -z "${ADDON}" ] && continue
dialog --backtitle "`backtitle`" --title "params" \
--inputbox "Type a opcional params to addon" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
ADDONS[${ADDON}]="`<"${TMP_PATH}/resp"`"
writeConfigKey "addons.${ADDON}" "${VALUE}" "${USER_CONFIG_FILE}"
DIRTY=1
;;
d) NEXT='d'
if [ ${#ADDONS[@]} -eq 0 ]; then
dialog --backtitle "`backtitle`" --msgbox "No user addons to remove" 0 0
continue
fi
ITEMS=""
for I in "${!ADDONS[@]}"; do
ITEMS+="${I} ${I} off "
done
dialog --backtitle "`backtitle`" --no-tags \
--checklist "Select addon to remove" 0 0 0 ${ITEMS} \
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && continue
ADDON="`<"${TMP_PATH}/resp"`"
[ -z "${ADDON}" ] && continue
for I in ${ADDON}; do
unset ADDONS[${I}]
deleteConfigKey "addons.${I}" "${USER_CONFIG_FILE}"
done
DIRTY=1
;;
s) NEXT='s'
ITEMS=""
for KEY in ${!ADDONS[@]}; do
ITEMS+="${KEY}: ${ADDONS[$KEY]}\n"
done
dialog --backtitle "`backtitle`" --title "User addons" \
--msgbox "${ITEMS}" 0 0
;;
m) NEXT='m'
MSG=""
while read MODULE DESC; do
if arrayExistItem "${MODULE}" "${!ADDONS[@]}"; then
MSG+="\Z4${MODULE}\Zn"
else
MSG+="${MODULE}"
fi
MSG+=": \Z5${DESC}\Zn\n"
done < <(availableAddons "${PLATFORM}" "${KVER}")
dialog --backtitle "`backtitle`" --title "Available addons" \
--colors --msgbox "${MSG}" 0 0
;;
o)
TEXT="please enter the complete URL to download.\n"
TEXT+="\Zb(Official addons location: https://github.com/fbelavenuto/arpl-addons/releases)\Zn\n"
TEXT+="Ex: https://github.com/fbelavenuto/arpl-addons/releases/download/v0.2/9p.addon"
dialog --backtitle "`backtitle`" --aspect 18 --colors --inputbox "${TEXT}" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
URL="`<"${TMP_PATH}/resp"`"
[ -z "${URL}" ] && continue
clear
echo "Downloading ${URL}"
curl --insecure -L "${URL}" -o "${TMP_PATH}/addon.tgz" --progress-bar
if [ $? -ne 0 ]; then
dialog --backtitle "`backtitle`" --title "Error downloading" --aspect 18 \
--msgbox "Check internet or cache disk space" 0 0
return 1
fi
ADDON="`untarAddon "${TMP_PATH}/addon.tgz"`"
if [ -n "${ADDON}" ]; then
dialog --backtitle "`backtitle`" --title "Success" --aspect 18 \
--msgbox "Addon '${ADDON}' added to loader" 0 0
else
dialog --backtitle "`backtitle`" --title "Invalid addon" --aspect 18 \
--msgbox "File format not recognized!" 0 0
fi
;;
e) return ;;
esac
done
}
###############################################################################
function cmdlineMenu() {
# Read device-tree flag
DT="`readModelKey "${MODEL}" "dt"`"
unset CMDLINE
declare -A CMDLINE
while IFS="=" read KEY VALUE; do
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
done < <(readConfigMap "cmdline" "${USER_CONFIG_FILE}")
echo "a \"Add/edit an cmdline item\"" > "${TMP_PATH}/menu"
echo "d \"Delete cmdline item(s)\"" >> "${TMP_PATH}/menu"
if [ "${DT}" != "true" ]; then
echo "u \"Show SATA(s) # ports and drives\"" >> "${TMP_PATH}/menu"
fi
echo "s \"Show user cmdline\"" >> "${TMP_PATH}/menu"
echo "m \"Show model/build cmdline\"" >> "${TMP_PATH}/menu"
echo "e \"Exit\"" >> "${TMP_PATH}/menu"
# Loop menu
while true; do
dialog --backtitle "`backtitle`" --menu "Choose a option" 0 0 0 \
--file "${TMP_PATH}/menu" 2>${TMP_PATH}/resp
[ $? -ne 0 ] && return
case "`<${TMP_PATH}/resp`" in
a)
dialog --backtitle "`backtitle`" --title "User cmdline" \
--inputbox "Type a name of cmdline" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
NAME="`sed 's/://g' <"${TMP_PATH}/resp"`"
[ -z "${NAME}" ] && continue
dialog --backtitle "`backtitle`" --title "User cmdline" \
--inputbox "Type a value of '${NAME}' cmdline" 0 0 "${CMDLINE[${NAME}]}" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
VALUE="`<"${TMP_PATH}/resp"`"
CMDLINE[${NAME}]="${VALUE}"
writeConfigKey "cmdline.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
;;
d)
if [ ${#CMDLINE[@]} -eq 0 ]; then
dialog --backtitle "`backtitle`" --msgbox "No user cmdline to remove" 0 0
continue
fi
ITEMS=""
for I in "${!CMDLINE[@]}"; do
ITEMS+="${I} ${CMDLINE[${I}]} off "
done
dialog --backtitle "`backtitle`" \
--checklist "Select cmdline to remove" 0 0 0 ${ITEMS} \
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && continue
RESP=`<"${TMP_PATH}/resp"`
[ -z "${RESP}" ] && continue
for I in ${RESP}; do
unset CMDLINE[${I}]
deleteConfigKey "cmdline.${I}" "${USER_CONFIG_FILE}"
done
;;
u) TEXT=""
NUMPORTS=0
for PCI in `lspci -d ::106 | awk '{print$1}'`; do
NAME=`lspci -s "${PCI}" | sed "s/\ .*://"`
TEXT+="\Zb${NAME}\Zn\nPorts: "
unset HOSTPORTS
declare -A HOSTPORTS
while read LINE; do
ATAPORT="`echo ${LINE} | grep -o 'ata[0-9]*'`"
PORT=`echo ${ATAPORT} | sed 's/ata//'`
HOSTPORTS[${PORT}]=`echo ${LINE} | grep -o 'host[0-9]*$'`
done < <(ls -l /sys/class/scsi_host | fgrep "${PCI}")
while read PORT; do
ls -l /sys/block | fgrep -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0
PCMD=`cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd`
[ "${PCMD}" = "0" ] && DUMMY=1 || DUMMY=0
[ ${ATTACH} -eq 1 ] && TEXT+="\Z2\Zb"
[ ${DUMMY} -eq 1 ] && TEXT+="\Z1"
TEXT+="${PORT}\Zn "
NUMPORTS=$((${NUMPORTS}+1))
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
TEXT+="\n"
done
TEXT+="\nTotal of ports: ${NUMPORTS}\n"
TEXT+="\nPorts with color \Z1red\Zn as DUMMY, color \Z2\Zbgreen\Zn has drive connected."
dialog --backtitle "`backtitle`" --colors --aspect 18 \
--msgbox "${TEXT}" 0 0
;;
s)
ITEMS=""
for KEY in ${!CMDLINE[@]}; do
ITEMS+="${KEY}: ${CMDLINE[$KEY]}\n"
done
dialog --backtitle "`backtitle`" --title "User cmdline" \
--aspect 18 --msgbox "${ITEMS}" 0 0
;;
m)
ITEMS=""
while IFS="=" read KEY VALUE; do
ITEMS+="${KEY}: ${VALUE}\n"
done < <(readModelMap "${MODEL}" "builds.${BUILD}.cmdline")
dialog --backtitle "`backtitle`" --title "Model/build cmdline" \
--aspect 18 --msgbox "${ITEMS}" 0 0
;;
e) return ;;
esac
done
}
###############################################################################
function synoinfoMenu() {
# Read synoinfo from user config
unset SYNOINFO
declare -A SYNOINFO
while IFS="=" read KEY VALUE; do
[ -n "${KEY}" ] && SYNOINFO["${KEY}"]="${VALUE}"
done < <(readConfigMap "synoinfo" "${USER_CONFIG_FILE}")
echo "a \"Add/edit an synoinfo item\"" > "${TMP_PATH}/menu"
echo "d \"Delete synoinfo item(s)\"" >> "${TMP_PATH}/menu"
echo "s \"Show user synoinfo\"" >> "${TMP_PATH}/menu"
echo "m \"Show model/build synoinfo\"" >> "${TMP_PATH}/menu"
echo "e \"Exit\"" >> "${TMP_PATH}/menu"
# menu loop
while true; do
dialog --backtitle "`backtitle`" --menu "Choose a option" 0 0 0 \
--file "${TMP_PATH}/menu" 2>${TMP_PATH}/resp
[ $? -ne 0 ] && return
case "`<${TMP_PATH}/resp`" in
a)
dialog --backtitle "`backtitle`" --title "User synoinfo" \
--inputbox "Type a name of synoinfo variable" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
NAME="`sed 's/://g' <"${TMP_PATH}/resp"`"
dialog --backtitle "`backtitle`" --title "User synoinfo" \
--inputbox "Type a value of '${NAME}' variable" 0 0 "${SYNOINFO[${NAME}]}" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
VALUE="`<"${TMP_PATH}/resp"`"
SYNOINFO[${NAME}]="${VALUE}"
writeConfigKey "synoinfo.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
DIRTY=1
;;
d)
if [ ${#SYNOINFO[@]} -eq 0 ]; then
dialog --backtitle "`backtitle`" --msgbox "No user synoinfo to remove" 0 0
continue
fi
ITEMS=""
for I in "${!SYNOINFO[@]}"; do
ITEMS+="${I} ${SYNOINFO[${I}]} off "
done
dialog --backtitle "`backtitle`" \
--checklist "Select synoinfo to remove" 0 0 0 ${ITEMS} \
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && continue
RESP=`<"${TMP_PATH}/resp"`
[ -z "${RESP}" ] && continue
for I in ${RESP}; do
unset SYNOINFO[${I}]
deleteConfigKey "synoinfo.${I}" "${USER_CONFIG_FILE}"
done
DIRTY=1
;;
s)
ITEMS=""
for KEY in ${!SYNOINFO[@]}; do
ITEMS+="${KEY}: ${SYNOINFO[$KEY]}\n"
done
dialog --backtitle "`backtitle`" --title "User synoinfo" \
--aspect 18 --msgbox "${ITEMS}" 0 0
;;
m)
ITEMS=""
while IFS="=" read KEY VALUE; do
ITEMS+="${KEY}: ${VALUE}\n"
done < <(readModelMap "${MODEL}" "builds.${BUILD}.synoinfo")
dialog --backtitle "`backtitle`" --title "Model/build synoinfo" \
--aspect 18 --msgbox "${ITEMS}" 0 0
;;
e) return ;;
esac
done
}
############################################################################### ###############################################################################
# Where the magic happens :D # Where the magic happens :D
function make() { function make() {
@@ -330,7 +701,7 @@ function make() {
--msgbox "zImage not patched:\n`<"${LOG_FILE}"`" 0 0 --msgbox "zImage not patched:\n`<"${LOG_FILE}"`" 0 0
return 1 return 1
fi fi
/opt/arpl/ramdisk-patch.sh /opt/arpl/ramdisk-patch.sh
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
dialog --backtitle "`backtitle`" --title "Error" --aspect 18 \ dialog --backtitle "`backtitle`" --title "Error" --aspect 18 \
@@ -347,391 +718,6 @@ function make() {
return 0 return 0
} }
###############################################################################
# Detect hardware
function detectHw() {
PLATFORM="`readModelKey "${MODEL}" "platform"`"
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
# Get modules not needed
unset NOTNEEDED
declare -A NOTNEEDED
while read M; do
NOTNEEDED[${M}]="1"
done < <(readModelArray "${MODEL}" "builds.${BUILD}.modules-notneeded")
unset DEVC DEVN
declare -A DEVC
declare -A DEVN
while read L; do
F=` sed -E 's/^([0-9a-z]{2}:[0-9a-z]{2}.[0-9a-z]{1})[^\[]*\[([0-9a-z]{4})\]: (.*)/\1|\2|\3/' <<<"${L}"`
PCI="`cut -d'|' -f1 <<<"${F}"`"
CLASS="`cut -d'|' -f2 <<<"${F}"`"
NAME="`cut -d'|' -f3 <<<"${F}"`"
MODULE="`lspci -ks "${PCI}" | awk '/Kernel driver in use/{print$5}'`"
[ -z "${MODULE}" ] && continue
# If is a virtio module, change id
if grep -q "virtio" <<<"$MODULE"; then
MODULE="virtio"
fi
CLASS=${CLASSES[${CLASS}]} # Get class name of module
[ -z "${CLASS}" ] && continue # If no class, skip
arrayExistItem "${MODULE}" "${!ADDONS[@]}" && continue # Check if module already added
[ -n "${NOTNEEDED[${MODULE}]}" ] && continue # Check if module is not necessary
# Add module to list
DEVC[${MODULE}]="${CLASS}"
DEVN[${MODULE}]="${NAME}"
done < <(lspci -nn)
if [ ${#DEVC[@]} -eq 0 ]; then
dialog --backtitle "`backtitle`" --aspect 18 \
--msgbox "No device detected or already added!" 0 0
return
fi
for MODULE in ${!DEVC[@]}; do
CLASS="${DEVC[${MODULE}]}"
NAME="${DEVN[${MODULE}]}"
TEXT="Found a ${NAME}\nClass ${CLASS}\nModule ${MODULE}\nAccept?"
checkAddonExist "${MODULE}" "${PLATFORM}" "${KVER}" || TEXT+="\n\n\Z1PS: Addon for this module not found\Zn"
dialog --backtitle "`backtitle`" --title "Found Hardware" \
--colors --yesno "${TEXT}" 12 70
[ $? -ne 0 ] && continue
dialog --backtitle "`backtitle`" --title "params" \
--inputbox "Type a opcional params to module" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
VALUE="`<${TMP_PATH}/resp`"
ADDONS["${MODULE}"]="${VALUE}"
writeConfigKey "addons.${MODULE}" "${VALUE}" "${USER_CONFIG_FILE}"
DIRTY=1
done
}
###############################################################################
# Manage addons/drivers
function addonMenu() {
# Read 'platform' and kernel version to check if addon exists
PLATFORM="`readModelKey "${MODEL}" "platform"`"
KVER="`readModelKey "${MODEL}" "builds.${BUILD}.kver"`"
# Read addons from user config
unset ADDONS
declare -A ADDONS
while IFS="=" read KEY VALUE; do
[ -n "${KEY}" ] && ADDONS["${KEY}"]="${VALUE}"
done < <(readConfigMap "addons" "${USER_CONFIG_FILE}")
NEXT="h"
# Loop menu
while true; do
dialog --backtitle "`backtitle`" --default-item ${NEXT} \
--menu "Choose a option" 0 0 0 \
h "Detect hardware" \
a "Add an addon" \
d "Delete addon(s)" \
s "Show user addons" \
m "Show all available addons" \
o "Download an addon" \
e "Exit" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && return
case "`<${TMP_PATH}/resp`" in
h)
detectHw
NEXT='e'
;;
a) NEXT='a'
rm "${TMP_PATH}/menu"
while read ADDON DESC; do
arrayExistItem "${ADDON}" "${!ADDONS[@]}" && continue # Check if addon has already been added
echo "${ADDON} \"${DESC}\"" >> "${TMP_PATH}/menu"
done < <(availableAddons "${PLATFORM}" "${KVER}")
if [ ! -f "${TMP_PATH}/menu" ] ; then
dialog --backtitle "`backtitle`" --msgbox "No available addons to add" 0 0
continue
fi
dialog --backtitle "`backtitle`" --menu "Select an addon" 0 0 0 \
--file "${TMP_PATH}/menu" 2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && continue
ADDON="`<"${TMP_PATH}/resp"`"
[ -z "${ADDON}" ] && continue
dialog --backtitle "`backtitle`" --title "params" \
--inputbox "Type a opcional params to addon" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
ADDONS[${ADDON}]="`<"${TMP_PATH}/resp"`"
writeConfigKey "addons.${ADDON}" "${VALUE}" "${USER_CONFIG_FILE}"
DIRTY=1
;;
d) NEXT='d'
if [ ${#ADDONS[@]} -eq 0 ]; then
dialog --backtitle "`backtitle`" --msgbox "No user addons to remove" 0 0
continue
fi
ITEMS=""
for I in "${!ADDONS[@]}"; do
ITEMS+="${I} ${I} off "
done
dialog --backtitle "`backtitle`" --no-tags \
--checklist "Select addon to remove" 0 0 0 ${ITEMS} \
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && continue
ADDON="`<"${TMP_PATH}/resp"`"
[ -z "${ADDON}" ] && continue
for I in ${ADDON}; do
unset ADDONS[${I}]
deleteConfigKey "addons.${I}" "${USER_CONFIG_FILE}"
done
DIRTY=1
;;
s) NEXT='s'
ITEMS=""
for KEY in ${!ADDONS[@]}; do
ITEMS+="${KEY}: ${ADDONS[$KEY]}\n"
done
dialog --backtitle "`backtitle`" --title "User addons" \
--msgbox "${ITEMS}" 0 0
;;
m) NEXT='m'
MSG=""
while read MODULE DESC; do
if arrayExistItem "${MODULE}" "${!ADDONS[@]}"; then
MSG+="\Z4${MODULE}\Zn"
else
MSG+="${MODULE}"
fi
MSG+=": \Z5${DESC}\Zn\n"
done < <(availableAddons "${PLATFORM}" "${KVER}")
dialog --backtitle "`backtitle`" --title "Available addons" \
--colors --msgbox "${MSG}" 0 0
;;
o) dialog --backtitle "`backtitle`" \
--inputbox "please enter the URL to download" 0 0 \
"https://raw.githubusercontent.com/fbelavenuto/arpl-addons/main/" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
URL="`<"${TMP_PATH}/resp"`"
[ -z "${URL}" ] && continue
clear
echo "Downloading ${URL}"
curl --insecure -L "${URL}" -o "${TMP_PATH}/addon.tgz" --progress-bar
if [ $? -ne 0 ]; then
dialog --backtitle "`backtitle`" --title "Error downloading" --aspect 18 \
--msgbox "Check internet or cache disk space" 0 0
return 1
fi
ADDON="`untarAddon "${TMP_PATH}/addon.tgz"`"
if [ -n "${ADDON}" ]; then
dialog --backtitle "`backtitle`" --title "Success" --aspect 18 \
--msgbox "Addon '${ADDON}' added to loader" 0 0
else
dialog --backtitle "`backtitle`" --title "Invalid addon" --aspect 18 \
--msgbox "File format not recognized!" 0 0
fi
;;
e) return ;;
esac
done
}
###############################################################################
function cmdlineMenu() {
# Read from user config
DT="`readModelKey "${MODEL}" "dt"`"
unset CMDLINE
declare -A CMDLINE
while IFS="=" read KEY VALUE; do
[ -n "${KEY}" ] && CMDLINE["${KEY}"]="${VALUE}"
done < <(readConfigMap "cmdline" "${USER_CONFIG_FILE}")
# Loop menu
while true; do
echo "a \"Add/edit an cmdline item\"" > "${TMP_PATH}/menu"
echo "d \"Delete cmdline item(s)\"" >> "${TMP_PATH}/menu"
echo "s \"Show user cmdline\"" >> "${TMP_PATH}/menu"
echo "m \"Show model/build cmdline\"" >> "${TMP_PATH}/menu"
if [ "${DT}" != "true" ]; then
echo "h \"Change maxdisks\"" >> "${TMP_PATH}/menu"
echo "u \"Show SATA(s) # ports and drives\"" >> "${TMP_PATH}/menu"
fi
echo "e \"Exit\"" >> "${TMP_PATH}/menu"
dialog --backtitle "`backtitle`" --menu "Choose a option" 0 0 0 \
--file "${TMP_PATH}/menu" 2>${TMP_PATH}/resp
[ $? -ne 0 ] && return
case "`<${TMP_PATH}/resp`" in
a)
dialog --backtitle "`backtitle`" --title "User cmdline" \
--inputbox "Type a name of cmdline" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
NAME="`sed 's/://g' <"${TMP_PATH}/resp"`"
[ -z "${NAME}" ] continue
dialog --backtitle "`backtitle`" --title "User cmdline" \
--inputbox "Type a value of '${NAME}' cmdline" 0 0 "${CMDLINE[${NAME}]}" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
VALUE="`<"${TMP_PATH}/resp"`"
CMDLINE[${NAME}]="${VALUE}"
writeConfigKey "cmdline.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
;;
d)
if [ ${#CMDLINE[@]} -eq 0 ]; then
dialog --backtitle "`backtitle`" --msgbox "No user cmdline to remove" 0 0
continue
fi
ITEMS=""
for I in "${!CMDLINE[@]}"; do
ITEMS+="${I} ${CMDLINE[${I}]} off "
done
dialog --backtitle "`backtitle`" \
--checklist "Select cmdline to remove" 0 0 0 ${ITEMS} \
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && continue
RESP=`<"${TMP_PATH}/resp"`
[ -z "${RESP}" ] && continue
for I in ${RESP}; do
unset CMDLINE[${I}]
deleteConfigKey "cmdline.${I}" "${USER_CONFIG_FILE}"
done
;;
s)
ITEMS=""
for KEY in ${!CMDLINE[@]}; do
ITEMS+="${KEY}: ${CMDLINE[$KEY]}\n"
done
dialog --backtitle "`backtitle`" --title "User cmdline" \
--aspect 18 --msgbox "${ITEMS}" 0 0
;;
m)
ITEMS=""
while IFS="=" read KEY VALUE; do
ITEMS+="${KEY}: ${VALUE}\n"
done < <(readModelMap "${MODEL}" "builds.${BUILD}.cmdline")
dialog --backtitle "`backtitle`" --title "Model/build cmdline" \
--aspect 18 --msgbox "${ITEMS}" 0 0
;;
h) MODEL_DISKS="`readModelKey "${MODEL}" "disks"`"
dialog --backtitle "`backtitle`" --title "Change max of disks" \
--inputbox "${MODEL} disks: ${MODEL_DISKS}\nType the desired number of disks (1-26)" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
VALUE="`<"${TMP_PATH}/resp"`"
[ -z "${VALUE}" ] && continue
if [ ${VALUE} -ge 1 -a ${VALUE} -le 26 ]; then
CMDLINE['maxdisks']="${VALUE}"
writeConfigKey "cmdline.maxdisks" "${VALUE}" "${USER_CONFIG_FILE}"
INTPORTCFG=""
for I in `seq 1 ${VALUE}`; do INTPORTCFG+="1"; done
INTPORTCFG=`printf "%x" "$((2#${INTPORTCFG}))"`
CMDLINE['internalportcfg']="${INTPORTCFG}"
writeConfigKey "cmdline.internalportcfg" "${INTPORTCFG}" "${USER_CONFIG_FILE}"
else
dialog --backtitle "`backtitle`" --msgbox "Invalid number" 0 0
fi
;;
u) TEXT=""
for PCI in `lspci -d ::106 | awk '{print$1}'`; do
NAME=`lspci -s "${PCI}" | sed "s/\ .*://"`
TEXT+="\Zb${NAME}\Zn\nPorts: "
unset HOSTPORTS
declare -A HOSTPORTS
while read LINE; do
ATAPORT="`echo ${LINE} | grep -o 'ata[0-9]*'`"
PORT=`echo ${ATAPORT} | sed 's/ata//'`
HOSTPORTS[${PORT}]=`echo ${LINE} | grep -o 'host[0-9]*$'`
done < <(ls -l /sys/class/scsi_host | fgrep "${PCI}")
while read PORT; do
ls -l /sys/block | fgrep -q "${PCI}/ata${PORT}" && ATTACH=1 || ATTACH=0
[ `cat /sys/class/scsi_host/${HOSTPORTS[${PORT}]}/ahci_port_cmd` -eq 0 ] && DUMMY=1 || DUMMY=0
[ ${ATTACH} -eq 1 ] && TEXT+="\Z2\Zb"
[ ${DUMMY} -eq 1 ] && TEXT+="\Z1"
TEXT+="${PORT}\Zn "
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
TEXT+="\n"
done
TEXT+="\nPorts with color \Z1red\Zn as DUMMY, color \Z2\Zbgreen\Zn has drive connected\n"
TEXT+="Use this information to assist in creating SataPortMap, DiskIdxMap and sata_remap"
dialog --backtitle "`backtitle`" --colors --aspect 18 \
--msgbox "${TEXT}" 0 0
;;
e) return ;;
esac
done
}
###############################################################################
function synoinfoMenu() {
# Read synoinfo from user config
unset SYNOINFO
declare -A SYNOINFO
while IFS="=" read KEY VALUE; do
[ -n "${KEY}" ] && SYNOINFO["${KEY}"]="${VALUE}"
done < <(readConfigMap "synoinfo" "${USER_CONFIG_FILE}")
# menu loop
while true; do
dialog --backtitle "`backtitle`" \
--menu "Choose a option" 0 0 0 \
a "Add/edit an synoinfo item" \
d "Delete synoinfo item(s)" \
s "Show user synoinfo" \
m "Show model/build synoinfo" \
e "Exit" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && return
case "`<${TMP_PATH}/resp`" in
a)
dialog --backtitle "`backtitle`" --title "User synoinfo" \
--inputbox "Type a name of synoinfo variable" 0 0 \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
NAME="`sed 's/://g' <"${TMP_PATH}/resp"`"
dialog --backtitle "`backtitle`" --title "User synoinfo" \
--inputbox "Type a value of '${NAME}' variable" 0 0 "${SYNOINFO[${NAME}]}" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && continue
VALUE="`<"${TMP_PATH}/resp"`"
SYNOINFO[${NAME}]="${VALUE}"
writeConfigKey "synoinfo.${NAME}" "${VALUE}" "${USER_CONFIG_FILE}"
DIRTY=1
;;
d)
if [ ${#SYNOINFO[@]} -eq 0 ]; then
dialog --backtitle "`backtitle`" --msgbox "No user synoinfo to remove" 0 0
continue
fi
ITEMS=""
for I in "${!SYNOINFO[@]}"; do
ITEMS+="${I} ${SYNOINFO[${I}]} off "
done
dialog --backtitle "`backtitle`" \
--checklist "Select synoinfo to remove" 0 0 0 ${ITEMS} \
2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && continue
RESP=`<"${TMP_PATH}/resp"`
[ -z "${RESP}" ] && continue
for I in ${RESP}; do
unset SYNOINFO[${I}]
deleteConfigKey "synoinfo.${I}" "${USER_CONFIG_FILE}"
done
DIRTY=1
;;
s)
ITEMS=""
for KEY in ${!SYNOINFO[@]}; do
ITEMS+="${KEY}: ${SYNOINFO[$KEY]}\n"
done
dialog --backtitle "`backtitle`" --title "User synoinfo" \
--aspect 18 --msgbox "${ITEMS}" 0 0
;;
m)
ITEMS=""
while IFS="=" read KEY VALUE; do
ITEMS+="${KEY}: ${VALUE}\n"
done < <(readModelMap "${MODEL}" "builds.${BUILD}.synoinfo")
dialog --backtitle "`backtitle`" --title "Model/build synoinfo" \
--aspect 18 --msgbox "${ITEMS}" 0 0
;;
e) return ;;
esac
done
}
############################################################################### ###############################################################################
# Calls boot.sh to boot into DSM kernel/ramdisk # Calls boot.sh to boot into DSM kernel/ramdisk
function boot() { function boot() {
@@ -787,6 +773,122 @@ function keymapMenu() {
zcat /usr/share/keymaps/i386/qwerty/${KEYMAP}.map.gz | loadkeys zcat /usr/share/keymaps/i386/qwerty/${KEYMAP}.map.gz | loadkeys
} }
###############################################################################
function updateMenu() {
while true; do
dialog --backtitle "`backtitle`" --menu "Choose a option" 0 0 0 \
a "Update arpl" \
d "Update addons" \
l "Update LKMs" \
e "Exit" \
2>${TMP_PATH}/resp
[ $? -ne 0 ] && return
case "`<${TMP_PATH}/resp`" in
a)
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
--infobox "Checking last version" 0 0
ACTUALVERSION="v${ARPL_VERSION}"
TAG="`curl --insecure -s https://api.github.com/repos/fbelavenuto/arpl/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'`"
if [ $? -ne 0 -o -z "${TAG}" ]; then
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
--msgbox "Error checking new version" 0 0
continue
fi
if [ "${ACTUALVERSION}" = "${TAG}" ]; then
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
--yesno "No new version. Actual version is ${ACTUALVERSION}\nForce update?" 0 0
[ $? -ne 0 ] && continue
fi
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
--infobox "Downloading last version ${TAG}" 0 0
curl --insecure -s -L "https://github.com/fbelavenuto/arpl/releases/download/${TAG}/bzImage" -o /tmp/bzImage
if [ $? -ne 0 ]; then
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
--msgbox "Error downloading bzImage" 0 0
continue
fi
curl --insecure -s -L "https://github.com/fbelavenuto/arpl/releases/download/${TAG}/rootfs.cpio.xz" -o /tmp/rootfs.cpio.xz
if [ $? -ne 0 ]; then
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
--msgbox "Error downloading rootfs.cpio.xz" 0 0
continue
fi
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
--infobox "Installing new files" 0 0
mv /tmp/bzImage /mnt/p1/bzImage-arpl
mv /tmp/rootfs.cpio.xz /mnt/p1/initrd-arpl
dialog --backtitle "`backtitle`" --title "Update arpl" --aspect 18 \
--yesno "Arpl updated with success to ${TAG}!\nReboot?" 0 0
[ $? -ne 0 ] && continue
reboot
exit
;;
d)
dialog --backtitle "`backtitle`" --title "Update addons" --aspect 18 \
--infobox "Checking last version" 0 0
TAG=`curl --insecure -s https://api.github.com/repos/fbelavenuto/arpl-addons/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'`
if [ $? -ne 0 -o -z "${TAG}" ]; then
dialog --backtitle "`backtitle`" --title "Update addons" --aspect 18 \
--msgbox "Error checking new version" 0 0
continue
fi
dialog --backtitle "`backtitle`" --title "Update addons" --aspect 18 \
--infobox "Downloading last version" 0 0
curl --insecure -s -L "https://github.com/fbelavenuto/arpl-addons/releases/download/${TAG}/addons.zip" -o /tmp/addons.zip
if [ $? -ne 0 ]; then
dialog --backtitle "`backtitle`" --title "Update addons" --aspect 18 \
--msgbox "Error downloading new version" 0 0
continue
fi
dialog --backtitle "`backtitle`" --title "Update addons" --aspect 18 \
--infobox "Extracting last version" 0 0
rm -rf /tmp/addons
mkdir -p /tmp/addons
unzip /tmp/addons.zip -d /tmp/addons >/dev/null 2>&1
dialog --backtitle "`backtitle`" --title "Update addons" --aspect 18 \
--infobox "Installing new addons" 0 0
DEST_PATH="/mnt/p3/addons"
for PKG in `ls /tmp/addons/*.addon`; do
ADDON=`basename ${PKG} | sed 's|.addon||'`
rm -rf "${DEST_PATH}/${ADDON}"
mkdir -p "${DEST_PATH}/${ADDON}"
tar xaf "${PKG}" -C "${DEST_PATH}/${ADDON}" >/dev/null 2>&1
done
dialog --backtitle "`backtitle`" --title "Update addons" --aspect 18 \
--msgbox "Addons updated with success!" 0 0
;;
l)
dialog --backtitle "`backtitle`" --title "Update LKMs" --aspect 18 \
--infobox "Checking last version" 0 0
TAG=`curl --insecure -s https://api.github.com/repos/fbelavenuto/redpill-lkm/releases/latest | grep "tag_name" | awk '{print substr($2, 2, length($2)-3)}'`
if [ $? -ne 0 -o -z "${TAG}" ]; then
dialog --backtitle "`backtitle`" --title "Update LKMs" --aspect 18 \
--msgbox "Error checking new version" 0 0
continue
fi
dialog --backtitle "`backtitle`" --title "Update LKMs" --aspect 18 \
--infobox "Downloading last version" 0 0
curl --insecure -s -L "https://github.com/fbelavenuto/redpill-lkm/releases/download/${TAG}/rp-lkms.zip" -o /tmp/rp-lkms.zip
if [ $? -ne 0 ]; then
dialog --backtitle "`backtitle`" --title "Update LKMs" --aspect 18 \
--msgbox "Error downloading new version" 0 0
continue
fi
dialog --backtitle "`backtitle`" --title "Update LKMs" --aspect 18 \
--infobox "Extracting last version" 0 0
rm -rf /mnt/p3/lkms/*
unzip /tmp/rp-lkms.zip -d /mnt/p3/lkms >/dev/null 2>&1
dialog --backtitle "`backtitle`" --title "Update LKMs" --aspect 18 \
--msgbox "LKMs updated with success!" 0 0
;;
e) return ;;
esac
done
}
############################################################################### ###############################################################################
############################################################################### ###############################################################################
@@ -809,6 +911,7 @@ while true; do
echo "u \"Edit user config file manually\"" >> "${TMP_PATH}/menu" echo "u \"Edit user config file manually\"" >> "${TMP_PATH}/menu"
echo "k \"Choose a keymap\" " >> "${TMP_PATH}/menu" echo "k \"Choose a keymap\" " >> "${TMP_PATH}/menu"
[ ${RAMCACHE} -eq 0 -a -d "${CACHE_PATH}/dl" ] && echo "c \"Clean disk cache\"" >> "${TMP_PATH}/menu" [ ${RAMCACHE} -eq 0 -a -d "${CACHE_PATH}/dl" ] && echo "c \"Clean disk cache\"" >> "${TMP_PATH}/menu"
echo "p \"Update menu\"" >> "${TMP_PATH}/menu"
echo "e \"Exit\"" >> "${TMP_PATH}/menu" echo "e \"Exit\"" >> "${TMP_PATH}/menu"
dialog --clear --default-item ${NEXT} --backtitle "`backtitle`" --colors \ dialog --clear --default-item ${NEXT} --backtitle "`backtitle`" --colors \
--menu "Choose the option" 0 0 0 --file "${TMP_PATH}/menu" \ --menu "Choose the option" 0 0 0 --file "${TMP_PATH}/menu" \
@@ -831,8 +934,10 @@ while true; do
k) keymapMenu ;; k) keymapMenu ;;
c) dialog --backtitle "`backtitle`" --title "Cleaning" --aspect 18 \ c) dialog --backtitle "`backtitle`" --title "Cleaning" --aspect 18 \
--prgbox "rm -rfv \"${CACHE_PATH}/dl\"" 0 0 ;; --prgbox "rm -rfv \"${CACHE_PATH}/dl\"" 0 0 ;;
p) updateMenu ;;
e) break ;; e) break ;;
esac esac
done done
clear clear
echo -e "Call \033[1;32mmenu.sh\033[0m to return to menu" echo -e "Call \033[1;32mmenu.sh\033[0m to return to menu"

View File

@@ -1,15 +1,18 @@
id: "DS1621+" id: "DS1621+"
modules-notneeded: &modules-notneeded modules-notneeded: &modules-notneeded
- ahci - ahci
- ata_piix
- amd_xgbe
- marvell10g
- i40e - i40e
- r8168
- r8169
- ixgbe - ixgbe
- igb
- e1000e
- dca
- etxhci_hcd - etxhci_hcd
- xhci_hcd - xhci_hcd
- ehci-pci - ehci-pci
- uhci_hcd - uhci_hcd
- mv14xx
synoinfo: &synoinfo synoinfo: &synoinfo
support_disk_compatibility: "no" support_disk_compatibility: "no"
support_memory_compatibility: "no" support_memory_compatibility: "no"

View File

@@ -1,15 +1,17 @@
id: "DS2422+" id: "DS2422+"
modules-notneeded: &modules-notneeded modules-notneeded: &modules-notneeded
- ahci - ahci
- ata_piix
- amd_xgbe
- marvell10g
- i40e - i40e
- r8168
- ixgbe - ixgbe
- igb
- e1000e
- dca
- etxhci_hcd - etxhci_hcd
- xhci_hcd - xhci_hcd
- ehci-pci - ehci-pci
- uhci_hcd - uhci_hcd
- mv14xx
synoinfo: &synoinfo synoinfo: &synoinfo
rss_server: "http://example.com/null.xml" rss_server: "http://example.com/null.xml"
rss_server_ssl: "https://example.com/null.xml" rss_server_ssl: "https://example.com/null.xml"

View File

@@ -1,6 +1,7 @@
id: "DS3615xs" id: "DS3615xs"
modules-notneeded: &modules-notneeded modules-notneeded: &modules-notneeded
- ahci - ahci
- ata_piix
- i40e - i40e
- ixgbe - ixgbe
- igb - igb

View File

@@ -1,6 +1,7 @@
id: "DS3617xs" id: "DS3617xs"
modules-notneeded: &modules-notneeded modules-notneeded: &modules-notneeded
- ahci - ahci
- ata_piix
- i40e - i40e
- ixgbe - ixgbe
- igb - igb
@@ -9,6 +10,7 @@ modules-notneeded: &modules-notneeded
- xhci_pci - xhci_pci
- xhci_hcd - xhci_hcd
- uhci_hcd - uhci_hcd
- mv14xx
synoinfo: &synoinfo synoinfo: &synoinfo
esataportcfg: "0x00" esataportcfg: "0x00"
usbportcfg: "0x8700" usbportcfg: "0x8700"

View File

@@ -1,17 +1,19 @@
id: "DS3622xs+" id: "DS3622xs+"
modules-notneeded: &modules-notneeded modules-notneeded: &modules-notneeded
- ahci - ahci
- ata_piix
- i40e - i40e
- r8168
- r8169
- ixgbe - ixgbe
- igb - igb
- e1000e - e1000e
- r8168
- r8169
- dca - dca
- etxhci_hcd - etxhci_hcd
- xhci_hcd - xhci_hcd
- ehci-pci - ehci-pci
- uhci_hcd - uhci_hcd
- mv14xx
synoinfo: &synoinfo synoinfo: &synoinfo
esataportcfg: "0x00" esataportcfg: "0x00"
support_bde_internal_10g: "no" support_bde_internal_10g: "no"

View File

@@ -1,14 +1,13 @@
id: "DS918+" id: "DS918+"
modules-notneeded: &modules-notneeded modules-notneeded: &modules-notneeded
- ahci - ahci
- i40e - ata_piix
- ixgbe - r8168
- r8169
- igb - igb
- e1000e - e1000e
- dca
- etxhci_hcd - etxhci_hcd
- xhci_hcd - xhci_hcd
- ehci-pci
- uhci_hcd - uhci_hcd
synoinfo: &synoinfo synoinfo: &synoinfo
esataportcfg: "0x00" esataportcfg: "0x00"

View File

@@ -1,14 +1,11 @@
id: "DS920+" id: "DS920+"
modules-notneeded: &modules-notneeded modules-notneeded: &modules-notneeded
- ahci - ahci
- i40e - ata_piix
- ixgbe - r8168
- igb - r8169
- e1000e
- dca
- etxhci_hcd - etxhci_hcd
- xhci_hcd - xhci_hcd
- ehci-pci
- uhci_hcd - uhci_hcd
synoinfo: &synoinfo synoinfo: &synoinfo
rss_server: "http://example.com/null.xml" rss_server: "http://example.com/null.xml"
@@ -28,6 +25,7 @@ cmdline: &cmdline
syno_ttyS1: "serial,0x2f8" syno_ttyS1: "serial,0x2f8"
vender_format_version: 2 vender_format_version: 2
platform: "geminilake" platform: "geminilake"
dt: true
serial: serial:
prefix: prefix:
- "2030" - "2030"
@@ -50,9 +48,9 @@ builds:
<<: *synoinfo <<: *synoinfo
pat: pat:
url: "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS920%2B_42218.pat" url: "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_DS920%2B_42218.pat"
hash: "73053911bd118b432d5a2036dc62d518eed83b78b32c1eb23696d59725a14892" hash: "fe2a4648f76adeb65c3230632503ea36bbac64ee88b459eb9bfb5f3b8c8cebb3"
ramdisk-hash: "e39890f4bef2e5e4eea956996b0dd92d081c6d9e7c393331131e65bbad1a17a9" ramdisk-hash: "f7dd1317f24ec6b9bac839e37f66b59030218c7f97c06f73f1f54ed0f892c4aa"
zimage-hash: "74d513aaa3e30d8aa4f80e202d94a68a552e9c0472f8470e133ad29080556f55" zimage-hash: "346b68f662b50f47d3ee6c2bc9de6302e4b60436142c24ee88b620c7afd1ba06"
patch: patch:
- "ramdisk-common-disable-root-pwd.patch" - "ramdisk-common-disable-root-pwd.patch"
- "ramdisk-common-init-script.patch" - "ramdisk-common-init-script.patch"

View File

@@ -1,16 +1,19 @@
id: "DVA1622" id: "DVA1622"
modules-notneeded: &modules-notneeded modules-notneeded: &modules-notneeded
- ahci - ahci
- i40e - ata_piix
- ixgbe - r8168
- igb - r8169
- e1000e
- dca
- etxhci_hcd - etxhci_hcd
- xhci_hcd - xhci_hcd
- ehci-pci
- uhci_hcd - uhci_hcd
- i915
- drm
- fb
- fbdev
- video
- backlight
- button
synoinfo: &synoinfo synoinfo: &synoinfo
buzzeroffen: "0xffff" buzzeroffen: "0xffff"
rss_server: "http://example.com/null.xml" rss_server: "http://example.com/null.xml"

View File

@@ -1,11 +1,11 @@
id: "DVA3221" id: "DVA3221"
modules-notneeded: &modules-notneeded modules-notneeded: &modules-notneeded
- ahci - ahci
- ata_piix
- i40e - i40e
- ixgbe - ixgbe
- igb - igb
- e1000e - e1000e
- dca
- etxhci_hcd - etxhci_hcd
- xhci_hcd - xhci_hcd
- ehci-pci - ehci-pci

View File

@@ -1,88 +0,0 @@
id: "FS6400"
modules-notneeded: &modules-notneeded
- ahci
- i40e
- ixgbe
- igb
- e1000e
- dca
- etxhci_hcd
- xhci_hcd
- ehci-pci
- uhci_hcd
- r8168
- mpt3sas
synoinfo: &synoinfo
# support_bde_internal_10g: "no"
# support_disk_compatibility: "no"
# esataportcfg: "0x00"
# usbportcfg: "0x10000"
rss_server: "http://example.com/null.xml"
rss_server_ssl: "https://example.com/null.xml"
rss_server_v2: "https://example.com/autoupdate/v2/getList"
update_server: "http://example.com/"
update_server_ssl: "https://example.com/"
small_info_path: "https://example.com/null"
updateurl: "http://example.com/"
myds_region_api_base_url: "https://example.com"
security_version_server: "https://example.com/smallupdate"
cmdline: &cmdline
# SMBusHddDynamicPower: 1
vender_format_version: 2
syno_port_thaw: 1
syno_hdd_detect: 0
synoboot2:
syno_ttyS0: "serial,0x3f8"
syno_ttyS1: "serial,0x2f8"
platform: "purley"
serial:
prefix:
- "1960"
middle: "PSN"
suffix: "numeric"
disks: 24
dt: true
builds:
42218:
ver: "7.0.1"
kver: "4.4.180"
rd-compressed: false
efi-bug: no
modules-notneeded: *modules-notneeded
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
pat:
url: "https://global.download.synology.com/download/DSM/release/7.0.1/42218/DSM_FS6400_42218.pat"
hash: "0e5e15398fb50d21ac52e0fbae199d5bacebc52f04933be5825c710f9de874ea"
ramdisk-hash: "eebaf0236230956fc1a9d8ca8c8f86143da959b631cad9c311152a4e644d17a0"
zimage-hash: "cbed16da4970c41e9b9c6797c57c70b12f55ab497756cb050247d1c155c8a8f6"
patch:
- "ramdisk-common-disable-root-pwd.patch"
- "ramdisk-common-init-script.patch"
- "ramdisk-common-post-init-script.patch"
- "ramdisk-common-network-hosts.patch"
- "ramdisk-common-disable-disabled-ports.patch"
42661:
ver: "7.1.0"
kver: "4.4.180"
rd-compressed: false
efi-bug: no
modules-notneeded: *modules-notneeded
cmdline:
<<: *cmdline
synoinfo:
<<: *synoinfo
pat:
url: "https://global.download.synology.com/download/DSM/release/7.1/42661-1/DSM_FS6400_42661.pat"
hash: "94a84725e8b24dfb448429068c046e05084ead3a210f8710979e0992904673e7"
ramdisk-hash: "6ceff751e7132dd8cc80ff64ee23b7e3b3986d85d7d9132b4cb4b0d50f223b1f"
zimage-hash: "2326a556eec4c48b9887bad7eecab268e43dc0e036bed8ddf6fbba466d713cde"
patch:
- "ramdisk-common-disable-root-pwd.patch"
- "ramdisk-common-init-script.patch"
- "ramdisk-42661-post-init-script.patch"
- "ramdisk-common-network-hosts.patch"
- "ramdisk-42661-disable-disabled-ports.patch"

View File

@@ -62,6 +62,15 @@ while read f; do
(cd "${RAMDISK_PATH}" && patch -p1 < "${PATCH_PATH}/${f}") >>"${LOG_FILE}" 2>&1 || dieLog (cd "${RAMDISK_PATH}" && patch -p1 < "${PATCH_PATH}/${f}") >>"${LOG_FILE}" 2>&1 || dieLog
done < <(readModelArray "${MODEL}" "builds.${BUILD}.patch") done < <(readModelArray "${MODEL}" "builds.${BUILD}.patch")
# Temporary workaround
DT="`readModelKey "${MODEL}" "dt"`"
if [ "${DT}" != "true" ]; then
NUMPORTS=$((`ls /sys/class/scsi_host | wc -w`-1))
SYNOINFO["maxdisks"]=${NUMPORTS}
INTPORTCFG="0x`printf "%x" "$((2**${NUMPORTS}-1))"`"
SYNOINFO["internalportcfg"]="${INTPORTCFG}"
fi
# Patch /etc/synoinfo.conf # Patch /etc/synoinfo.conf
echo -n "." echo -n "."
for KEY in ${!SYNOINFO[@]}; do for KEY in ${!SYNOINFO[@]}; do
@@ -93,6 +102,7 @@ cp "${PATCH_PATH}/iosched-trampoline.sh" "${RAMDISK_PATH}/usr/sbin/modprobe"
# Check if model needs Device-tree dynamic patch # Check if model needs Device-tree dynamic patch
DT="`readModelKey "${MODEL}" "dt"`" DT="`readModelKey "${MODEL}" "dt"`"
[ "${DT}" = "true" ] && ADDONS['qjs-dtb']="" # Add system addon "qjs-dtb" [ "${DT}" = "true" ] && ADDONS['qjs-dtb']="" # Add system addon "qjs-dtb"
ADDONS['misc']="" # Add system addon "misc"
mkdir -p "${RAMDISK_PATH}/addons" mkdir -p "${RAMDISK_PATH}/addons"
echo -n "." echo -n "."
#/proc/sys/kernel/syno_install_flag #/proc/sys/kernel/syno_install_flag

View File

@@ -23,6 +23,3 @@ available-for:
v1000-4.4.180: v1000-4.4.180:
install-script: *script install-script: *script
modules: true modules: true
purley-4.4.180:
install-script: *script
modules: true

View File

@@ -30,7 +30,3 @@ available-for:
install-script: "install.sh" install-script: "install.sh"
copy: "all" copy: "all"
modules: true modules: true
purley-4.4.180:
install-script: "install.sh"
copy: "all"
modules: false

View File

@@ -0,0 +1,25 @@
version: 1
name: arcmsr
description: "Driver for Areca ARC11xx/12xx/16xx/188x SAS/SATA RAID Controller"
available-for:
bromolow-3.10.108:
install-script: &script "install.sh"
modules: true
apollolake-4.4.180:
install-script: *script
modules: true
broadwell-4.4.180:
install-script: *script
modules: true
broadwellnk-4.4.180:
install-script: *script
modules: true
denverton-4.4.180:
install-script: *script
modules: true
geminilake-4.4.180:
install-script: *script
modules: true
v1000-4.4.180:
install-script: *script
modules: true

Binary file not shown.

View File

@@ -23,6 +23,3 @@ available-for:
v1000-4.4.180: v1000-4.4.180:
install-script: *script install-script: *script
modules: true modules: true
purley-4.4.180:
install-script: *script
modules: true

View File

@@ -23,6 +23,3 @@ available-for:
v1000-4.4.180: v1000-4.4.180:
install-script: *script install-script: *script
modules: true modules: true
purley-4.4.180:
install-script: *script
modules: true

View File

@@ -0,0 +1,25 @@
version: 1
name: ax88179_178a
description: "Driver for ASIX AX88179/178A based USB 3.0/2.0 Gigabit Ethernet"
available-for:
bromolow-3.10.108:
install-script: &script "install.sh"
modules: true
apollolake-4.4.180:
install-script: *script
modules: true
broadwell-4.4.180:
install-script: *script
modules: true
broadwellnk-4.4.180:
install-script: *script
modules: true
denverton-4.4.180:
install-script: *script
modules: true
geminilake-4.4.180:
install-script: *script
modules: true
v1000-4.4.180:
install-script: *script
modules: true

View File

@@ -23,7 +23,3 @@ available-for:
v1000-4.4.180: v1000-4.4.180:
install-script: *script install-script: *script
modules: true modules: true
purley-4.4.180:
install-script: *script
modules: true

View File

@@ -2,28 +2,9 @@ version: 1
name: e1000e name: e1000e
description: "Driver for Intel(R) PRO/1000 Gigabit Ethernet PCI-e adapters" description: "Driver for Intel(R) PRO/1000 Gigabit Ethernet PCI-e adapters"
available-for: available-for:
bromolow-3.10.108:
install-script: &script "install.sh"
modules: true
apollolake-4.4.180:
install-script: *script
modules: true
broadwell-4.4.180:
install-script: *script
modules: true
broadwellnk-4.4.180:
install-script: *script
modules: true
denverton-4.4.180:
install-script: *script
modules: true
geminilake-4.4.180: geminilake-4.4.180:
install-script: *script install-script: &script "install.sh"
modules: true modules: true
v1000-4.4.180: v1000-4.4.180:
install-script: *script install-script: *script
modules: true modules: true
purley-4.4.180:
install-script: *script
modules: true

View File

@@ -5,3 +5,9 @@ available-for:
broadwell-4.4.180: broadwell-4.4.180:
install-script: &script "install.sh" install-script: &script "install.sh"
modules: true modules: true
geminilake-4.4.180:
install-script: *script
modules: true
apollolake-4.4.180:
install-script: *script
modules: true

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,10 @@
version: 1
name: i40e
description: "Driver for Intel(R) Ethernet Connection XL710 adapter"
available-for:
apollolake-4.4.180:
install-script: &script "install.sh"
modules: true
geminilake-4.4.180:
install-script: *script
modules: true

Some files were not shown because too many files have changed in this diff Show More