mirror of
https://github.com/RROrg/rr.git
synced 2026-01-14 23:39:33 +08:00
Compare commits
4 Commits
a51c5f7c27
...
04ea5d6ce2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
04ea5d6ce2 | ||
|
|
0a7bef9933 | ||
|
|
80d03e0e3c | ||
|
|
4e5edb325a |
206
.github/workflows/issues.yml
vendored
206
.github/workflows/issues.yml
vendored
@ -148,39 +148,7 @@ jobs:
|
||||
run: |
|
||||
# 累了, 毁灭吧!
|
||||
|
||||
# yq need sudo !!!
|
||||
function deleteConfigKey() {
|
||||
sudo yq eval "del(.${1})" --inplace "${2}" 2>/dev/null
|
||||
}
|
||||
|
||||
function writeConfigKey() {
|
||||
local value="${2}"
|
||||
[ "${value}" = "{}" ] && sudo yq eval ".${1} = {}" --inplace "${3}" 2>/dev/null || sudo yq eval ".${1} = \"${value}\"" --inplace "${3}" 2>/dev/null
|
||||
}
|
||||
|
||||
function readConfigKey() {
|
||||
local result
|
||||
result=$(sudo yq eval ".${1} | explode(.)" "${2}" 2>/dev/null)
|
||||
[ "${result}" = "null" ] && echo "" || echo "${result}"
|
||||
}
|
||||
|
||||
function mergeConfigModules() {
|
||||
# Error: bad file '-': cannot index array with '8139cp' (strconv.ParseInt: parsing "8139cp": invalid syntax)
|
||||
# When the first key is a pure number, yq will not process it as a string by default. The current solution is to insert a placeholder key.
|
||||
local MS ML XF
|
||||
MS="RRORG\n${1// /\\n}"
|
||||
ML="$(echo -en "${MS}" | awk '{print "modules."$1":"}')"
|
||||
XF=$(mktemp 2>/dev/null)
|
||||
XF=${XF:-/tmp/tmp.XXXXXXXXXX}
|
||||
echo -en "${ML}" | sudo yq -p p -o y >"${XF}"
|
||||
deleteConfigKey "modules.\"RRORG\"" "${XF}"
|
||||
sudo yq eval-all --inplace '. as $item ireduce ({}; . * $item)' --inplace "${2}" "${XF}" 2>/dev/null
|
||||
rm -f "${XF}"
|
||||
}
|
||||
|
||||
REPO="${{ github.server_url }}/${{ github.repository }}"
|
||||
MODEL="${{ env.model }}"
|
||||
VERSION="${{ env.version }}"
|
||||
PRERELEASE="true"
|
||||
|
||||
TAG=""
|
||||
@ -197,105 +165,8 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
unzip rr-${TAG}.img.zip -d "rr"
|
||||
unzip rr-${TAG}.img.zip -d rr rr.img
|
||||
|
||||
export TERM=xterm
|
||||
|
||||
sudo ./localbuild.sh create rr/ws rr/rr.img
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "create failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# sudo cp -rf files/initrd/opt/rr/* rr/ws/initrd/opt/rr/
|
||||
# sudo sed -i "s/set -e/set -ex/" rr/ws/initrd/opt/rr/init.sh
|
||||
# sudo sed -i '/^alias/i\set -x' rr/ws/initrd/opt/rr/menu.sh
|
||||
|
||||
[ -n "${{ env.language }}" ] && echo "${{ env.language }}.UTF-8" | sudo tee rr/ws/mnt/p1/.locale
|
||||
|
||||
sudo ./localbuild.sh init
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "init failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "${{ env.kernel }}" ]; then
|
||||
echo "set kernel"
|
||||
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
|
||||
writeConfigKey "kernel" "${{ env.kernel }}" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
|
||||
sudo ./localbuild.sh config "${MODEL}" "${VERSION}"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "config failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -n "${{ env.sn }}" ]; then
|
||||
echo "set sn: ${{ env.sn }}"
|
||||
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
|
||||
writeConfigKey "sn" "${{ env.sn }}" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
|
||||
if [ -n "${{ env.macs }}" ]; then
|
||||
echo "set macs: ${{ env.macs }}"
|
||||
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
|
||||
MACS=($(echo "${{ env.macs }}" | sed 's/[:-]//g' | sed 's/.*/\U&/' | sed 's/[;,]/ /g'))
|
||||
writeConfigKey "mac1" "${MACS[0]}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "mac2" "${MACS[1]}" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
|
||||
if [ -n "${{ env.tips }}" ]; then
|
||||
echo "set tips: ${{ env.tips }}"
|
||||
echo -e "${{ env.tips }}" | sudo tee rr/ws/mnt/p3/AddTips
|
||||
fi
|
||||
|
||||
if [ -n "${{ env.addons }}" ]; then
|
||||
echo "set addons: ${{ env.addons }}"
|
||||
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
|
||||
writeConfigKey "addons" "{}" "${USER_CONFIG_FILE}"
|
||||
IFS=',' read -ra ADDON_ARR <<< "${{ env.addons }}"
|
||||
for A in "${ADDON_ARR[@]}"; do
|
||||
if echo "${A}" | grep -qE '^[^:]+:[^:]+$'; then
|
||||
KEY="$(echo "${A}" | cut -d':' -f1 | xargs)"
|
||||
VAL="$(echo "${A}" | cut -d':' -f2 | xargs)"
|
||||
else
|
||||
KEY="${A}"
|
||||
VAL=""
|
||||
fi
|
||||
writeConfigKey "addons.\"${KEY}\"" "${VAL}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
fi
|
||||
|
||||
if [ ! "custom" = "${{ env.kernel }}" ] && [ -n "${{ env.modules }}" ]; then
|
||||
echo "set modules: ${{ env.modules }}"
|
||||
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
mergeConfigModules "$(echo "${{ env.modules }}" | sed 's/,/\n/g')" "${USER_CONFIG_FILE}"
|
||||
# for M in $(echo "${{ env.modules }}" | sed 's/,/ /g'); do
|
||||
# writeConfigKey "modules.\"${M}\"" "" "${USER_CONFIG_FILE}"
|
||||
# done
|
||||
fi
|
||||
|
||||
sudo ./localbuild.sh build
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "build failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "true" = "${{ env.template }}" ]; then
|
||||
echo "set template: ${{ env.template }}"
|
||||
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
|
||||
writeConfigKey "sn" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "mac1" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "mac2" "" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
|
||||
sudo ./localbuild.sh pack rr/rr.img
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "pack failed"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case "${{ env.size }}" in
|
||||
2GB)
|
||||
@ -314,23 +185,62 @@ jobs:
|
||||
;;
|
||||
esac
|
||||
|
||||
LOOPX=$(sudo losetup -f)
|
||||
sudo losetup -P "${LOOPX}" rr/rr.img
|
||||
|
||||
echo "Building..."
|
||||
{
|
||||
[ -n "${{ env.language }}" ] && echo "echo \"${{ env.language }}.UTF-8\" >/mnt/p1/.locale"
|
||||
[ -n "${{ env.tips }}" ] && echo "echo -e \"${{ env.tips }}\" >/mnt/p3/AddTips"
|
||||
[ -n "${{ env.kernel }}" ] && echo "menu.sh writeConfigKey \"kernel\" \"${{ env.kernel }}\" \"\${USER_CONFIG_FILE}\""
|
||||
echo "menu.sh modelMenu \"${{ env.model }}\""
|
||||
echo "menu.sh productversMenu \"${{ env.version }}\""
|
||||
[ -n "${{ env.addons }}" ] && {
|
||||
echo "menu.sh writeConfigKey \"addons\" \"{}\" \"\${USER_CONFIG_FILE}\""
|
||||
IFS=',' read -ra ADDON_ARR <<< "${{ env.addons }}"
|
||||
for A in "${ADDON_ARR[@]}"; do
|
||||
if echo "${A}" | grep -qE '^[^:]+:[^:]+$'; then
|
||||
KEY="$(echo "${A}" | cut -d':' -f1 | xargs)"
|
||||
VAL="$(echo "${A}" | cut -d':' -f2 | xargs)"
|
||||
else
|
||||
KEY="${A}"
|
||||
VAL=""
|
||||
fi
|
||||
echo "menu.sh writeConfigKey \"addons.\\\"${KEY}\\\"\" \"${VAL}\" \"\${USER_CONFIG_FILE}\""
|
||||
done
|
||||
}
|
||||
[ ! "custom" = "${{ env.kernel }}" ] && [ -n "${{ env.modules }}" ] && {
|
||||
echo "menu.sh writeConfigKey \"modules\" \"{}\" \"\${USER_CONFIG_FILE}\""
|
||||
echo "menu.sh mergeConfigModules \"$(echo "${{ env.modules }}" | sed 's/,/\\n/g')\" \"\${USER_CONFIG_FILE}\""
|
||||
}
|
||||
echo "menu.sh make"
|
||||
echo "menu.sh cleanCache"
|
||||
[ -n "${{ env.sn }}" ] && echo "menu.sh writeConfigKey \"sn\" \"${{ env.sn }}\" \"\${USER_CONFIG_FILE}\""
|
||||
[ -n "${{ env.macs }}" ] && {
|
||||
MACS=($(echo "${{ env.macs }}" | sed 's/[:-]//g' | sed 's/.*/\U&/' | sed 's/[;,]/ /g'))
|
||||
[ -n "${MACS[0]}" ] && echo "menu.sh writeConfigKey \"mac1\" \"${MACS[0]}\" \"\${USER_CONFIG_FILE}\""
|
||||
[ -n "${MACS[1]}" ] && echo "menu.sh writeConfigKey \"mac2\" \"${MACS[1]}\" \"\${USER_CONFIG_FILE}\""
|
||||
}
|
||||
[ "true" = "${{ env.template }}" ] && {
|
||||
echo "menu.sh writeConfigKey \"sn\" \"\" \"\${USER_CONFIG_FILE}\""
|
||||
echo "menu.sh writeConfigKey \"mac1\" \"\" \"\${USER_CONFIG_FILE}\""
|
||||
echo "menu.sh writeConfigKey \"mac2\" \"\" \"\${USER_CONFIG_FILE}\""
|
||||
}
|
||||
} > build.sh
|
||||
chmod +x build.sh
|
||||
|
||||
docker pull rrorg/rr:${TAG}
|
||||
docker run -it --rm --privileged -p 7681:7681 -p 7304:7304 -p 7080:7080 -p 7022:22 -v ${PWD}/build.sh:/opt/rr/build.sh rrorg/rr:${TAG} bash build.sh
|
||||
|
||||
sudo losetup --detach "${LOOPX}"
|
||||
|
||||
ls rr -al
|
||||
|
||||
RR_VERSION_FILE="rr/ws/mnt/p1/RR_VERSION"
|
||||
USER_CONFIG_FILE="rr/ws/mnt/p1/user-config.yml"
|
||||
{
|
||||
echo "RR: "
|
||||
echo " VERSION: $(cat "${RR_VERSION_FILE}" 2>/dev/null | head -1)"
|
||||
echo " VERSION: ${TAG}"
|
||||
echo " CUSTOM: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||
echo
|
||||
echo "DSM:"
|
||||
echo " MODEL: $(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
||||
echo " VERSION: $(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||
echo " KERNEL: $(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
echo " PATURL: $(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
|
||||
echo " PATSUM: $(readConfigKey "patsum" "${USER_CONFIG_FILE}")"
|
||||
echo
|
||||
echo
|
||||
echo "After the image is written to the disk, it will boot directly into DSM without the need to compile again."
|
||||
echo "Of course, you can also modify the settings yourself."
|
||||
} >README.txt
|
||||
@ -341,26 +251,26 @@ jobs:
|
||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||
convertova "rr/rr.img" "rr/rr.ova"
|
||||
(cd rr && sha256sum rr.ova >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.ova.zip" -j rr/rr.ova ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.ova.zip" -j rr/rr.ova sha256sum README.txt
|
||||
;;
|
||||
vmx)
|
||||
echo "VMX"
|
||||
. scripts/func.sh "${{ secrets.RRORG }}"
|
||||
convertvmx "rr/rr.img" "rr.vmx" # rr.vmx is a directory
|
||||
(cd rr.vmx && sha256sum * >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vmx.zip" -r rr.vmx ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vmx.zip" -r rr.vmx sha256sum README.txt
|
||||
;;
|
||||
vmdk)
|
||||
echo "VMDK"
|
||||
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' rr/rr.vmdk
|
||||
(cd rr && sha256sum rr.vmdk >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk sha256sum README.txt
|
||||
;;
|
||||
flat)
|
||||
echo "FLAT"
|
||||
qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=monolithicFlat,compat6' rr/rr.vmdk
|
||||
(cd rr && sha256sum rr*.vmdk >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.flat.zip" -j rr/rr*.vmdk ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.flat.zip" -j rr/rr*.vmdk sha256sum README.txt
|
||||
;;
|
||||
vhd)
|
||||
echo "VHD"
|
||||
@ -368,18 +278,18 @@ jobs:
|
||||
qemu-img convert rr/rr.img -O vpc rr/rr.vhd
|
||||
createvmc "rr/rr.vhd" "rr/rr.vmc"
|
||||
(cd rr && sha256sum rr.vhd >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vhd.zip" -j rr/rr.vmc rr/rr.vhd ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vhd.zip" -j rr/rr.vmc rr/rr.vhd sha256sum README.txt
|
||||
;;
|
||||
vhdx)
|
||||
echo "VHDX"
|
||||
qemu-img convert rr/rr.img -O vhdx -o subformat=dynamic rr/rr.vhdx
|
||||
(cd rr && sha256sum rr.vhdx >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vhdx.zip" -j rr/rr.vhdx ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vhdx.zip" -j rr/rr.vhdx sha256sum README.txt
|
||||
;;
|
||||
*)
|
||||
echo "IMG"
|
||||
(cd rr && sha256sum rr.img >../sha256sum)
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img ${USER_CONFIG_FILE} sha256sum README.txt
|
||||
zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.img.zip" -j rr/rr.img sha256sum README.txt
|
||||
esac
|
||||
|
||||
echo "TAG=${TAG}" >> $GITHUB_ENV
|
||||
|
||||
@ -363,7 +363,7 @@ if [ "${DIRECT}" = "true" ] || [ "${MEV:-physical}" = "parallels" ]; then
|
||||
_bootwait || exit 0
|
||||
|
||||
printf "\033[1;33m%s\033[0m\n" "$(TEXT "Reboot to boot directly in DSM")"
|
||||
reboot
|
||||
[ ! -f "/.dockerenv" ] && [ ! "LOCALBUILD" = "${LOADER_DISK}" ] && reboot
|
||||
exit 0
|
||||
else
|
||||
rm -f "${USER_RSYSENVFILE}" 2>/dev/null || true
|
||||
@ -390,9 +390,9 @@ else
|
||||
printf "."
|
||||
sleep 1
|
||||
done
|
||||
|
||||
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
|
||||
|
||||
if [ ! -f "/.dockerenv" ] && [ ! "LOCALBUILD" = "${LOADER_DISK}" ]; then
|
||||
[ ! -f /var/run/dhcpcd/pid ] && /etc/init.d/S41dhcpcd restart >/dev/null 2>&1 || true
|
||||
fi
|
||||
printf "$(TEXT "Waiting IP.\n")"
|
||||
for N in ${ETHX}; do
|
||||
COUNT=0
|
||||
@ -464,22 +464,24 @@ else
|
||||
fi
|
||||
done
|
||||
|
||||
# Disconnect wireless
|
||||
lsmod | grep -q iwlwifi && for F in /sys/class/net/wlan*; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
connectwlanif "$(basename "${F}")" 0 2>/dev/null
|
||||
done
|
||||
# Unload all network drivers
|
||||
# for F in $(realpath /sys/class/net/*/device/driver); do [ ! -e "${F}" ] && continue; rmmod -f "$(basename ${F})" 2>/dev/null || true; done
|
||||
if [ ! -f "/.dockerenv" ] && [ ! "LOCALBUILD" = "${LOADER_DISK}" ]; then
|
||||
# Disconnect wireless
|
||||
lsmod | grep -q iwlwifi && for F in /sys/class/net/wlan*; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
connectwlanif "$(basename "${F}")" 0 2>/dev/null
|
||||
done
|
||||
# Unload all network drivers
|
||||
# for F in $(realpath /sys/class/net/*/device/driver); do [ ! -e "${F}" ] && continue; rmmod -f "$(basename ${F})" 2>/dev/null || true; done
|
||||
|
||||
# Unload all graphics drivers
|
||||
# for D in $(lsmod | grep -E '^(nouveau|amdgpu|radeon|i915)' | awk '{print $1}'); do rmmod -f "${D}" 2>/dev/null || true; done
|
||||
# for I in $(find /sys/devices -name uevent -exec bash -c 'cat {} 2>/dev/null | grep -Eq "PCI_CLASS=0?30[0|1|2]00" && dirname {}' \;); do
|
||||
# [ -e ${I}/reset ] && cat "${I}/vendor" >/dev/null | grep -iq 0x10de && echo 1 >${I}/reset || true # Proc open nvidia driver when booting
|
||||
# done
|
||||
# Unload all graphics drivers
|
||||
# for D in $(lsmod | grep -E '^(nouveau|amdgpu|radeon|i915)' | awk '{print $1}'); do rmmod -f "${D}" 2>/dev/null || true; done
|
||||
# for I in $(find /sys/devices -name uevent -exec bash -c 'cat {} 2>/dev/null | grep -Eq "PCI_CLASS=0?30[0|1|2]00" && dirname {}' \;); do
|
||||
# [ -e ${I}/reset ] && cat "${I}/vendor" >/dev/null | grep -iq 0x10de && echo 1 >${I}/reset || true # Proc open nvidia driver when booting
|
||||
# done
|
||||
|
||||
# Reboot
|
||||
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
|
||||
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff
|
||||
# Reboot
|
||||
KERNELWAY="$(readConfigKey "kernelway" "${USER_CONFIG_FILE}")"
|
||||
[ "${KERNELWAY}" = "kexec" ] && kexec -e || poweroff
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
0
files/initrd/opt/rr/extract-vmlinux
Normal file → Executable file
0
files/initrd/opt/rr/extract-vmlinux
Normal file → Executable file
@ -8,7 +8,7 @@
|
||||
|
||||
# shellcheck disable=SC2034
|
||||
|
||||
RR_VERSION="25.9.4"
|
||||
RR_VERSION="25.9.5"
|
||||
RR_RELEASE=""
|
||||
RR_TITLE="RR v${RR_VERSION}"
|
||||
|
||||
|
||||
@ -10,18 +10,20 @@
|
||||
# Unpack modules from a tgz file
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
# 3 - dummy path
|
||||
function unpackModules() {
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
local UNPATH=${3:-"${TMP_PATH}/modules"}
|
||||
local KERNEL
|
||||
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
rm -rf "${UNPATH}"
|
||||
mkdir -p "${UNPATH}"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
tar -zxf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}"
|
||||
fi
|
||||
}
|
||||
|
||||
@ -29,16 +31,18 @@ function unpackModules() {
|
||||
# Packag modules to a tgz file
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
# 3 - dummy path
|
||||
function packagModules() {
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
local UNPATH=${3:-"${TMP_PATH}/modules"}
|
||||
local KERNEL
|
||||
KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
tar -zcf "${CKS_PATH}/modules-${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
|
||||
else
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${PKVER}.tgz" -C "${UNPATH}" .
|
||||
fi
|
||||
}
|
||||
|
||||
@ -54,9 +58,10 @@ function getAllModules() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
for F in ${TMP_PATH}/modules/*.ko; do
|
||||
for F in ${UNPATH}/*.ko; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
local N DESC
|
||||
N="$(basename "${F}" .ko)"
|
||||
@ -65,7 +70,35 @@ function getAllModules() {
|
||||
echo "${N} \"${DESC:-${N}}\""
|
||||
done
|
||||
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
rm -rf "${UNPATH}"
|
||||
}
|
||||
|
||||
function getLoadedModules() {
|
||||
local PLATFORM=${1}
|
||||
local PKVER=${2}
|
||||
|
||||
if [ -z "${PLATFORM}" ] || [ -z "${PKVER}" ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
UNPATH="${TMP_PATH}/lib/modules/$(uname -r)"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
depmod -a -b "${TMP_PATH}" >/dev/null 2>&1
|
||||
|
||||
ALL_KO=$(
|
||||
find /sys/devices -name modalias -exec cat {} \; | while read -r modalias; do
|
||||
modprobe -d "${TMP_PATH}" --resolve-alias "${modalias}" 2>/dev/null
|
||||
done | sort -u
|
||||
)
|
||||
rm -rf "${UNPATH}"
|
||||
|
||||
ALL_DEPS=""
|
||||
for M in ${ALL_KO}; do
|
||||
ALL_DEPS="${ALL_DEPS} $(getdepends "${PLATFORM}" "${PKVER}" "${M}")"
|
||||
done
|
||||
|
||||
echo "${ALL_DEPS}" | tr ' ' '\n' | grep -v '^$' | sort -u
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -85,10 +118,11 @@ function installModules() {
|
||||
shift 2
|
||||
MLIST="${*}"
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
|
||||
for F in ${TMP_PATH}/modules/*.ko; do
|
||||
for F in ${UNPATH}/*.ko; do
|
||||
[ ! -e "${F}" ] && continue
|
||||
M=$(basename "${F}")
|
||||
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
|
||||
@ -98,6 +132,7 @@ function installModules() {
|
||||
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
|
||||
fi
|
||||
done
|
||||
rm -rf "${UNPATH}"
|
||||
|
||||
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"
|
||||
KERNEL=$(readConfigKey "kernel" "${USER_CONFIG_FILE}")
|
||||
@ -109,8 +144,6 @@ function installModules() {
|
||||
if [ $? -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
return 0
|
||||
}
|
||||
|
||||
@ -129,11 +162,12 @@ function addToModules() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
cp -f "${KOFILE}" "${TMP_PATH}/modules"
|
||||
cp -f "${KOFILE}" "${UNPATH}"
|
||||
|
||||
packagModules "${PLATFORM}" "${PKVER}"
|
||||
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -151,11 +185,12 @@ function delToModules() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
rm -f "${TMP_PATH}/modules/${KONAME}"
|
||||
rm -f "${UNPATH}/${KONAME}"
|
||||
|
||||
packagModules "${PLATFORM}" "${PKVER}"
|
||||
packagModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@ -165,9 +200,9 @@ function delToModules() {
|
||||
# 3 - ko name
|
||||
function getdepends() {
|
||||
function _getdepends() {
|
||||
if [ -f "${TMP_PATH}/modules/${1}.ko" ]; then
|
||||
if [ -f "${UNPATH}/${1}.ko" ]; then
|
||||
local depends
|
||||
depends="$(modinfo -F depends "${TMP_PATH}/modules/${1}.ko" 2>/dev/null | sed 's/,/\n/g')"
|
||||
depends="$(modinfo -F depends "${UNPATH}/${1}.ko" 2>/dev/null | sed 's/,/\n/g')"
|
||||
if [ "$(echo "${depends}" | wc -w)" -gt 0 ]; then
|
||||
for k in ${depends}; do
|
||||
echo "${k}"
|
||||
@ -186,9 +221,10 @@ function getdepends() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${PKVER}"
|
||||
UNPATH="${TMP_PATH}/modules"
|
||||
unpackModules "${PLATFORM}" "${PKVER}" "${UNPATH}"
|
||||
|
||||
_getdepends "${KONAME}" | sort -u
|
||||
echo "${KONAME}"
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
rm -rf "${UNPATH}"
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
||||
25.9.4
|
||||
25.9.5
|
||||
|
||||
@ -242,6 +242,34 @@ function getModules() {
|
||||
echo "Getting Modules end"
|
||||
}
|
||||
|
||||
# unpack initrd
|
||||
# $1 initrd file
|
||||
# $2 output path
|
||||
function unpackInitrd() {
|
||||
local INITRD_FILE="${1}"
|
||||
local OUTPUT_PATH="${2}"
|
||||
|
||||
[ -z "${INITRD_FILE}" ] || [ ! -f "${INITRD_FILE}" ] && exit 1
|
||||
|
||||
INITRD_FILE="$(realpath "${INITRD_FILE}")"
|
||||
OUTPUT_PATH="$(realpath "${OUTPUT_PATH}")"
|
||||
|
||||
mkdir -p "${OUTPUT_PATH}"
|
||||
local INITRD_FORMAT
|
||||
INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}")
|
||||
|
||||
case "${INITRD_FORMAT}" in
|
||||
*'x-cpio'*) (cd "${OUTPUT_PATH}" && sudo cpio -idm <"${INITRD_FILE}") >/dev/null 2>&1 ;;
|
||||
*'x-xz'*) (cd "${OUTPUT_PATH}" && xz -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'x-lz4'*) (cd "${OUTPUT_PATH}" && lz4 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'x-lzma'*) (cd "${OUTPUT_PATH}" && lzma -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'x-bzip2'*) (cd "${OUTPUT_PATH}" && bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'gzip'*) (cd "${OUTPUT_PATH}" && gzip -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'zstd'*) (cd "${OUTPUT_PATH}" && zstd -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*) ;;
|
||||
esac
|
||||
}
|
||||
|
||||
# repack initrd
|
||||
# $1 initrd file
|
||||
# $2 plugin path
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user