Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70571b99fc |
18
.github/workflows/autobuild.yml
vendored
18
.github/workflows/autobuild.yml
vendored
@@ -138,13 +138,7 @@ jobs:
|
||||
echo "Image Converter"
|
||||
qemu-img convert -p -f raw -O vmdk ${IMAGE_FILE} arc-dyn.vmdk
|
||||
qemu-img convert -p -f raw -o subformat=monolithicFlat -O vmdk ${IMAGE_FILE} arc.vmdk
|
||||
|
||||
echo "Create Arc vhd"
|
||||
createvmc "arc.vmc"
|
||||
qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd
|
||||
|
||||
echo "Create Arc ova"
|
||||
convertova "${IMAGE_FILE}" "arc.ova"
|
||||
qemu-img convert -p -f raw -O vhdx ${IMAGE_FILE} arc.vhdx
|
||||
|
||||
# Zip image and generate checksum
|
||||
- name: Pack Next Image
|
||||
@@ -161,7 +155,7 @@ jobs:
|
||||
# Cleanup
|
||||
- name: Cleanup
|
||||
run: |
|
||||
rm -rf "arc.img" "arc.vmdk" "arc-dyn.vmdk" "arc-flat.vmdk" "arc.vhd" "arc.ova" "arc.vmc"
|
||||
rm -rf "arc.img" "arc.vmdk" "arc-dyn.vmdk" "arc.vhdx" "arc-flat.vmdk"
|
||||
|
||||
# Build incremental
|
||||
- name: Build Stable Image
|
||||
@@ -217,13 +211,7 @@ jobs:
|
||||
echo "Image Converter"
|
||||
qemu-img convert -p -f raw -O vmdk ${IMAGE_FILE} arc-dyn.vmdk
|
||||
qemu-img convert -p -f raw -o subformat=monolithicFlat -O vmdk ${IMAGE_FILE} arc.vmdk
|
||||
|
||||
echo "Create Arc vhd"
|
||||
createvmc "arc.vmc"
|
||||
qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd
|
||||
|
||||
echo "Create Arc ova"
|
||||
convertova "${IMAGE_FILE}" "arc.ova"
|
||||
qemu-img convert -p -f raw -O vhdx ${IMAGE_FILE} arc.vhdx
|
||||
|
||||
# Zip image and generate checksum
|
||||
- name: Pack Stable Image
|
||||
|
||||
18
.github/workflows/build.yml
vendored
18
.github/workflows/build.yml
vendored
@@ -71,7 +71,7 @@ jobs:
|
||||
sudo timedatectl set-timezone "Europe/Berlin"
|
||||
|
||||
sudo apt update
|
||||
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
|
||||
sudo apt install -y locales busybox dialog gettext sed gawk jq curl
|
||||
sudo apt install -y python-is-python3 python3-pip libelf-dev qemu-utils cpio xz-utils lz4 lzma bzip2 gzip zstd
|
||||
# sudo snap install yq
|
||||
if ! command -v yq &>/dev/null || ! yq --version 2>/dev/null | grep -q "v4."; then
|
||||
@@ -164,10 +164,7 @@ jobs:
|
||||
echo "Image Converter"
|
||||
qemu-img convert -p -f raw -O vmdk ${IMAGE_FILE} arc-dyn.vmdk
|
||||
qemu-img convert -p -f raw -o subformat=monolithicFlat -O vmdk ${IMAGE_FILE} arc.vmdk
|
||||
|
||||
echo "Create Arc vhd"
|
||||
createvmc "arc.vmc"
|
||||
qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd
|
||||
qemu-img convert -p -f raw -O vhdx ${IMAGE_FILE} arc.vhdx
|
||||
|
||||
echo "Create Arc ova"
|
||||
convertova "${IMAGE_FILE}" "arc.ova"
|
||||
@@ -180,7 +177,7 @@ jobs:
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-dyn.zip" arc-dyn.vmdk
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhd.zip" arc.vhd arc.vmc
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhdx.zip" arc.vhdx
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.ova.zip" arc.ova
|
||||
(cd files && zip -r ../update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip ./p1 ./p3)
|
||||
fi
|
||||
@@ -188,7 +185,7 @@ jobs:
|
||||
# Cleanup
|
||||
- name: Cleanup
|
||||
run: |
|
||||
rm -rf "arc.img" "arc.vmdk" "arc-dyn.vmdk" "arc-flat.vmdk" "arc.vhd" "arc.ova" "arc.vmc"
|
||||
rm -rf "arc.img" "arc.ova" "arc.vmdk" "arc-dyn.vmdk" "arc.vhdx" "arc-flat.vmdk"
|
||||
|
||||
# Build incremental
|
||||
- name: Build Stable Image
|
||||
@@ -244,10 +241,7 @@ jobs:
|
||||
echo "Image Converter"
|
||||
qemu-img convert -p -f raw -O vmdk ${IMAGE_FILE} arc-dyn.vmdk
|
||||
qemu-img convert -p -f raw -o subformat=monolithicFlat -O vmdk ${IMAGE_FILE} arc.vmdk
|
||||
|
||||
echo "Create Arc vhd"
|
||||
createvmc "arc.vmc"
|
||||
qemu-img convert -p -f raw -O vpc ${IMAGE_FILE} arc.vhd
|
||||
qemu-img convert -p -f raw -O vhdx ${IMAGE_FILE} arc.vhdx
|
||||
|
||||
echo "Create Arc ova"
|
||||
convertova "${IMAGE_FILE}" "arc.ova"
|
||||
@@ -260,7 +254,7 @@ jobs:
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-dyn.zip" arc-dyn.vmdk
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vmdk-flat.zip" arc.vmdk arc-flat.vmdk
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhd.zip" arc.vhd arc.vmc
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhdx.zip" arc.vhdx
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.ova.zip" arc.ova
|
||||
(cd files && zip -r ../update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip ./p1 ./p3)
|
||||
fi
|
||||
|
||||
2
.github/workflows/data.yml
vendored
2
.github/workflows/data.yml
vendored
@@ -43,7 +43,7 @@ jobs:
|
||||
|
||||
TAG=""
|
||||
if [ "${PRERELEASE}" = "true" ]; then
|
||||
TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep /refs/tags/.*\.zip | sed -E 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1)"
|
||||
TAG="$(curl -skL --connect-timeout 10 "${REPO}/tags" | grep /refs/tags/.*\.zip | sed -r 's/.*\/refs\/tags\/(.*)\.zip.*$/\1/' | sort -rV | head -1)"
|
||||
else
|
||||
LATESTURL="$(curl -skL --connect-timeout 10 -w %{url_effective} -o /dev/null "${REPO}/releases/latest")"
|
||||
TAG="${LATESTURL##*/}"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -13,10 +13,11 @@
|
||||
. "${ARC_PATH}/include/compat.sh"
|
||||
. "${ARC_PATH}/arc-functions.sh"
|
||||
|
||||
# Get Keymap and Timezone and check System
|
||||
# Get Keymap and Timezone Config
|
||||
onlineCheck
|
||||
KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")"
|
||||
ARCOFFLINE="$(readConfigKey "arc.offline" "${USER_CONFIG_FILE}")"
|
||||
# Check for System
|
||||
systemCheck
|
||||
ARCMODE="$(readConfigKey "arc.mode" "${USER_CONFIG_FILE}")"
|
||||
|
||||
@@ -59,7 +60,7 @@ BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
###############################################################################
|
||||
# Mounts backtitle dynamically
|
||||
function backtitle() {
|
||||
BACKTITLE="${ARC_TITLE}$([ -n "${NEWTAG}" ] && [ -n "${ARC_VERSION}" ] && [ ${ARC_VERSION//[!0-9]/} -lt ${NEWTAG//[!0-9]/} ] && echo " > ${NEWTAG}") | "
|
||||
BACKTITLE="${ARC_TITLE}$([ -n "${NEWTAG}" ] && [ ${ARC_VERSION//[!0-9]/} -lt ${NEWTAG//[!0-9]/} ] && echo " > ${NEWTAG}") | "
|
||||
BACKTITLE+="${MODEL:-(Model)} | "
|
||||
BACKTITLE+="${PRODUCTVER:-(Version)} | "
|
||||
BACKTITLE+="${IPCON:-(IP)} | "
|
||||
@@ -88,7 +89,11 @@ function backtitlep() {
|
||||
# Model Selection
|
||||
function arcModel() {
|
||||
STEP="model"
|
||||
[ "${ARCOFFLINE}" != "true" ] && checkHardwareID || true
|
||||
if [ ! -f "${S_FILE}" ] || [ ! -f "${P_FILE}" ]; then
|
||||
updateConfigs
|
||||
else
|
||||
checkHardwareID
|
||||
fi
|
||||
dialog --backtitle "$(backtitlep)" --title "Model" \
|
||||
--infobox "Reading Models..." 3 25
|
||||
ARCCONF="$(readConfigKey "${MODEL:-SA6400}.serial" "${S_FILE}")"
|
||||
@@ -120,9 +125,9 @@ function arcModel() {
|
||||
[ "${DT}" = "true" ] && HBAS="" || HBAS="x"
|
||||
[ "${M}" = "SA6400" ] && HBAS="x"
|
||||
[ "${DT}" = "false" ] && USBS="int/ext" || USBS="ext"
|
||||
[[ "${M}" = "DS718+" || "${M}" = "DS918+" || "${M}" = "DS1019+" || "${M}" = "DS1621xs+" || "${M}" = "RS1619xs+" ]] && M_2_CACHE="+" || M_2_CACHE="x"
|
||||
[[ "${M}" = "DS918+" || "${M}" = "DS1019+" || "${M}" = "DS1621xs+" || "${M}" = "RS1619xs+" ]] && M_2_CACHE="+" || M_2_CACHE="x"
|
||||
[[ "${M}" = "DS220+" || "${M}" = "DS224+" ]] && M_2_CACHE=""
|
||||
[[ "${M}" = "DS220+" || "${M}" = "DS224+" || "${M}" = "DS718+" || "${M}" = "DS918+" || "${M}" = "DS1019+" || "${M}" = "DS1621xs+" || "${M}" = "RS1619xs+" ]] && M_2_STORAGE="" || M_2_STORAGE="+"
|
||||
[[ "${M}" = "DS220+" || "${M}" = "DS224+" || "${M}" = "DS918+" || "${M}" = "DS1019+" || "${M}" = "DS1621xs+" || "${M}" = "RS1619xs+" ]] && M_2_STORAGE="" || M_2_STORAGE="+"
|
||||
# Check id model is compatible with CPU
|
||||
if [ ${RESTRICT} -eq 1 ]; then
|
||||
for F in "${FLAGS}"; do
|
||||
@@ -165,21 +170,25 @@ function arcModel() {
|
||||
--file "${TMP_PATH}/menu" 2>"${TMP_PATH}/resp"
|
||||
RET=$?
|
||||
case ${RET} in
|
||||
0)
|
||||
0) # ok-button
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
[ -z "${resp}" ] && return 1
|
||||
break
|
||||
;;
|
||||
1)
|
||||
1) # cancel-button -> Show all Models
|
||||
[ ${RESTRICT} -eq 1 ] && RESTRICT=0 || RESTRICT=1
|
||||
;;
|
||||
3)
|
||||
2) # help-button -> Exit
|
||||
return 1
|
||||
break
|
||||
;;
|
||||
3) # extra-button -> Platform Info
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
PLATFORM="$(grep -w "${resp}" "${TMP_PATH}/modellist" | awk '{print $2}' | head -n 1)"
|
||||
dialog --backtitle "$(backtitlep)" --colors \
|
||||
--title "Platform Info" --textbox "./informations/${PLATFORM}.yml" 70 80
|
||||
;;
|
||||
*)
|
||||
255) # ESC -> Exit
|
||||
return 1
|
||||
break
|
||||
;;
|
||||
@@ -239,8 +248,8 @@ function arcVersion() {
|
||||
if [ "${ARCMODE}" = "config" ] && [ "${ARCRESTORE}" != "true" ]; then
|
||||
# Select Build for DSM
|
||||
ITEMS="$(readConfigEntriesArray "platforms.${PLATFORM}.productvers" "${P_FILE}" | sort -r)"
|
||||
dialog --clear --no-items --nocancel --title "DSM Version" --backtitle "$(backtitlep)" \
|
||||
--no-items --menu "Select DSM Version" 7 30 0 ${ITEMS} \
|
||||
dialog --clear --no-items --nocancel --title "Version" --backtitle "$(backtitlep)" \
|
||||
--no-items --menu "Choose DSM Version" 7 30 0 ${ITEMS} \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && return 0
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
@@ -256,7 +265,9 @@ function arcVersion() {
|
||||
writeConfigKey "smallnum" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "zimage-hash" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.confdone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
|
||||
fi
|
||||
dialog --backtitle "$(backtitlep)" --title "Version" \
|
||||
--infobox "Reading DSM Build..." 3 25
|
||||
@@ -275,8 +286,8 @@ function arcVersion() {
|
||||
PREV="${V}"
|
||||
done < <(echo "${PVS}")
|
||||
DSMPVS="$(cat ${TMP_PATH}/versions)"
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "DSM Build" \
|
||||
--no-items --menu "Select DSM Build" 0 0 0 ${DSMPVS} \
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Version" \
|
||||
--no-items --menu "Choose a DSM Build" 0 0 0 ${DSMPVS} \
|
||||
2>${TMP_PATH}/resp
|
||||
RET=$?
|
||||
[ ${RET} -ne 0 ] && return
|
||||
@@ -309,12 +320,10 @@ function arcVersion() {
|
||||
rm -f "${PART1_PATH}/grub_cksum.syno" "${PART1_PATH}/GRUB_VER" >/dev/null 2>&1 || true
|
||||
rm -f "${USER_UP_PATH}/"*.tar >/dev/null 2>&1 || true
|
||||
fi
|
||||
if [ "${ONLYVERSION}" != "true" ]; then
|
||||
MSG="Do you want to try Automated Mode?\nIf yes, Loader will configure, build and boot DSM."
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Automated Mode" \
|
||||
--yesno "${MSG}" 6 55
|
||||
[ $? -eq 0 ] && ARCMODE="automated" || ARCMODE="config"
|
||||
fi
|
||||
MSG="Do you want to try Automated Mode?\nIf yes, Loader will configure, build and boot DSM."
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Automated Mode" \
|
||||
--yesno "${MSG}" 6 55
|
||||
[ $? -eq 0 ] && ARCMODE="automated" || ARCMODE="config"
|
||||
elif [ "${ARCMODE}" = "automated" ] || [ "${ARCRESTORE}" = "true" ]; then
|
||||
VALID="true"
|
||||
fi
|
||||
@@ -327,13 +336,6 @@ function arcVersion() {
|
||||
while IFS=': ' read -r KEY VALUE; do
|
||||
writeConfigKey "synoinfo.\"${KEY}\"" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
done < <(readConfigMap "platforms.${PLATFORM}.synoinfo" "${P_FILE}")
|
||||
# Reset Modules
|
||||
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
|
||||
[ "${PLATFORM}" = "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
|
||||
if [ -n "${PLATFORM}" ] && [ -n "${KVERP}" ]; then
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
mergeConfigModules "$(getAllModules "${PLATFORM}" "${KVERP}" | awk '{print $1}')" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
# Check Addons for Platform
|
||||
ADDONS="$(readConfigKey "addons" "${USER_CONFIG_FILE}")"
|
||||
DEVICENIC="$(readConfigKey "device.nic" "${USER_CONFIG_FILE}")"
|
||||
@@ -367,9 +369,6 @@ function arcVersion() {
|
||||
if [ -n "${ARCCONF}" ]; then
|
||||
initConfigKey "addons.arcdns" "" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
if [ ${SASDRIVES} -gt 0 ] && [ "${DT}" = "false" ]; then
|
||||
initConfigKey "addons.smartctl" "" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
fi
|
||||
while IFS=': ' read -r ADDON PARAM; do
|
||||
[ -z "${ADDON}" ] && continue
|
||||
@@ -377,6 +376,14 @@ function arcVersion() {
|
||||
deleteConfigKey "addons.\"${ADDON}\"" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
done < <(readConfigMap "addons" "${USER_CONFIG_FILE}")
|
||||
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
|
||||
[ "${PLATFORM}" = "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
|
||||
if [ -n "${PLATFORM}" ] && [ -n "${KVERP}" ]; then
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
while read -r ID DESC; do
|
||||
writeConfigKey "modules.${ID}" "" "${USER_CONFIG_FILE}"
|
||||
done < <(getAllModules "${PLATFORM}" "${KVERP}")
|
||||
fi
|
||||
# Check for Only Version
|
||||
if [ "${ONLYVERSION}" = "true" ]; then
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
@@ -403,37 +410,39 @@ function arcPatch() {
|
||||
# Read Model Values
|
||||
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
|
||||
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
||||
ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")"
|
||||
ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")"
|
||||
# Check for Custom Build
|
||||
if [ "${ARCMODE}" = "automated" ] && [ "${ARCPATCH}" != "user" ]; then
|
||||
ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")"
|
||||
[ -n "${ARCCONF}" ] && SN="$(generateSerial "${MODEL}" "true")" || SN="$(generateSerial "${MODEL}" "false")"
|
||||
[ -n "${ARCCONF}" ] && writeConfigKey "arc.patch" "true" "${USER_CONFIG_FILE}" || writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}"
|
||||
elif [ "${ARCMODE}" = "config" ]; then
|
||||
if [ "${ARCMODE}" = "automated" ]; then
|
||||
ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")"
|
||||
if [ -n "${ARCCONF}" ]; then
|
||||
dialog --clear --backtitle "$(backtitlep)" \
|
||||
[ -n "${ARCCONF}" ] && SN="$(generateSerial "${MODEL}" "true")" || SN="$(generateSerial "${MODEL}" "false")"
|
||||
[ -n "${ARCCONF}" ] && writeConfigKey "arc.patch" "true" "${USER_CONFIG_FILE}" || writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
|
||||
elif [ "${ARCMODE}" = "config" ]; then
|
||||
dialog --clear --backtitle "$(backtitlep)" \
|
||||
--nocancel --title "SN/Mac Options"\
|
||||
--menu "Choose an Option" 7 60 0 \
|
||||
1 "Use Arc Patch (AME, QC, Push Notify and more)" \
|
||||
2 "Use random SN/Mac (Reduced DSM Features)" \
|
||||
3 "Use my own SN/Mac (Be sure your Data is valid)" \
|
||||
2>"${TMP_PATH}/resp"
|
||||
else
|
||||
dialog --clear --backtitle "$(backtitlep)" \
|
||||
--nocancel --title "SN/Mac Options"\
|
||||
--menu "Choose an Option" 7 60 0 \
|
||||
2 "Use random SN/Mac (Reduced DSM Features)" \
|
||||
3 "Use my own SN/Mac (Be sure your Data is valid)" \
|
||||
2>"${TMP_PATH}/resp"
|
||||
fi
|
||||
2>"${TMP_PATH}/resp"
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
[ -z "${resp}" ] && return 1
|
||||
if [ ${resp} -eq 1 ]; then
|
||||
SN="$(generateSerial "${MODEL}" "true")"
|
||||
writeConfigKey "arc.patch" "true" "${USER_CONFIG_FILE}"
|
||||
ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")"
|
||||
if [ -n "${ARCCONF}" ]; then
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Arc Patch" \
|
||||
--infobox "Arc Patch successful!" 3 30
|
||||
sleep 2
|
||||
SN="$(generateSerial "${MODEL}" "true")"
|
||||
writeConfigKey "arc.patch" "true" "${USER_CONFIG_FILE}"
|
||||
else
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Arc Patch" \
|
||||
--infobox "Arc Patch failed!" 3 30
|
||||
sleep 2
|
||||
SN="$(generateSerial "${MODEL}" "false")"
|
||||
writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
elif [ ${resp} -eq 2 ]; then
|
||||
# Generate random Serial
|
||||
SN="$(generateSerial "${MODEL}" "false")"
|
||||
writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
|
||||
elif [ ${resp} -eq 3 ]; then
|
||||
@@ -451,8 +460,8 @@ function arcPatch() {
|
||||
done
|
||||
writeConfigKey "arc.patch" "user" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
writeConfigKey "sn" "${SN}" "${USER_CONFIG_FILE}"
|
||||
ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")"
|
||||
arcSettings
|
||||
}
|
||||
@@ -468,14 +477,12 @@ function arcSettings() {
|
||||
PAT_HASH="$(readConfigKey "pathash" "${USER_CONFIG_FILE}")"
|
||||
DT="$(readConfigKey "platforms.${PLATFORM}.dt" "${P_FILE}")"
|
||||
# Get Network Config for Loader
|
||||
if [ "${ARCMODE}" = "config" ] || [ "${ARCPATCH}" = "true" ] || [ "${ARCPATCH}" = "false" ]; then
|
||||
STEP="network"
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Network Config" \
|
||||
--infobox "Generating Network Config..." 3 40
|
||||
sleep 2
|
||||
getnet
|
||||
[ $? -ne 0 ] && return 1
|
||||
fi
|
||||
STEP="network"
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Network Config" \
|
||||
--infobox "Generating Network Config..." 3 40
|
||||
sleep 2
|
||||
getnet
|
||||
[ $? -ne 0 ] && return 1
|
||||
if [ "${ONLYPATCH}" = "true" ]; then
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
@@ -483,7 +490,7 @@ function arcSettings() {
|
||||
return 0
|
||||
fi
|
||||
# Select Portmap for Loader
|
||||
if [ "${DT}" = "false" ] && [ ${SATADRIVES} -gt 0 ]; then
|
||||
if [ "${DT}" = "false" ] && [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
|
||||
STEP="storagemap"
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Storage Map" \
|
||||
--infobox "Generating Storage Map..." 3 40
|
||||
@@ -524,7 +531,7 @@ function arcSettings() {
|
||||
fi
|
||||
if [ ${DEVICENIC} -gt ${MODELNIC} ] && [ "${ARCPATCH}" = "true" ]; then
|
||||
dialog --backtitle "$(backtitlep)" --title "Arc Warning" \
|
||||
--msgbox "WARN: You have more NIC (${DEVICENIC}) than supported by Model (${MODELNIC}).\nOnly the first ${MODELNIC} are used by Arc Patch." 6 80
|
||||
--msgbox "WARN: You have more NIC (${DEVICENIC}) than supported by Model (${MODELNIC}).\nOnly ${MODELNIC} are used by Arc Patch." 6 80
|
||||
fi
|
||||
# Check for AES
|
||||
if [ "${AESSYS}" = "false" ]; then
|
||||
@@ -655,13 +662,13 @@ function arcSummary() {
|
||||
--extra-button --extra-label "Cancel" --msgbox "${SUMMARY}" 0 0
|
||||
RET=$?
|
||||
case ${RET} in
|
||||
0)
|
||||
0) # ok-button
|
||||
make
|
||||
;;
|
||||
3)
|
||||
3) # extra-button
|
||||
return 0
|
||||
;;
|
||||
255)
|
||||
255) # ESC
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
@@ -705,7 +712,7 @@ function make() {
|
||||
livepatch
|
||||
sleep 3
|
||||
) 2>&1 | dialog --backtitle "$(backtitlep)" --colors --title "Build Loader" \
|
||||
--progressbox "Patching DSM Files..." 20 70
|
||||
--progressbox "Magical things happening..." 20 70
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "Build Loader" --aspect 18 \
|
||||
--infobox "Configuration issue found.\nCould not build Loader!\nExit." 5 40
|
||||
@@ -715,8 +722,9 @@ function make() {
|
||||
sleep 2
|
||||
return 1
|
||||
fi
|
||||
STEP="boot"
|
||||
if [ -f "${ORI_ZIMAGE_FILE}" ] && [ -f "${ORI_RDGZ_FILE}" ] && [ -f "${MOD_ZIMAGE_FILE}" ] && [ -f "${MOD_RDGZ_FILE}" ]; then
|
||||
MODELID="$(echo ${MODEL} | sed 's/d$/D/; s/rp$/RP/; s/rp+/RP+/')"
|
||||
MODELID=$(echo ${MODEL} | sed 's/d$/D/; s/rp$/RP/; s/rp+/RP+/')
|
||||
writeConfigKey "modelid" "${MODELID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.version" "${ARC_VERSION}" "${USER_CONFIG_FILE}"
|
||||
arcFinish
|
||||
@@ -734,7 +742,6 @@ function make() {
|
||||
###############################################################################
|
||||
# Finish Building Loader
|
||||
function arcFinish() {
|
||||
STEP="boot"
|
||||
rm -f "${LOG_FILE}" >/dev/null 2>&1 || true
|
||||
MODELID="$(readConfigKey "modelid" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${MODELID}" ]; then
|
||||
@@ -796,7 +803,8 @@ function boot() {
|
||||
dialog --backtitle "$(backtitle)" --title "Arc Boot" \
|
||||
--infobox "Booting DSM...\nPlease stay patient!" 4 25
|
||||
sleep 2
|
||||
exec reboot
|
||||
clear
|
||||
exec boot.sh
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -811,7 +819,7 @@ if [ "${ARCMODE}" = "update" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Arc Update" \
|
||||
--infobox "Update is not possible in Offline Mode!" 5 40
|
||||
sleep 3
|
||||
exec reboot
|
||||
reboot
|
||||
fi
|
||||
elif [ "${ARCMODE}" = "automated" ]; then
|
||||
# Check for Custom Build
|
||||
@@ -820,25 +828,25 @@ elif [ "${ARCMODE}" = "automated" ]; then
|
||||
else
|
||||
make
|
||||
fi
|
||||
elif [ "${ARCMODE}" = "config" ]; then
|
||||
else
|
||||
[ "${CONFDONE}" = "true" ] && NEXT="2" || NEXT="1"
|
||||
[ "${BUILDDONE}" = "true" ] && NEXT="3" || NEXT="1"
|
||||
while true; do
|
||||
echo "= \"\Z4===== Main =====\Zn \" " >"${TMP_PATH}/menu"
|
||||
if [ -z "${USERID}" ] && [ "${ARCOFFLINE}" = "false" ]; then
|
||||
echo "= \"\Z4===== Main =====\Zn \" " >"${TMP_PATH}/menu"
|
||||
if [ -z "${USERID}" ] && [ "${ARCOFFLINE}" != "true" ]; then
|
||||
echo "0 \"HardwareID for Arc Patch\" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
echo "1 \"Choose Model \" " >>"${TMP_PATH}/menu"
|
||||
if [ "${CONFDONE}" = "true" ]; then
|
||||
if [ "${CONFDONE}" = "true" ] && [ -n "${IPCON}" ]; then
|
||||
echo "2 \"Build Loader \" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
if [ "${BUILDDONE}" = "true" ]; then
|
||||
echo "3 \"Boot Loader \" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
echo "= \"\Z4===== Info =====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "= \"\Z4===== Info =====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "a \"Sysinfo \" " >>"${TMP_PATH}/menu"
|
||||
echo "A \"Networkdiag \" " >>"${TMP_PATH}/menu"
|
||||
echo "= \"\Z4===== System ====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "= \"\Z4===== System ====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
if [ "${CONFDONE}" = "true" ]; then
|
||||
if [ "${ARCOPTS}" = "true" ]; then
|
||||
echo "4 \"\Z1Hide Arc DSM Options\Zn \" " >>"${TMP_PATH}/menu"
|
||||
@@ -846,7 +854,7 @@ elif [ "${ARCMODE}" = "config" ]; then
|
||||
echo "4 \"\Z1Show Arc DSM Options\Zn \" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
if [ "${ARCOPTS}" = "true" ]; then
|
||||
echo "= \"\Z4==== Arc DSM ====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "= \"\Z4==== Arc DSM ====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "b \"Addons \" " >>"${TMP_PATH}/menu"
|
||||
echo "d \"Modules \" " >>"${TMP_PATH}/menu"
|
||||
echo "e \"Version \" " >>"${TMP_PATH}/menu"
|
||||
@@ -881,8 +889,8 @@ elif [ "${ARCMODE}" = "config" ]; then
|
||||
echo "6 \"\Z1Show Boot Options\Zn \" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
if [ "${BOOTOPTS}" = "true" ]; then
|
||||
echo "= \"\Z4===== Boot =====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "m \"Boot Kernelload: \Z4${KERNELLOAD}\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "= \"\Z4===== Boot =====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "m \"Boot Kernelload: \Z4${KERNELLOAD}\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "E \"eMMC Boot Support: \Z4${EMMCBOOT}\Zn \" " >>"${TMP_PATH}/menu"
|
||||
if [ "${DIRECTBOOT}" = "false" ]; then
|
||||
echo "i \"Boot IP Waittime: \Z4${BOOTIPWAIT}\Zn \" " >>"${TMP_PATH}/menu"
|
||||
@@ -895,7 +903,7 @@ elif [ "${ARCMODE}" = "config" ]; then
|
||||
echo "7 \"\Z1Show DSM Options\Zn \" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
if [ "${DSMOPTS}" = "true" ]; then
|
||||
echo "= \"\Z4===== DSM =====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "= \"\Z4===== DSM =====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "j \"Cmdline \" " >>"${TMP_PATH}/menu"
|
||||
echo "k \"Synoinfo \" " >>"${TMP_PATH}/menu"
|
||||
echo "N \"Add new User\" " >>"${TMP_PATH}/menu"
|
||||
@@ -934,7 +942,7 @@ elif [ "${ARCMODE}" = "config" ]; then
|
||||
fi
|
||||
echo "= \"\Z4===== Misc =====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "x \"Backup/Restore/Recovery \" " >>"${TMP_PATH}/menu"
|
||||
[ "${ARCOFFLINE}" = "false" ] && echo "z \"Update Menu \" " >>"${TMP_PATH}/menu"
|
||||
[ "${ARCOFFLINE}" != "true" ] && echo "z \"Update Menu \" " >>"${TMP_PATH}/menu"
|
||||
echo "I \"Power/Service Menu \" " >>"${TMP_PATH}/menu"
|
||||
echo "V \"Credits \" " >>"${TMP_PATH}/menu"
|
||||
|
||||
@@ -1024,10 +1032,12 @@ elif [ "${ARCMODE}" = "config" ]; then
|
||||
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
|
||||
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
|
||||
[ "${PLATFORM}" = "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
|
||||
if [ -n "${PLATFORM}" ] && [ -n "${KVERP}" ]; then
|
||||
if [ -n "${PLATFORM}" ] && [ -n "${KVER}" ]; then
|
||||
[ "${PLATFORM}" = "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
mergeConfigModules "$(getAllModules "${PLATFORM}" "${KVERP}" | awk '{print $1}')" "${USER_CONFIG_FILE}"
|
||||
while read -r ID DESC; do
|
||||
writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}"
|
||||
done < <(getAllModules "${PLATFORM}" "${KVERP}")
|
||||
fi
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
@@ -1099,8 +1109,6 @@ elif [ "${ARCMODE}" = "config" ]; then
|
||||
esac
|
||||
done
|
||||
clear
|
||||
else
|
||||
exec reboot
|
||||
fi
|
||||
|
||||
# Inform user
|
||||
|
||||
@@ -15,8 +15,8 @@ ARC_BRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
|
||||
# Get Loader Disk Bus
|
||||
[ -z "${LOADER_DISK}" ] && die "Loader Disk not found!"
|
||||
BUS=$(getBus "${LOADER_DISK}")
|
||||
FBI=$(cat /sys/class/graphics/fb*/name 2>/dev/null | head -1)
|
||||
EFI=$([ -d /sys/firmware/efi ] && echo 1 || echo 0)
|
||||
# Check if machine has EFI
|
||||
[ -d /sys/firmware/efi ] && EFI=1 || EFI=0
|
||||
|
||||
# Print Title centralized
|
||||
clear
|
||||
@@ -55,10 +55,9 @@ LKM="$(readConfigKey "lkm" "${USER_CONFIG_FILE}")"
|
||||
CPU="$(echo $(cat /proc/cpuinfo 2>/dev/null | grep 'model name' | uniq | awk -F':' '{print $2}'))"
|
||||
RAMTOTAL="$(awk '/MemTotal:/ {printf "%.0f\n", $2 / 1024 / 1024 + 0.5}' /proc/meminfo 2>/dev/null)"
|
||||
VENDOR="$(dmesg 2>/dev/null | grep -i "DMI:" | head -1 | sed 's/\[.*\] DMI: //i')"
|
||||
DSMINFO="$(readConfigKey "bootscreen.dsminfo" "${USER_CONFIG_FILE}")"
|
||||
SYSTEMINFO="$(readConfigKey "bootscreen.systeminfo" "${USER_CONFIG_FILE}")"
|
||||
DISKINFO="$(readConfigKey "bootscreen.diskinfo" "${USER_CONFIG_FILE}")"
|
||||
HWIDINFO="$(readConfigKey "bootscreen.hwidinfo" "${USER_CONFIG_FILE}")"
|
||||
DSMINFO="$(readConfigKey "boot.dsminfo" "${USER_CONFIG_FILE}")"
|
||||
SYSTEMINFO="$(readConfigKey "boot.systeminfo" "${USER_CONFIG_FILE}")"
|
||||
DISKINFO="$(readConfigKey "boot.diskinfo" "${USER_CONFIG_FILE}")"
|
||||
|
||||
if [ "${DSMINFO}" = "true" ]; then
|
||||
echo -e "\033[1;37mDSM:\033[0m"
|
||||
@@ -79,10 +78,6 @@ if [ "${DISKINFO}" = "true" ]; then
|
||||
echo -e "\033[1;37mDisks:\033[0m"
|
||||
echo -e "Disks: \033[1;37m$(lsblk -dpno NAME | grep -v "${LOADER_DISK}" | wc -l)\033[0m"
|
||||
fi
|
||||
if [ "${HWIDINFO}" = "true" ]; then
|
||||
echo -e "\033[1;37mHWID:\033[0m"
|
||||
echo -e "HWID: \033[1;37m$(genHWID)\033[0m"
|
||||
fi
|
||||
|
||||
if ! readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q nvmesystem; then
|
||||
HASATA=0
|
||||
@@ -107,40 +102,26 @@ EMMCBOOT="$(readConfigKey "emmcboot" "${USER_CONFIG_FILE}")"
|
||||
MODBLACKLIST="$(readConfigKey "modblacklist" "${USER_CONFIG_FILE}")"
|
||||
ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")"
|
||||
|
||||
# HardwareID Check
|
||||
if [ "${ARCPATCH}" = "true" ]; then
|
||||
HARDWAREID="$(readConfigKey "arc.hardwareid" "${USER_CONFIG_FILE}")"
|
||||
HWID="$(genHWID)"
|
||||
if [ "${HARDWAREID}" != "${HWID}" ]; then
|
||||
echo "\033[1;31m*** HardwareID does not match! - Loader can't boot to DSM! You need to reconfigure your Loader - Rebooting to Config Mode! ***\033[0m"
|
||||
writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
sleep 5
|
||||
rebootTo "config"
|
||||
fi
|
||||
fi
|
||||
|
||||
declare -A CMDLINE
|
||||
|
||||
# Automated Cmdline
|
||||
CMDLINE["syno_hw_version"]="${MODELID:-${MODEL}}"
|
||||
CMDLINE["vid"]="${VID:-"0x46f4"}" # Sanity check
|
||||
CMDLINE["pid"]="${PID:-"0x0001"}" # Sanity check
|
||||
CMDLINE["sn"]="${SN}"
|
||||
CMDLINE['syno_hw_version']="${MODELID:-${MODEL}}"
|
||||
CMDLINE['vid']="${VID:-"0x46f4"}" # Sanity check
|
||||
CMDLINE['pid']="${PID:-"0x0001"}" # Sanity check
|
||||
CMDLINE['sn']="${SN}"
|
||||
|
||||
# Boot Cmdline
|
||||
if grep -q "force_junior" /proc/cmdline; then
|
||||
CMDLINE["force_junior"]=""
|
||||
CMDLINE['force_junior']=""
|
||||
fi
|
||||
if grep -q "recovery" /proc/cmdline; then
|
||||
CMDLINE["force_junior"]=""
|
||||
CMDLINE["recovery"]=""
|
||||
CMDLINE['force_junior']=""
|
||||
CMDLINE['recovery']=""
|
||||
fi
|
||||
if [ ${EFI} -eq 1 ]; then
|
||||
CMDLINE["withefi"]=""
|
||||
CMDLINE['withefi']=""
|
||||
else
|
||||
CMDLINE["noefi"]=""
|
||||
CMDLINE['noefi']=""
|
||||
fi
|
||||
|
||||
# DSM Cmdline
|
||||
@@ -151,10 +132,10 @@ if [ $(echo "${KVER:-4}" | cut -d'.' -f1) -lt 5 ]; then
|
||||
SIZE=$((${SZ:-0} * ${SS:-0} / 1024 / 1024 + 10))
|
||||
# Read SATADoM type
|
||||
SATADOM="$(readConfigKey "satadom" "${USER_CONFIG_FILE}")"
|
||||
CMDLINE["synoboot_satadom"]="${SATADOM:-2}"
|
||||
CMDLINE["dom_szmax"]="${SIZE}"
|
||||
CMDLINE['synoboot_satadom']="${SATADOM:-2}"
|
||||
CMDLINE['dom_szmax']="${SIZE}"
|
||||
fi
|
||||
CMDLINE['elevator']="elevator"
|
||||
CMDLINE["elevator"]="elevator"
|
||||
else
|
||||
CMDLINE["split_lock_detect"]="off"
|
||||
fi
|
||||
@@ -168,37 +149,32 @@ else
|
||||
fi
|
||||
CMDLINE["HddHotplug"]="1"
|
||||
CMDLINE["vender_format_version"]="2"
|
||||
CMDLINE["skip_vender_mac_interfaces"]="0,1,2,3,4,5,6,7"
|
||||
CMDLINE["earlyprintk"]=""
|
||||
CMDLINE["earlycon"]="uart8250,io,0x3f8,115200n8"
|
||||
CMDLINE["console"]="ttyS0,115200n8"
|
||||
CMDLINE["consoleblank"]="600"
|
||||
# CMDLINE['no_console_suspend']="1"
|
||||
CMDLINE["root"]="/dev/md0"
|
||||
CMDLINE["loglevel"]="15"
|
||||
CMDLINE["log_buf_len"]="32M"
|
||||
CMDLINE["rootwait"]=""
|
||||
CMDLINE["panic"]="${KERNELPANIC:-0}"
|
||||
CMDLINE['skip_vender_mac_interfaces']="0,1,2,3,4,5,6,7"
|
||||
|
||||
CMDLINE['earlyprintk']=""
|
||||
CMDLINE['earlycon']="uart8250,io,0x3f8,115200n8"
|
||||
CMDLINE['console']="ttyS0,115200n8"
|
||||
CMDLINE['consoleblank']="600"
|
||||
# CMDLINE['no_console_suspend']="1"
|
||||
CMDLINE['root']="/dev/md0"
|
||||
CMDLINE['rootwait']=""
|
||||
CMDLINE['loglevel']="15"
|
||||
CMDLINE['log_buf_len']="32M"
|
||||
CMDLINE['panic']="${KERNELPANIC:-0}"
|
||||
CMDLINE['pcie_aspm']="off"
|
||||
CMDLINE['modprobe.blacklist']="${MODBLACKLIST}"
|
||||
#[ $(cat /proc/cpuinfo | grep Intel | wc -l) -gt 0 ] && CMDLINE["intel_pstate"]="disable"
|
||||
|
||||
# DSM Specific Cmdline
|
||||
CMDLINE["pcie_aspm"]="off"
|
||||
CMDLINE["modprobe.blacklist"]="${MODBLACKLIST}"
|
||||
[ $(cat /proc/cpuinfo | grep Intel | wc -l) -gt 0 ] && CMDLINE["intel_pstate"]="disable" || true
|
||||
# [ $(cat /proc/cpuinfo | grep AMD | wc -l) -gt 0 ] && CMDLINE["amd_pstate"]="disable" || true
|
||||
# CMDLINE["nomodeset"]=""
|
||||
if echo "apollolake geminilake purley" | grep -wq "${PLATFORM}"; then
|
||||
CMDLINE["nox2apic"]=""
|
||||
fi
|
||||
#if [ -n "$(ls /dev/mmcblk* 2>/dev/null)" ] && [ "${BUS}" != "mmc" ] && [ "${EMMCBOOT}" != "true" ]; then
|
||||
# if ! echo "${CMDLINE["modprobe.blacklist"]}" | grep -q "sdhci"; then
|
||||
# [ ! "${CMDLINE["modprobe.blacklist"]}" = "" ] && CMDLINE["modprobe.blacklist"]+=","
|
||||
# CMDLINE["modprobe.blacklist"]+="sdhci,sdhci_pci,sdhci_acpi"
|
||||
# if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "sdhci"; then
|
||||
# [ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE['modprobe.blacklist']+=","
|
||||
# CMDLINE['modprobe.blacklist']+="sdhci,sdhci_pci,sdhci_acpi"
|
||||
# fi
|
||||
# fi
|
||||
if [ "${DT}" = "true" ] && ! echo "epyc7002 purley broadwellnkv2" | grep -wq "${PLATFORM}"; then
|
||||
if ! echo "${CMDLINE['modprobe.blacklist']}" | grep -q "mpt3sas"; then
|
||||
[ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE["modprobe.blacklist"]+=","
|
||||
CMDLINE["modprobe.blacklist"]+="mpt3sas"
|
||||
[ ! "${CMDLINE['modprobe.blacklist']}" = "" ] && CMDLINE['modprobe.blacklist']+=","
|
||||
CMDLINE['modprobe.blacklist']+="mpt3sas"
|
||||
fi
|
||||
fi
|
||||
# CMDLINE['kvm.ignore_msrs']="1"
|
||||
@@ -210,19 +186,19 @@ if echo "purley broadwellnkv2" | grep -wq "${PLATFORM}"; then
|
||||
CMDLINE["SASmodel"]="1"
|
||||
fi
|
||||
|
||||
# NIC Cmdline
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
# Cmdline NIC Settings
|
||||
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
ETHM=$(readConfigKey "${MODEL}.ports" "${S_FILE}" 2>/dev/null)
|
||||
ETHN=$(echo ${ETHX} | wc -w)
|
||||
[ -z "${ETHM}" ] && ETHM="${ETHN}"
|
||||
[ -z "${ETHM}" ] && ETHM=${ETHN}
|
||||
NIC=0
|
||||
for N in ${ETHX}; do
|
||||
MAC="$(readConfigKey "${N}" "${USER_CONFIG_FILE}")"
|
||||
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | tr '[:upper:]' '[:lower:]')" || NIC=$((NIC + 1))
|
||||
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | tr '[:lower:]' '[:upper:]')" || NIC=$((${NIC} + 1))
|
||||
[ ${NIC} -le ${ETHM} ] && CMDLINE["mac${NIC}"]="${MAC}"
|
||||
[ ${NIC} -ge ${ETHM} ] && break
|
||||
done
|
||||
CMDLINE["netif_num"]="${NIC}"
|
||||
CMDLINE['netif_num']="${NIC}"
|
||||
|
||||
# Read user network settings
|
||||
while IFS=': ' read -r KEY VALUE; do
|
||||
@@ -236,7 +212,7 @@ done < <(readConfigMap "cmdline" "${USER_CONFIG_FILE}")
|
||||
|
||||
# Prepare command line
|
||||
CMDLINE_LINE=""
|
||||
for KEY in "${!CMDLINE[@]}"; do
|
||||
for KEY in ${!CMDLINE[@]}; do
|
||||
VALUE="${CMDLINE[${KEY}]}"
|
||||
CMDLINE_LINE+=" ${KEY}"
|
||||
[ -n "${VALUE}" ] && CMDLINE_LINE+="=${VALUE}"
|
||||
@@ -250,9 +226,7 @@ if [ "${DIRECTBOOT}" = "true" ]; then
|
||||
CMDLINE_DIRECT=$(echo ${CMDLINE_LINE} | sed 's/>/\\\\>/g') # Escape special chars
|
||||
grub-editenv ${USER_GRUBENVFILE} set dsm_cmdline="${CMDLINE_DIRECT}"
|
||||
grub-editenv ${USER_GRUBENVFILE} set next_entry="direct"
|
||||
if ! _bootwait; then
|
||||
exit 0
|
||||
fi
|
||||
_bootwait || true
|
||||
echo -e "\033[1;34mReboot with Directboot\033[0m"
|
||||
reboot
|
||||
exit 0
|
||||
@@ -279,8 +253,8 @@ elif [ "${DIRECTBOOT}" = "false" ]; then
|
||||
echo -e "\r${DRIVER}: \033[1;37mNOT CONNECTED\033[0m"
|
||||
break
|
||||
fi
|
||||
COUNT=$((COUNT + 1))
|
||||
IP="$(getIP "${N}")"
|
||||
COUNT=$((${COUNT} + 1))
|
||||
IP="$(getIP ${N})"
|
||||
if [ -n "${IP}" ]; then
|
||||
SPEED=$(ethtool ${N} 2>/dev/null | grep "Speed:" | awk '{print $2}')
|
||||
if [[ "${IP}" =~ ^169\.254\..* ]]; then
|
||||
@@ -302,11 +276,9 @@ elif [ "${DIRECTBOOT}" = "false" ]; then
|
||||
sleep 1
|
||||
done
|
||||
done
|
||||
if ! _bootwait; then
|
||||
exit 0
|
||||
fi
|
||||
_bootwait || true
|
||||
|
||||
DSMLOGO="$(readConfigKey "bootscreen.dsmlogo" "${USER_CONFIG_FILE}")"
|
||||
DSMLOGO="$(readConfigKey "boot.dsmlogo" "${USER_CONFIG_FILE}")"
|
||||
if [ "${DSMLOGO}" = "true" ] && [ -c "/dev/fb0" ]; then
|
||||
[[ "${IPCON}" =~ ^169\.254\..* ]] && IPCON=""
|
||||
[ -n "${IPCON}" ] && URL="http://${IPCON}:5000" || URL="http://find.synology.com/"
|
||||
@@ -316,20 +288,10 @@ elif [ "${DIRECTBOOT}" = "false" ]; then
|
||||
|
||||
for T in $(busybox w 2>/dev/null | grep -v 'TTY' | awk '{print $2}'); do
|
||||
if [ -w "/dev/${T}" ]; then
|
||||
[ -n "${IPCON}" ] && echo -e "Use \033[1;34mhttp://${IPCON}:5000\033[0m or try \033[1;34mhttp://find.synology.com/ \033[0mto find DSM and proceed.\n\n\033[1;37mThis interface will not be operational. Wait a few minutes - Network will be unreachable until DSM boot.\033[0m\n" >"/dev/${T}" 2>/dev/null \
|
||||
|| echo -e "Try \033[1;34mhttp://find.synology.com/ \033[0mto find DSM and proceed.\n\n\033[1;37mThis interface will not be operational. Wait a few minutes - Network will be unreachable until DSM boot.\nNo IP found - DSM will not work properly!\033[0m\n" >"/dev/${T}" 2>/dev/null
|
||||
[ -n "${IPCON}" ] && echo -e "Use \033[1;34mhttp://${IPCON}:5000\033[0m or try \033[1;34mhttp://find.synology.com/ \033[0mto find DSM and proceed.\n\n\033[1;37mThis interface will not be operational. Wait a few minutes.\033[0m\n" >"/dev/${T}" 2>/dev/null || echo -e "Try \033[1;34mhttp://find.synology.com/ \033[0mto find DSM and proceed.\n\n\033[1;37mThis interface will not be operational. Wait a few minutes.\nNo IP found.\033[0m\n" >"/dev/${T}" 2>/dev/null
|
||||
fi
|
||||
done
|
||||
|
||||
# # Unload all network interfaces
|
||||
# for D in $(realpath /sys/class/net/*/device/driver); do rmmod -f "$(basename ${D})" 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
|
||||
|
||||
echo -e "\033[1;37mLoading DSM Kernel...\033[0m"
|
||||
# Executes DSM kernel via KEXEC
|
||||
KEXECARGS="-a"
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
read_u8() {
|
||||
dd if="${1}" bs=1 skip="$((${2}))" count=1 2>/dev/null | od -An -tu1 | grep -Eo '[0-9]+'
|
||||
dd if=$1 bs=1 skip=$(($2)) count=1 2>/dev/null | od -An -tu1 | grep -Eo '[0-9]+'
|
||||
}
|
||||
read_u32() {
|
||||
dd if="${1}" bs=1 skip="$((${2}))" count=4 2>/dev/null | od -An -tu4 | grep -Eo '[0-9]+'
|
||||
dd if=$1 bs=1 skip=$(($2)) count=4 2>/dev/null | od -An -tu4 | grep -Eo '[0-9]+'
|
||||
}
|
||||
|
||||
set -x
|
||||
setup_size=$(read_u8 "${1}" 0x1f1)
|
||||
payload_offset=$(read_u32 "${1}" 0x248)
|
||||
payload_length=$(read_u32 "${1}" 0x24c)
|
||||
inner_pos=$(((setup_size + 1) * 512))
|
||||
setup_size=$(read_u8 $1 0x1f1)
|
||||
payload_offset=$(read_u32 $1 0x248)
|
||||
payload_length=$(read_u32 $1 0x24c)
|
||||
inner_pos=$((($setup_size + 1) * 512))
|
||||
|
||||
tail -c+$(($inner_pos + 1)) "${1}" | tail -c+$(($payload_offset + 1)) | head -c "${payload_length}" | head -c $(($payload_length - 4)) | unlzma >"${2}"
|
||||
tail -c+$(($inner_pos + 1)) $1 | tail -c+$(($payload_offset + 1)) | head -c $(($payload_length)) | head -c $(($payload_length - 4)) | unlzma >$2
|
||||
42
files/initrd/opt/arc/calc_run_size.sh
Executable file
42
files/initrd/opt/arc/calc_run_size.sh
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Calculate the amount of space needed to run the kernel, including room for
|
||||
# the .bss and .brk sections.
|
||||
#
|
||||
# Usage:
|
||||
# objdump -h a.out | sh calc_run_size.sh
|
||||
|
||||
NUM='\([0-9a-fA-F]*[ \t]*\)'
|
||||
OUT=$(sed -n 's/^[ \t0-9]*.b[sr][sk][ \t]*'"${NUM}${NUM}${NUM}${NUM}"'.*/\1\4/p')
|
||||
if [ -z "$OUT" ]; then
|
||||
echo "Never found .bss or .brk file offset" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OUT=$(echo ${OUT# })
|
||||
sizeA=$(printf "%d" 0x${OUT%% *})
|
||||
OUT=${OUT#* }
|
||||
offsetA=$(printf "%d" 0x${OUT%% *})
|
||||
OUT=${OUT#* }
|
||||
sizeB=$(printf "%d" 0x${OUT%% *})
|
||||
OUT=${OUT#* }
|
||||
offsetB=$(printf "%d" 0x${OUT%% *})
|
||||
|
||||
run_size=$((${offsetA} + ${sizeA} + ${sizeB}))
|
||||
|
||||
# BFD linker shows the same file offset in ELF.
|
||||
if [ "${offsetA}" -ne "${offsetB}" ]; then
|
||||
# Gold linker shows them as consecutive.
|
||||
endB=$((${offsetB} + ${sizeB}))
|
||||
if [ "$endB" != "$run_size" ]; then
|
||||
printf "sizeA: 0x%x\n" ${sizeA} >&2
|
||||
printf "offsetA: 0x%x\n" ${offsetA} >&2
|
||||
printf "sizeB: 0x%x\n" ${sizeB} >&2
|
||||
printf "offsetB: 0x%x\n" ${offsetB} >&2
|
||||
echo ".bss and .brk are non-contiguous" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
printf "%d\n" ${run_size}
|
||||
exit 0
|
||||
Binary file not shown.
@@ -8,7 +8,6 @@ function availableAddons() {
|
||||
fi
|
||||
local ARCOFFLINE="$(readConfigKey "arc.offline" "${USER_CONFIG_FILE}")"
|
||||
local ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")"
|
||||
local PAT_URL="$(readConfigKey "paturl" "${USER_CONFIG_FILE}")"
|
||||
for D in $(find "${ADDONS_PATH}" -maxdepth 1 -type d 2>/dev/null | sort); do
|
||||
[ ! -f "${D}/manifest.yml" ] && continue
|
||||
local ADDON=$(basename ${D})
|
||||
|
||||
@@ -26,20 +26,6 @@ function readConfigKey() {
|
||||
[ "${RESULT}" = "null" ] && echo "" || echo "${RESULT}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Write to yaml config file
|
||||
# 1 - Modules
|
||||
# 2 - Path of yaml config file
|
||||
function mergeConfigModules() {
|
||||
local MS="ARCMOD\n${1// /\\n}"
|
||||
local L="$(echo -en "${MS}" | awk '{print "modules."$1":"}')"
|
||||
local xmlfile=$(mktemp)
|
||||
echo -en "${L}" | yq -p p -o=yaml >"${xmlfile}"
|
||||
deleteConfigKey "modules.\"ARCMOD\"" "${xmlfile}"
|
||||
yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' "${2}" "${xmlfile}" 2>/dev/null
|
||||
rm -f "${xmlfile}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Write to yaml config file if key not exists
|
||||
# 1 - Path of Key
|
||||
|
||||
@@ -43,7 +43,7 @@ EXTRACTOR_PATH="${PART3_PATH}/extractor"
|
||||
EXTRACTOR_BIN="syno_extract_system_patch"
|
||||
|
||||
HTTPPORT=$(grep -i '^HTTP_PORT=' /etc/arc.conf 2>/dev/null | cut -d'=' -f2)
|
||||
[ -z "${HTTPPORT}" ] && HTTPPORT=8080 || true
|
||||
[ -z "${HTTPPORT}" ] && HTTPPORT=7080 || true
|
||||
DUFSPORT=$(grep -i '^DUFS_PORT=' /etc/arc.conf 2>/dev/null | cut -d'=' -f2)
|
||||
[ -z "${DUFSPORT}" ] && DUFSPORT=7304 || true
|
||||
TTYDPORT=$(grep -i '^TTYD_PORT=' /etc/arc.conf 2>/dev/null | cut -d'=' -f2)
|
||||
|
||||
@@ -136,7 +136,7 @@ function generateMacAddress() {
|
||||
[ ${I} -lt ${NUM} ] && MACS+=" "
|
||||
done
|
||||
|
||||
MACS="$(echo "${MACS}" | tr '[:upper:]' '[:lower:]')"
|
||||
MACS="$(echo "${MACS}" | tr '[:lower:]' '[:upper:]')"
|
||||
echo "${MACS}"
|
||||
return 0
|
||||
}
|
||||
@@ -229,7 +229,7 @@ function _set_conf_kv() {
|
||||
# sort netif busid
|
||||
function _sort_netif() {
|
||||
local ETHLIST=""
|
||||
local ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
local ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
for N in ${ETHX}; do
|
||||
local MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g; s/.*/\L&/')"
|
||||
local BUS="$(ethtool -i ${N} 2>/dev/null | grep bus-info | cut -d' ' -f2)"
|
||||
@@ -277,7 +277,7 @@ function getBus() {
|
||||
# 1 - ethN
|
||||
function getIP() {
|
||||
local IP=""
|
||||
MACR="$(cat /sys/class/net/${1}/address 2>/dev/null | sed 's/://g')"
|
||||
MACR="$(cat /sys/class/net/${1}/address 2>/dev/null | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
|
||||
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${IPR}" ]; then
|
||||
IFS='/' read -r -a IPRA <<<"${IPR}"
|
||||
@@ -497,34 +497,29 @@ function onlineCheck() {
|
||||
TIMEZONE="$(curl -m 10 -v "http://ip-api.com/line?fields=timezone" 2>/dev/null | tr -d '\n' | cut -d '/' -f2)"
|
||||
KEYMAP="$(curl -m 10 -v "http://ip-api.com/line?fields=countryCode" 2>/dev/null | tr '[:upper:]' '[:lower:]')"
|
||||
if [ "${KEYMAP}" = "ua" ]; then
|
||||
rm -rf "${PART3_PATH}" && exec poweroff
|
||||
rm -rf "${PART3_PATH}"
|
||||
poweroff
|
||||
fi
|
||||
[ -z "${KEYMAP}" ] && KEYMAP="$(readConfigKey "keymap" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${REGION}" ] && [ -n "${TIMEZONE}" ]; then
|
||||
writeConfigKey "arc.offline" "false" "${USER_CONFIG_FILE}"
|
||||
[ $(echo "${ARC_VERSION}" | grep "dev" | wc -l) -eq 0 ] && NEWTAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep -v "dev" | sort -rV | head -1)"
|
||||
[ $(echo "${ARC_VERSION}" | grep "dev" | wc -l) -gt 0 ] && NEWTAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep "dev" | sort -rV | head -1)"
|
||||
writeConfigKey "time.region" "${REGION}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "time.timezone" "${TIMEZONE}" "${USER_CONFIG_FILE}"
|
||||
updateOffline
|
||||
else
|
||||
REGION="$(readConfigKey "time.region" "${USER_CONFIG_FILE}")"
|
||||
TIMEZONE="$(readConfigKey "time.timezone" "${USER_CONFIG_FILE}")"
|
||||
writeConfigKey "arc.offline" "true" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
[ -n "${TIMEZONE}" ] && [ -n "${REGION}" ] && ln -sf "/usr/share/zoneinfo/${REGION}/${TIMEZONE}" /etc/localtime
|
||||
LAYOUT="$(readConfigKey "layout" "${USER_CONFIG_FILE}")"
|
||||
if [ -z "${LAYOUT}" ]; then
|
||||
[ -n "${KEYMAP}" ] && KEYMAP="$(echo ${KEYMAP} | tr '[:upper:]' '[:lower:]' | tr -d '[:space:]' | tr -d '[:punct:]' | tr -d '[:digit:]')"
|
||||
if loadkeys "${KEYMAP:-us}" 2>/dev/null; then
|
||||
writeConfigKey "keymap" "${KEYMAP}" "${USER_CONFIG_FILE}"
|
||||
else
|
||||
KEYMAP="us"
|
||||
loadkeys "${KEYMAP}" 2>/dev/null
|
||||
writeConfigKey "keymap" "${KEYMAP}" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
fi
|
||||
NEWTAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep -v "dev" | sort -rV | head -1)"
|
||||
if [ -n "${NEWTAG}" ]; then
|
||||
writeConfigKey "arc.offline" "false" "${USER_CONFIG_FILE}"
|
||||
updateOffline
|
||||
else
|
||||
writeConfigKey "arc.offline" "true" "${USER_CONFIG_FILE}"
|
||||
[ -n "${KEYMAP}" ] && writeConfigKey "keymap" "${KEYMAP}" "${USER_CONFIG_FILE}"
|
||||
[ -z "${KEYMAP}" ] && KEYMAP="us"
|
||||
loadkeys ${KEYMAP}
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -589,18 +584,13 @@ function check_port() {
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Unmount disks
|
||||
# Unmount new boot loader disk
|
||||
function __umountNewBlDisk() {
|
||||
umount "${TMP_PATH}/sdX1" 2>/dev/null
|
||||
umount "${TMP_PATH}/sdX2" 2>/dev/null
|
||||
umount "${TMP_PATH}/sdX3" 2>/dev/null
|
||||
}
|
||||
|
||||
function __umountDSMRootDisk() {
|
||||
umount "${TMP_PATH}/mdX"
|
||||
rm -rf "${TMP_PATH}/mdX"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# bootwait SSH/Web
|
||||
function _bootwait() {
|
||||
@@ -609,13 +599,13 @@ function _bootwait() {
|
||||
busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WB
|
||||
MSG=""
|
||||
while test ${BOOTWAIT} -ge 0; do
|
||||
MSG="\033[1;33mAccess to SSH/Web will interrupt boot...\033[0m"
|
||||
MSG="\033[1;33mAccess SSH/Web will interrupt boot...\033[0m"
|
||||
echo -en "\r${MSG}"
|
||||
busybox w 2>/dev/null | awk '{print $1" "$2" "$4" "$5" "$6}' >WC
|
||||
if ! diff WB WC >/dev/null 2>&1; then
|
||||
echo -en "\r\033[1;33mAccess to SSH/Web detected and boot is interrupted.\033[0m\n"
|
||||
echo -en "\r\033[1;33mAccess SSH/Web detected and boot is interrupted.\033[0m\n"
|
||||
rm -f WB WC
|
||||
return 1
|
||||
exit 0
|
||||
fi
|
||||
sleep 1
|
||||
BOOTWAIT=$((BOOTWAIT - 1))
|
||||
@@ -623,15 +613,4 @@ function _bootwait() {
|
||||
rm -f WB WC
|
||||
echo -en "\r$(printf "%$((${#MSG} * 2))s" " ")\n"
|
||||
return 0
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# check and fix the DSM root partition
|
||||
# 1 - DSM root path
|
||||
function fixDSMRootPart() {
|
||||
if mdadm --detail "${1}" 2>/dev/null | grep -i "State" | grep -iEq "active|FAILED|Not Started"; then
|
||||
mdadm --stop "${1}" >/dev/null 2>&1
|
||||
mdadm --assemble --scan >/dev/null 2>&1
|
||||
fsck "${1}" >/dev/null 2>&1
|
||||
fi
|
||||
}
|
||||
@@ -1,37 +1,3 @@
|
||||
###############################################################################
|
||||
# Unpack modules from a tgz file
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
function unpackModules() {
|
||||
local PLATFORM=${1}
|
||||
local KVER=${2}
|
||||
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Packag modules to a tgz file
|
||||
# 1 - Platform
|
||||
# 2 - Kernel Version
|
||||
function packModules() {
|
||||
local PLATFORM=${1}
|
||||
local KVER=${2}
|
||||
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zcf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
else
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Return list of all modules available
|
||||
# 1 - Platform
|
||||
@@ -44,9 +10,15 @@ function getAllModules() {
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
|
||||
# Unzip modules for temporary folder
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
fi
|
||||
# Get list of all modules
|
||||
for F in $(ls ${TMP_PATH}/modules/*.ko 2>/dev/null); do
|
||||
local X=$(basename ${F})
|
||||
@@ -73,24 +45,34 @@ function installModules() {
|
||||
echo "ERROR: installModules: Platform or Kernel Version not defined" >"${LOG_FILE}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
# Unzip modules for temporary folder
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" 2>"${LOG_FILE}"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" 2>"${LOG_FILE}"
|
||||
fi
|
||||
if [ $? -ne 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
local ODP="$(readConfigKey "odp" "${USER_CONFIG_FILE}")"
|
||||
for F in $(ls "${TMP_PATH}/modules/"*.ko 2>/dev/null); do
|
||||
local M=$(basename ${F})
|
||||
[ "${ODP}" = "true" ] && [ -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
|
||||
[ "${ODP}" = "true" -a -f "${RAMDISK_PATH}/usr/lib/modules/${M}" ] && continue
|
||||
if echo "${MLIST}" | grep -wq "${M:0:-3}"; then
|
||||
cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}"
|
||||
cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
|
||||
else
|
||||
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}"
|
||||
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
|
||||
fi
|
||||
done
|
||||
mkdir -p "${RAMDISK_PATH}/usr/lib/firmware"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CUSTOM_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware"
|
||||
tar -zxf "${CUSTOM_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware" 2>"${LOG_FILE}"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware"
|
||||
tar -zxf "${MODULES_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware" 2>"${LOG_FILE}"
|
||||
fi
|
||||
if [ $? -ne 0 ]; then
|
||||
return 1
|
||||
@@ -115,12 +97,21 @@ function addToModules() {
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
|
||||
# Unzip modules for temporary folder
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
fi
|
||||
cp -f ${KOFILE} ${TMP_PATH}/modules
|
||||
|
||||
packModules "${PLATFORM}" "${KVER}"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zcf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
else
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@@ -137,12 +128,21 @@ function delToModules() {
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
|
||||
# Unzip modules for temporary folder
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
fi
|
||||
rm -f ${TMP_PATH}/modules/${KONAME}
|
||||
|
||||
packModules "${PLATFORM}" "${KVER}"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zcf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
else
|
||||
tar -zcf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules" .
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@@ -170,9 +170,15 @@ function getdepends() {
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
|
||||
# Unzip modules for temporary folder
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
mkdir -p "${TMP_PATH}/modules"
|
||||
local KERNEL="$(readConfigKey "kernel" "${USER_CONFIG_FILE}")"
|
||||
if [ "${KERNEL}" = "custom" ]; then
|
||||
tar -zxf "${CUSTOM_PATH}/modules-${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/${PLATFORM}-${KVER}.tgz" -C "${TMP_PATH}/modules"
|
||||
fi
|
||||
local DPS=($(_getdepends ${KONAME} | tr ' ' '\n' | sort -u))
|
||||
echo ${DPS[@]}
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Get Network Config for Loader
|
||||
function getnet() {
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
MODEL="$(readConfigKey "model" "${USER_CONFIG_FILE}")"
|
||||
ARCPATCH="$(readConfigKey "arc.patch" "${USER_CONFIG_FILE}")"
|
||||
NICPORTS="$(readConfigKey "${MODEL}.ports" "${S_FILE}" 2>/dev/null)"
|
||||
@@ -21,16 +21,16 @@ function getnet() {
|
||||
# User Mac
|
||||
for N in ${ETHX}; do
|
||||
while true; do
|
||||
MAC="$(cat /sys/class/net/${N}/address | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
|
||||
dialog --backtitle "$(backtitle)" --title "Mac Setting" \
|
||||
--inputbox "Type a custom Mac for ${N} (Eq. 001132a1b2c3).\nA custom Mac will not be applied to NIC!" 8 50\
|
||||
--inputbox "Type a custom MAC for ${ETH} (Eq. 001132abc123)." 7 50 "${MAC}"\
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && break
|
||||
MAC=$(cat "${TMP_PATH}/resp")
|
||||
[ -z "${MAC}" ] && MAC="$(readConfigKey "${N}" "${USER_CONFIG_FILE}")"
|
||||
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g')"
|
||||
MAC="$(echo "${MAC}" | tr '[:upper:]' '[:lower:]')"
|
||||
[ -z "${MAC}" ] && MAC="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
|
||||
MAC="$(echo "${MAC}" | tr '[:lower:]' '[:upper:]')"
|
||||
if [ ${#MAC} -eq 12 ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Mac Setting" --msgbox "Set Mac for ${N} to ${MAC}!" 5 50
|
||||
writeConfigKey "${N}" "${MAC}" "${USER_CONFIG_FILE}"
|
||||
break
|
||||
else
|
||||
@@ -42,9 +42,9 @@ function getnet() {
|
||||
}
|
||||
|
||||
# Get Amount of NIC
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
ETHX="$(ls /sys/class/net 2>/dev/null | grep eth)"
|
||||
# Get actual IP
|
||||
for N in ${ETHX}; do
|
||||
IPCON="$(getIP "${N}")"
|
||||
for ETH in ${ETHX}; do
|
||||
IPCON=$(getIP ${ETH})
|
||||
[ -n "${IPCON}" ] && break
|
||||
done
|
||||
@@ -2,51 +2,53 @@
|
||||
function getmap() {
|
||||
# Sata Disks
|
||||
SATADRIVES=0
|
||||
if [ $(lspci -d ::106 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
# Clean old files
|
||||
[ -f "${TMP_PATH}/drivesmax" ] && rm -f "${TMP_PATH}/drivesmax" && touch "${TMP_PATH}/drivesmax" || true
|
||||
[ -f "${TMP_PATH}/drivescon" ] && rm -f "${TMP_PATH}/drivescon" && touch "${TMP_PATH}/drivescon" || true
|
||||
[ -f "${TMP_PATH}/ports" ] && rm -f "${TMP_PATH}/ports" && touch "${TMP_PATH}/ports" || true
|
||||
[ -f "${TMP_PATH}/remap" ] && rm -f "${TMP_PATH}/remap" && touch "${TMP_PATH}/remap" || true
|
||||
if [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
|
||||
let DISKIDXMAPIDX=0
|
||||
DISKIDXMAP=""
|
||||
let DISKIDXMAPIDXMAX=0
|
||||
DISKIDXMAPMAX=""
|
||||
for PCI in $(lspci -d ::106 2>/dev/null | awk '{print $1}'); do
|
||||
NUMPORTS=0
|
||||
CONPORTS=0
|
||||
unset HOSTPORTS
|
||||
declare -A HOSTPORTS
|
||||
while read -r 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 | grep -F "${PCI}")
|
||||
while read -r PORT; do
|
||||
ls -l /sys/block | grep -F -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} = 1 ] && CONPORTS="$((${CONPORTS} + 1))" && echo "$((${PORT} - 1))" >>"${TMP_PATH}/ports"
|
||||
[ ${DUMMY} = 1 ] # Do nothing for now
|
||||
NUMPORTS=$((${NUMPORTS} + 1))
|
||||
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
|
||||
[ ${NUMPORTS} -gt 8 ] && NUMPORTS=8
|
||||
[ ${CONPORTS} -gt 8 ] && CONPORTS=8
|
||||
echo -n "${NUMPORTS}" >>"${TMP_PATH}/drivesmax"
|
||||
echo -n "${CONPORTS}" >>"${TMP_PATH}/drivescon"
|
||||
DISKIDXMAP=$DISKIDXMAP$(printf "%02x" $DISKIDXMAPIDX)
|
||||
let DISKIDXMAPIDX=$DISKIDXMAPIDX+$CONPORTS
|
||||
DISKIDXMAPMAX=$DISKIDXMAPMAX$(printf "%02x" $DISKIDXMAPIDXMAX)
|
||||
let DISKIDXMAPIDXMAX=$DISKIDXMAPIDXMAX+$NUMPORTS
|
||||
SATADRIVES=$((${SATADRIVES} + ${CONPORTS}))
|
||||
done
|
||||
fi
|
||||
# Clean old files
|
||||
[ -f "${TMP_PATH}/drivesmax" ] && rm -f "${TMP_PATH}/drivesmax"
|
||||
touch "${TMP_PATH}/drivesmax"
|
||||
[ -f "${TMP_PATH}/drivescon" ] && rm -f "${TMP_PATH}/drivescon"
|
||||
touch "${TMP_PATH}/drivescon"
|
||||
[ -f "${TMP_PATH}/ports" ] && rm -f "${TMP_PATH}/ports"
|
||||
touch "${TMP_PATH}/ports"
|
||||
[ -f "${TMP_PATH}/remap" ] && rm -f "${TMP_PATH}/remap"
|
||||
touch "${TMP_PATH}/remap"
|
||||
if [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
|
||||
let DISKIDXMAPIDX=0
|
||||
DISKIDXMAP=""
|
||||
let DISKIDXMAPIDXMAX=0
|
||||
DISKIDXMAPMAX=""
|
||||
for PCI in $(lspci -d ::106 | awk '{print $1}'); do
|
||||
NUMPORTS=0
|
||||
CONPORTS=0
|
||||
unset HOSTPORTS
|
||||
declare -A HOSTPORTS
|
||||
while read -r 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 | grep -F "${PCI}")
|
||||
while read -r PORT; do
|
||||
ls -l /sys/block | grep -F -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} = 1 ] && CONPORTS="$((${CONPORTS} + 1))" && echo "$((${PORT} - 1))" >>"${TMP_PATH}/ports"
|
||||
[ ${DUMMY} = 1 ] # Do nothing for now
|
||||
NUMPORTS=$((${NUMPORTS} + 1))
|
||||
done < <(echo ${!HOSTPORTS[@]} | tr ' ' '\n' | sort -n)
|
||||
[ ${NUMPORTS} -gt 8 ] && NUMPORTS=8
|
||||
[ ${CONPORTS} -gt 8 ] && CONPORTS=8
|
||||
echo -n "${NUMPORTS}" >>"${TMP_PATH}/drivesmax"
|
||||
echo -n "${CONPORTS}" >>"${TMP_PATH}/drivescon"
|
||||
DISKIDXMAP=$DISKIDXMAP$(printf "%02x" $DISKIDXMAPIDX)
|
||||
let DISKIDXMAPIDX=$DISKIDXMAPIDX+$CONPORTS
|
||||
DISKIDXMAPMAX=$DISKIDXMAPMAX$(printf "%02x" $DISKIDXMAPIDXMAX)
|
||||
let DISKIDXMAPIDXMAX=$DISKIDXMAPIDXMAX+$NUMPORTS
|
||||
SATADRIVES=$((${SATADRIVES} + ${CONPORTS}))
|
||||
done
|
||||
fi
|
||||
# SAS Disks
|
||||
SASDRIVES=0
|
||||
if [ $(lspci -d ::107 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::107 2>/dev/null | awk '{print $1}'); do
|
||||
if [ $(lspci -d ::107 | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::107 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n 2>/dev/null)
|
||||
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
|
||||
@@ -55,8 +57,8 @@ function getmap() {
|
||||
fi
|
||||
# SCSI Disks
|
||||
SCSIDRIVES=0
|
||||
if [ $(lspci -d ::100 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::100 2>/dev/null | awk '{print $1}'); do
|
||||
if [ $(lspci -d ::100 | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::100 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort - 2>/dev/null)
|
||||
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
|
||||
@@ -65,8 +67,8 @@ function getmap() {
|
||||
fi
|
||||
# Raid Disks
|
||||
RAIDDRIVES=0
|
||||
if [ $(lspci -d ::104 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::104 2>/dev/null | awk '{print $1}'); do
|
||||
if [ $(lspci -d ::104 | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::104 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n 2>/dev/null)
|
||||
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
|
||||
@@ -75,8 +77,8 @@ function getmap() {
|
||||
fi
|
||||
# USB Disks
|
||||
USBDRIVES=0
|
||||
if [ $(ls -l /sys/class/scsi_host 2>/dev/null | grep usb | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::c03 2>/dev/null | awk '{print $1}'); do
|
||||
if [[ -d "/sys/class/scsi_host" && $(ls -l /sys/class/scsi_host | grep usb | wc -l) -gt 0 ]]; then
|
||||
for PCI in $(lspci -d ::c03 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/scsi_host | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/host//' | sort -n 2>/dev/null)
|
||||
PORTNUM=$(lsscsi -b | grep -v - | grep "\[${PORT}:" | wc -l)
|
||||
@@ -86,9 +88,9 @@ function getmap() {
|
||||
fi
|
||||
# MMC Disks
|
||||
MMCDRIVES=0
|
||||
if [ $(ls -l /sys/block/mmc* 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
if [[ -d "/sys/class/mmc_host" && $(ls -l /sys/class/mmc_host | grep mmc_host | wc -l) -gt 0 ]]; then
|
||||
for PCI in $(lspci -d ::805 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" 2>/dev/null | sed "s/\ .*://")
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORTNUM=$(ls -l /sys/block/mmc* | grep "${PCI}" | wc -l 2>/dev/null)
|
||||
[ ${PORTNUM} -eq 0 ] && continue
|
||||
MMCDRIVES=$((${MMCDRIVES} + ${PORTNUM}))
|
||||
@@ -96,8 +98,8 @@ function getmap() {
|
||||
fi
|
||||
# NVMe Disks
|
||||
NVMEDRIVES=0
|
||||
if [ $(lspci -d ::108 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::108 2>/dev/null | awk '{print $1}'); do
|
||||
if [ $(lspci -d ::108 | wc -l) -gt 0 ]; then
|
||||
for PCI in $(lspci -d ::108 | awk '{print $1}'); do
|
||||
NAME=$(lspci -s "${PCI}" | sed "s/\ .*://")
|
||||
PORT=$(ls -l /sys/class/nvme | grep "${PCI}" | awk -F'/' '{print $NF}' | sed 's/nvme//' | sort -n 2>/dev/null)
|
||||
PORTNUM=$(lsscsi -b | grep -v - | grep "\[N:${PORT}:" | wc -l)
|
||||
@@ -117,7 +119,7 @@ function getmap() {
|
||||
writeConfigKey "device.drives" "${DRIVES}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "device.harddrives" "${HARDDRIVES}" "${USER_CONFIG_FILE}"
|
||||
# Check for Sata Boot
|
||||
if [ $(lspci -d ::106 2>/dev/null | wc -l) -gt 0 ]; then
|
||||
if [ $(lspci -d ::106 | wc -l) -gt 0 ]; then
|
||||
LASTDRIVE=0
|
||||
while read -r D; do
|
||||
if [ "${BUS}" = "sata" ] && [ "${MACHINE}" != "Native" ] && [ ${D} -eq 0 ]; then
|
||||
@@ -228,22 +230,22 @@ function getmapSelection() {
|
||||
}
|
||||
|
||||
# Check for Controller // 104=RAID // 106=SATA // 107=SAS // 100=SCSI // c03=USB
|
||||
SATACONTROLLER=$(lspci -d ::106 2>/dev/null | wc -l)
|
||||
SATACONTROLLER=$(lspci -d ::106 | wc -l)
|
||||
writeConfigKey "device.satacontroller" "${SATACONTROLLER}" "${USER_CONFIG_FILE}"
|
||||
if [ ${SATACONTROLLER} -gt 0 ]; then
|
||||
writeConfigKey "device.externalcontroller" "false" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
SASCONTROLLER=$(lspci -d ::107 2>/dev/null | wc -l)
|
||||
SASCONTROLLER=$(lspci -d ::107 | wc -l)
|
||||
writeConfigKey "device.sascontroller" "${SASCONTROLLER}" "${USER_CONFIG_FILE}"
|
||||
if [ ${SASCONTROLLER} -gt 0 ]; then
|
||||
writeConfigKey "device.externalcontroller" "true" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
SCSICONTROLLER=$(lspci -d ::100 2>/dev/null | wc -l)
|
||||
SCSICONTROLLER=$(lspci -d ::100 | wc -l)
|
||||
writeConfigKey "device.scsicontroller" "${SCSICONTROLLER}" "${USER_CONFIG_FILE}"
|
||||
if [ ${SCSICONTROLLER} -gt 0 ]; then
|
||||
writeConfigKey "device.externalcontroller" "true" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
RAIDCONTROLLER=$(lspci -d ::104 2>/dev/null | wc -l)
|
||||
RAIDCONTROLLER=$(lspci -d ::104 | wc -l)
|
||||
writeConfigKey "device.raidcontroller" "${RAIDCONTROLLER}" "${USER_CONFIG_FILE}"
|
||||
if [ ${RAIDCONTROLLER} -gt 0 ]; then
|
||||
writeConfigKey "device.externalcontroller" "true" "${USER_CONFIG_FILE}"
|
||||
|
||||
@@ -26,34 +26,27 @@ function updateLoader() {
|
||||
export URL="https://github.com/AuxXxilium/arc/releases/download/${TAG}/update-${TAG}-${ARC_BRANCH}.zip"
|
||||
export TAG="${TAG}"
|
||||
{
|
||||
{
|
||||
curl -kL "${URL}" -o ${TMP_PATH}/update.zip 2>&3 3>&-
|
||||
} 3>&1 >&4 4>&- |
|
||||
curl -kL "$URL" -o ${TMP_PATH}/update.zip 2>&1 |
|
||||
perl -C -lane '
|
||||
BEGIN {$header = "Downloading $ENV{URL}...\n\n"; $| = 1}
|
||||
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
|
||||
$pcent = $F[0];
|
||||
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
|
||||
s/ /\xa0/g; # replacing space with nbsp as dialog squashes spaces
|
||||
s/ /\xa0/g;
|
||||
if ($. <= 3) {
|
||||
$header .= "$_\n";
|
||||
$/ = "\r" if $. == 2
|
||||
$/ = "\r" if $. = 2
|
||||
} else {
|
||||
print "XXX\n$pcent\n$header$_\nXXX"
|
||||
}' 4>&- |
|
||||
dialog --gauge "Download Update: ${TAG}..." 14 72 4>&-
|
||||
} 4>&1
|
||||
}' |
|
||||
dialog --backtitle "$(backtitle)" --title "Update Loader" \
|
||||
--gauge "Download Loader: $TAG ..." 14 72
|
||||
}
|
||||
if [ -f "${TMP_PATH}/update.zip" ] && [ $(ls -s "${TMP_PATH}/update.zip" | cut -d' ' -f1) -gt 300000 ]; then
|
||||
mkdir -p "${TMP_PATH}/update"
|
||||
dialog --backtitle "$(backtitle)" --title "Update Loader" \
|
||||
--infobox "Updating Loader..." 3 50
|
||||
if unzip -oq "${TMP_PATH}/update.zip" -d "${TMP_PATH}/update"; then
|
||||
cp -rf "${TMP_PATH}/update"/* "/mnt"
|
||||
rm -rf "${TMP_PATH}/update"
|
||||
rm -f "${TMP_PATH}/update.zip"
|
||||
fi
|
||||
if [ "$(cat "${PART1_PATH}/ARC-VERSION")" = "${TAG}" ]; then
|
||||
if unzip -oq "${TMP_PATH}/update.zip" -d "/mnt"; then
|
||||
dialog --backtitle "$(backtitle)" --title "Update Loader" \
|
||||
--infobox "Update Loader successful!" 3 50
|
||||
--infobox "Update successful!" 3 50
|
||||
sleep 2
|
||||
else
|
||||
if [ "${ARCMODE}" = "update" ]; then
|
||||
@@ -79,16 +72,16 @@ function updateLoader() {
|
||||
[ -n "${ARCCONF}" ] && cp -f "${TMP_PATH}/bak.yml" "${S_FILE}"
|
||||
if [ "${ARCMODE}" = "update" ] && [ "${CONFDONE}" = "true" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Update Loader" --aspect 18 \
|
||||
--infobox "Update Loader successful! -> Reboot to automated Build Mode..." 3 60
|
||||
--infobox "Update successful! -> Reboot to automated Build Mode..." 3 60
|
||||
sleep 3
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
rebootTo automated
|
||||
rebootTo "automated"
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "Update Loader" --aspect 18 \
|
||||
--infobox "Update Loader successful! -> Reboot to Config Mode..." 3 50
|
||||
--infobox "Update successful! -> Reboot to Config Mode..." 3 50
|
||||
sleep 3
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
rebootTo config
|
||||
rebootTo "config"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -109,22 +102,21 @@ function updateAddons() {
|
||||
export URL="https://github.com/AuxXxilium/arc-addons/releases/download/${TAG}/addons-${TAG}.zip"
|
||||
export TAG="${TAG}"
|
||||
{
|
||||
{
|
||||
curl -kL "${URL}" -o ${TMP_PATH}/addons.zip 2>&3 3>&-
|
||||
} 3>&1 >&4 4>&- |
|
||||
curl -kL "$URL" -o ${TMP_PATH}/addons.zip 2>&1 |
|
||||
perl -C -lane '
|
||||
BEGIN {$header = "Downloading $ENV{URL}...\n\n"; $| = 1}
|
||||
$pcent = $F[0];
|
||||
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
|
||||
s/ /\xa0/g; # replacing space with nbsp as dialog squashes spaces
|
||||
if ($. <= 3) {
|
||||
$header .= "$_\n";
|
||||
$/ = "\r" if $. == 2
|
||||
} else {
|
||||
print "XXX\n$pcent\n$header$_\nXXX"
|
||||
}' 4>&- |
|
||||
dialog --gauge "Download Addons: ${TAG}..." 14 72 4>&-
|
||||
} 4>&1
|
||||
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
|
||||
$pcent = $F[0];
|
||||
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
|
||||
s/ /\xa0/g;
|
||||
if ($. <= 3) {
|
||||
$header .= "$_\n";
|
||||
$/ = "\r" if $. = 2
|
||||
} else {
|
||||
print "XXX\n$pcent\n$header$_\nXXX"
|
||||
}' |
|
||||
dialog --backtitle "$(backtitle)" --title "Update Addons" \
|
||||
--gauge "Download Addons: $TAG ..." 14 72
|
||||
}
|
||||
if [ -f "${TMP_PATH}/addons.zip" ]; then
|
||||
rm -rf "${ADDONS_PATH}"
|
||||
mkdir -p "${ADDONS_PATH}"
|
||||
@@ -140,7 +132,7 @@ function updateAddons() {
|
||||
rm -f "${F}"
|
||||
done
|
||||
dialog --backtitle "$(backtitle)" --title "Update Addons" \
|
||||
--infobox "Update Addons successful!" 3 50
|
||||
--infobox "Update successful!" 3 50
|
||||
sleep 2
|
||||
else
|
||||
return 1
|
||||
@@ -169,22 +161,21 @@ function updatePatches() {
|
||||
export URL="https://github.com/AuxXxilium/arc-patches/releases/download/${TAG}/patches-${TAG}.zip"
|
||||
export TAG="${TAG}"
|
||||
{
|
||||
{
|
||||
curl -kL "${URL}" -o ${TMP_PATH}/patches.zip 2>&3 3>&-
|
||||
} 3>&1 >&4 4>&- |
|
||||
curl -kL "$URL" -o ${TMP_PATH}/patches.zip 2>&1 |
|
||||
perl -C -lane '
|
||||
BEGIN {$header = "Downloading $ENV{URL}...\n\n"; $| = 1}
|
||||
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
|
||||
$pcent = $F[0];
|
||||
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
|
||||
s/ /\xa0/g; # replacing space with nbsp as dialog squashes spaces
|
||||
s/ /\xa0/g;
|
||||
if ($. <= 3) {
|
||||
$header .= "$_\n";
|
||||
$/ = "\r" if $. == 2
|
||||
$/ = "\r" if $. = 2
|
||||
} else {
|
||||
print "XXX\n$pcent\n$header$_\nXXX"
|
||||
}' 4>&- |
|
||||
dialog --gauge "Download Patches: ${TAG}..." 14 72 4>&-
|
||||
} 4>&1
|
||||
}' |
|
||||
dialog --backtitle "$(backtitle)" --title "Update Patches" \
|
||||
--gauge "Download Patches: $TAG ..." 14 72
|
||||
}
|
||||
if [ -f "${TMP_PATH}/patches.zip" ]; then
|
||||
rm -rf "${PATCH_PATH}"
|
||||
mkdir -p "${PATCH_PATH}"
|
||||
@@ -193,7 +184,7 @@ function updatePatches() {
|
||||
if unzip -oq "${TMP_PATH}/patches.zip" -d "${PATCH_PATH}"; then
|
||||
rm -f "${TMP_PATH}/patches.zip"
|
||||
dialog --backtitle "$(backtitle)" --title "Update Patches" \
|
||||
--infobox "Update Patches successful!" 3 50
|
||||
--infobox "Update successful!" 3 50
|
||||
sleep 2
|
||||
else
|
||||
return 1
|
||||
@@ -222,22 +213,21 @@ function updateCustom() {
|
||||
export URL="https://github.com/AuxXxilium/arc-custom/releases/download/${TAG}/custom-${TAG}.zip"
|
||||
export TAG="${TAG}"
|
||||
{
|
||||
{
|
||||
curl -kL "${URL}" -o ${TMP_PATH}/custom.zip 2>&3 3>&-
|
||||
} 3>&1 >&4 4>&- |
|
||||
curl -kL "$URL" -o ${TMP_PATH}/custom.zip 2>&1 |
|
||||
perl -C -lane '
|
||||
BEGIN {$header = "Downloading $ENV{URL}...\n\n"; $| = 1}
|
||||
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
|
||||
$pcent = $F[0];
|
||||
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
|
||||
s/ /\xa0/g; # replacing space with nbsp as dialog squashes spaces
|
||||
s/ /\xa0/g;
|
||||
if ($. <= 3) {
|
||||
$header .= "$_\n";
|
||||
$/ = "\r" if $. == 2
|
||||
$/ = "\r" if $. = 2
|
||||
} else {
|
||||
print "XXX\n$pcent\n$header$_\nXXX"
|
||||
}' 4>&- |
|
||||
dialog --gauge "Download Custom: ${TAG}..." 14 72 4>&-
|
||||
} 4>&1
|
||||
}' |
|
||||
dialog --backtitle "$(backtitle)" --title "Update Custom Kernel" \
|
||||
--gauge "Download Custom Kernel: $TAG ..." 14 72
|
||||
}
|
||||
if [ -f "${TMP_PATH}/custom.zip" ]; then
|
||||
rm -rf "${CUSTOM_PATH}"
|
||||
mkdir -p "${CUSTOM_PATH}"
|
||||
@@ -246,7 +236,7 @@ function updateCustom() {
|
||||
if unzip -oq "${TMP_PATH}/custom.zip" -d "${CUSTOM_PATH}"; then
|
||||
rm -f "${TMP_PATH}/custom.zip"
|
||||
dialog --backtitle "$(backtitle)" --title "Update Custom Kernel" \
|
||||
--infobox "Update Custom successful!" 3 50
|
||||
--infobox "Update successful!" 3 50
|
||||
sleep 2
|
||||
else
|
||||
return 1
|
||||
@@ -281,29 +271,28 @@ function updateModules() {
|
||||
export URL="https://github.com/AuxXxilium/arc-modules/releases/download/${TAG}/modules-${TAG}.zip"
|
||||
export TAG="${TAG}"
|
||||
{
|
||||
{
|
||||
curl -kL "${URL}" -o ${TMP_PATH}/modules.zip 2>&3 3>&-
|
||||
} 3>&1 >&4 4>&- |
|
||||
curl -kL "$URL" -o ${TMP_PATH}/modules.zip 2>&1 |
|
||||
perl -C -lane '
|
||||
BEGIN {$header = "Downloading $ENV{URL}...\n\n"; $| = 1}
|
||||
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
|
||||
$pcent = $F[0];
|
||||
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
|
||||
s/ /\xa0/g; # replacing space with nbsp as dialog squashes spaces
|
||||
s/ /\xa0/g;
|
||||
if ($. <= 3) {
|
||||
$header .= "$_\n";
|
||||
$/ = "\r" if $. == 2
|
||||
$/ = "\r" if $. = 2
|
||||
} else {
|
||||
print "XXX\n$pcent\n$header$_\nXXX"
|
||||
}' 4>&- |
|
||||
dialog --gauge "Download Modules: ${TAG}..." 14 72 4>&-
|
||||
} 4>&1
|
||||
}' |
|
||||
dialog --backtitle "$(backtitle)" --title "Update Modules" \
|
||||
--gauge "Download Modules: $TAG ..." 14 72
|
||||
}
|
||||
if [ -f "${TMP_PATH}/modules.zip" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Update Modules" \
|
||||
--infobox "Updating Modules..." 3 50
|
||||
if unzip -oq "${TMP_PATH}/modules.zip" -d "${MODULES_PATH}"; then
|
||||
rm -f "${TMP_PATH}/modules.zip"
|
||||
dialog --backtitle "$(backtitle)" --title "Update Modules" \
|
||||
--infobox "Update Modules successful!" 3 50
|
||||
--infobox "Update successful!" 3 50
|
||||
sleep 2
|
||||
else
|
||||
return 1
|
||||
@@ -349,22 +338,21 @@ function updateConfigs() {
|
||||
export URL="https://github.com/AuxXxilium/arc-configs/releases/download/${TAG}/configs-${TAG}.zip"
|
||||
export TAG="${TAG}"
|
||||
{
|
||||
{
|
||||
curl -kL "${URL}" -o ${TMP_PATH}/configs.zip 2>&3 3>&-
|
||||
} 3>&1 >&4 4>&- |
|
||||
curl -kL "$URL" -o ${TMP_PATH}/configs.zip 2>&1 |
|
||||
perl -C -lane '
|
||||
BEGIN {$header = "Downloading $ENV{URL}...\n\n"; $| = 1}
|
||||
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
|
||||
$pcent = $F[0];
|
||||
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
|
||||
s/ /\xa0/g; # replacing space with nbsp as dialog squashes spaces
|
||||
s/ /\xa0/g;
|
||||
if ($. <= 3) {
|
||||
$header .= "$_\n";
|
||||
$/ = "\r" if $. == 2
|
||||
$/ = "\r" if $. = 2
|
||||
} else {
|
||||
print "XXX\n$pcent\n$header$_\nXXX"
|
||||
}' 4>&- |
|
||||
dialog --gauge "Download Configs: ${TAG}..." 14 72 4>&-
|
||||
} 4>&1
|
||||
}' |
|
||||
dialog --backtitle "$(backtitle)" --title "Update Configs" \
|
||||
--gauge "Download Configs: $TAG ..." 14 72
|
||||
}
|
||||
if [ -f "${TMP_PATH}/configs.zip" ]; then
|
||||
mkdir -p "${MODEL_CONFIG_PATH}"
|
||||
dialog --backtitle "$(backtitle)" --title "Update Configs" \
|
||||
@@ -372,7 +360,7 @@ function updateConfigs() {
|
||||
if unzip -oq "${TMP_PATH}/configs.zip" -d "${MODEL_CONFIG_PATH}"; then
|
||||
rm -f "${TMP_PATH}/configs.zip"
|
||||
dialog --backtitle "$(backtitle)" --title "Update Configs" \
|
||||
--infobox "Update Configs successful!" 3 50
|
||||
--infobox "Update successful!" 3 50
|
||||
sleep 2
|
||||
[ -n "${USERID}" ] && checkHardwareID || true
|
||||
else
|
||||
@@ -406,22 +394,21 @@ function updateLKMs() {
|
||||
export URL="https://github.com/AuxXxilium/arc-lkm/releases/download/${TAG}/rp-lkms.zip"
|
||||
export TAG="${TAG}"
|
||||
{
|
||||
{
|
||||
curl -kL "${URL}" -o ${TMP_PATH}/rp-lkms.zip 2>&3 3>&-
|
||||
} 3>&1 >&4 4>&- |
|
||||
curl -kL "$URL" -o ${TMP_PATH}/rp-lkms.zip 2>&1 |
|
||||
perl -C -lane '
|
||||
BEGIN {$header = "Downloading $ENV{URL}...\n\n"; $| = 1}
|
||||
BEGIN {$header = "Downloading $ENV{TAG}...\n\n"; $| = 1}
|
||||
$pcent = $F[0];
|
||||
$_ = join "", unpack("x3 a7 x4 a9 x8 a9 x7 a*") if length > 20;
|
||||
s/ /\xa0/g; # replacing space with nbsp as dialog squashes spaces
|
||||
s/ /\xa0/g;
|
||||
if ($. <= 3) {
|
||||
$header .= "$_\n";
|
||||
$/ = "\r" if $. == 2
|
||||
$/ = "\r" if $. = 2
|
||||
} else {
|
||||
print "XXX\n$pcent\n$header$_\nXXX"
|
||||
}' 4>&- |
|
||||
dialog --gauge "Download LKMs: ${TAG}..." 14 72 4>&-
|
||||
} 4>&1
|
||||
}' |
|
||||
dialog --backtitle "$(backtitle)" --title "Update LKMs" \
|
||||
--gauge "Download LKMs: $TAG ..." 14 72
|
||||
}
|
||||
if [ -f "${TMP_PATH}/rp-lkms.zip" ]; then
|
||||
rm -rf "${LKMS_PATH}"
|
||||
mkdir -p "${LKMS_PATH}"
|
||||
@@ -430,7 +417,7 @@ function updateLKMs() {
|
||||
if unzip -oq "${TMP_PATH}/rp-lkms.zip" -d "${LKMS_PATH}"; then
|
||||
rm -f "${TMP_PATH}/rp-lkms.zip"
|
||||
dialog --backtitle "$(backtitle)" --title "Update LKMs" \
|
||||
--infobox "Update LKMs successful!" 3 50
|
||||
--infobox "Update successful!" 3 50
|
||||
sleep 2
|
||||
else
|
||||
return 1
|
||||
@@ -476,11 +463,11 @@ function dependenciesUpdate() {
|
||||
[ $? -ne 0 ] && FAILED="true"
|
||||
if [ "${FAILED}" = "true" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Update Dependencies" --aspect 18 \
|
||||
--infobox "Update Dependencies failed! Try again later." 3 40
|
||||
--infobox "Update failed! Try again later." 3 40
|
||||
sleep 3
|
||||
elif [ "${FAILED}" = "false" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Update Dependencies" --aspect 18 \
|
||||
--infobox "Update Dependencies successful!" 3 40
|
||||
--infobox "Update successful!" 3 40
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
sleep 3
|
||||
|
||||
@@ -9,7 +9,9 @@ set -e
|
||||
[ -z "${LOADER_DISK}" ] && die "Loader Disk not found!"
|
||||
checkBootLoader || die "The loader is corrupted, please rewrite it!"
|
||||
BUS=$(getBus "${LOADER_DISK}")
|
||||
EFI=$([ -d /sys/firmware/efi ] && echo 1 || echo 0)
|
||||
|
||||
# Check if machine has EFI
|
||||
[ -d /sys/firmware/efi ] && EFI=1 || EFI=0
|
||||
|
||||
# Print Title centralized
|
||||
clear
|
||||
@@ -38,15 +40,11 @@ initConfigKey "arc.confdone" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.dynamic" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.offline" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "arc.version" "${ARC_VERSION}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "bootscreen" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "bootscreen.dsminfo" "true" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "bootscreen.systeminfo" "true" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "bootscreen.diskinfo" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "bootscreen.hwidinfo" "false" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "bootscreen.dsmlogo" "true" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "boot" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "boot.dsminfo" "true" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "boot.systeminfo" "true" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "boot.dsmlogo" "true" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "bootipwait" "30" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "device" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "directboot" "false" "${USER_CONFIG_FILE}"
|
||||
@@ -97,27 +95,27 @@ if arrayExistItem "sortnetif:" $(readConfigMap "addons" "${USER_CONFIG_FILE}");
|
||||
_sort_netif "$(readConfigKey "addons.sortnetif" "${USER_CONFIG_FILE}")"
|
||||
fi
|
||||
# Read/Write IP/Mac to config
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
for N in ${ETHX}; do
|
||||
MACR="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g' | tr '[:upper:]' '[:lower:]')"
|
||||
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${IPR}" ] && [ "1" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then
|
||||
IFS='/' read -r -a IPRA <<<"${IPR}"
|
||||
ip addr flush dev "${N}"
|
||||
ip addr add "${IPRA[0]}/${IPRA[1]:-"255.255.255.0"}" dev "${N}"
|
||||
if [ -n "${IPRA[2]}" ]; then
|
||||
ip route add default via "${IPRA[2]}" dev "${N}"
|
||||
fi
|
||||
if [ -n "${IPRA[3]:-${IPRA[2]}}" ]; then
|
||||
sed -i "/nameserver ${IPRA[3]:-${IPRA[2]}}/d" /etc/resolv.conf
|
||||
echo "nameserver ${IPRA[3]:-${IPRA[2]}}" >>/etc/resolv.conf
|
||||
fi
|
||||
sleep 1
|
||||
ETHX=$(ip -o link show | awk -F': ' '{print $2}' | grep eth)
|
||||
for N in ${ETHX}; do
|
||||
MACR="$(cat /sys/class/net/${N}/address 2>/dev/null | sed 's/://g' | tr '[:lower:]' '[:upper:]')"
|
||||
IPR="$(readConfigKey "network.${MACR}" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${IPR}" ] && [ "1" = "$(cat /sys/class/net/${N}/carrier 2>/dev/null)" ]; then
|
||||
IFS='/' read -r -a IPRA <<<"${IPR}"
|
||||
ip addr flush dev ${N}
|
||||
ip addr add ${IPRA[0]}/${IPRA[1]:-"255.255.255.0"} dev ${N}
|
||||
if [ -n "${IPRA[2]}" ]; then
|
||||
ip route add default via ${IPRA[2]} dev ${N}
|
||||
fi
|
||||
[ "${N::3}" = "eth" ] && ethtool -s "${N}" wol g 2>/dev/null || true
|
||||
# [ "${N::3}" = "eth" ] && ethtool -K ${N} rxhash off 2>/dev/null || true
|
||||
initConfigKey "${N}" "${MACR}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
if [ -n "${IPRA[3]:-${IPRA[2]}}" ]; then
|
||||
sed -i "/nameserver ${IPRA[3]:-${IPRA[2]}}/d" /etc/resolv.conf
|
||||
echo "nameserver ${IPRA[3]:-${IPRA[2]}}" >>/etc/resolv.conf
|
||||
fi
|
||||
sleep 1
|
||||
fi
|
||||
[ "${N::3}" = "eth" ] && ethtool -s ${N} wol g 2>/dev/null || true
|
||||
# [ "${N::3}" = "eth" ] && ethtool -K ${N} rxhash off 2>/dev/null || true
|
||||
initConfigKey "${N}" "${MACR}" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
ETHN=$(echo ${ETHX} | wc -w)
|
||||
writeConfigKey "device.nic" "${ETHN}" "${USER_CONFIG_FILE}"
|
||||
# No network devices
|
||||
@@ -156,7 +154,11 @@ elif [ "${ARCMODE}" = "update" ]; then
|
||||
echo -e "\033[1;34mStarting Update Mode...\033[0m"
|
||||
elif [ "${BUILDDONE}" = "true" ] && [ "${ARCMODE}" = "dsm" ]; then
|
||||
echo -e "\033[1;34mStarting DSM Mode...\033[0m"
|
||||
exec boot.sh && exit 0
|
||||
if [ -f "${ARC_PATH}/boot.sh" ]; then
|
||||
exec boot.sh && exit 0
|
||||
else
|
||||
echo -e "\033[1;31mError: Can't find Arc System Files...\033[0m"
|
||||
fi
|
||||
else
|
||||
echo -e "\033[1;34mStarting Config Mode...\033[0m"
|
||||
fi
|
||||
@@ -177,8 +179,8 @@ for N in ${ETHX}; do
|
||||
echo -e "\r${DRIVER}: \033[1;37mNOT CONNECTED\033[0m"
|
||||
break
|
||||
fi
|
||||
COUNT=$((COUNT + 1))
|
||||
IP="$(getIP "${N}")"
|
||||
COUNT=$((${COUNT} + 1))
|
||||
IP="$(getIP ${N})"
|
||||
if [ -n "${IP}" ]; then
|
||||
SPEED=$(ethtool ${N} 2>/dev/null | grep "Speed:" | awk '{print $2}')
|
||||
if [[ "${IP}" =~ ^169\.254\..* ]]; then
|
||||
@@ -210,9 +212,6 @@ mkdir -p "${MODULES_PATH}"
|
||||
mkdir -p "${PATCH_PATH}"
|
||||
mkdir -p "${USER_UP_PATH}"
|
||||
|
||||
# Tell webterminal that the loader is ready
|
||||
touch "${HOME}/.initialized"
|
||||
|
||||
# Load Arc Overlay
|
||||
echo -e "\033[1;34mLoading Arc Overlay...\033[0m"
|
||||
echo
|
||||
@@ -223,7 +222,7 @@ RAM=$(awk '/MemTotal:/ {printf "%.0f", $2 / 1024}' /proc/meminfo 2>/dev/null)
|
||||
if [ ${RAM} -le 3500 ]; then
|
||||
echo -e "\033[1;31mYou have less than 4GB of RAM, if errors occur in loader creation, please increase the amount of RAM.\033[0m\n\033[1;31mUse arc.sh to proceed. Not recommended!\033[0m"
|
||||
else
|
||||
exec arc.sh
|
||||
arc.sh
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Binary file not shown.
@@ -93,21 +93,21 @@ while IFS=': ' read -r KEY VALUE; do
|
||||
done < <(readConfigMap "modules" "${USER_CONFIG_FILE}")
|
||||
|
||||
# Patches (diff -Naru OLDFILE NEWFILE > xxx.patch)
|
||||
PATCHS=(
|
||||
"ramdisk-etc-rc-*.patch"
|
||||
"ramdisk-init-script-*.patch"
|
||||
"ramdisk-post-init-script-*.patch"
|
||||
"ramdisk-disable-root-pwd-*.patch"
|
||||
"ramdisk-disable-disabled-ports-*.patch"
|
||||
)
|
||||
for PE in "${PATCHS[@]}"; do
|
||||
PATCHES=()
|
||||
PATCHES+=("ramdisk-etc-rc-*.patch")
|
||||
PATCHES+=("ramdisk-init-script-*.patch")
|
||||
PATCHES+=("ramdisk-post-init-script-*.patch")
|
||||
PATCHES+=("ramdisk-disable-root-pwd-*.patch")
|
||||
PATCHES+=("ramdisk-disable-disabled-ports-*.patch")
|
||||
for PE in ${PATCHES[@]}; do
|
||||
RET=1
|
||||
echo "Patching with ${PE}" >"${LOG_FILE}"
|
||||
# ${PE} contains *, so double quotes cannot be added
|
||||
for PF in $(ls ${PATCH_PATH}/${PE} 2>/dev/null); do
|
||||
echo "Patching with ${PF}" >>"${LOG_FILE}"
|
||||
# busybox patch and gun patch have different processing methods and parameters.
|
||||
(cd "${RAMDISK_PATH}" && busybox patch -p1 -i "${PF}") >>"${LOG_FILE}" 2>&1
|
||||
(
|
||||
cd "${RAMDISK_PATH}"
|
||||
busybox patch -p1 -i "${PF}" >>"${LOG_FILE}" 2>&1 # busybox patch and gun patch have different processing methods and parameters.
|
||||
)
|
||||
RET=$?
|
||||
[ ${RET} -eq 0 ] && break
|
||||
done
|
||||
@@ -128,17 +128,13 @@ done
|
||||
grep -v -e '^[\t ]*#' -e '^$' "${PATCH_PATH}/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"
|
||||
rm -f "${TMP_PATH}/rp.txt"
|
||||
|
||||
# Generate synoinfo configurations
|
||||
{
|
||||
echo "_set_conf_kv 'SN' '${SN}' '/tmpRoot/etc/synoinfo.conf'"
|
||||
echo "_set_conf_kv 'SN' '${SN}' '/tmpRoot/etc.defaults/synoinfo.conf'"
|
||||
for KEY in "${!SYNOINFO[@]}"; do
|
||||
echo "_set_conf_kv '${KEY}' '${SYNOINFO[${KEY}]}' '/tmpRoot/etc/synoinfo.conf'"
|
||||
echo "_set_conf_kv '${KEY}' '${SYNOINFO[${KEY}]}' '/tmpRoot/etc.defaults/synoinfo.conf'"
|
||||
done
|
||||
} >"${TMP_PATH}/rp.txt"
|
||||
|
||||
touch "${TMP_PATH}/rp.txt"
|
||||
echo "_set_conf_kv 'SN' '${SN}' '/tmpRoot/etc/synoinfo.conf'" >>"${TMP_PATH}/rp.txt"
|
||||
echo "_set_conf_kv 'SN' '${SN}' '/tmpRoot/etc.defaults/synoinfo.conf'" >>"${TMP_PATH}/rp.txt"
|
||||
for KEY in ${!SYNOINFO[@]}; do
|
||||
echo "_set_conf_kv '${KEY}' '${SYNOINFO[${KEY}]}' '/tmpRoot/etc/synoinfo.conf'" >>"${TMP_PATH}/rp.txt"
|
||||
echo "_set_conf_kv '${KEY}' '${SYNOINFO[${KEY}]}' '/tmpRoot/etc.defaults/synoinfo.conf'" >>"${TMP_PATH}/rp.txt"
|
||||
done
|
||||
sed -e "/@@@CONFIG-GENERATED@@@/ {" -e "r ${TMP_PATH}/rp.txt" -e 'd' -e '}' -i "${RAMDISK_PATH}/sbin/init.post"
|
||||
rm -f "${TMP_PATH}/rp.txt"
|
||||
|
||||
@@ -153,22 +149,20 @@ gzip -dc "${LKMS_PATH}/rp-${PLATFORM}-${KVERP}-${LKM}.ko.gz" >"${RAMDISK_PATH}/u
|
||||
# Addons
|
||||
echo "Create addons.sh" >"${LOG_FILE}"
|
||||
mkdir -p "${RAMDISK_PATH}/addons"
|
||||
{
|
||||
echo "#!/bin/sh"
|
||||
echo 'echo "addons.sh called with params ${@}"'
|
||||
echo "export LOADERLABEL=\"ARC\""
|
||||
echo "export LOADERVERSION=\"${ARC_VERSION}\""
|
||||
echo "export LOADERBUILD=\"${ARC_BUILD}\""
|
||||
echo "export LOADERBRANCH=\"${ARCBRANCH}\""
|
||||
echo "export PLATFORM=\"${PLATFORM}\""
|
||||
echo "export MODEL=\"${MODEL}\""
|
||||
echo "export MODELID=\"${MODELID}\""
|
||||
echo "export PRODUCTVER=\"${PRODUCTVER}\""
|
||||
echo "export MLINK=\"${PAT_URL}\""
|
||||
echo "export MCHECKSUM=\"${PAT_HASH}\""
|
||||
echo "export LAYOUT=\"${LAYOUT:-qwerty}\""
|
||||
echo "export KEYMAP=\"${KEYMAP:-en}\""
|
||||
} >"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "#!/bin/sh" >"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo 'echo "addons.sh called with params ${@}"' >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LOADERLABEL=\"ARC\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LOADERVERSION=\"${ARC_VERSION}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LOADERBUILD=\"${ARC_BUILD}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LOADERBRANCH=\"${ARCBRANCH}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export PLATFORM=\"${PLATFORM}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export PRODUCTVER=\"${PRODUCTVER}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export MODEL=\"${MODEL}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export MODELID=\"${MODELID}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export MLINK=\"${PAT_URL}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export MCHECKSUM=\"${PAT_HASH}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export LAYOUT=\"${LAYOUT}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
echo "export KEYMAP=\"${KEYMAP}\"" >>"${RAMDISK_PATH}/addons/addons.sh"
|
||||
chmod +x "${RAMDISK_PATH}/addons/addons.sh"
|
||||
|
||||
# System Addons
|
||||
|
||||
@@ -3,89 +3,72 @@
|
||||
|
||||
[[ -z "${ARC_PATH}" || ! -d "${ARC_PATH}/include" ]] && ARC_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" 2>/dev/null && pwd)"
|
||||
|
||||
calculate_run_size() {
|
||||
NUM='\([0-9a-fA-F]*[ \t]*\)'
|
||||
OUT=$(sed -n 's/^[ \t0-9]*.b[sr][sk][ \t]*'"${NUM}${NUM}${NUM}${NUM}"'.*/0x\1 0x\4/p')
|
||||
. ${ARC_PATH}/include/functions.sh
|
||||
|
||||
if [ -z "${OUT}" ]; then
|
||||
echo "Never found .bss or .brk file offset" >&2
|
||||
return 1
|
||||
fi
|
||||
|
||||
read -r sizeA offsetA sizeB offsetB <<<$(echo ${OUT} | awk '{printf "%d %d %d %d", strtonum($1), strtonum($2), strtonum($3), strtonum($4)}')
|
||||
|
||||
runSize=$((offsetA + sizeA + sizeB))
|
||||
|
||||
# BFD linker shows the same file offset in ELF.
|
||||
if [ "${offsetA}" -ne "${offsetB}" ]; then
|
||||
# Gold linker shows them as consecutive.
|
||||
endSize=$((offsetB + sizeB))
|
||||
if [ "${endSize}" -ne "${runSize}" ]; then
|
||||
printf "sizeA: 0x%x\n" ${sizeA} >&2
|
||||
printf "offsetA: 0x%x\n" ${offsetA} >&2
|
||||
printf "sizeB: 0x%x\n" ${sizeB} >&2
|
||||
printf "offsetB: 0x%x\n" ${offsetB} >&2
|
||||
echo ".bss and .brk are non-contiguous" >&2
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
printf "%d\n" ${runSize}
|
||||
return 0
|
||||
}
|
||||
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
|
||||
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
|
||||
|
||||
# Adapted from: scripts/Makefile.lib
|
||||
# Usage: size_append FILE [FILE2] [FILEn]...
|
||||
# Output: LE HEX with size of file in bytes (to STDOUT)
|
||||
file_size_le() {
|
||||
printf $(
|
||||
local dec_size=0
|
||||
for F in "$@"; do dec_size=$((dec_size + $(stat -c "%s" "${F}"))); done
|
||||
printf "%08x\n" "${dec_size}" | sed 's/\(..\)/\1 /g' | {
|
||||
read -r ch0 ch1 ch2 ch3
|
||||
for ch in "${ch3}" "${ch2}" "${ch1}" "${ch0}"; do printf '%s%03o' '\' "$((0x${ch}))"; done
|
||||
dec_size=0
|
||||
for F in "${@}"; do
|
||||
fsize=$(stat -c "%s" ${F})
|
||||
dec_size=$((${dec_size} + ${fsize}))
|
||||
done
|
||||
printf "%08x\n" ${dec_size} |
|
||||
sed 's/\(..\)/\1 /g' | {
|
||||
read ch0 ch1 ch2 ch3
|
||||
for ch in ${ch3} ${ch2} ${ch1} ${ch0}; do
|
||||
printf '%s%03o' '\' $((0x${ch}))
|
||||
done
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
size_le() {
|
||||
printf $(
|
||||
printf "%08x\n" "${@}" | sed 's/\(..\)/\1 /g' | {
|
||||
read -r ch0 ch1 ch2 ch3
|
||||
for ch in "${ch3}" "${ch2}" "${ch1}" "${ch0}"; do printf '%s%03o' '\' "$((0x${ch}))"; done
|
||||
printf "%08x\n" "${@}" |
|
||||
sed 's/\(..\)/\1 /g' | {
|
||||
read ch0 ch1 ch2 ch3
|
||||
for ch in ${ch3} ${ch2} ${ch1} ${ch0}; do
|
||||
printf '%s%03o' '\' $((0x${ch}))
|
||||
done
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
VMLINUX_MOD=${1}
|
||||
ZIMAGE_MOD=${2}
|
||||
|
||||
KVER=$(strings "${VMLINUX_MOD}" | grep -Eo "Linux version [0-9]+\.[0-9]+\.[0-9]+" | head -1 | awk '{print $3}')
|
||||
if [ "$(echo "${KVER:-4}" | cut -d'.' -f1)" -lt 5 ]; then
|
||||
KVER_MAJOR=${KVER:0:1}
|
||||
if [ ${KVER_MAJOR} -eq 4 ]; then
|
||||
# Kernel version 4.x or 3.x (bromolow)
|
||||
# zImage_head 16494
|
||||
# payload(
|
||||
# vmlinux.bin x
|
||||
# padding 0xf00000-x
|
||||
# vmlinux.bin size 4
|
||||
# ) 0xf00004
|
||||
# zImage_tail(
|
||||
# unknown 72
|
||||
# run_size 4
|
||||
# unknown 30
|
||||
# vmlinux.bin size 4
|
||||
# unknown 114460
|
||||
# ) 114570
|
||||
# crc32 4
|
||||
#zImage_head 16494
|
||||
#payload(
|
||||
# vmlinux.bin x
|
||||
# padding 0xf00000-x
|
||||
# vmlinux.bin size 4
|
||||
#) 0xf00004
|
||||
#zImage_tail(
|
||||
# unknown 72
|
||||
# run_size 4
|
||||
# unknown 30
|
||||
# vmlinux.bin size 4
|
||||
# unknown 114460
|
||||
#) 114570
|
||||
#crc32 4
|
||||
gzip -dc "${ARC_PATH}/bzImage-template-v4.gz" >"${ZIMAGE_MOD}" || exit 1
|
||||
|
||||
dd if="${VMLINUX_MOD}" of="${ZIMAGE_MOD}" bs=16494 seek=1 conv=notrunc || exit 1
|
||||
file_size_le "${VMLINUX_MOD}" | dd of="${ZIMAGE_MOD}" bs=15745134 seek=1 conv=notrunc || exit 1
|
||||
file_size_le "${VMLINUX_MOD}" | dd of="${ZIMAGE_MOD}" bs=15745244 seek=1 conv=notrunc || exit 1
|
||||
|
||||
RUN_SIZE=$(objdump -h "${VMLINUX_MOD}" | calc_run_size)
|
||||
size_le "${RUN_SIZE}" | dd of="${ZIMAGE_MOD}" bs=15745210 seek=1 conv=notrunc || exit 1
|
||||
size_le "$((16#$(crc32 "${ZIMAGE_MOD}" | awk '{print $1}') ^ 0xFFFFFFFF))" | dd of="${ZIMAGE_MOD}" conv=notrunc oflag=append || exit 1
|
||||
RUN_SIZE=$(objdump -h ${VMLINUX_MOD} | sh "${ARC_PATH}/calc_run_size.sh")
|
||||
size_le ${RUN_SIZE} | dd of=${ZIMAGE_MOD} bs=15745210 seek=1 conv=notrunc|| exit 1
|
||||
size_le $(($((16#$(crc32 "${ZIMAGE_MOD}" | awk '{print $1}'))) ^ 0xFFFFFFFF)) | dd of="${ZIMAGE_MOD}" conv=notrunc oflag=append || exit 1
|
||||
else
|
||||
# Kernel version 5.x
|
||||
gzip -dc "${ARC_PATH}/bzImage-template-v5.gz" >"${ZIMAGE_MOD}" || exit 1
|
||||
@@ -93,7 +76,7 @@ else
|
||||
dd if="${VMLINUX_MOD}" of="${ZIMAGE_MOD}" bs=14561 seek=1 conv=notrunc || exit 1
|
||||
file_size_le "${VMLINUX_MOD}" | dd of="${ZIMAGE_MOD}" bs=34463421 seek=1 conv=notrunc || exit 1
|
||||
file_size_le "${VMLINUX_MOD}" | dd of="${ZIMAGE_MOD}" bs=34479132 seek=1 conv=notrunc || exit 1
|
||||
# RUN_SIZE=$(objdump -h "${VMLINUX_MOD}" | calc_run_size)
|
||||
# size_le "${RUN_SIZE}" | dd of="${ZIMAGE_MOD}" bs=34626904 seek=1 conv=notrunc || exit 1
|
||||
size_le "$((16#$(crc32 "${ZIMAGE_MOD}" | awk '{print $1}') ^ 0xFFFFFFFF))" | dd of="${ZIMAGE_MOD}" conv=notrunc oflag=append || exit 1
|
||||
# RUN_SIZE=$(objdump -h ${VMLINUX_MOD} | sh "${ARC_PATH}/calc_run_size.sh")
|
||||
# size_le ${RUN_SIZE} | dd of=${ZIMAGE_MOD} bs=34626904 seek=1 conv=notrunc || exit 1
|
||||
size_le $(($((16#$(crc32 "${ZIMAGE_MOD}" | awk '{print $1}'))) ^ 0xFFFFFFFF)) | dd of="${ZIMAGE_MOD}" conv=notrunc oflag=append || exit 1
|
||||
fi
|
||||
@@ -1,14 +1,27 @@
|
||||
insmod search
|
||||
insmod echo
|
||||
insmod terminal
|
||||
insmod test
|
||||
insmod font
|
||||
insmod loadenv
|
||||
insmod serial
|
||||
insmod usb_keyboard
|
||||
insmod linux
|
||||
insmod gzio
|
||||
insmod fat
|
||||
insmod ext2
|
||||
insmod ata
|
||||
insmod btrfs
|
||||
insmod part_msdos
|
||||
insmod part_gpt
|
||||
|
||||
set default="boot"
|
||||
set timeout="5"
|
||||
set timeout_style="menu"
|
||||
set pager=1
|
||||
set vesa_mode=1
|
||||
set menu_color_normal=white/black
|
||||
set menu_color_highlight=white/red
|
||||
set color_normal=white/black
|
||||
|
||||
if [ -s ${prefix}/grubenv ]; then
|
||||
load_env --skip-sig
|
||||
if [ -s $prefix/grubenv ]; then
|
||||
load_env
|
||||
fi
|
||||
if [ "${next_entry}" ]; then
|
||||
set default="${next_entry}"
|
||||
@@ -19,29 +32,26 @@ if [ "${vesa_mode}" ]; then
|
||||
set vesa_mode=${vesa_mode}
|
||||
fi
|
||||
|
||||
terminal_input console
|
||||
terminal_output console
|
||||
|
||||
if [ "${feature_all_video_module}" = "y" ]; then
|
||||
insmod all_video
|
||||
else
|
||||
insmod efi_gop
|
||||
insmod efi_uga
|
||||
insmod vbe
|
||||
insmod vga
|
||||
insmod video_bochs
|
||||
insmod video_cirrus
|
||||
fi
|
||||
function load_video {
|
||||
if [ x$feature_all_video_module = xy ]; then
|
||||
insmod all_video
|
||||
else
|
||||
insmod efi_gop
|
||||
insmod efi_uga
|
||||
insmod ieee1275_fb
|
||||
insmod vbe
|
||||
insmod vga
|
||||
insmod video_bochs
|
||||
insmod video_cirrus
|
||||
fi
|
||||
}
|
||||
|
||||
load_video
|
||||
if loadfont unicode; then
|
||||
insmod gfxterm
|
||||
set gfxmode=auto
|
||||
set gfxmode=1024x768
|
||||
set gfxpayload=auto
|
||||
if [ "${grub_platform}" = "efi" ]; then
|
||||
terminal_output --append gfxterm
|
||||
else
|
||||
terminal_output gfxterm
|
||||
fi
|
||||
terminal_output gfxterm
|
||||
insmod gfxmenu
|
||||
loadfont ${prefix}/theme/dejavu_bold_14.pf2
|
||||
loadfont ${prefix}/theme/dejavu_mono_12.pf2
|
||||
@@ -50,9 +60,9 @@ if loadfont unicode; then
|
||||
export theme
|
||||
fi
|
||||
|
||||
if serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1; then
|
||||
terminal_input --append serial
|
||||
terminal_output --append serial
|
||||
if serial --unit=0 --speed=115200; then
|
||||
terminal_input --append serial_com0
|
||||
terminal_output --append serial_com0
|
||||
fi
|
||||
|
||||
function set_gfxpayload {
|
||||
@@ -63,7 +73,11 @@ function set_gfxpayload {
|
||||
fi
|
||||
}
|
||||
|
||||
set ARC_CMDLINE="earlyprintk earlycon=uart8250,io,0x3f8,115200n8 console=ttyS0,115200n8 root=/dev/ram rootwait intremap=off net.ifnames=0 panic=5 split_lock_detect=off pcie_aspm=off nox2apic nomodeset intel_pstate=disable"
|
||||
set menu_color_normal=white/black
|
||||
set menu_color_highlight=white/red
|
||||
set color_normal=white/black
|
||||
|
||||
set ARC_CMDLINE="earlyprintk earlycon=uart8250,io,0x3f8,115200n8 console=ttyS0,115200n8 root=/dev/ram rootwait nointremap net.ifnames=0 panic=5 split_lock_detect=off pcie_aspm=off intel_pstate=disable"
|
||||
|
||||
search --set=root --label "ARC3"
|
||||
if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
|
||||
|
||||
BIN
files/p3/extractor/libcurl.so.4
Executable file
BIN
files/p3/extractor/libcurl.so.4
Executable file
Binary file not shown.
BIN
files/p3/extractor/libmbedcrypto.so.5
Executable file
BIN
files/p3/extractor/libmbedcrypto.so.5
Executable file
Binary file not shown.
BIN
files/p3/extractor/libmbedtls.so.13
Executable file
BIN
files/p3/extractor/libmbedtls.so.13
Executable file
Binary file not shown.
BIN
files/p3/extractor/libmbedx509.so.1
Executable file
BIN
files/p3/extractor/libmbedx509.so.1
Executable file
Binary file not shown.
BIN
files/p3/extractor/libmsgpackc.so.2
Executable file
BIN
files/p3/extractor/libmsgpackc.so.2
Executable file
Binary file not shown.
BIN
files/p3/extractor/libsodium.so
Executable file
BIN
files/p3/extractor/libsodium.so
Executable file
Binary file not shown.
BIN
files/p3/extractor/libsynocodesign-ng-virtual-junior-wins.so.7
Executable file
BIN
files/p3/extractor/libsynocodesign-ng-virtual-junior-wins.so.7
Executable file
Binary file not shown.
BIN
files/p3/extractor/syno_extract_system_patch
Executable file
BIN
files/p3/extractor/syno_extract_system_patch
Executable file
Binary file not shown.
13
img-gen-n.sh
13
img-gen-n.sh
@@ -37,21 +37,16 @@ sudo mount ${LOOPX}p1 "/tmp/p1"
|
||||
sudo mount ${LOOPX}p3 "/tmp/p3"
|
||||
|
||||
ARC_BUILD="`date +'%y%m%d'`"
|
||||
ARC_VERSION="13.3.7"
|
||||
ARC_VERSION="13.37.dev"
|
||||
ARC_BRANCH="next"
|
||||
echo "${ARC_BUILD}" >files/p1/ARC-BUILD
|
||||
echo "${ARC_VERSION}" >files/p1/ARC-VERSION
|
||||
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH
|
||||
|
||||
echo "Repack initrd"
|
||||
if [ -f "brx/bzImage-arc" ] && [ -f "brx/initrd-arc" ]; then
|
||||
cp -f "brx/bzImage-arc" "files/p3/bzImage-arc"
|
||||
repackInitrd "brx/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
else
|
||||
sudo umount "/tmp/p1"
|
||||
sudo umount "/tmp/p3"
|
||||
exit 1
|
||||
fi
|
||||
cp -f "brx/bzImage-arc" "files/p3/bzImage-arc"
|
||||
[[ ! -f "brx/bzImage-arc" || ! -f "brx/initrd-arc" ]] && exit 1
|
||||
repackInitrd "brx/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
|
||||
echo "Copying files"
|
||||
sudo cp -rf "files/p1/"* "/tmp/p1"
|
||||
|
||||
13
img-gen-s.sh
13
img-gen-s.sh
@@ -36,21 +36,16 @@ sudo mount ${LOOPX}p1 "/tmp/p1"
|
||||
sudo mount ${LOOPX}p3 "/tmp/p3"
|
||||
|
||||
ARC_BUILD="`date +'%y%m%d'`"
|
||||
ARC_VERSION="13.3.7"
|
||||
ARC_VERSION="13.37.dev"
|
||||
ARC_BRANCH="stable"
|
||||
echo "${ARC_BUILD}" >files/p1/ARC-BUILD
|
||||
echo "${ARC_VERSION}" >files/p1/ARC-VERSION
|
||||
echo "${ARC_BRANCH}" >files/p1/ARC-BRANCH
|
||||
|
||||
echo "Repack initrd"
|
||||
if [ -f "brs/bzImage-arc" ] && [ -f "brs/initrd-arc" ]; then
|
||||
cp -f "brs/bzImage-arc" "files/p3/bzImage-arc"
|
||||
repackInitrd "brs/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
else
|
||||
sudo umount "/tmp/p1"
|
||||
sudo umount "/tmp/p3"
|
||||
exit 1
|
||||
fi
|
||||
cp -f "brs/bzImage-arc" "files/p3/bzImage-arc"
|
||||
[[ ! -f "brs/bzImage-arc" || ! -f "brs/initrd-arc" ]] && exit 1
|
||||
repackInitrd "brs/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
|
||||
echo "Copying files"
|
||||
sudo cp -rf "files/p1/"* "/tmp/p1"
|
||||
|
||||
BIN
kpatch/kpatch
Executable file
BIN
kpatch/kpatch
Executable file
Binary file not shown.
@@ -489,4 +489,4 @@ int main(int argc, char *argv[])
|
||||
close(fd);
|
||||
printf("Finish!\n");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
205
scripts/func.sh
205
scripts/func.sh
@@ -183,7 +183,7 @@ function getBuildrootx() {
|
||||
while read -r ID NAME; do
|
||||
if [ "${NAME}" = "buildroot-${TAG}.zip" ]; then
|
||||
curl -kL -H "Authorization: token ${TOKEN}" -H "Accept: application/octet-stream" "https://api.github.com/repos/AuxXxilium/arc-buildroot-x/releases/assets/${ID}" -o "${DEST_PATH}/brx.zip"
|
||||
echo "Buildroot-X: ${TAG}"
|
||||
echo "Buildroot: ${TAG}"
|
||||
unzip -o "${DEST_PATH}/brx.zip" -d "${DEST_PATH}"
|
||||
mv -f "${DEST_PATH}/bzImage" "${DEST_PATH}/bzImage-arc"
|
||||
mv -f "${DEST_PATH}/rootfs.cpio.zst" "${DEST_PATH}/initrd-arc"
|
||||
@@ -206,7 +206,7 @@ function getBuildroots() {
|
||||
while read -r ID NAME; do
|
||||
if [ "${NAME}" = "buildroot-${TAG}.zip" ]; then
|
||||
curl -kL -H "Authorization: token ${TOKEN}" -H "Accept: application/octet-stream" "https://api.github.com/repos/AuxXxilium/arc-buildroot-s/releases/assets/${ID}" -o "${DEST_PATH}/brs.zip"
|
||||
echo "Buildroot-S: ${TAG}"
|
||||
echo "Buildroot: ${TAG}"
|
||||
unzip -o "${DEST_PATH}/brs.zip" -d "${DEST_PATH}"
|
||||
mv -f "${DEST_PATH}/bzImage" "${DEST_PATH}/bzImage-arc"
|
||||
mv -f "${DEST_PATH}/rootfs.cpio.zst" "${DEST_PATH}/initrd-arc"
|
||||
@@ -232,49 +232,52 @@ function getOffline() {
|
||||
}
|
||||
|
||||
# repack initrd
|
||||
# $1 initrd file
|
||||
# $1 initrd file
|
||||
# $2 plugin path
|
||||
# $3 output file
|
||||
function repackInitrd() {
|
||||
local INITRD_FILE="${1}"
|
||||
local PLUGIN_PATH="${2}"
|
||||
local OUTPUT_PATH="${3:-${INITRD_FILE}}"
|
||||
INITRD_FILE="${1}"
|
||||
PLUGIN_PATH="${2}"
|
||||
OUTPUT_PATH="${3:-${INITRD_FILE}}"
|
||||
|
||||
[ -z "${INITRD_FILE}" ] || [ ! -f "${INITRD_FILE}" ] && exit 1
|
||||
[ -z "${PLUGIN_PATH}" ] || [ ! -d "${PLUGIN_PATH}" ] && exit 1
|
||||
|
||||
INITRD_FILE="$(readlink -f "${INITRD_FILE}")"
|
||||
PLUGIN_PATH="$(readlink -f "${PLUGIN_PATH}")"
|
||||
OUTPUT_PATH="$(readlink -f "${OUTPUT_PATH}")"
|
||||
|
||||
INITRD_FILE="$(realpath "${INITRD_FILE}")"
|
||||
PLUGIN_PATH="$(realpath "${PLUGIN_PATH}")"
|
||||
OUTPUT_PATH="$(realpath "${OUTPUT_PATH}")"
|
||||
|
||||
local RDXZ_PATH="rdxz_tmp"
|
||||
RDXZ_PATH="rdxz_tmp"
|
||||
mkdir -p "${RDXZ_PATH}"
|
||||
local INITRD_FORMAT=$(file -b --mime-type "${INITRD_FILE}")
|
||||
|
||||
case "${INITRD_FORMAT}" in
|
||||
*'x-cpio'*) (cd "${RDXZ_PATH}" && sudo cpio -idm <"${INITRD_FILE}") >/dev/null 2>&1 ;;
|
||||
*'x-xz'*) (cd "${RDXZ_PATH}" && xz -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'x-lz4'*) (cd "${RDXZ_PATH}" && lz4 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'x-lzma'*) (cd "${RDXZ_PATH}" && lzma -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'x-bzip2'*) (cd "${RDXZ_PATH}" && bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'gzip'*) (cd "${RDXZ_PATH}" && gzip -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*'zstd'*) (cd "${RDXZ_PATH}" && zstd -dc "${INITRD_FILE}" | sudo cpio -idm) >/dev/null 2>&1 ;;
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
(
|
||||
cd "${RDXZ_PATH}"
|
||||
case "${INITRD_FORMAT}" in
|
||||
*'x-cpio'*) sudo cpio -idm <"${INITRD_FILE}" ;;
|
||||
*'x-xz'*) xz -dc "${INITRD_FILE}" | sudo cpio -idm ;;
|
||||
*'x-lz4'*) lz4 -dc "${INITRD_FILE}" | sudo cpio -idm ;;
|
||||
*'x-lzma'*) lzma -dc "${INITRD_FILE}" | sudo cpio -idm ;;
|
||||
*'x-bzip2'*) bzip2 -dc "${INITRD_FILE}" | sudo cpio -idm ;;
|
||||
*'gzip'*) gzip -dc "${INITRD_FILE}" | sudo cpio -idm ;;
|
||||
*'zstd'*) zstd -dc "${INITRD_FILE}" | sudo cpio -idm ;;
|
||||
*) ;;
|
||||
esac
|
||||
) || true
|
||||
sudo cp -rf "${PLUGIN_PATH}/"* "${RDXZ_PATH}/"
|
||||
[ -f "${OUTPUT_PATH}" ] && rm -rf "${OUTPUT_PATH}"
|
||||
|
||||
case "${INITRD_FORMAT}" in
|
||||
*'x-cpio'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
|
||||
*'x-xz'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | xz -9 -C crc32 -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
|
||||
*'x-lz4'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | lz4 -9 -l -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
|
||||
*'x-lzma'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | lzma -9 -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
|
||||
*'x-bzip2'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | bzip2 -9 -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
|
||||
*'gzip'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | gzip -9 -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
|
||||
*'zstd'*) (cd "${RDXZ_PATH}" && sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | zstd -19 -T0 -f -c - >"${OUTPUT_PATH}") >/dev/null 2>&1 ;;
|
||||
*) ;;
|
||||
esac
|
||||
(
|
||||
cd "${RDXZ_PATH}"
|
||||
case "${INITRD_FORMAT}" in
|
||||
*'x-cpio'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root >"${OUTPUT_PATH}" ;;
|
||||
*'x-xz'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | xz -9 -C crc32 -c - >"${OUTPUT_PATH}" ;;
|
||||
*'x-lz4'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | lz4 -9 -l -c - >"${OUTPUT_PATH}" ;;
|
||||
*'x-lzma'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | lzma -9 -c - >"${OUTPUT_PATH}" ;;
|
||||
*'x-bzip2'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | bzip2 -9 -c - >"${OUTPUT_PATH}" ;;
|
||||
*'gzip'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | gzip -9 -c - >"${OUTPUT_PATH}" ;;
|
||||
*'zstd'*) sudo find . 2>/dev/null | sudo cpio -o -H newc -R root:root | zstd -19 -T0 -f -c - >"${OUTPUT_PATH}" ;;
|
||||
*) ;;
|
||||
esac
|
||||
) || true
|
||||
sudo rm -rf "${RDXZ_PATH}"
|
||||
}
|
||||
|
||||
@@ -290,8 +293,8 @@ function resizeImg() {
|
||||
[[ -z "${INPUT_FILE}" || ! -f "${INPUT_FILE}" ]] && exit 1
|
||||
[ -z "${CHANGE_SIZE}" ] && exit 1
|
||||
|
||||
INPUT_FILE="$(realpath "${INPUT_FILE}")"
|
||||
OUTPUT_FILE="$(realpath "${OUTPUT_FILE}")"
|
||||
INPUT_FILE="$(readlink -f "${INPUT_FILE}")"
|
||||
OUTPUT_FILE="$(readlink -f "${OUTPUT_FILE}")"
|
||||
|
||||
|
||||
SIZE=$(($(du -m "${INPUT_FILE}" | awk '{print $1}')$(echo "${CHANGE_SIZE}" | sed 's/M//g; s/b//g')))
|
||||
@@ -310,28 +313,47 @@ function resizeImg() {
|
||||
sudo losetup -d ${LOOPX}
|
||||
}
|
||||
|
||||
# createvmx
|
||||
# convertova
|
||||
# $1 bootloader file
|
||||
# $2 vmx name
|
||||
function createvmx() {
|
||||
# $2 ova file
|
||||
function convertova() {
|
||||
BLIMAGE=${1}
|
||||
VMNAME=${2}
|
||||
OVAPATH=${2}
|
||||
|
||||
BLIMAGE="$(readlink -f "${BLIMAGE}")"
|
||||
OVAPATH="$(readlink -f "${OVAPATH}")"
|
||||
VMNAME="$(basename "${OVAPATH}" .ova)"
|
||||
|
||||
# Download and install ovftool if it doesn't exist
|
||||
if [ ! -x ovftool/ovftool ]; then
|
||||
rm -rf ovftool ovftool.zip
|
||||
curl -skL https://github.com/rgl/ovftool-binaries/raw/main/archive/VMware-ovftool-4.6.0-21452615-lin.x86_64.zip -o ovftool.zip
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to download ovftool"
|
||||
exit 1
|
||||
fi
|
||||
unzip ovftool.zip -d . >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to extract ovftool"
|
||||
exit 1
|
||||
fi
|
||||
chmod +x ovftool/ovftool
|
||||
fi
|
||||
if ! command -v qemu-img &>/dev/null; then
|
||||
sudo apt install -y qemu-utils
|
||||
fi
|
||||
|
||||
# Convert raw image to VMDK
|
||||
rm -rf "VMX_${VMNAME}"
|
||||
mkdir -p "VMX_${VMNAME}"
|
||||
qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${BLIMAGE}" "VMX_${VMNAME}/${VMNAME}-disk1.vmdk"
|
||||
qemu-img create -f vmdk "VMX_${VMNAME}/${VMNAME}-disk2.vmdk" "32G"
|
||||
rm -rf "OVA_${VMNAME}"
|
||||
mkdir -p "OVA_${VMNAME}"
|
||||
qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${BLIMAGE}" "OVA_${VMNAME}/${VMNAME}-disk1.vmdk"
|
||||
qemu-img create -f vmdk "OVA_${VMNAME}/${VMNAME}-disk2.vmdk" "32G"
|
||||
|
||||
# Create VM configuration
|
||||
cat <<_EOF_ >"VMX_${VMNAME}/${VMNAME}.vmx"
|
||||
cat <<_EOF_ >"OVA_${VMNAME}/${VMNAME}.vmx"
|
||||
.encoding = "UTF-8"
|
||||
config.version = "8"
|
||||
virtualHW.version = "17"
|
||||
virtualHW.version = "21"
|
||||
displayName = "${VMNAME}"
|
||||
annotation = "https://github.com/AuxXxilium/arc"
|
||||
guestOS = "ubuntu-64"
|
||||
@@ -379,101 +401,16 @@ ethernet0.virtualDev = "vmxnet3"
|
||||
ethernet0.connectionType = "nat"
|
||||
ethernet0.allowguestconnectioncontrol = "true"
|
||||
ethernet0.present = "TRUE"
|
||||
serial0.fileType = "file"
|
||||
serial0.fileName = "serial0.log"
|
||||
serial0.present = "TRUE"
|
||||
sata0.present = "TRUE"
|
||||
sata0:0.fileName = "${VMNAME}-disk1.vmdk"
|
||||
sata0:0.present = "TRUE"
|
||||
sata0:1.fileName = "${VMNAME}-disk2.vmdk"
|
||||
sata0:1.present = "TRUE"
|
||||
_EOF_
|
||||
}
|
||||
|
||||
# convertvmx
|
||||
# $1 bootloader file
|
||||
# $2 vmx file
|
||||
function convertvmx() {
|
||||
local BLIMAGE=${1}
|
||||
local VMXPATH=${2}
|
||||
|
||||
BLIMAGE="$(realpath "${BLIMAGE}")"
|
||||
VMXPATH="$(realpath "${VMXPATH}")"
|
||||
local VMNAME="$(basename "${VMXPATH}" .vmx)"
|
||||
|
||||
createvmx "${BLIMAGE}" "${VMNAME}"
|
||||
|
||||
rm -rf "${VMXPATH}"
|
||||
mv -f "VMX_${VMNAME}" "${VMXPATH}"
|
||||
}
|
||||
|
||||
# convertova
|
||||
# $1 bootloader file
|
||||
# $2 ova file
|
||||
function convertova() {
|
||||
local BLIMAGE=${1}
|
||||
local OVAPATH=${2}
|
||||
|
||||
BLIMAGE="$(realpath "${BLIMAGE}")"
|
||||
OVAPATH="$(realpath "${OVAPATH}")"
|
||||
local VMNAME="$(basename "${OVAPATH}" .ova)"
|
||||
|
||||
createvmx "${BLIMAGE}" "${VMNAME}"
|
||||
|
||||
# Download and install ovftool if it doesn't exist
|
||||
if [ ! -x ovftool/ovftool ]; then
|
||||
rm -rf ovftool ovftool.zip
|
||||
curl -skL https://github.com/rgl/ovftool-binaries/raw/main/archive/VMware-ovftool-4.6.0-21452615-lin.x86_64.zip -o ovftool.zip
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to download ovftool"
|
||||
exit 1
|
||||
fi
|
||||
unzip ovftool.zip -d . >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to extract ovftool"
|
||||
exit 1
|
||||
fi
|
||||
chmod +x ovftool/ovftool
|
||||
fi
|
||||
|
||||
rm -f "${OVAPATH}"
|
||||
ovftool/ovftool "VMX_${VMNAME}/${VMNAME}.vmx" "${OVAPATH}"
|
||||
rm -rf "VMX_${VMNAME}"
|
||||
}
|
||||
|
||||
# createvmc
|
||||
# $1 vhd file
|
||||
# $2 vmc file
|
||||
function createvmc() {
|
||||
local BLIMAGE=${1:-arc.vhd}
|
||||
local VMCPATH=${2:-arc.vmc}
|
||||
|
||||
BLIMAGE="$(basename "${BLIMAGE}")"
|
||||
VMCPATH="$(realpath "${VMCPATH}")"
|
||||
|
||||
cat <<_EOF_ >"${VMCPATH}"
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<preferences>
|
||||
<version type="string">2.0</version>
|
||||
<hardware>
|
||||
<memory>
|
||||
<ram_size type="integer">4096</ram_size>
|
||||
</memory>
|
||||
<pci_bus>
|
||||
<ide_adapter>
|
||||
<ide_controller id="0">
|
||||
<location id="0">
|
||||
<drive_type type="integer">1</drive_type>
|
||||
<pathname>
|
||||
<relative type="string">${BLIMAGE}</relative>
|
||||
</pathname>
|
||||
</location>
|
||||
</ide_controller>
|
||||
</ide_adapter>
|
||||
</pci_bus>
|
||||
</hardware>
|
||||
</preferences>
|
||||
_EOF_
|
||||
ovftool/ovftool "OVA_${VMNAME}/${VMNAME}.vmx" "${OVAPATH}"
|
||||
rm -rf "OVA_${VMNAME}"
|
||||
}
|
||||
|
||||
# copy buildroot
|
||||
@@ -483,4 +420,4 @@ function copyBuildroot() {
|
||||
mkdir -p "${DEST_PATH}"
|
||||
cp -f "../${DEST_PATH}/bzImage" "${DEST_PATH}/bzImage-arc"
|
||||
cp -f "../${DEST_PATH}/rootfs.cpio.zst" "${DEST_PATH}/initrd-arc"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user