Compare commits
76 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
700183ff64 | ||
|
|
e9daed7143 | ||
|
|
adba4d3421 | ||
|
|
8a1a314eb5 | ||
|
|
1026800376 | ||
|
|
a800767f0b | ||
|
|
6d07ffcaad | ||
|
|
e8efec928a | ||
|
|
af62a307e5 | ||
|
|
21630d6e33 | ||
|
|
738a16514d | ||
|
|
6debfe73b8 | ||
|
|
ce7ea49481 | ||
|
|
7a6197f04d | ||
|
|
491c15ec63 | ||
|
|
3b94661c90 | ||
|
|
e9463d990e | ||
|
|
90cc4520d8 | ||
|
|
4cf4efffbe | ||
|
|
071ae09e1b | ||
|
|
21b0f768f1 | ||
|
|
fe774756c0 | ||
|
|
6ab4bf3a5a | ||
|
|
0a7db3b4bb | ||
|
|
9849dc2ecc | ||
|
|
b82c840e04 | ||
|
|
d762884775 | ||
|
|
33e0149dbf | ||
|
|
f742fc599a | ||
|
|
3a98b86d33 | ||
|
|
09ee2325b3 | ||
|
|
8354251917 | ||
|
|
08111df903 | ||
|
|
d9cd6ded90 | ||
|
|
8935cb0ac5 | ||
|
|
9eb611b388 | ||
|
|
6a198d8930 | ||
|
|
712b5a5cb9 | ||
|
|
8e10997fd5 | ||
|
|
ee35d426b3 | ||
|
|
8676e9e349 | ||
|
|
efbd445a79 | ||
|
|
f23935e6c9 | ||
|
|
edc87953a5 | ||
|
|
3cfc706a74 | ||
|
|
231eebd18b | ||
|
|
73d75f1769 | ||
|
|
7bec0cc7f4 | ||
|
|
1de80457ad | ||
|
|
d53d7ac473 | ||
|
|
60b1579628 | ||
|
|
5d344ed6a9 | ||
|
|
8ae235c6bd | ||
|
|
a6be08228b | ||
|
|
d08e73e999 | ||
|
|
33dab8b349 | ||
|
|
9ba63a0c17 | ||
|
|
b0a626303b | ||
|
|
96afe6dd29 | ||
|
|
1c71b690c4 | ||
|
|
dc51577bbb | ||
|
|
34b3b1d14c | ||
|
|
d092bf87c8 | ||
|
|
8c322ba04b | ||
|
|
c1dd12c611 | ||
|
|
6b2d4e720a | ||
|
|
2f9031e3fb | ||
|
|
df325c5f5e | ||
|
|
a1055d68be | ||
|
|
6b2fc8b0a5 | ||
|
|
10b0d1c64f | ||
|
|
2fdb4a5e69 | ||
|
|
8f4cb31962 | ||
|
|
3b62345e5a | ||
|
|
f564167e9d | ||
|
|
67e3d5c0f8 |
9
.github/workflows/autobuild.yml
vendored
9
.github/workflows/autobuild.yml
vendored
@@ -68,8 +68,6 @@ jobs:
|
||||
getOffline "files/p3/configs"
|
||||
getLKMs "files/p3/lkms"
|
||||
getTheme "files/p1/boot/grub"
|
||||
getBuildrootx "brx"
|
||||
getBuildroots "brs"
|
||||
|
||||
# Export Dependencies Version to env
|
||||
echo "ADDONTAG=${ADDONTAG}" >> $GITHUB_ENV
|
||||
@@ -91,6 +89,8 @@ jobs:
|
||||
run: |
|
||||
. scripts/func.sh
|
||||
|
||||
getBuildrootx "brx"
|
||||
|
||||
# Modify Source File
|
||||
ARC_BUILD="`date +'%y%m%d'`"
|
||||
ARC_VERSION="${{ inputs.version }}-dev"
|
||||
@@ -120,6 +120,7 @@ jobs:
|
||||
|
||||
echo "Repack initrd"
|
||||
cp -f "brx/bzImage-arc" "files/p3/bzImage-arc"
|
||||
createArc
|
||||
repackInitrd "brx/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
|
||||
echo "Copying files"
|
||||
@@ -169,6 +170,8 @@ jobs:
|
||||
run: |
|
||||
. scripts/func.sh
|
||||
|
||||
getBuildroots "brs"
|
||||
|
||||
# Modify Source File
|
||||
ARC_BUILD="`date +'%y%m%d'`"
|
||||
ARC_VERSION="${{ inputs.version }}-dev"
|
||||
@@ -198,7 +201,7 @@ jobs:
|
||||
|
||||
echo "Repack initrd"
|
||||
cp -f "brs/bzImage-arc" "files/p3/bzImage-arc"
|
||||
#cp -f "brs/initrd-arc" "files/p3/initrd-arc"
|
||||
createArc
|
||||
repackInitrd "brs/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
|
||||
echo "Copying files"
|
||||
|
||||
28
.github/workflows/build.yml
vendored
28
.github/workflows/build.yml
vendored
@@ -53,7 +53,7 @@ jobs:
|
||||
uses: actions/checkout@main
|
||||
|
||||
- name: Delete releases and workflows runs
|
||||
if: ${{ inputs.clean == true }}
|
||||
if: ${{ inputs.clean }}
|
||||
uses: ophub/delete-releases-workflows@main
|
||||
with:
|
||||
delete_releases: true
|
||||
@@ -96,6 +96,7 @@ jobs:
|
||||
getTheme "files/p1/boot/grub"
|
||||
getBuildrootx "brx"
|
||||
getBuildroots "brs"
|
||||
cp -f "files/initrd/opt/arc/grub.img.gz" "grub.img.gz"
|
||||
|
||||
# Export Dependencies Version to env
|
||||
echo "ADDONTAG=${ADDONTAG}" >> $GITHUB_ENV
|
||||
@@ -113,7 +114,7 @@ jobs:
|
||||
|
||||
# Build incremental
|
||||
- name: Build Next Image
|
||||
if: ${{ inputs.next == true }}
|
||||
if: ${{ inputs.next }}
|
||||
run: |
|
||||
. scripts/func.sh
|
||||
|
||||
@@ -130,6 +131,7 @@ jobs:
|
||||
|
||||
echo "Create Arc Image"
|
||||
IMAGE_FILE="arc.img"
|
||||
cp -f "grub.img.gz" "files/initrd/opt/arc/grub.img.gz"
|
||||
gzip -dc "files/initrd/opt/arc/grub.img.gz" >"${IMAGE_FILE}"
|
||||
fdisk -l "${IMAGE_FILE}"
|
||||
|
||||
@@ -146,6 +148,7 @@ jobs:
|
||||
|
||||
echo "Repack initrd"
|
||||
cp -f "brx/bzImage-arc" "files/p3/bzImage-arc"
|
||||
createArc
|
||||
repackInitrd "brx/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
|
||||
echo "Copying files"
|
||||
@@ -174,7 +177,7 @@ jobs:
|
||||
|
||||
# Zip image and generate checksum
|
||||
- name: Pack Next Image
|
||||
if: ${{ inputs.next == true }}
|
||||
if: ${{ inputs.next }}
|
||||
run: |
|
||||
if [ -n "${{ env.ARC_VERSION }}" ]; then
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
|
||||
@@ -183,6 +186,7 @@ jobs:
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhd.zip" arc.vhd arc.vmc
|
||||
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)
|
||||
sha256sum update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip >"update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.hash"
|
||||
fi
|
||||
|
||||
# Cleanup
|
||||
@@ -192,7 +196,7 @@ jobs:
|
||||
|
||||
# Build incremental
|
||||
- name: Build Stable Image
|
||||
if: ${{ inputs.stable == true }}
|
||||
if: ${{ inputs.stable }}
|
||||
run: |
|
||||
. scripts/func.sh
|
||||
|
||||
@@ -209,6 +213,7 @@ jobs:
|
||||
|
||||
echo "Create Arc Image"
|
||||
IMAGE_FILE="arc.img"
|
||||
cp -f "grub.img.gz" "files/initrd/opt/arc/grub.img.gz"
|
||||
gzip -dc "files/initrd/opt/arc/grub.img.gz" >"${IMAGE_FILE}"
|
||||
fdisk -l "${IMAGE_FILE}"
|
||||
|
||||
@@ -225,7 +230,7 @@ jobs:
|
||||
|
||||
echo "Repack initrd"
|
||||
cp -f "brs/bzImage-arc" "files/p3/bzImage-arc"
|
||||
#cp -f "brs/initrd-arc" "files/p3/initrd-arc"
|
||||
createArc
|
||||
repackInitrd "brs/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
|
||||
echo "Copying files"
|
||||
@@ -254,7 +259,7 @@ jobs:
|
||||
|
||||
# Zip image and generate checksum
|
||||
- name: Pack Stable Image
|
||||
if: ${{ inputs.stable == true }}
|
||||
if: ${{ inputs.stable }}
|
||||
run: |
|
||||
if [ -n "${{ env.ARC_VERSION }}" ]; then
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.img.zip" arc.img
|
||||
@@ -263,6 +268,7 @@ jobs:
|
||||
zip -9 "arc-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.vhd.zip" arc.vhd arc.vmc
|
||||
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)
|
||||
sha256sum update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.zip >"update-${{ env.ARC_VERSION }}-${{ env.ARC_BRANCH }}.hash"
|
||||
fi
|
||||
|
||||
# Publish a release if is a tag
|
||||
@@ -279,12 +285,12 @@ jobs:
|
||||
- ${{ inputs.notice }}
|
||||
|
||||
### Information:
|
||||
- Full Changelog is available in my Discord
|
||||
- Changelog is available in my Discord
|
||||
- Discord Account for Arc Patch needed
|
||||
|
||||
### Versions:
|
||||
- stable: Stable Image (Full Image, all dependencies are included, less hardware support)
|
||||
- next: Next Image (Full Image, all dependencies are included, more hardware support, new features to test)
|
||||
${{ inputs.stable && '- Stable: Full Image, all dependencies are included, reduced hardware support (if there is a Next image)' || '' }}
|
||||
${{ inputs.next && '- Next: Full Image, all dependencies are included, more hardware support, new features to test' || '' }}
|
||||
|
||||
### Dependencies:
|
||||
- Addons: ${{ env.ADDONTAG }}
|
||||
@@ -293,8 +299,8 @@ jobs:
|
||||
- Patches: ${{ env.PATCHTAG }}
|
||||
- Custom: ${{ env.CUSTOMTAG }}
|
||||
- LKMs: ${{ env.LKMTAG }}
|
||||
- Buildroot Stable: ${{ env.BRSTAG }}
|
||||
- Buildroot Next: ${{ env.BRXTAG }}
|
||||
${{ inputs.stable && format('- Buildroot Stable: {0}', env.BRSTAG) || '' }}
|
||||
${{ inputs.next && format('- Buildroot Next: {0}', env.BRXTAG) || '' }}
|
||||
|
||||
### Release
|
||||
- ${{ env.BUILD_TIME }}
|
||||
|
||||
@@ -5,11 +5,13 @@ version: "3"
|
||||
tasks:
|
||||
build-img-n:
|
||||
cmds:
|
||||
- git reset --hard
|
||||
- git pull
|
||||
- ./img-gen-n.sh
|
||||
|
||||
build-img-s:
|
||||
cmds:
|
||||
- git reset --hard
|
||||
- git pull
|
||||
- ./img-gen-s.sh
|
||||
|
||||
|
||||
@@ -94,201 +94,201 @@ function modulesMenu() {
|
||||
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
|
||||
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
|
||||
# Modify KVER for Epyc7002
|
||||
[ "${PLATFORM}" = "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
|
||||
# menu loop
|
||||
# loop menu
|
||||
while true; do
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" --cancel-label "Exit" --menu "Choose an Option" 0 0 0 \
|
||||
1 "Show selected Modules" \
|
||||
2 "Select loaded Modules" \
|
||||
3 "Select all Modules" \
|
||||
4 "Deselect all Modules" \
|
||||
5 "Choose Modules" \
|
||||
6 "Add external module" \
|
||||
7 "Edit Modules copied to DSM" \
|
||||
8 "Force-copy loaded Modules to DSM" \
|
||||
9 "Blacklist Modules to prevent loading in DSM" \
|
||||
2>"${TMP_PATH}/resp"
|
||||
rm -f "${TMP_PATH}/menu"
|
||||
{
|
||||
echo "1 \"Show/Select Modules\""
|
||||
echo "2 \"Select loaded Modules\""
|
||||
echo "3 \"Upload a external Module\""
|
||||
echo "4 \"Deselect i915 with dependencies\""
|
||||
echo "5 \"Edit Modules that need to be copied to DSM\""
|
||||
echo "6 \"Blacklist Modules to prevent loading\""
|
||||
} >"${TMP_PATH}/menu"
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--cancel-label "Exit" --menu "Choose an option" 0 0 0 --file "${TMP_PATH}/menu" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && break
|
||||
case "$(cat ${TMP_PATH}/resp)" in
|
||||
1)
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" --aspect 18 \
|
||||
--infobox "Reading modules" 0 0
|
||||
1)
|
||||
while true; do
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--infobox "Reading Modules ..." 3 25
|
||||
ALLMODULES=$(getAllModules "${PLATFORM}" "${KVERP}")
|
||||
unset USERMODULES
|
||||
declare -A USERMODULES
|
||||
while IFS=': ' read -r KEY VALUE; do
|
||||
[ -n "${KEY}" ] && USERMODULES["${KEY}"]="${VALUE}"
|
||||
done < <(readConfigMap "modules" "${USER_CONFIG_FILE}")
|
||||
ITEMS=""
|
||||
for KEY in ${!USERMODULES[@]}; do
|
||||
ITEMS+="${KEY}: ${USERMODULES[$KEY]}\n"
|
||||
done
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--msgbox "${ITEMS}" 0 0
|
||||
;;
|
||||
2)
|
||||
dialog --backtitle "$(backtitle)" --colors --title "Modules" \
|
||||
--infobox "Selecting loaded Modules" 0 0
|
||||
KOLIST=""
|
||||
for I in $(lsmod | awk -F' ' '{print $1}' | grep -v 'Module'); do
|
||||
KOLIST+="$(getdepends "${PLATFORM}" "${KVERP}" "${I}") ${I} "
|
||||
done
|
||||
KOLIST=($(echo ${KOLIST} | tr ' ' '\n' | sort -u))
|
||||
unset USERMODULES
|
||||
declare -A USERMODULES
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
for ID in ${KOLIST[@]}; do
|
||||
USERMODULES["${ID}"]=""
|
||||
writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
3)
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--infobox "Selecting all Modules" 0 0
|
||||
unset USERMODULES
|
||||
declare -A USERMODULES
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
while read -r ID DESC; do
|
||||
USERMODULES["${ID}"]=""
|
||||
writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}"
|
||||
done < <(getAllModules "${PLATFORM}" "${KVERP}")
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
4)
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--infobox "Deselecting all Modules" 0 0
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
unset USERMODULES
|
||||
declare -A USERMODULES
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
5)
|
||||
rm -f "${TMP_PATH}/opts" >/dev/null
|
||||
rm -f "${TMP_PATH}/opts"
|
||||
while read -r ID DESC; do
|
||||
arrayExistItem "${ID}" "${!USERMODULES[@]}" && ACT="on" || ACT="off"
|
||||
echo "${ID} ${DESC} ${ACT}" >>"${TMP_PATH}/opts"
|
||||
done < <(getAllModules "${PLATFORM}" "${KVERP}")
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" --aspect 18 \
|
||||
--checklist "Select Modules to include" 0 0 0 \
|
||||
--file "${TMP_PATH}/opts" 2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && return 1
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
done <<<${ALLMODULES}
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--infobox "Writing to user config" 20 5
|
||||
unset USERMODULES
|
||||
declare -A USERMODULES
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
for ID in ${resp}; do
|
||||
USERMODULES["${ID}"]=""
|
||||
writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
6)
|
||||
MSG=""
|
||||
MSG+="This function is experimental and dangerous. If you don't know much, please exit.\n"
|
||||
MSG+="The imported .ko of this function will be implanted into the corresponding arch's modules package, which will affect all models of the arch.\n"
|
||||
MSG+="This program will not determine the availability of imported modules or even make type judgments, as please double check if it is correct.\n"
|
||||
MSG+="If you want to remove it, please go to the \"Update\" -> \"Update Modules\" to forcibly update the modules. All imports will be reset.\n"
|
||||
MSG+="Do you want to continue?"
|
||||
dialog --backtitle "$(backtitle)" --title "External Modules" \
|
||||
--yesno "${MSG}" 0 0
|
||||
[ $? -ne 0 ] && return
|
||||
TMP_UP_PATH=${TMP_PATH}/users
|
||||
USER_FILE=""
|
||||
rm -rf "${TMP_UP_PATH}" >/dev/null
|
||||
mkdir -p "${TMP_UP_PATH}"
|
||||
dialog --backtitle "$(backtitle)" --title "External Modules" \
|
||||
--ok-label "Proceed" --msgbox "Please upload the *.ko file to /tmp/users.\n- Use SFTP at ${IPCON}:22 User: root PW: arc\n- Use Webclient at http://${IPCON}:7304" 7 50
|
||||
for F in $(ls "${TMP_UP_PATH}" 2>/dev/null); do
|
||||
USER_FILE="${F}"
|
||||
if [ -n "${USER_FILE}" ] && [ "${USER_FILE##*.}" = "ko" ]; then
|
||||
addToModules "${PLATFORM}" "${KVERP}" "${TMP_UP_PATH}/${USER_FILE}"
|
||||
dialog --backtitle "$(backtitle)" --title "External Modules" \
|
||||
--msgbox "Module: ${USER_FILE}\nadded to ${PLATFORM}-${KVERP}" 7 50
|
||||
rm -f "${TMP_UP_PATH}/${USER_FILE}" >/dev/null
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "External Modules" \
|
||||
--msgbox "Not a valid file, please try again!" 7 50
|
||||
fi
|
||||
done
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
7)
|
||||
if [ -f "${USER_UP_PATH}/modulelist" ]; then
|
||||
cp -f "${USER_UP_PATH}/modulelist" "${TMP_PATH}/modulelist.tmp"
|
||||
else
|
||||
cp -f "${ARC_PATH}/include/modulelist" "${TMP_PATH}/modulelist.tmp"
|
||||
fi
|
||||
while true; do
|
||||
dialog --backtitle "$(backtitle)" --title "Edit Modules copied to DSM" \
|
||||
--editbox "${TMP_PATH}/modulelist.tmp" 0 0 2>"${TMP_PATH}/modulelist.user"
|
||||
[ $? -ne 0 ] && return
|
||||
[ ! -d "${USER_UP_PATH}" ] && mkdir -p "${USER_UP_PATH}"
|
||||
mv -f "${TMP_PATH}/modulelist.user" "${USER_UP_PATH}/modulelist"
|
||||
dos2unix "${USER_UP_PATH}/modulelist"
|
||||
--cancel-label "Exit" \
|
||||
--extra-button --extra-label "Select all" \
|
||||
--help-button --help-label "Deselect all" \
|
||||
--checklist "Select Modules to include" 0 0 0 --file "${TMP_PATH}/opts" \
|
||||
2>${TMP_PATH}/resp
|
||||
RET=$?
|
||||
case ${RET} in
|
||||
0)
|
||||
# ok-button
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
mergeConfigModules "$(cat "${TMP_PATH}/resp" 2>/dev/null)" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
break
|
||||
done
|
||||
;;
|
||||
3)
|
||||
# extra-button
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
mergeConfigModules "$(echo "${ALLMODULES}" | awk '{print $1}')" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
2)
|
||||
# help-button
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
1)
|
||||
# cancel-button
|
||||
break
|
||||
;;
|
||||
255)
|
||||
# ESC
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
;;
|
||||
2)
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--infobox "Select loaded modules" 0 0
|
||||
KOLIST=""
|
||||
for I in $(lsmod 2>/dev/null | awk -F' ' '{print $1}' | grep -v 'Module'); do
|
||||
KOLIST+="$(getdepends "${PLATFORM}" "${KVERP}" "${I}") ${I} "
|
||||
done
|
||||
KOLIST=($(echo ${KOLIST} | tr ' ' '\n' | sort -u))
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
for ID in ${KOLIST[@]}; do
|
||||
writeConfigKey "modules.\"${ID}\"" "" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
3)
|
||||
if ! tty 2>/dev/null | grep -q "/dev/pts"; then #if ! tty 2>/dev/null | grep -q "/dev/pts" || [ -z "${SSH_TTY}" ]; then
|
||||
MSG=""
|
||||
MSG+="This feature is only available when accessed via ssh (Requires a terminal that supports ZModem protocol)."
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--msgbox "${MSG}" 0 0
|
||||
return
|
||||
fi
|
||||
MSG=""
|
||||
MSG+="This function is experimental and dangerous. If you don't know much, please exit.\n"
|
||||
MSG+="The imported .ko of this function will be implanted into the corresponding arch's modules package, which will affect all models of the arch.\n"
|
||||
MSG+="This program will not determine the availability of imported modules or even make type judgments, as please double check if it is correct.\n"
|
||||
MSG+="If you want to remove it, please go to the \"Update Menu\" -> \"Update Dependencies\" to forcibly update the modules. All imports will be reset.\n"
|
||||
MSG+="Do you want to continue?"
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--yesno "${MSG}" 0 0
|
||||
[ $? -ne 0 ] && continue
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--msgbox "Please upload the *.ko file." 0 0
|
||||
TMP_UP_PATH=${TMP_PATH}/users
|
||||
USER_FILE=""
|
||||
rm -rf ${TMP_UP_PATH}
|
||||
mkdir -p ${TMP_UP_PATH}
|
||||
pushd ${TMP_UP_PATH}
|
||||
rz -be
|
||||
for F in $(ls -A 2>/dev/null); do
|
||||
USER_FILE=${F}
|
||||
break
|
||||
done
|
||||
popd
|
||||
if [ -n "${USER_FILE}" ] && [ "${USER_FILE##*.}" = "ko" ]; then
|
||||
addToModules ${PLATFORM} "${KVERP}" "${TMP_UP_PATH}/${USER_FILE}"
|
||||
[ -f "${MODULES_PATH}/VERSION" ] && rm -f "${MODULES_PATH}/VERSION"
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--msgbox "$(printf "Module '%s' added to %s-%s" "${USER_FILE}" "${PLATFORM}" "${KVERP}")" 0 0
|
||||
rm -f "${TMP_UP_PATH}/${USER_FILE}"
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
8)
|
||||
if [ -f "${USER_UP_PATH}/modulelist" ]; then
|
||||
cp -f "${USER_UP_PATH}/modulelist" "${TMP_PATH}/modulelist.tmp"
|
||||
else
|
||||
cp -f "${ARC_PATH}/include/modulelist" "${TMP_PATH}/modulelist.tmp"
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--msgbox "Not a valid file, please try again!" 0 0
|
||||
fi
|
||||
;;
|
||||
4)
|
||||
DEPS="$(getdepends "${PLATFORM}" "${KVERP}" i915) i915"
|
||||
DELS=()
|
||||
while IFS=': ' read -r KEY VALUE; do
|
||||
[ -z "${KEY}" ] && continue
|
||||
if echo "${DEPS}" | grep -wq "${KEY}"; then
|
||||
DELS+=("${KEY}")
|
||||
fi
|
||||
echo -e "\n\n# Arc Modules" >>"${TMP_PATH}/modulelist.tmp"
|
||||
KOLIST=""
|
||||
for I in $(lsmod | awk -F' ' '{print $1}' | grep -v 'Module'); do
|
||||
KOLIST+="$(getdepends "${PLATFORM}" "${KVERP}" "${I}") ${I} "
|
||||
done <<<$(readConfigMap "modules" "${USER_CONFIG_FILE}")
|
||||
if [ ${#DELS[@]} -eq 0 ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--msgbox "No i915 with dependencies module to deselect." 0 0
|
||||
else
|
||||
for ID in ${DELS[@]}; do
|
||||
deleteConfigKey "modules.\"${ID}\"" "${USER_CONFIG_FILE}"
|
||||
done
|
||||
KOLIST=($(echo ${KOLIST} | tr ' ' '\n' | sort -u))
|
||||
while read -r ID DESC; do
|
||||
for MOD in ${KOLIST[@]}; do
|
||||
[ "${MOD}" = "${ID}" ] && echo "F ${ID}.ko" >>"${TMP_PATH}/modulelist.tmp"
|
||||
done
|
||||
done < <(getAllModules "${PLATFORM}" "${KVERP}")
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--msgbox "$(printf "Module %s deselected." "${DELS[@]}")" 0 0
|
||||
fi
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
5)
|
||||
if [ -f ${USER_UP_PATH}/modulelist ]; then
|
||||
cp -f "${USER_UP_PATH}/modulelist" "${TMP_PATH}/modulelist.tmp"
|
||||
else
|
||||
cp -f "${ARC_PATH}/include/modulelist" "${TMP_PATH}/modulelist.tmp"
|
||||
fi
|
||||
while true; do
|
||||
dialog --backtitle "$(backtitle)" --title "Edit with caution" \
|
||||
--ok-label "Save" --cancel-label "Exit" \
|
||||
--editbox "${TMP_PATH}/modulelist.tmp" 0 0 2>"${TMP_PATH}/modulelist.user"
|
||||
[ $? -ne 0 ] && break
|
||||
[ ! -d "${USER_UP_PATH}" ] && mkdir -p "${USER_UP_PATH}"
|
||||
mv -f "${TMP_PATH}/modulelist.tmp" "${USER_UP_PATH}/modulelist"
|
||||
mv -f "${TMP_PATH}/modulelist.user" "${USER_UP_PATH}/modulelist"
|
||||
dos2unix "${USER_UP_PATH}/modulelist"
|
||||
dialog --backtitle "$(backtitle)" --title "Loaded Modules Copy" \
|
||||
--msgbox "All loaded Modules will be copied to DSM!" 5 50
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
9)
|
||||
MSG=""
|
||||
MSG+="The blacklist is used to prevent the kernel from loading specific modules.\n"
|
||||
MSG+="The blacklist is a list of module names separated by ','.\n"
|
||||
MSG+="For example: \Z4evbug,cdc_ether\Zn\n"
|
||||
while true; do
|
||||
modblacklist="$(readConfigKey "modblacklist" "${USER_CONFIG_FILE}")"
|
||||
dialog --backtitle "$(backtitle)" --title "Blacklist Modules" \
|
||||
--inputbox "${MSG}" 12 70 "${modblacklist}" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && break
|
||||
VALUE="$(cat "${TMP_PATH}/resp")"
|
||||
if [[ ${VALUE} = *" "* ]]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Blacklist Module" \
|
||||
--yesno "Invalid list, No spaces should appear, retry?" 0 0
|
||||
[ $? -eq 0 ] && continue || break
|
||||
fi
|
||||
writeConfigKey "modblacklist" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
break
|
||||
done
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
break
|
||||
done
|
||||
;;
|
||||
6)
|
||||
# modprobe.blacklist
|
||||
MSG=""
|
||||
MSG+="The blacklist is used to prevent the kernel from loading specific modules.\n"
|
||||
MSG+="The blacklist is a list of module names separated by ','.\n"
|
||||
MSG+="For example: \Z4evbug,cdc_ether\Zn\n"
|
||||
while true; do
|
||||
modblacklist="$(readConfigKey "modblacklist" "${USER_CONFIG_FILE}")"
|
||||
dialog --backtitle "$(backtitle)" --title "Modules" \
|
||||
--inputbox "${MSG}" 12 70 "${modblacklist}" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && break
|
||||
VALUE="$(cat "${TMP_PATH}/resp")"
|
||||
if echo "${VALUE}" | grep -q " "; then
|
||||
dialog --backtitle "$(backtitle)" --title "Modules/Cmdline" \
|
||||
--yesno "Invalid list, No spaces should appear, retry?" 0 0
|
||||
[ $? -eq 0 ] && continue || break
|
||||
fi
|
||||
writeConfigKey "modblacklist" "${VALUE}" "${USER_CONFIG_FILE}"
|
||||
break
|
||||
done
|
||||
;;
|
||||
esac
|
||||
done
|
||||
return
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@@ -496,6 +496,9 @@ function cmdlineMenu() {
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
return
|
||||
@@ -591,6 +594,9 @@ function synoinfoMenu() {
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
return
|
||||
@@ -678,6 +684,9 @@ function sequentialIOMenu() {
|
||||
--msgbox "SequentialIO disabled" 0 0
|
||||
SEQUENTIAL="false"
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
writeConfigKey "addons.sequentialio" "${SEQUENTIAL}" "${USER_CONFIG_FILE}"
|
||||
break
|
||||
@@ -694,8 +703,9 @@ function backupMenu() {
|
||||
NEXT="1"
|
||||
USERID="$(readConfigKey "arc.userid" "${USER_CONFIG_FILE}")"
|
||||
ARCOFFLINE="$(readConfigKey "arc.offline" "${USER_CONFIG_FILE}")"
|
||||
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
|
||||
while true; do
|
||||
if [ -n "${USERID}" ] && [ "${ARCOFFLINE}" != "true" ]; then
|
||||
if [ -n "${USERID}" ] && [ "${ARCOFFLINE}" != "true" ] && [ "${CONFDONE}" = "true" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Backup" --cancel-label "Exit" --menu "Choose an Option" 0 0 0 \
|
||||
1 "Restore Arc Config from DSM" \
|
||||
2 "Restore HW Encryption Key from DSM" \
|
||||
@@ -703,6 +713,13 @@ function backupMenu() {
|
||||
4 "Restore Arc Config from Online" \
|
||||
5 "Backup Arc Config to Online" \
|
||||
2>"${TMP_PATH}/resp"
|
||||
elif [ -n "${USERID}" ] && [ "${ARCOFFLINE}" != "true" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Backup" --cancel-label "Exit" --menu "Choose an Option" 0 0 0 \
|
||||
1 "Restore Arc Config from DSM" \
|
||||
2 "Restore HW Encryption Key from DSM" \
|
||||
3 "Backup HW Encryption Key to DSM" \
|
||||
4 "Restore Arc Config from Online" \
|
||||
2>"${TMP_PATH}/resp"
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "Backup" --cancel-label "Exit" --menu "Choose an Option" 0 0 0 \
|
||||
1 "Restore Arc Config from DSM" \
|
||||
@@ -755,18 +772,16 @@ function backupMenu() {
|
||||
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
|
||||
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
|
||||
[ "${PLATFORM}" = "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
|
||||
fi
|
||||
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}")
|
||||
if [ -n "${PLATFORM}" ] && [ -n "${KVERP}" ]; then
|
||||
writeConfigKey "modules" "{}" "${USER_CONFIG_FILE}"
|
||||
mergeConfigModules "$(getAllModules "${PLATFORM}" "${KVERP}" | awk '{print $1}')" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
dialog --backtitle "$(backtitle)" --title "Restore Arc Config" \
|
||||
--aspect 18 --infobox "Restore successful! -> Reload Arc Init now" 5 50
|
||||
sleep 2
|
||||
exec init.sh
|
||||
rm -f "${HOME}/.initialized" && exec init.sh
|
||||
;;
|
||||
2)
|
||||
DSMROOTS="$(findDSMRoot)"
|
||||
@@ -856,7 +871,7 @@ function backupMenu() {
|
||||
dialog --backtitle "$(backtitle)" --title "Online Restore" \
|
||||
--aspect 18 --infobox "Restore successful! -> Reload Arc Init now" 5 50
|
||||
sleep 2
|
||||
exec init.sh
|
||||
rm -f "${HOME}/.initialized" && exec init.sh
|
||||
;;
|
||||
5)
|
||||
HWID="$(genHWID)"
|
||||
@@ -867,6 +882,9 @@ function backupMenu() {
|
||||
dialog --backtitle "$(backtitle)" --title "Online Backup" --msgbox "Online Backup failed!" 5 40
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
@@ -933,6 +951,9 @@ function updateMenu() {
|
||||
fi
|
||||
writeConfigKey "arc.branch" "${ARC_BRANCH}" "${USER_CONFIG_FILE}"
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
return
|
||||
@@ -975,6 +996,7 @@ function sysinfo() {
|
||||
ETHX=$(ls /sys/class/net/ 2>/dev/null | grep eth) || true
|
||||
ETHN=$(echo ${ETHX} | wc -w)
|
||||
ARC_BRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
|
||||
HWID="$(genHWID)"
|
||||
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
if [ "${CONFDONE}" = "true" ]; then
|
||||
@@ -1069,6 +1091,8 @@ function sysinfo() {
|
||||
TEXT+="\n Subversion: \ZbAddons ${ADDONSVERSION} | Configs ${CONFIGSVERSION} | LKM ${LKMVERSION} | Modules ${MODULESVERSION} | Patches ${PATCHESVERSION}\Zn"
|
||||
TEXT+="\n Config | Build: \Zb${CONFDONE} | ${BUILDDONE}\Zn"
|
||||
TEXT+="\n Config Version: \Zb${CONFIGVER}\Zn"
|
||||
TEXT+="\n HardwareID: \Zb${HWID}\Zn"
|
||||
TEXT+="\n Offline Mode: \Zb${ARCOFFLINE}\Zn"
|
||||
[ "${ARCOFFLINE}" = "true" ] && TEXT+="\n Offline Mode: \Zb${ARCOFFLINE}\Zn"
|
||||
if [ "${CONFDONE}" = "true" ]; then
|
||||
TEXT+="\n\Z4> DSM ${PRODUCTVER} (${BUILDNUM}): ${MODELID:-${MODEL}}\Zn"
|
||||
@@ -1193,24 +1217,20 @@ function sysinfo() {
|
||||
NUMPORTS=$((${NUMPORTS} + ${PORTNUM}))
|
||||
fi
|
||||
TEXT+="\n Total Disks: \Zb${NUMPORTS}\Zn"
|
||||
if [ -n "${USERID}" ]; then
|
||||
if [ -n "${USERID}" ] && [ "${CONFDONE}" = "true" ]; then
|
||||
echo -e "${TEXT}" >"${TMP_PATH}/sysinfo.yml"
|
||||
while true; do
|
||||
dialog --backtitle "$(backtitle)" --colors --ok-label "Exit" --help-button --help-label "Show Cmdline" \
|
||||
--extra-button --extra-label "Upload" --title "Sysinfo" --msgbox "${TEXT}" 0 0
|
||||
RET=$?
|
||||
case ${RET} in
|
||||
0) # ok-button
|
||||
return 0
|
||||
break
|
||||
;;
|
||||
2) # help-button
|
||||
2)
|
||||
getCMDline
|
||||
;;
|
||||
3) # extra-button
|
||||
3)
|
||||
uploadDiag
|
||||
;;
|
||||
255) # ESC-button
|
||||
*)
|
||||
return 0
|
||||
break
|
||||
;;
|
||||
@@ -1222,14 +1242,10 @@ function sysinfo() {
|
||||
--title "Sysinfo" --msgbox "${TEXT}" 0 0
|
||||
RET=$?
|
||||
case ${RET} in
|
||||
0) # ok-button
|
||||
return 0
|
||||
break
|
||||
;;
|
||||
2) # help-button
|
||||
2)
|
||||
getCMDline
|
||||
;;
|
||||
255) # ESC-button
|
||||
*)
|
||||
return 0
|
||||
break
|
||||
;;
|
||||
@@ -1386,7 +1402,7 @@ function staticIPMenu() {
|
||||
2>"${TMP_PATH}/resp"
|
||||
RET=$?
|
||||
case ${RET} in
|
||||
0) # ok-button
|
||||
0)
|
||||
address="$(sed -n '1p' "${TMP_PATH}/resp" 2>/dev/null)"
|
||||
netmask="$(sed -n '2p' "${TMP_PATH}/resp" 2>/dev/null)"
|
||||
gateway="$(sed -n '3p' "${TMP_PATH}/resp" 2>/dev/null)"
|
||||
@@ -1425,10 +1441,10 @@ function staticIPMenu() {
|
||||
--progressbox "Setting IP ..." 20 100
|
||||
break
|
||||
;;
|
||||
1) # cancel-button
|
||||
1)
|
||||
break
|
||||
;;
|
||||
255) # ESC
|
||||
*)
|
||||
break 2
|
||||
;;
|
||||
esac
|
||||
@@ -1658,11 +1674,11 @@ function loaderPassword() {
|
||||
# Change Arc Loader Password
|
||||
function loaderPorts() {
|
||||
MSG="Modify Ports (0-65535) (Leave empty for default):"
|
||||
unset HTTP_PORT DUFS_PORT TTYD_PORT
|
||||
unset HTTPPORT DUFSPORT TTYDPORT
|
||||
[ -f "/etc/arc.conf" ] && source "/etc/arc.conf" 2>/dev/null
|
||||
local HTTP=${HTTP_PORT:-7080}
|
||||
local DUFS=${DUFS_PORT:-7304}
|
||||
local TTYD=${TTYD_PORT:-7681}
|
||||
local HTTP=${HTTPPORT:-8080}
|
||||
local DUFS=${DUFSPORT:-7304}
|
||||
local TTYD=${TTYDPORT:-7681}
|
||||
while true; do
|
||||
dialog --backtitle "$(backtitle)" --title "Loader Ports" \
|
||||
--form "${MSG}" 11 70 3 "HTTP" 1 1 "${HTTPPORT}" 1 10 55 0 "DUFS" 2 1 "${DUFSPORT}" 2 10 55 0 "TTYD" 3 1 "${TTYDPORT}" 3 10 55 0 \
|
||||
@@ -1736,18 +1752,15 @@ function loaderPorts() {
|
||||
--msgbox "${MSG}" 0 0
|
||||
rm -f "${TMP_PATH}/restartS.sh"
|
||||
{
|
||||
[ ! "${HTTP:-8080}" = "${HTTP_PORT:-8080}" ] && echo "/etc/init.d/S90thttpd restart"
|
||||
[ ! "${DUFS:-7304}" = "${DUFS_PORT:-7304}" ] && echo "/etc/init.d/S99dufs restart"
|
||||
[ ! "${TTYD:-7681}" = "${TTYD_PORT:-7681}" ] && echo "/etc/init.d/S99ttyd restart"
|
||||
[ ! "${HTTP:-8080}" = "${HTTPPORT:-8080}" ] && echo "/etc/init.d/S90thttpd restart"
|
||||
[ ! "${DUFS:-7304}" = "${DUFSPORT:-7304}" ] && echo "/etc/init.d/S99dufs restart"
|
||||
[ ! "${TTYD:-7681}" = "${TTYDPORT:-7681}" ] && echo "/etc/init.d/S99ttyd restart"
|
||||
} >"${TMP_PATH}/restartS.sh"
|
||||
chmod +x "${TMP_PATH}/restartS.sh"
|
||||
nohup "${TMP_PATH}/restartS.sh" >/dev/null 2>&1
|
||||
break
|
||||
;;
|
||||
1) # cancel-button
|
||||
break
|
||||
;;
|
||||
255) # ESC
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
@@ -2038,7 +2051,7 @@ function greplogs() {
|
||||
tar -czf "${TMP_PATH}/logs.tar.gz" -C "${TMP_PATH}" logs
|
||||
if [ -z "${SSH_TTY}" ]; then # web
|
||||
mv -f "${TMP_PATH}/logs.tar.gz" "/var/www/data/logs.tar.gz"
|
||||
URL="http://${IPCON}/logs.tar.gz"
|
||||
URL="http://${IPCON}:${HTTPPORT:-8080}/logs.tar.gz"
|
||||
MSG+="Please via ${URL} to download the logs,\nAnd go to Github or Discord to create an issue and upload the logs."
|
||||
else
|
||||
sz -be -B 536870912 "${TMP_PATH}/logs.tar.gz"
|
||||
@@ -2057,9 +2070,9 @@ function getbackup() {
|
||||
rm -f "${TMP_PATH}/dsmconfig.tar.gz" >/dev/null
|
||||
tar -czf "${TMP_PATH}/dsmconfig.tar.gz" -C "${PART1_PATH}" dsmbackup
|
||||
if [ -z "${SSH_TTY}" ]; then # web
|
||||
mv -f "${TMP_PATH}/dsmconfig.tar.gz" "/var/www/data/dsmconfig.tar.gz"
|
||||
cp -f "${TMP_PATH}/dsmconfig.tar.gz" "/var/www/data/dsmconfig.tar.gz"
|
||||
chmod 644 "/var/www/data/dsmconfig.tar.gz"
|
||||
URL="http://${IPCON}/dsmconfig.tar.gz"
|
||||
URL="http://${IPCON}:${HTTPPORT:-8080}/dsmconfig.tar.gz"
|
||||
dialog --backtitle "$(backtitle)" --colors --title "DSM Config" \
|
||||
--msgbox "Please via ${URL}\nto download the dsmconfig and unzip it and back it up in order by file name." 0 0
|
||||
else
|
||||
@@ -2135,7 +2148,7 @@ function rebootMenu() {
|
||||
elif [ "${REDEST}" = "network" ]; then
|
||||
clear
|
||||
/etc/init.d/S41dhcpcd restart
|
||||
exec init.sh
|
||||
rm -f "${HOME}/.initialized" && exec init.sh
|
||||
else
|
||||
rebootTo ${REDEST}
|
||||
exit 0
|
||||
@@ -2194,9 +2207,18 @@ function mountDSM() {
|
||||
umount "${I}" 2>/dev/null
|
||||
mount ${I} "/mnt/DSM/${NAME}" -o ro
|
||||
done
|
||||
MSG="Storage pools are mounted under /mnt/DSM.\nPlease check them via ${IPCON}:7304."
|
||||
MSG="Storage pools are mounted at /mnt/DSM.\nPlease check them via ${IPCON}:7304."
|
||||
dialog --backtitle "$(backtitle)" --title "Mount DSM Pool" \
|
||||
--msgbox "${MSG}" 7 50
|
||||
--msgbox "${MSG}" 6 50
|
||||
if [ -n "${VOLS}" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Mount DSM Pool" \
|
||||
--yesno "Unmount all storage pools?" 5 30
|
||||
[ $? -ne 0 ] && return
|
||||
for I in ${VOLS}; do
|
||||
umount "${I}" 2>/dev/null
|
||||
done
|
||||
rm -rf /mnt/DSM
|
||||
fi
|
||||
return
|
||||
}
|
||||
|
||||
@@ -2248,7 +2270,7 @@ function dtsMenu() {
|
||||
3 "Edit dts file" \
|
||||
2>${TMP_PATH}/resp
|
||||
[ $? -ne 0 ] && break
|
||||
case "$(cat ${TMP_PATH}/resp)" in %) ;;
|
||||
case "$(cat ${TMP_PATH}/resp)" in
|
||||
1)
|
||||
if ! tty 2>/dev/null | grep -q "/dev/pts"; then #if ! tty 2>/dev/null | grep -q "/dev/pts" || [ -z "${SSH_TTY}" ]; then
|
||||
MSG=""
|
||||
@@ -2311,7 +2333,7 @@ function dtsMenu() {
|
||||
dialog --backtitle "$(backtitle)" --title "Edit with caution" \
|
||||
--editbox "${TMP_PATH}/model.dts" 0 0 2>"${TMP_PATH}/modelEdit.dts"
|
||||
[ $? -ne 0 ] && rm -f "${TMP_PATH}/model.dts" "${TMP_PATH}/modelEdit.dts" && return
|
||||
dtc -q -I dts -O dtb "${TMP_PATH}/modelEdit.dts" >"test.dtb" 2>"${DTC_ERRLOG}"
|
||||
dtc -q -I dts -O dtb "${TMP_PATH}/modelEdit.dts}" >"test.dtb" 2>"${DTC_ERRLOG}"
|
||||
if [ $? -ne 0 ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Custom DTS" \
|
||||
--msgbox "Not a valid dts file, please try again!\n\n$(cat "${DTC_ERRLOG}")" 0 0
|
||||
@@ -2325,6 +2347,9 @@ function dtsMenu() {
|
||||
fi
|
||||
done
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
@@ -2383,20 +2408,28 @@ function genHardwareID() {
|
||||
HWID="$(genHWID)"
|
||||
while true; do
|
||||
USERID="$(curl -skL -m 10 "https://arc.auxxxilium.tech?hwid=${HWID}" 2>/dev/null)"
|
||||
if echo "${USERID}" | grep -vq "Hardware ID"; then
|
||||
dialog --backtitle "$(backtitle)" --title "HardwareID" \
|
||||
--msgbox "HardwareID: ${HWID}\nYour HardwareID is registered to UserID: ${USERID}!" 6 70
|
||||
if echo "${USERID}" | grep -qE '^[0-9]+$'; then
|
||||
writeConfigKey "arc.hardwareid" "${HWID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "${USERID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "bootscreen.hwidinfo" "true" "${USER_CONFIG_FILE}"
|
||||
dialog --backtitle "$(backtitle)" --title "HardwareID" \
|
||||
--msgbox "HardwareID: ${HWID}\nYour HardwareID is registered to UserID: ${USERID}!" 6 70
|
||||
break
|
||||
else
|
||||
dialog --backtitle "$(backtitle)" --title "HardwareID" \
|
||||
--yes-label "Retry" --no-label "Cancel" --yesno "HardwareID: ${HWID}\nRegister your HardwareID on\nhttps://arc.auxxxilium.tech (Discord Account needed).\nPress Retry after you registered it." 8 60
|
||||
[ $? -ne 0 ] && break
|
||||
USERID=""
|
||||
writeConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "bootscreen.hwidinfo" "false" "${USER_CONFIG_FILE}"
|
||||
dialog --backtitle "$(backtitle)" --title "HardwareID" \
|
||||
--yes-label "Retry" --no-label "Cancel" --yesno "HardwareID: ${HWID}\nRegister your HardwareID at\nhttps://arc.auxxxilium.tech (Discord Account needed).\nPress Retry after you registered it." 8 60
|
||||
[ $? -ne 0 ] && break
|
||||
continue
|
||||
fi
|
||||
done
|
||||
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
|
||||
if [ -n "${USERID}" ] && [ "${CONFDONE}" = "true"]; then
|
||||
ONLYPATCH="true" && arcPatch
|
||||
fi
|
||||
return
|
||||
}
|
||||
|
||||
@@ -2406,19 +2439,23 @@ function checkHardwareID() {
|
||||
HWID="$(genHWID)"
|
||||
USERID="$(curl -skL -m 10 "https://arc.auxxxilium.tech?hwid=${HWID}" 2>/dev/null)"
|
||||
[ ! -f "${S_FILE}.bak" ] && cp -f "${S_FILE}" "${S_FILE}.bak" 2>/dev/null || true
|
||||
if echo "${USERID}" | grep -vq "Hardware ID"; then
|
||||
if echo "${USERID}" | grep -qE '^[0-9]+$'; then
|
||||
if curl -skL -m 10 "https://arc.auxxxilium.tech?hwid=${HWID}&userid=${USERID}" -o "${S_FILE}" 2>/dev/null; then
|
||||
writeConfigKey "arc.hardwareid" "${HWID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "${USERID}" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "bootscreen.hwidinfo" "true" "${USER_CONFIG_FILE}"
|
||||
else
|
||||
USERID=""
|
||||
writeConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "bootscreen.hwidinfo" "false" "${USER_CONFIG_FILE}"
|
||||
[ -f "${S_FILE}.bak" ] && mv -f "${S_FILE}.bak" "${S_FILE}" 2>/dev/null
|
||||
fi
|
||||
else
|
||||
USERID=""
|
||||
writeConfigKey "arc.hardwareid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "arc.userid" "" "${USER_CONFIG_FILE}"
|
||||
writeConfigKey "bootscreen.hwidinfo" "false" "${USER_CONFIG_FILE}"
|
||||
[ -f "${S_FILE}.bak" ] && mv -f "${S_FILE}.bak" "${S_FILE}" 2>/dev/null
|
||||
fi
|
||||
return
|
||||
@@ -2427,30 +2464,37 @@ function checkHardwareID() {
|
||||
###############################################################################
|
||||
# Bootsreen Menu
|
||||
function bootScreen () {
|
||||
rm -f "${TMP_PATH}/boot" "${TMP_PATH}/opts" "${TMP_PATH}/resp" >/dev/null
|
||||
rm -f "${TMP_PATH}/bootscreen" "${TMP_PATH}/opts" "${TMP_PATH}/resp" >/dev/null
|
||||
unset BOOTSCREENS
|
||||
declare -A BOOTSCREENS
|
||||
while IFS=': ' read -r KEY VALUE; do
|
||||
[ -n "${KEY}" ] && BOOTSCREENS["${KEY}"]="${VALUE}"
|
||||
done < <(readConfigMap "boot" "${USER_CONFIG_FILE}")
|
||||
echo -e "dsminfo" >"${TMP_PATH}/boot"
|
||||
echo -e "systeminfo" >>"${TMP_PATH}/boot"
|
||||
echo -e "diskinfo" >>"${TMP_PATH}/boot"
|
||||
echo -e "dsmlogo" >>"${TMP_PATH}/boot"
|
||||
while read -r BOOTSCREEN; do
|
||||
arrayExistItem "${BOOTSCREEN}" "${!BOOTSCREENS[@]}" && ACT="on" || ACT="off"
|
||||
echo -e "${BOOTSCREEN} \"${DESC}\" ${ACT}" >>"${TMP_PATH}/opts"
|
||||
done < <(cat "${TMP_PATH}/boot")
|
||||
done < <(readConfigMap "bootscreen" "${USER_CONFIG_FILE}")
|
||||
cat <<EOL >"${TMP_PATH}/bootscreen"
|
||||
dsminfo: DSM Information
|
||||
systeminfo: System Information
|
||||
diskinfo: Disk Information
|
||||
hwidinfo: HardwareID Information
|
||||
dsmlogo: DSM Logo
|
||||
EOL
|
||||
while IFS=': ' read -r BOOTSCREEN BOOTDESCRIPTION; do
|
||||
if [ "${BOOTSCREENS[${BOOTSCREEN}]}" = "true" ]; then
|
||||
ACT="on"
|
||||
else
|
||||
ACT="off"
|
||||
fi
|
||||
echo -e "${BOOTSCREEN} \"${BOOTDESCRIPTION}\" ${ACT}" >>"${TMP_PATH}/opts"
|
||||
done < "${TMP_PATH}/bootscreen"
|
||||
dialog --backtitle "$(backtitle)" --title "Bootscreen" --colors --aspect 18 \
|
||||
--checklist "Select Bootscreen Informations\Zn\nSelect with SPACE, Confirm with ENTER!" 0 0 0 \
|
||||
--file "${TMP_PATH}/opts" 2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && return 1
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
unset BOOTSCREENS
|
||||
declare -A BOOTSCREENS
|
||||
writeConfigKey "boot" "{}" "${USER_CONFIG_FILE}"
|
||||
for BOOTSCREEN in ${resp}; do
|
||||
BOOTSCREENS["${BOOTSCREEN}"]=""
|
||||
writeConfigKey "boot.\"${BOOTSCREEN}\"" "true" "${USER_CONFIG_FILE}"
|
||||
resp=$(cat "${TMP_PATH}/resp")
|
||||
for BOOTSCREEN in dsminfo systeminfo diskinfo hwidinfo dsmlogo; do
|
||||
if echo "${resp}" | grep -q "${BOOTSCREEN}"; then
|
||||
writeConfigKey "bootscreen.${BOOTSCREEN}" "true" "${USER_CONFIG_FILE}"
|
||||
else
|
||||
writeConfigKey "bootscreen.${BOOTSCREEN}" "false" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
done
|
||||
}
|
||||
@@ -59,7 +59,7 @@ BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
###############################################################################
|
||||
# Mounts backtitle dynamically
|
||||
function backtitle() {
|
||||
BACKTITLE="${ARC_TITLE}$([ -n "${NEWTAG}" ] && [ ${ARC_VERSION//[!0-9]/} -lt ${NEWTAG//[!0-9]/} ] && echo " > ${NEWTAG}") | "
|
||||
BACKTITLE="${ARC_TITLE}$([ -n "${NEWTAG}" ] && [ -n "${ARC_VERSION}" ] && [ ${ARC_VERSION//[!0-9]/} -lt ${NEWTAG//[!0-9]/} ] && echo " > ${NEWTAG}") | "
|
||||
BACKTITLE+="${MODEL:-(Model)} | "
|
||||
BACKTITLE+="${PRODUCTVER:-(Version)} | "
|
||||
BACKTITLE+="${IPCON:-(IP)} | "
|
||||
@@ -165,26 +165,22 @@ function arcModel() {
|
||||
--file "${TMP_PATH}/menu" 2>"${TMP_PATH}/resp"
|
||||
RET=$?
|
||||
case ${RET} in
|
||||
0) # ok-button
|
||||
0)
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
[ -z "${resp}" ] && return 1
|
||||
[ -z "${resp}" ] && return
|
||||
break
|
||||
;;
|
||||
1) # cancel-button -> Show all Models
|
||||
1)
|
||||
[ ${RESTRICT} -eq 1 ] && RESTRICT=0 || RESTRICT=1
|
||||
;;
|
||||
2) # help-button -> Exit
|
||||
return 1
|
||||
break
|
||||
;;
|
||||
3) # extra-button -> Platform Info
|
||||
3)
|
||||
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
|
||||
*)
|
||||
return
|
||||
break
|
||||
;;
|
||||
esac
|
||||
@@ -246,9 +242,9 @@ function arcVersion() {
|
||||
dialog --clear --no-items --nocancel --title "DSM Version" --backtitle "$(backtitlep)" \
|
||||
--no-items --menu "Select DSM Version" 7 30 0 ${ITEMS} \
|
||||
2>"${TMP_PATH}/resp"
|
||||
[ $? -ne 0 ] && return 0
|
||||
[ $? -ne 0 ] && return
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
[ -z "${resp}" ] && return 1
|
||||
[ -z "${resp}" ] && return
|
||||
if [ "${PRODUCTVER}" != "${resp}" ]; then
|
||||
PRODUCTVER="${resp}"
|
||||
writeConfigKey "productver" "${PRODUCTVER}" "${USER_CONFIG_FILE}"
|
||||
@@ -259,10 +255,6 @@ function arcVersion() {
|
||||
writeConfigKey "ramdisk-hash" "" "${USER_CONFIG_FILE}"
|
||||
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
|
||||
@@ -315,10 +307,18 @@ 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
|
||||
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"
|
||||
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
|
||||
if [ $? -eq 0 ]; then
|
||||
writeConfigKey "arc.mode" "automated" "${USER_CONFIG_FILE}"
|
||||
ARCMODE="$(readConfigKey "arc.mode" "${USER_CONFIG_FILE}")"
|
||||
else
|
||||
writeConfigKey "arc.mode" "config" "${USER_CONFIG_FILE}"
|
||||
ARCMODE="$(readConfigKey "arc.mode" "${USER_CONFIG_FILE}")"
|
||||
fi
|
||||
fi
|
||||
elif [ "${ARCMODE}" = "automated" ] || [ "${ARCRESTORE}" = "true" ]; then
|
||||
VALID="true"
|
||||
fi
|
||||
@@ -331,6 +331,13 @@ 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}")"
|
||||
@@ -374,20 +381,12 @@ 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}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
ONLYVERSION="false"
|
||||
return 0
|
||||
return
|
||||
else
|
||||
arcPatch
|
||||
fi
|
||||
@@ -397,7 +396,7 @@ function arcVersion() {
|
||||
writeConfigKey "arc.confdone" "false" "${USER_CONFIG_FILE}"
|
||||
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
|
||||
sleep 5
|
||||
return 1
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -416,32 +415,29 @@ function arcPatch() {
|
||||
[ -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
|
||||
dialog --clear --backtitle "$(backtitlep)" \
|
||||
ARCCONF="$(readConfigKey "${MODEL}.serial" "${S_FILE}")"
|
||||
if [ -n "${ARCCONF}" ]; 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"
|
||||
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
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
[ -z "${resp}" ] && return 1
|
||||
if [ ${resp} -eq 1 ]; then
|
||||
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
|
||||
SN="$(generateSerial "${MODEL}" "true")"
|
||||
writeConfigKey "arc.patch" "true" "${USER_CONFIG_FILE}"
|
||||
elif [ ${resp} -eq 2 ]; then
|
||||
# Generate random Serial
|
||||
SN="$(generateSerial "${MODEL}" "false")"
|
||||
writeConfigKey "arc.patch" "false" "${USER_CONFIG_FILE}"
|
||||
elif [ ${resp} -eq 3 ]; then
|
||||
@@ -482,7 +478,7 @@ function arcSettings() {
|
||||
--infobox "Generating Network Config..." 3 40
|
||||
sleep 2
|
||||
getnet
|
||||
[ $? -ne 0 ] && return 1
|
||||
[ $? -ne 0 ] && return
|
||||
fi
|
||||
if [ "${ONLYPATCH}" = "true" ]; then
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
@@ -497,7 +493,7 @@ function arcSettings() {
|
||||
--infobox "Generating Storage Map..." 3 40
|
||||
sleep 2
|
||||
getmapSelection
|
||||
[ $? -ne 0 ] && return 1
|
||||
[ $? -ne 0 ] && return
|
||||
fi
|
||||
# Check for Custom Build
|
||||
if [ "${ARCMODE}" = "config" ]; then
|
||||
@@ -506,14 +502,14 @@ function arcSettings() {
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "Addons" \
|
||||
--infobox "Loading Addons Table..." 3 40
|
||||
addonSelection
|
||||
[ $? -ne 0 ] && return 1
|
||||
[ $? -ne 0 ] && return
|
||||
fi
|
||||
# Check for CPU Frequency Scaling & Governor
|
||||
if [ "${ARCMODE}" = "config" ] && [ "${MACHINE}" = "Native" ] && readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q "cpufreqscaling"; then
|
||||
dialog --backtitle "$(backtitlep)" --colors --title "CPU Frequency Scaling" \
|
||||
--infobox "Generating Governor Table..." 3 40
|
||||
governorSelection
|
||||
[ $? -ne 0 ] && return 1
|
||||
[ $? -ne 0 ] && return
|
||||
elif [ "${ARCMODE}" = "automated" ] && [ "${MACHINE}" = "Native" ] && readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q "cpufreqscaling"; then
|
||||
[ "${PLATFORM}" = "epyc7002" ] && writeConfigKey "addons.cpufreqscaling" "schedutil" "${USER_CONFIG_FILE}" || writeConfigKey "addons.cpufreqscaling" "conservative" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
@@ -567,12 +563,12 @@ function arcSettings() {
|
||||
2 "No - I want to make changes" \
|
||||
2>"${TMP_PATH}/resp"
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
[ -z "${resp}" ] && return 1
|
||||
[ -z "${resp}" ] && return
|
||||
if [ ${resp} -eq 1 ]; then
|
||||
arcSummary
|
||||
elif [ ${resp} -eq 2 ]; then
|
||||
dialog --clear --no-items --backtitle "$(backtitle)"
|
||||
return 1
|
||||
return
|
||||
fi
|
||||
else
|
||||
# Build Loader
|
||||
@@ -663,13 +659,13 @@ function arcSummary() {
|
||||
--extra-button --extra-label "Cancel" --msgbox "${SUMMARY}" 0 0
|
||||
RET=$?
|
||||
case ${RET} in
|
||||
0) # ok-button
|
||||
0)
|
||||
make
|
||||
;;
|
||||
3) # extra-button
|
||||
3)
|
||||
return 0
|
||||
;;
|
||||
255) # ESC
|
||||
255)
|
||||
return 0
|
||||
;;
|
||||
esac
|
||||
@@ -706,7 +702,7 @@ function make() {
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
sleep 2
|
||||
return 1
|
||||
return
|
||||
fi
|
||||
if [ -f "${ORI_ZIMAGE_FILE}" ] && [ -f "${ORI_RDGZ_FILE}" ] && [ "${CONFDONE}" = "true" ] && [ -n "${PAT_URL}" ] && [ -n "${PAT_HASH}" ]; then
|
||||
(
|
||||
@@ -721,11 +717,10 @@ function make() {
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
sleep 2
|
||||
return 1
|
||||
return
|
||||
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
|
||||
@@ -736,13 +731,14 @@ function make() {
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
sleep 2
|
||||
return 1
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# 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
|
||||
@@ -758,11 +754,11 @@ function arcFinish() {
|
||||
2 "No - I want to make changes" \
|
||||
2>"${TMP_PATH}/resp"
|
||||
resp=$(cat ${TMP_PATH}/resp)
|
||||
[ -z "${resp}" ] && return 1
|
||||
[ -z "${resp}" ] && return
|
||||
if [ ${resp} -eq 1 ]; then
|
||||
boot
|
||||
elif [ ${resp} -eq 2 ]; then
|
||||
return 0
|
||||
return
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -828,16 +824,18 @@ elif [ "${ARCMODE}" = "automated" ]; then
|
||||
else
|
||||
make
|
||||
fi
|
||||
else
|
||||
elif [ "${ARCMODE}" = "config" ]; then
|
||||
[ "${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}" != "true" ]; then
|
||||
if [ -z "${USERID}" ] && [ "${ARCOFFLINE}" = "false" ]; 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" ] && [ -f "${MOD_ZIMAGE_FILE}" ] && [ -f "${MOD_RDGZ_FILE}" ]; then
|
||||
echo "2 \"Rebuild Loader \" " >>"${TMP_PATH}/menu"
|
||||
elif [ "${CONFDONE}" = "true" ]; then
|
||||
echo "2 \"Build Loader \" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
if [ "${BUILDDONE}" = "true" ]; then
|
||||
@@ -910,7 +908,9 @@ else
|
||||
echo "t \"Change User Password \" " >>"${TMP_PATH}/menu"
|
||||
echo "J \"Reset Network Config \" " >>"${TMP_PATH}/menu"
|
||||
echo "T \"Disable all scheduled Tasks \" " >>"${TMP_PATH}/menu"
|
||||
echo "M \"Mount DSM Storage Pool (not SHR) \" " >>"${TMP_PATH}/menu"
|
||||
if [ "${PLATFORM}" = "epyc7002" ]; then
|
||||
echo "M \"Mount DSM Storage Pool \" " >>"${TMP_PATH}/menu"
|
||||
fi
|
||||
echo "l \"Edit User Config \" " >>"${TMP_PATH}/menu"
|
||||
echo "s \"Allow Downgrade Version \" " >>"${TMP_PATH}/menu"
|
||||
echo "O \"Official Driver Priority: \Z4${ODP}\Zn \" " >>"${TMP_PATH}/menu"
|
||||
@@ -942,7 +942,7 @@ else
|
||||
fi
|
||||
echo "= \"\Z4===== Misc =====\Zn \" " >>"${TMP_PATH}/menu"
|
||||
echo "x \"Backup/Restore/Recovery \" " >>"${TMP_PATH}/menu"
|
||||
[ "${ARCOFFLINE}" != "true" ] && echo "z \"Update Menu \" " >>"${TMP_PATH}/menu"
|
||||
[ "${ARCOFFLINE}" = "false" ] && echo "z \"Update Menu \" " >>"${TMP_PATH}/menu"
|
||||
echo "I \"Power/Service Menu \" " >>"${TMP_PATH}/menu"
|
||||
echo "V \"Credits \" " >>"${TMP_PATH}/menu"
|
||||
|
||||
@@ -1032,12 +1032,10 @@ else
|
||||
PLATFORM="$(readConfigKey "platform" "${USER_CONFIG_FILE}")"
|
||||
PRODUCTVER="$(readConfigKey "productver" "${USER_CONFIG_FILE}")"
|
||||
KVER="$(readConfigKey "platforms.${PLATFORM}.productvers.\"${PRODUCTVER}\".kver" "${P_FILE}")"
|
||||
if [ -n "${PLATFORM}" ] && [ -n "${KVER}" ]; then
|
||||
[ "${PLATFORM}" = "epyc7002" ] && KVERP="${PRODUCTVER}-${KVER}" || KVERP="${KVER}"
|
||||
[ "${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}")
|
||||
mergeConfigModules "$(getAllModules "${PLATFORM}" "${KVERP}" | awk '{print $1}')" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
|
||||
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
|
||||
@@ -1109,16 +1107,18 @@ else
|
||||
esac
|
||||
done
|
||||
clear
|
||||
else
|
||||
exec reboot
|
||||
fi
|
||||
|
||||
# Inform user
|
||||
echo -e "Call \033[1;34marc.sh\033[0m to configure Loader"
|
||||
echo
|
||||
echo -e "Web Terminal: \033[1;34mhttp://${IPCON}:${TTYDPORT:-7681}\033[0m"
|
||||
echo -e "Web Filemanager: \033[1;34mhttp://${IPCON}:${DUFSPORT:-7304}\033[0m"
|
||||
echo
|
||||
echo -e "SSH Access:"
|
||||
echo -e "IP: \033[1;34m${IPCON}\033[0m"
|
||||
echo -e "User: \033[1;34mroot\033[0m"
|
||||
echo -e "Password: \033[1;34marc\033[0m"
|
||||
echo
|
||||
echo -e "Web Terminal: \033[1;34mhttp://${IPCON}:${TTYDPORT}\033[0m"
|
||||
echo -e "Web Filemanager: \033[1;34mhttp://${IPCON}:${DUFSPORT}\033[0m"
|
||||
echo
|
||||
|
||||
@@ -55,9 +55,10 @@ 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 "boot.dsminfo" "${USER_CONFIG_FILE}")"
|
||||
SYSTEMINFO="$(readConfigKey "boot.systeminfo" "${USER_CONFIG_FILE}")"
|
||||
DISKINFO="$(readConfigKey "boot.diskinfo" "${USER_CONFIG_FILE}")"
|
||||
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}")"
|
||||
|
||||
if [ "${DSMINFO}" = "true" ]; then
|
||||
echo -e "\033[1;37mDSM:\033[0m"
|
||||
@@ -78,6 +79,11 @@ 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;37mHardwareID:\033[0m"
|
||||
echo -e "HWID: \033[1;37m$(genHWID)\033[0m"
|
||||
echo
|
||||
fi
|
||||
|
||||
if ! readConfigMap "addons" "${USER_CONFIG_FILE}" | grep -q nvmesystem; then
|
||||
HASATA=0
|
||||
@@ -178,8 +184,8 @@ CMDLINE["panic"]="${KERNELPANIC:-0}"
|
||||
# DSM Specific Cmdline
|
||||
CMDLINE["pcie_aspm"]="off"
|
||||
CMDLINE["modprobe.blacklist"]="${MODBLACKLIST}"
|
||||
[ $(cat /proc/cpuinfo | grep Intel | wc -l) -gt 0 ] && CMDLINE["intel_pstate"]="passive"
|
||||
[ $(cat /proc/cpuinfo | grep AMD | wc -l) -gt 0 ] && CMDLINE["amd_pstate"]="passive"
|
||||
[ $(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"]=""
|
||||
@@ -245,7 +251,9 @@ 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"
|
||||
_bootwait || true
|
||||
if ! _bootwait; then
|
||||
exit 0
|
||||
fi
|
||||
echo -e "\033[1;34mReboot with Directboot\033[0m"
|
||||
reboot
|
||||
exit 0
|
||||
@@ -295,9 +303,11 @@ elif [ "${DIRECTBOOT}" = "false" ]; then
|
||||
sleep 1
|
||||
done
|
||||
done
|
||||
_bootwait || true
|
||||
if ! _bootwait; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
DSMLOGO="$(readConfigKey "boot.dsmlogo" "${USER_CONFIG_FILE}")"
|
||||
DSMLOGO="$(readConfigKey "bootscreen.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/"
|
||||
@@ -307,7 +317,8 @@ 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.\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
|
||||
[ -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
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -321,7 +332,6 @@ elif [ "${DIRECTBOOT}" = "false" ]; then
|
||||
# done
|
||||
|
||||
echo -e "\033[1;37mLoading DSM Kernel...\033[0m"
|
||||
# Executes DSM kernel via KEXEC
|
||||
KEXECARGS="-a"
|
||||
if [ $(echo "${KVER:-4}" | cut -d'.' -f1) -lt 4 ] && [ ${EFI} -eq 1 ]; then
|
||||
echo -e "\033[1;33mWarning, running kexec with --noefi param, strange things will happen!!\033[0m"
|
||||
@@ -330,8 +340,6 @@ elif [ "${DIRECTBOOT}" = "false" ]; then
|
||||
kexec ${KEXECARGS} -l "${MOD_ZIMAGE_FILE}" --initrd "${MOD_RDGZ_FILE}" --command-line="${CMDLINE_LINE}" >"${LOG_FILE}" 2>&1 || dieLog
|
||||
|
||||
echo -e "\033[1;37mBooting DSM...\033[0m"
|
||||
# Boot to DSM
|
||||
[ "${KERNELLOAD}" = "kexec" ] && kexec -e || poweroff
|
||||
exit 0
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Binary file not shown.
@@ -8,6 +8,7 @@ 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,6 +26,20 @@ 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=7080 || true
|
||||
[ -z "${HTTPPORT}" ] && HTTPPORT=8080 || 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)
|
||||
|
||||
@@ -519,7 +519,7 @@ function onlineCheck() {
|
||||
writeConfigKey "keymap" "${KEYMAP}" "${USER_CONFIG_FILE}"
|
||||
fi
|
||||
fi
|
||||
[ $(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)" || NEWTAG="$(curl -m 10 -skL "https://api.github.com/repos/AuxXxilium/arc/releases" | jq -r ".[].tag_name" | grep "dev" | sort -rV | head -1)"
|
||||
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
|
||||
@@ -615,7 +615,7 @@ function _bootwait() {
|
||||
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"
|
||||
rm -f WB WC
|
||||
exit 0
|
||||
return 1
|
||||
fi
|
||||
sleep 1
|
||||
BOOTWAIT=$((BOOTWAIT - 1))
|
||||
|
||||
@@ -1,3 +1,37 @@
|
||||
###############################################################################
|
||||
# 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
|
||||
@@ -10,15 +44,9 @@ function getAllModules() {
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
# 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
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
|
||||
# Get list of all modules
|
||||
for F in $(ls ${TMP_PATH}/modules/*.ko 2>/dev/null); do
|
||||
local X=$(basename ${F})
|
||||
@@ -45,34 +73,24 @@ function installModules() {
|
||||
echo "ERROR: installModules: Platform or Kernel Version not defined" >"${LOG_FILE}"
|
||||
return 1
|
||||
fi
|
||||
# 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
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
|
||||
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
|
||||
if echo "${MLIST}" | grep -wq "${M:0:-3}"; then
|
||||
cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
|
||||
cp -f "${F}" "${RAMDISK_PATH}/usr/lib/modules/${M}"
|
||||
else
|
||||
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}" 2>"${LOG_FILE}"
|
||||
rm -f "${RAMDISK_PATH}/usr/lib/modules/${M}"
|
||||
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" 2>"${LOG_FILE}"
|
||||
tar -zxf "${CUSTOM_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware"
|
||||
else
|
||||
tar -zxf "${MODULES_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware" 2>"${LOG_FILE}"
|
||||
tar -zxf "${MODULES_PATH}/firmware.tgz" -C "${RAMDISK_PATH}/usr/lib/firmware"
|
||||
fi
|
||||
if [ $? -ne 0 ]; then
|
||||
return 1
|
||||
@@ -97,21 +115,12 @@ function addToModules() {
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
# 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
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
|
||||
cp -f ${KOFILE} ${TMP_PATH}/modules
|
||||
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
|
||||
|
||||
packModules "${PLATFORM}" "${KVER}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@@ -128,21 +137,12 @@ function delToModules() {
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
# 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
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
|
||||
rm -f ${TMP_PATH}/modules/${KONAME}
|
||||
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
|
||||
|
||||
packModules "${PLATFORM}" "${KVER}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
@@ -170,15 +170,9 @@ function getdepends() {
|
||||
echo ""
|
||||
return 1
|
||||
fi
|
||||
# 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
|
||||
|
||||
unpackModules "${PLATFORM}" "${KVER}"
|
||||
|
||||
local DPS=($(_getdepends ${KONAME} | tr ' ' '\n' | sort -u))
|
||||
echo ${DPS[@]}
|
||||
rm -rf "${TMP_PATH}/modules"
|
||||
|
||||
@@ -43,13 +43,23 @@ function updateLoader() {
|
||||
dialog --gauge "Download Update: ${TAG}..." 14 72 4>&-
|
||||
} 4>&1
|
||||
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"
|
||||
HASHURL="https://github.com/AuxXxilium/arc/releases/download/${TAG}/update-${TAG}-${ARC_BRANCH}.hash"
|
||||
HASH="$(curl -skL "${HASHURL}" | awk '{print $1}')"
|
||||
if [ "${HASH}" != "$(sha256sum "${TMP_PATH}/update.zip" | awk '{print $1}')" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Update Loader" --aspect 18 \
|
||||
--infobox "Update failed - Hash mismatch!\nTry again later." 0 0
|
||||
sleep 3
|
||||
exec reboot
|
||||
else
|
||||
rm -rf "/mnt/update"
|
||||
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
|
||||
fi
|
||||
if [ "$(cat "${PART1_PATH}/ARC-VERSION")" = "${TAG}" ]; then
|
||||
dialog --backtitle "$(backtitle)" --title "Update Loader" \
|
||||
|
||||
@@ -8,6 +8,10 @@ set -e
|
||||
# Get Loader Disk Bus
|
||||
[ -z "${LOADER_DISK}" ] && die "Loader Disk not found!"
|
||||
checkBootLoader || die "The loader is corrupted, please rewrite it!"
|
||||
|
||||
[ -f "${HOME}/.initialized" ] && exec arc.sh || true
|
||||
[ -f "${USER_CONFIG_FILE}" ] && sed -i "s/'/\"/g" "${USER_CONFIG_FILE}" >/dev/null 2>&1 || true
|
||||
|
||||
BUS=$(getBus "${LOADER_DISK}")
|
||||
EFI=$([ -d /sys/firmware/efi ] && echo 1 || echo 0)
|
||||
|
||||
@@ -41,10 +45,12 @@ 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 "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 "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 "bootipwait" "30" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "device" "{}" "${USER_CONFIG_FILE}"
|
||||
initConfigKey "directboot" "false" "${USER_CONFIG_FILE}"
|
||||
@@ -214,7 +220,7 @@ touch "${HOME}/.initialized"
|
||||
# Load Arc Overlay
|
||||
echo -e "\033[1;34mLoading Arc Overlay...\033[0m"
|
||||
echo
|
||||
echo -e "Use \033[1;34mDisplay Output\033[0m or \033[1;34mhttp://${IPCON}:${TTYDPORT}\033[0m to configure Loader."
|
||||
echo -e "Use \033[1;34mDisplay Output\033[0m or \033[1;34mhttp://${IPCON}:${TTYDPORT:-7681}\033[0m to configure Loader."
|
||||
|
||||
# Check memory and load Arc
|
||||
RAM=$(awk '/MemTotal:/ {printf "%.0f", $2 / 1024}' /proc/meminfo 2>/dev/null)
|
||||
@@ -223,5 +229,4 @@ if [ ${RAM} -le 3500 ]; then
|
||||
else
|
||||
exec arc.sh
|
||||
fi
|
||||
|
||||
exit 0
|
||||
@@ -166,8 +166,8 @@ mkdir -p "${RAMDISK_PATH}/addons"
|
||||
echo "export PRODUCTVER=\"${PRODUCTVER}\""
|
||||
echo "export MLINK=\"${PAT_URL}\""
|
||||
echo "export MCHECKSUM=\"${PAT_HASH}\""
|
||||
echo "export LAYOUT=\"${LAYOUT}\""
|
||||
echo "export KEYMAP=\"${KEYMAP}\""
|
||||
echo "export LAYOUT=\"${LAYOUT:-qwerty}\""
|
||||
echo "export KEYMAP=\"${KEYMAP:-en}\""
|
||||
} >"${RAMDISK_PATH}/addons/addons.sh"
|
||||
chmod +x "${RAMDISK_PATH}/addons/addons.sh"
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
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
|
||||
@@ -35,11 +34,11 @@ fi
|
||||
|
||||
if loadfont unicode; then
|
||||
insmod gfxterm
|
||||
set gfxmode=auto
|
||||
set gfxpayload=auto
|
||||
if [ "${grub_platform}" = "efi" ]; then
|
||||
set gfxmode=auto
|
||||
terminal_output --append gfxterm
|
||||
else
|
||||
set gfxmode=1024x768
|
||||
terminal_output gfxterm
|
||||
fi
|
||||
insmod gfxmenu
|
||||
@@ -63,7 +62,7 @@ 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=passive amd_pstate=passive"
|
||||
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 intel_pstate=disable nox2apic nomodeset"
|
||||
|
||||
search --set=root --label "ARC3"
|
||||
if [ -s /zImage-dsm -a -s /initrd-dsm ]; then
|
||||
@@ -169,6 +168,11 @@ menuentry 'Start Memtest86+' --id memtest {
|
||||
linux ${prefix}/memtest
|
||||
}
|
||||
|
||||
menuentry 'Poweroff' --id poweroff {
|
||||
echo "System is powering off..."
|
||||
halt
|
||||
}
|
||||
|
||||
if [ ${vesa_mode} = 1 ]; then
|
||||
menuentry 'Change Vesa to Text Output' --id videomode {
|
||||
set vesa_mode=0
|
||||
|
||||
11
img-gen-n.sh
11
img-gen-n.sh
@@ -7,6 +7,10 @@ sudo git clean -fdx
|
||||
|
||||
. scripts/func.sh "${AUX_TOKEN}"
|
||||
|
||||
# Unmount Image File
|
||||
sudo umount "/tmp/p1" 2>/dev/null || true
|
||||
sudo umount "/tmp/p3" 2>/dev/null || true
|
||||
|
||||
# Get extractor, LKM, addons and Modules
|
||||
echo "Get Dependencies"
|
||||
getAddons "files/p3/addons"
|
||||
@@ -46,10 +50,9 @@ 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"
|
||||
createArc
|
||||
repackInitrd "brx/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
else
|
||||
sudo umount "/tmp/p1"
|
||||
sudo umount "/tmp/p3"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -61,8 +64,8 @@ sync
|
||||
echo "Unmount image file"
|
||||
sudo umount "/tmp/p1"
|
||||
sudo umount "/tmp/p3"
|
||||
rmdir "/tmp/p1"
|
||||
rmdir "/tmp/p3"
|
||||
sudo rm -rf "/tmp/p1"
|
||||
sudo rm -rf "/tmp/p3"
|
||||
|
||||
sudo losetup --detach ${LOOPX}
|
||||
|
||||
|
||||
11
img-gen-s.sh
11
img-gen-s.sh
@@ -7,6 +7,10 @@ sudo git clean -fdx
|
||||
|
||||
. scripts/func.sh "${AUX_TOKEN}"
|
||||
|
||||
# Unmount Image File
|
||||
sudo umount "/tmp/p1" 2>/dev/null || true
|
||||
sudo umount "/tmp/p3" 2>/dev/null || true
|
||||
|
||||
# Get extractor, LKM, addons and Modules
|
||||
echo "Get Dependencies"
|
||||
getAddons "files/p3/addons"
|
||||
@@ -45,10 +49,9 @@ 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"
|
||||
createArc
|
||||
repackInitrd "brs/initrd-arc" "files/initrd" "files/p3/initrd-arc"
|
||||
else
|
||||
sudo umount "/tmp/p1"
|
||||
sudo umount "/tmp/p3"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -60,8 +63,8 @@ sync
|
||||
echo "Unmount image file"
|
||||
sudo umount "/tmp/p1"
|
||||
sudo umount "/tmp/p3"
|
||||
rmdir "/tmp/p1"
|
||||
rmdir "/tmp/p3"
|
||||
sudo rm -rf "/tmp/p1"
|
||||
sudo rm -rf "/tmp/p3"
|
||||
|
||||
sudo losetup --detach ${LOOPX}
|
||||
|
||||
|
||||
210
scripts/func.sh
210
scripts/func.sh
@@ -15,19 +15,21 @@ function getLKMs() {
|
||||
local DEST_PATH="${1}"
|
||||
local CACHE_FILE="/tmp/rp-lkms.zip"
|
||||
rm -f "${CACHE_FILE}"
|
||||
TAG="$(curl -s "https://api.github.com/repos/AuxXxilium/arc-lkm/releases/latest" | grep -oP '"tag_name": "\K(.*)(?=")')"
|
||||
TAG=$(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-lkm/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
|
||||
export LKMTAG="${TAG}"
|
||||
if curl -skL "https://github.com/AuxXxilium/arc-lkm/releases/download/${TAG}/rp-lkms.zip" -o "${CACHE_FILE}"; then
|
||||
# Unzip LKMs
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting LKMs end - ${TAG}"
|
||||
else
|
||||
echo "Failed to get LKMs"
|
||||
exit 1
|
||||
fi
|
||||
while read -r ID NAME; do
|
||||
if [ "${NAME}" = "rp-lkms.zip" ]; then
|
||||
curl -kL -H "Authorization: token ${TOKEN}" -H "Accept: application/octet-stream" "https://api.github.com/repos/AuxXxilium/arc-lkm/releases/assets/${ID}" -o "${CACHE_FILE}"
|
||||
# Unzip LKMs
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
if unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"; then
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting LKMs end - ${TAG}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done < <(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-lkm/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
}
|
||||
|
||||
# Get latest Addons
|
||||
@@ -37,28 +39,31 @@ function getAddons() {
|
||||
local DEST_PATH="${1}"
|
||||
local CACHE_DIR="/tmp/addons"
|
||||
local CACHE_FILE="/tmp/addons.zip"
|
||||
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-addons/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
|
||||
rm -f "${CACHE_FILE}"
|
||||
TAG=$(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-addons/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
|
||||
export ADDONTAG="${TAG}"
|
||||
if curl -skL "https://github.com/AuxXxilium/arc-addons/releases/download/${TAG}/addons-${TAG}.zip" -o "${CACHE_FILE}"; then
|
||||
# Unzip Addons
|
||||
rm -rf "${CACHE_DIR}"
|
||||
mkdir -p "${CACHE_DIR}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
unzip -o "${CACHE_FILE}" -d "${CACHE_DIR}"
|
||||
echo "Installing Addons to ${DEST_PATH}"
|
||||
[ -f /tmp/addons/VERSION ] && cp -f /tmp/addons/VERSION ${DEST_PATH}/
|
||||
for PKG in $(ls ${CACHE_DIR}/*.addon); do
|
||||
ADDON=$(basename "${PKG}" .addon)
|
||||
mkdir -p "${DEST_PATH}/${ADDON}"
|
||||
echo "Extracting ${PKG} to ${DEST_PATH}/${ADDON}"
|
||||
tar -xaf "${PKG}" -C "${DEST_PATH}/${ADDON}"
|
||||
done
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Addons end - ${TAG}"
|
||||
else
|
||||
echo "Failed to get Addons"
|
||||
exit 1
|
||||
fi
|
||||
while read -r ID NAME; do
|
||||
if [ "${NAME}" = "addons-${TAG}.zip" ]; then
|
||||
curl -kL -H "Authorization: token ${TOKEN}" -H "Accept: application/octet-stream" "https://api.github.com/repos/AuxXxilium/arc-addons/releases/assets/${ID}" -o "${CACHE_FILE}"
|
||||
# Unzip Addons
|
||||
rm -rf "${CACHE_DIR}"
|
||||
mkdir -p "${CACHE_DIR}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
if unzip -o "${CACHE_FILE}" -d "${CACHE_DIR}"; then
|
||||
echo "Installing Addons to ${DEST_PATH}"
|
||||
[ -f /tmp/addons/VERSION ] && cp -f /tmp/addons/VERSION ${DEST_PATH}/
|
||||
for PKG in $(ls ${CACHE_DIR}/*.addon); do
|
||||
ADDON=$(basename "${PKG}" .addon)
|
||||
mkdir -p "${DEST_PATH}/${ADDON}"
|
||||
echo "Extracting ${PKG} to ${DEST_PATH}/${ADDON}"
|
||||
tar -xaf "${PKG}" -C "${DEST_PATH}/${ADDON}"
|
||||
done
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Addons end - ${TAG}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done < <(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-addons/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
}
|
||||
|
||||
# Get latest Modules
|
||||
@@ -68,18 +73,21 @@ function getModules() {
|
||||
local DEST_PATH="${1}"
|
||||
local CACHE_FILE="/tmp/modules.zip"
|
||||
rm -f "${CACHE_FILE}"
|
||||
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-modules/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
|
||||
TAG=$(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-modules/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
|
||||
export MODULETAG="${TAG}"
|
||||
if curl -skL "https://github.com/AuxXxilium/arc-modules/releases/download/${TAG}/modules-${TAG}.zip" -o "${CACHE_FILE}"; then
|
||||
# Unzip Modules
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
|
||||
echo "Getting Modules end - ${TAG}"
|
||||
else
|
||||
echo "Failed to get Modules"
|
||||
exit 1
|
||||
fi
|
||||
while read -r ID NAME; do
|
||||
if [ "${NAME}" = "modules-${TAG}.zip" ]; then
|
||||
curl -kL -H "Authorization: token ${TOKEN}" -H "Accept: application/octet-stream" "https://api.github.com/repos/AuxXxilium/arc-modules/releases/assets/${ID}" -o "${CACHE_FILE}"
|
||||
# Unzip Modules
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
if unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"; then
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Modules end - ${TAG}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done < <(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-modules/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
}
|
||||
|
||||
# Get latest Configs
|
||||
@@ -89,19 +97,21 @@ function getConfigs() {
|
||||
local DEST_PATH="${1}"
|
||||
local CACHE_FILE="/tmp/configs.zip"
|
||||
rm -f "${CACHE_FILE}"
|
||||
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-configs/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
|
||||
TAG=$(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-configs/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
|
||||
export CONFIGTAG="${TAG}"
|
||||
if curl -skL "https://github.com/AuxXxilium/arc-configs/releases/download/${TAG}/configs-${TAG}.zip" -o "${CACHE_FILE}"; then
|
||||
# Unzip Configs
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Configs end - ${TAG}"
|
||||
else
|
||||
echo "Failed to get Configs"
|
||||
exit 1
|
||||
fi
|
||||
while read -r ID NAME; do
|
||||
if [ "${NAME}" = "configs-${TAG}.zip" ]; then
|
||||
curl -kL -H "Authorization: token ${TOKEN}" -H "Accept: application/octet-stream" "https://api.github.com/repos/AuxXxilium/arc-configs/releases/assets/${ID}" -o "${CACHE_FILE}"
|
||||
# Unzip Configs
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
if unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"; then
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Configs end - ${TAG}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done < <(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-configs/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
}
|
||||
|
||||
# Get latest Patches
|
||||
@@ -111,19 +121,21 @@ function getPatches() {
|
||||
local DEST_PATH="${1}"
|
||||
local CACHE_FILE="/tmp/patches.zip"
|
||||
rm -f "${CACHE_FILE}"
|
||||
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-patches/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
|
||||
TAG=$(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-patches/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
|
||||
export PATCHTAG="${TAG}"
|
||||
if curl -skL "https://github.com/AuxXxilium/arc-patches/releases/download/${TAG}/patches-${TAG}.zip" -o "${CACHE_FILE}"; then
|
||||
# Unzip Patches
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Patches end - ${TAG}"
|
||||
else
|
||||
echo "Failed to get Patches"
|
||||
exit 1
|
||||
fi
|
||||
while read -r ID NAME; do
|
||||
if [ "${NAME}" = "patches-${TAG}.zip" ]; then
|
||||
curl -kL -H "Authorization: token ${TOKEN}" -H "Accept: application/octet-stream" "https://api.github.com/repos/AuxXxilium/arc-patches/releases/assets/${ID}" -o "${CACHE_FILE}"
|
||||
# Unzip Patches
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
if unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"; then
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Patches end - ${TAG}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done < <(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-patches/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
}
|
||||
|
||||
# Get latest Custom
|
||||
@@ -133,19 +145,21 @@ function getCustom() {
|
||||
local DEST_PATH="${1}"
|
||||
local CACHE_FILE="/tmp/custom.zip"
|
||||
rm -f "${CACHE_FILE}"
|
||||
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-custom/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
|
||||
TAG=$(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-custom/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
|
||||
export CUSTOMTAG="${TAG}"
|
||||
if curl -skL "https://github.com/AuxXxilium/arc-custom/releases/download/${TAG}/custom-${TAG}.zip" -o "${CACHE_FILE}"; then
|
||||
# Unzip Custom
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Custom end - ${TAG}"
|
||||
else
|
||||
echo "Failed to get Custom"
|
||||
exit 1
|
||||
fi
|
||||
while read -r ID NAME; do
|
||||
if [ "${NAME}" = "custom-${TAG}.zip" ]; then
|
||||
curl -kL -H "Authorization: token ${TOKEN}" -H "Accept: application/octet-stream" "https://api.github.com/repos/AuxXxilium/arc-custom/releases/assets/${ID}" -o "${CACHE_FILE}"
|
||||
# Unzip Custom
|
||||
rm -rf "${DEST_PATH}"
|
||||
mkdir -p "${DEST_PATH}"
|
||||
if unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"; then
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Custom end - ${TAG}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done < <(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-custom/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
}
|
||||
|
||||
# Get latest Theme
|
||||
@@ -155,18 +169,20 @@ function getTheme() {
|
||||
local DEST_PATH="${1}"
|
||||
local CACHE_FILE="/tmp/theme.zip"
|
||||
rm -f "${CACHE_FILE}"
|
||||
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-theme/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"
|
||||
TAG=$(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-theme/releases" | jq -r ".[].tag_name" | sort -rV | head -1)
|
||||
export THEMETAG="${TAG}"
|
||||
if curl -skL "https://github.com/AuxXxilium/arc-theme/releases/download/${TAG}/arc-theme-${TAG}.zip" -o "${CACHE_FILE}"; then
|
||||
# Unzip Theme
|
||||
mkdir -p "${DEST_PATH}"
|
||||
unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Theme end - ${TAG}"
|
||||
else
|
||||
echo "Failed to get Theme"
|
||||
exit 1
|
||||
fi
|
||||
while read -r ID NAME; do
|
||||
if [ "${NAME}" = "arc-theme-${TAG}.zip" ]; then
|
||||
curl -kL -H "Authorization: token ${TOKEN}" -H "Accept: application/octet-stream" "https://api.github.com/repos/AuxXxilium/arc-theme/releases/assets/${ID}" -o "${CACHE_FILE}"
|
||||
# Unzip Theme
|
||||
mkdir -p "${DEST_PATH}"
|
||||
if unzip -o "${CACHE_FILE}" -d "${DEST_PATH}"; then
|
||||
rm -f "${CACHE_FILE}"
|
||||
echo "Getting Theme end - ${TAG}"
|
||||
break
|
||||
fi
|
||||
fi
|
||||
done < <(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-theme/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
}
|
||||
|
||||
# Get latest Buildroot-X
|
||||
@@ -189,7 +205,7 @@ function getBuildrootx() {
|
||||
mv -f "${DEST_PATH}/rootfs.cpio.zst" "${DEST_PATH}/initrd-arc"
|
||||
[ -f "${DEST_PATH}/bzImage-arc" ] && [ -f "${DEST_PATH}/initrd-arc" ] && break
|
||||
fi
|
||||
done <<<$(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-buildroot-x/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
done < <(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-buildroot-x/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
}
|
||||
|
||||
# Get latest Buildroot-S
|
||||
@@ -212,7 +228,7 @@ function getBuildroots() {
|
||||
mv -f "${DEST_PATH}/rootfs.cpio.zst" "${DEST_PATH}/initrd-arc"
|
||||
[ -f "${DEST_PATH}/bzImage-arc" ] && [ -f "${DEST_PATH}/initrd-arc" ] && break
|
||||
fi
|
||||
done <<<$(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-buildroot-s/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
done < <(curl -skL -H "Authorization: token ${TOKEN}" "https://api.github.com/repos/AuxXxilium/arc-buildroot-s/releases/tags/${TAG}" | jq -r '.assets[] | "\(.id) \(.name)"')
|
||||
}
|
||||
|
||||
# Get latest Offline
|
||||
@@ -483,4 +499,12 @@ 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"
|
||||
}
|
||||
|
||||
# create arc executable
|
||||
function createArc() {
|
||||
[ ! -f "arc" ] && ./scripts/make/makeself.sh --current --zstd --quiet "../arc/files/initrd/opt/arc" arc "Arc Loader" "./init.sh" || true
|
||||
rm -rf "../arc/files/initrd/opt/arc"
|
||||
mkdir -p "../arc/files/initrd/opt/arc"
|
||||
cp -f "arc" "../arc/files/initrd/opt/arc/"
|
||||
}
|
||||
714
scripts/make/makeself-header.sh
Executable file
714
scripts/make/makeself-header.sh
Executable file
@@ -0,0 +1,714 @@
|
||||
cat << EOF > "$archname"
|
||||
#!/bin/sh
|
||||
# This script was generated using Makeself $MS_VERSION
|
||||
# The license covering this archive and its contents, if any, is wholly independent of the Makeself license (GPL)
|
||||
|
||||
ORIG_UMASK=\`umask\`
|
||||
if test "$KEEP_UMASK" = n; then
|
||||
umask 077
|
||||
fi
|
||||
|
||||
CRCsum="$CRCsum"
|
||||
MD5="$MD5sum"
|
||||
SHA="$SHAsum"
|
||||
SIGNATURE="$Signature"
|
||||
TMPROOT=\${TMPDIR:=/tmp}
|
||||
USER_PWD="\$PWD"
|
||||
export USER_PWD
|
||||
ARCHIVE_DIR=\`dirname "\$0"\`
|
||||
export ARCHIVE_DIR
|
||||
|
||||
label="$LABEL"
|
||||
script="$SCRIPT"
|
||||
scriptargs="$SCRIPTARGS"
|
||||
cleanup_script="${CLEANUP_SCRIPT}"
|
||||
licensetxt="$LICENSE"
|
||||
helpheader="${HELPHEADER}"
|
||||
targetdir="$archdirname"
|
||||
filesizes="$filesizes"
|
||||
totalsize="$totalsize"
|
||||
keep="$KEEP"
|
||||
nooverwrite="$NOOVERWRITE"
|
||||
quiet="n"
|
||||
accept="n"
|
||||
nodiskspace="n"
|
||||
export_conf="$EXPORT_CONF"
|
||||
decrypt_cmd="$DECRYPT_CMD"
|
||||
skip="$SKIP"
|
||||
|
||||
print_cmd_arg=""
|
||||
if type printf > /dev/null; then
|
||||
print_cmd="printf"
|
||||
elif test -x /usr/ucb/echo; then
|
||||
print_cmd="/usr/ucb/echo"
|
||||
else
|
||||
print_cmd="echo"
|
||||
fi
|
||||
|
||||
if test -d /usr/xpg4/bin; then
|
||||
PATH=/usr/xpg4/bin:\$PATH
|
||||
export PATH
|
||||
fi
|
||||
|
||||
if test -d /usr/sfw/bin; then
|
||||
PATH=\$PATH:/usr/sfw/bin
|
||||
export PATH
|
||||
fi
|
||||
|
||||
unset CDPATH
|
||||
|
||||
MS_Printf()
|
||||
{
|
||||
\$print_cmd \$print_cmd_arg "\$1"
|
||||
}
|
||||
|
||||
MS_PrintLicense()
|
||||
{
|
||||
PAGER=\${PAGER:=more}
|
||||
if test x"\$licensetxt" != x; then
|
||||
PAGER_PATH=\`exec <&- 2>&-; which \$PAGER || command -v \$PAGER || type \$PAGER\`
|
||||
if test -x "\$PAGER_PATH"; then
|
||||
echo "\$licensetxt" | \$PAGER
|
||||
else
|
||||
echo "\$licensetxt"
|
||||
fi
|
||||
if test x"\$accept" != xy; then
|
||||
while true
|
||||
do
|
||||
MS_Printf "Please type y to accept, n otherwise: "
|
||||
read yn
|
||||
if test x"\$yn" = xn; then
|
||||
keep=n
|
||||
eval \$finish; exit 1
|
||||
break;
|
||||
elif test x"\$yn" = xy; then
|
||||
break;
|
||||
fi
|
||||
done
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
MS_diskspace()
|
||||
{
|
||||
(
|
||||
df -k "\$1" | tail -1 | awk '{ if (\$4 ~ /%/) {print \$3} else {print \$4} }'
|
||||
)
|
||||
}
|
||||
|
||||
MS_dd()
|
||||
{
|
||||
blocks=\`expr \$3 / 1024\`
|
||||
bytes=\`expr \$3 % 1024\`
|
||||
# Test for ibs, obs and conv feature
|
||||
if dd if=/dev/zero of=/dev/null count=1 ibs=512 obs=512 conv=sync 2> /dev/null; then
|
||||
dd if="\$1" ibs=\$2 skip=1 obs=1024 conv=sync 2> /dev/null | \\
|
||||
{ test \$blocks -gt 0 && dd ibs=1024 obs=1024 count=\$blocks ; \\
|
||||
test \$bytes -gt 0 && dd ibs=1 obs=1024 count=\$bytes ; } 2> /dev/null
|
||||
else
|
||||
dd if="\$1" bs=\$2 skip=1 2> /dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
MS_dd_Progress()
|
||||
{
|
||||
if test x"\$noprogress" = xy; then
|
||||
MS_dd "\$@"
|
||||
return \$?
|
||||
fi
|
||||
file="\$1"
|
||||
offset=\$2
|
||||
length=\$3
|
||||
pos=0
|
||||
bsize=4194304
|
||||
while test \$bsize -gt \$length; do
|
||||
bsize=\`expr \$bsize / 4\`
|
||||
done
|
||||
blocks=\`expr \$length / \$bsize\`
|
||||
bytes=\`expr \$length % \$bsize\`
|
||||
(
|
||||
dd ibs=\$offset skip=1 count=1 2>/dev/null
|
||||
pos=\`expr \$pos \+ \$bsize\`
|
||||
MS_Printf " 0%% " 1>&2
|
||||
if test \$blocks -gt 0; then
|
||||
while test \$pos -le \$length; do
|
||||
dd bs=\$bsize count=1 2>/dev/null
|
||||
pcent=\`expr \$length / 100\`
|
||||
pcent=\`expr \$pos / \$pcent\`
|
||||
if test \$pcent -lt 100; then
|
||||
MS_Printf "\b\b\b\b\b\b\b" 1>&2
|
||||
if test \$pcent -lt 10; then
|
||||
MS_Printf " \$pcent%% " 1>&2
|
||||
else
|
||||
MS_Printf " \$pcent%% " 1>&2
|
||||
fi
|
||||
fi
|
||||
pos=\`expr \$pos \+ \$bsize\`
|
||||
done
|
||||
fi
|
||||
if test \$bytes -gt 0; then
|
||||
dd bs=\$bytes count=1 2>/dev/null
|
||||
fi
|
||||
MS_Printf "\b\b\b\b\b\b\b" 1>&2
|
||||
MS_Printf " 100%% " 1>&2
|
||||
) < "\$file"
|
||||
}
|
||||
|
||||
MS_Help()
|
||||
{
|
||||
cat << EOH >&2
|
||||
Makeself version $MS_VERSION
|
||||
1) Getting help or info about \$0 :
|
||||
\$0 --help Print this message
|
||||
\$0 --info Print embedded info : title, default target directory, embedded script ...
|
||||
\$0 --lsm Print embedded lsm entry (or no LSM)
|
||||
\$0 --list Print the list of files in the archive
|
||||
\$0 --check Checks integrity of the archive
|
||||
\$0 --verify-sig key Verify signature agains a provided key id
|
||||
|
||||
2) Running \$0 :
|
||||
\$0 [options] [--] [additional arguments to embedded script]
|
||||
with following options (in that order)
|
||||
--confirm Ask before running embedded script
|
||||
--quiet Do not print anything except error messages
|
||||
--accept Accept the license
|
||||
--noexec Do not run embedded script (implies --noexec-cleanup)
|
||||
--noexec-cleanup Do not run embedded cleanup script
|
||||
--keep Do not erase target directory after running
|
||||
the embedded script
|
||||
--noprogress Do not show the progress during the decompression
|
||||
--nox11 Do not spawn an xterm
|
||||
--nochown Do not give the target folder to the current user
|
||||
--chown Give the target folder to the current user recursively
|
||||
--nodiskspace Do not check for available disk space
|
||||
--target dir Extract directly to a target directory (absolute or relative)
|
||||
This directory may undergo recursive chown (see --nochown).
|
||||
--tar arg1 [arg2 ...] Access the contents of the archive through the tar command
|
||||
--ssl-pass-src src Use the given src as the source of password to decrypt the data
|
||||
using OpenSSL. See "PASS PHRASE ARGUMENTS" in man openssl.
|
||||
Default is to prompt the user to enter decryption password
|
||||
on the current terminal.
|
||||
--cleanup-args args Arguments to the cleanup script. Wrap in quotes to provide
|
||||
multiple arguments.
|
||||
-- Following arguments will be passed to the embedded script\${helpheader}
|
||||
EOH
|
||||
}
|
||||
|
||||
MS_Verify_Sig()
|
||||
{
|
||||
GPG_PATH=\`exec <&- 2>&-; which gpg || command -v gpg || type gpg\`
|
||||
MKTEMP_PATH=\`exec <&- 2>&-; which mktemp || command -v mktemp || type mktemp\`
|
||||
test -x "\$GPG_PATH" || GPG_PATH=\`exec <&- 2>&-; which gpg || command -v gpg || type gpg\`
|
||||
test -x "\$MKTEMP_PATH" || MKTEMP_PATH=\`exec <&- 2>&-; which mktemp || command -v mktemp || type mktemp\`
|
||||
offset=\`head -n "\$skip" "\$1" | wc -c | sed "s/ //g"\`
|
||||
temp_sig=\`mktemp -t XXXXX\`
|
||||
echo \$SIGNATURE | base64 --decode > "\$temp_sig"
|
||||
gpg_output=\`MS_dd "\$1" \$offset \$totalsize | LC_ALL=C "\$GPG_PATH" --verify "\$temp_sig" - 2>&1\`
|
||||
gpg_res=\$?
|
||||
rm -f "\$temp_sig"
|
||||
if test \$gpg_res -eq 0 && test \`echo \$gpg_output | grep -c Good\` -eq 1; then
|
||||
if test \`echo \$gpg_output | grep -c \$sig_key\` -eq 1; then
|
||||
test x"\$quiet" = xn && echo "GPG signature is good" >&2
|
||||
else
|
||||
echo "GPG Signature key does not match" >&2
|
||||
exit 2
|
||||
fi
|
||||
else
|
||||
test x"\$quiet" = xn && echo "GPG signature failed to verify" >&2
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
MS_Check()
|
||||
{
|
||||
OLD_PATH="\$PATH"
|
||||
PATH=\${GUESS_MD5_PATH:-"\$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
|
||||
MD5_ARG=""
|
||||
MD5_PATH=\`exec <&- 2>&-; which md5sum || command -v md5sum || type md5sum\`
|
||||
test -x "\$MD5_PATH" || MD5_PATH=\`exec <&- 2>&-; which md5 || command -v md5 || type md5\`
|
||||
test -x "\$MD5_PATH" || MD5_PATH=\`exec <&- 2>&-; which digest || command -v digest || type digest\`
|
||||
PATH="\$OLD_PATH"
|
||||
|
||||
SHA_PATH=\`exec <&- 2>&-; which shasum || command -v shasum || type shasum\`
|
||||
test -x "\$SHA_PATH" || SHA_PATH=\`exec <&- 2>&-; which sha256sum || command -v sha256sum || type sha256sum\`
|
||||
|
||||
if test x"\$quiet" = xn; then
|
||||
MS_Printf "Verifying archive integrity..."
|
||||
fi
|
||||
offset=\`head -n "\$skip" "\$1" | wc -c | sed "s/ //g"\`
|
||||
fsize=\`cat "\$1" | wc -c | sed "s/ //g"\`
|
||||
if test \$totalsize -ne \`expr \$fsize - \$offset\`; then
|
||||
echo " Unexpected archive size." >&2
|
||||
exit 2
|
||||
fi
|
||||
verb=\$2
|
||||
i=1
|
||||
for s in \$filesizes
|
||||
do
|
||||
crc=\`echo \$CRCsum | cut -d" " -f\$i\`
|
||||
if test -x "\$SHA_PATH"; then
|
||||
if test x"\`basename \$SHA_PATH\`" = xshasum; then
|
||||
SHA_ARG="-a 256"
|
||||
fi
|
||||
sha=\`echo \$SHA | cut -d" " -f\$i\`
|
||||
if test x"\$sha" = x0000000000000000000000000000000000000000000000000000000000000000; then
|
||||
test x"\$verb" = xy && echo " \$1 does not contain an embedded SHA256 checksum." >&2
|
||||
else
|
||||
shasum=\`MS_dd_Progress "\$1" \$offset \$s | eval "\$SHA_PATH \$SHA_ARG" | cut -b-64\`;
|
||||
if test x"\$shasum" != x"\$sha"; then
|
||||
echo "Error in SHA256 checksums: \$shasum is different from \$sha" >&2
|
||||
exit 2
|
||||
elif test x"\$quiet" = xn; then
|
||||
MS_Printf " SHA256 checksums are OK." >&2
|
||||
fi
|
||||
crc="0000000000";
|
||||
fi
|
||||
fi
|
||||
if test -x "\$MD5_PATH"; then
|
||||
if test x"\`basename \$MD5_PATH\`" = xdigest; then
|
||||
MD5_ARG="-a md5"
|
||||
fi
|
||||
md5=\`echo \$MD5 | cut -d" " -f\$i\`
|
||||
if test x"\$md5" = x00000000000000000000000000000000; then
|
||||
test x"\$verb" = xy && echo " \$1 does not contain an embedded MD5 checksum." >&2
|
||||
else
|
||||
md5sum=\`MS_dd_Progress "\$1" \$offset \$s | eval "\$MD5_PATH \$MD5_ARG" | cut -b-32\`;
|
||||
if test x"\$md5sum" != x"\$md5"; then
|
||||
echo "Error in MD5 checksums: \$md5sum is different from \$md5" >&2
|
||||
exit 2
|
||||
elif test x"\$quiet" = xn; then
|
||||
MS_Printf " MD5 checksums are OK." >&2
|
||||
fi
|
||||
crc="0000000000"; verb=n
|
||||
fi
|
||||
fi
|
||||
if test x"\$crc" = x0000000000; then
|
||||
test x"\$verb" = xy && echo " \$1 does not contain a CRC checksum." >&2
|
||||
else
|
||||
sum1=\`MS_dd_Progress "\$1" \$offset \$s | CMD_ENV=xpg4 cksum | awk '{print \$1}'\`
|
||||
if test x"\$sum1" != x"\$crc"; then
|
||||
echo "Error in checksums: \$sum1 is different from \$crc" >&2
|
||||
exit 2
|
||||
elif test x"\$quiet" = xn; then
|
||||
MS_Printf " CRC checksums are OK." >&2
|
||||
fi
|
||||
fi
|
||||
i=\`expr \$i + 1\`
|
||||
offset=\`expr \$offset + \$s\`
|
||||
done
|
||||
if test x"\$quiet" = xn; then
|
||||
echo " All good."
|
||||
fi
|
||||
}
|
||||
|
||||
MS_Decompress()
|
||||
{
|
||||
if test x"\$decrypt_cmd" != x""; then
|
||||
{ eval "\$decrypt_cmd" || echo " ... Decryption failed." >&2; } | eval "$GUNZIP_CMD"
|
||||
else
|
||||
eval "$GUNZIP_CMD"
|
||||
fi
|
||||
|
||||
if test \$? -ne 0; then
|
||||
echo " ... Decompression failed." >&2
|
||||
fi
|
||||
}
|
||||
|
||||
UnTAR()
|
||||
{
|
||||
if test x"\$quiet" = xn; then
|
||||
tar \$1vf - $UNTAR_EXTRA 2>&1 || { echo " ... Extraction failed." >&2; kill -15 \$$; }
|
||||
else
|
||||
tar \$1f - $UNTAR_EXTRA 2>&1 || { echo Extraction failed. >&2; kill -15 \$$; }
|
||||
fi
|
||||
}
|
||||
|
||||
MS_exec_cleanup() {
|
||||
if test x"\$cleanup" = xy && test x"\$cleanup_script" != x""; then
|
||||
cleanup=n
|
||||
cd "\$tmpdir"
|
||||
eval "\"\$cleanup_script\" \$scriptargs \$cleanupargs"
|
||||
fi
|
||||
}
|
||||
|
||||
MS_cleanup()
|
||||
{
|
||||
echo 'Signal caught, cleaning up' >&2
|
||||
MS_exec_cleanup
|
||||
cd "\$TMPROOT"
|
||||
rm -rf "\$tmpdir"
|
||||
eval \$finish; exit 15
|
||||
}
|
||||
|
||||
finish=true
|
||||
xterm_loop=
|
||||
noprogress=$NOPROGRESS
|
||||
nox11=$NOX11
|
||||
copy=$COPY
|
||||
ownership=$OWNERSHIP
|
||||
verbose=n
|
||||
cleanup=y
|
||||
cleanupargs=
|
||||
sig_key=
|
||||
|
||||
initargs="\$@"
|
||||
|
||||
while true
|
||||
do
|
||||
case "\$1" in
|
||||
-h | --help)
|
||||
MS_Help
|
||||
exit 0
|
||||
;;
|
||||
-q | --quiet)
|
||||
quiet=y
|
||||
noprogress=y
|
||||
shift
|
||||
;;
|
||||
--accept)
|
||||
accept=y
|
||||
shift
|
||||
;;
|
||||
--info)
|
||||
echo Identification: "\$label"
|
||||
echo Target directory: "\$targetdir"
|
||||
echo Uncompressed size: $USIZE KB
|
||||
echo Compression: $COMPRESS
|
||||
if test x"$ENCRYPT" != x""; then
|
||||
echo Encryption: $ENCRYPT
|
||||
fi
|
||||
echo Date of packaging: $DATE
|
||||
echo Built with Makeself version $MS_VERSION
|
||||
echo Build command was: "$MS_COMMAND"
|
||||
if test x"\$script" != x; then
|
||||
echo Script run after extraction:
|
||||
echo " " \$script \$scriptargs
|
||||
fi
|
||||
if test x"$copy" = xcopy; then
|
||||
echo "Archive will copy itself to a temporary location"
|
||||
fi
|
||||
if test x"$NEED_ROOT" = xy; then
|
||||
echo "Root permissions required for extraction"
|
||||
fi
|
||||
if test x"$KEEP" = xy; then
|
||||
echo "directory \$targetdir is permanent"
|
||||
else
|
||||
echo "\$targetdir will be removed after extraction"
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
--dumpconf)
|
||||
echo LABEL=\"\$label\"
|
||||
echo SCRIPT=\"\$script\"
|
||||
echo SCRIPTARGS=\"\$scriptargs\"
|
||||
echo CLEANUPSCRIPT=\"\$cleanup_script\"
|
||||
echo archdirname=\"$archdirname\"
|
||||
echo KEEP=$KEEP
|
||||
echo NOOVERWRITE=$NOOVERWRITE
|
||||
echo COMPRESS=$COMPRESS
|
||||
echo filesizes=\"\$filesizes\"
|
||||
echo totalsize=\"\$totalsize\"
|
||||
echo CRCsum=\"\$CRCsum\"
|
||||
echo MD5sum=\"\$MD5sum\"
|
||||
echo SHAsum=\"\$SHAsum\"
|
||||
echo SKIP=\"\$skip\"
|
||||
exit 0
|
||||
;;
|
||||
--lsm)
|
||||
cat << EOLSM
|
||||
EOF
|
||||
eval "$LSM_CMD"
|
||||
cat << EOF >> "$archname"
|
||||
EOLSM
|
||||
exit 0
|
||||
;;
|
||||
--list)
|
||||
echo Target directory: \$targetdir
|
||||
offset=\`head -n "\$skip" "\$0" | wc -c | sed "s/ //g"\`
|
||||
for s in \$filesizes
|
||||
do
|
||||
MS_dd "\$0" \$offset \$s | MS_Decompress | UnTAR t
|
||||
offset=\`expr \$offset + \$s\`
|
||||
done
|
||||
exit 0
|
||||
;;
|
||||
--tar)
|
||||
offset=\`head -n "\$skip" "\$0" | wc -c | sed "s/ //g"\`
|
||||
arg1="\$2"
|
||||
shift 2 || { MS_Help; exit 1; }
|
||||
for s in \$filesizes
|
||||
do
|
||||
MS_dd "\$0" \$offset \$s | MS_Decompress | tar "\$arg1" - "\$@"
|
||||
offset=\`expr \$offset + \$s\`
|
||||
done
|
||||
exit 0
|
||||
;;
|
||||
--check)
|
||||
MS_Check "\$0" y
|
||||
exit 0
|
||||
;;
|
||||
--verify-sig)
|
||||
sig_key="\$2"
|
||||
shift 2 || { MS_Help; exit 1; }
|
||||
MS_Verify_Sig "\$0"
|
||||
;;
|
||||
--confirm)
|
||||
verbose=y
|
||||
shift
|
||||
;;
|
||||
--noexec)
|
||||
script=""
|
||||
cleanup_script=""
|
||||
shift
|
||||
;;
|
||||
--noexec-cleanup)
|
||||
cleanup_script=""
|
||||
shift
|
||||
;;
|
||||
--keep)
|
||||
keep=y
|
||||
shift
|
||||
;;
|
||||
--target)
|
||||
keep=y
|
||||
targetdir="\${2:-.}"
|
||||
shift 2 || { MS_Help; exit 1; }
|
||||
;;
|
||||
--noprogress)
|
||||
noprogress=y
|
||||
shift
|
||||
;;
|
||||
--nox11)
|
||||
nox11=y
|
||||
shift
|
||||
;;
|
||||
--nochown)
|
||||
ownership=n
|
||||
shift
|
||||
;;
|
||||
--chown)
|
||||
ownership=y
|
||||
shift
|
||||
;;
|
||||
--nodiskspace)
|
||||
nodiskspace=y
|
||||
shift
|
||||
;;
|
||||
--xwin)
|
||||
if test "$NOWAIT" = n; then
|
||||
finish="echo Press Return to close this window...; read junk"
|
||||
fi
|
||||
xterm_loop=1
|
||||
shift
|
||||
;;
|
||||
--phase2)
|
||||
copy=phase2
|
||||
shift
|
||||
;;
|
||||
--ssl-pass-src)
|
||||
if test x"$ENCRYPT" != x"openssl"; then
|
||||
echo "Invalid option --ssl-pass-src: \$0 was not encrypted with OpenSSL!" >&2
|
||||
exit 1
|
||||
fi
|
||||
decrypt_cmd="\$decrypt_cmd -pass \$2"
|
||||
shift 2 || { MS_Help; exit 1; }
|
||||
;;
|
||||
--cleanup-args)
|
||||
cleanupargs="\$2"
|
||||
shift 2 || { MS_Help; exit 1; }
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break ;;
|
||||
-*)
|
||||
echo Unrecognized flag : "\$1" >&2
|
||||
MS_Help
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
break ;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test x"\$quiet" = xy -a x"\$verbose" = xy; then
|
||||
echo Cannot be verbose and quiet at the same time. >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test x"$NEED_ROOT" = xy -a \`id -u\` -ne 0; then
|
||||
echo "Administrative privileges required for this archive (use su or sudo)" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test x"\$copy" \!= xphase2; then
|
||||
MS_PrintLicense
|
||||
fi
|
||||
|
||||
case "\$copy" in
|
||||
copy)
|
||||
tmpdir="\$TMPROOT"/makeself.\$RANDOM.\`date +"%y%m%d%H%M%S"\`.\$\$
|
||||
mkdir "\$tmpdir" || {
|
||||
echo "Could not create temporary directory \$tmpdir" >&2
|
||||
exit 1
|
||||
}
|
||||
SCRIPT_COPY="\$tmpdir/makeself"
|
||||
echo "Copying to a temporary location..." >&2
|
||||
cp "\$0" "\$SCRIPT_COPY"
|
||||
chmod +x "\$SCRIPT_COPY"
|
||||
cd "\$TMPROOT"
|
||||
export USER_PWD="\$tmpdir"
|
||||
exec "\$SCRIPT_COPY" --phase2 -- \$initargs
|
||||
;;
|
||||
phase2)
|
||||
finish="\$finish ; rm -rf \`dirname \$0\`"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test x"\$nox11" = xn; then
|
||||
if test -t 1; then # Do we have a terminal on stdout?
|
||||
:
|
||||
else
|
||||
if test x"\$DISPLAY" != x -a x"\$xterm_loop" = x; then # No, but do we have X?
|
||||
if xset q > /dev/null 2>&1; then # Check for valid DISPLAY variable
|
||||
GUESS_XTERMS="xterm gnome-terminal rxvt dtterm eterm Eterm xfce4-terminal lxterminal kvt konsole aterm terminology"
|
||||
for a in \$GUESS_XTERMS; do
|
||||
if type \$a >/dev/null 2>&1; then
|
||||
XTERM=\$a
|
||||
break
|
||||
fi
|
||||
done
|
||||
chmod a+x \$0 || echo Please add execution rights on \$0 >&2
|
||||
if test \`echo "\$0" | cut -c1\` = "/"; then # Spawn a terminal!
|
||||
exec \$XTERM -e "\$0 --xwin \$initargs"
|
||||
else
|
||||
exec \$XTERM -e "./\$0 --xwin \$initargs"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x"\$targetdir" = x.; then
|
||||
tmpdir="."
|
||||
else
|
||||
if test x"\$keep" = xy; then
|
||||
if test x"\$nooverwrite" = xy && test -d "\$targetdir"; then
|
||||
echo "Target directory \$targetdir already exists, aborting." >&2
|
||||
exit 1
|
||||
fi
|
||||
if test x"\$quiet" = xn; then
|
||||
echo "Creating directory \$targetdir" >&2
|
||||
fi
|
||||
tmpdir="\$targetdir"
|
||||
dashp="-p"
|
||||
else
|
||||
tmpdir="\$TMPROOT/selfgz\$\$\$RANDOM"
|
||||
dashp=""
|
||||
fi
|
||||
mkdir \$dashp "\$tmpdir" || {
|
||||
echo 'Cannot create target directory' \$tmpdir >&2
|
||||
echo 'You should try option --target dir' >&2
|
||||
eval \$finish
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
location="\`pwd\`"
|
||||
if test x"\$SETUP_NOCHECK" != x1; then
|
||||
MS_Check "\$0"
|
||||
fi
|
||||
offset=\`head -n "\$skip" "\$0" | wc -c | sed "s/ //g"\`
|
||||
|
||||
if test x"\$verbose" = xy; then
|
||||
MS_Printf "About to extract $USIZE KB in \$tmpdir ... Proceed ? [Y/n] "
|
||||
read yn
|
||||
if test x"\$yn" = xn; then
|
||||
eval \$finish; exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if test x"\$quiet" = xn; then
|
||||
# Decrypting with openssl will ask for password,
|
||||
# the prompt needs to start on new line
|
||||
if test x"$ENCRYPT" = x"openssl"; then
|
||||
echo "Decrypting and uncompressing \$label..."
|
||||
else
|
||||
MS_Printf "Uncompressing \$label"
|
||||
fi
|
||||
fi
|
||||
res=3
|
||||
if test x"\$keep" = xn; then
|
||||
trap MS_cleanup 1 2 3 15
|
||||
fi
|
||||
|
||||
if test x"\$nodiskspace" = xn; then
|
||||
leftspace=\`MS_diskspace "\$tmpdir"\`
|
||||
if test -n "\$leftspace"; then
|
||||
if test "\$leftspace" -lt $USIZE; then
|
||||
echo
|
||||
echo "Not enough space left in "\`dirname \$tmpdir\`" (\$leftspace KB) to decompress \$0 ($USIZE KB)" >&2
|
||||
echo "Use --nodiskspace option to skip this check and proceed anyway" >&2
|
||||
if test x"\$keep" = xn; then
|
||||
echo "Consider setting TMPDIR to a directory with more free space."
|
||||
fi
|
||||
eval \$finish; exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
for s in \$filesizes
|
||||
do
|
||||
if MS_dd_Progress "\$0" \$offset \$s | MS_Decompress | ( cd "\$tmpdir"; umask \$ORIG_UMASK ; UnTAR xp ) 1>/dev/null; then
|
||||
if test x"\$ownership" = xy; then
|
||||
(cd "\$tmpdir"; chown -R \`id -u\` .; chgrp -R \`id -g\` .)
|
||||
fi
|
||||
else
|
||||
echo >&2
|
||||
echo "Unable to decompress \$0" >&2
|
||||
eval \$finish; exit 1
|
||||
fi
|
||||
offset=\`expr \$offset + \$s\`
|
||||
done
|
||||
if test x"\$quiet" = xn; then
|
||||
echo
|
||||
fi
|
||||
|
||||
cd "\$tmpdir"
|
||||
res=0
|
||||
if test x"\$script" != x; then
|
||||
if test x"\$export_conf" = x"y"; then
|
||||
MS_BUNDLE="\$0"
|
||||
MS_LABEL="\$label"
|
||||
MS_SCRIPT="\$script"
|
||||
MS_SCRIPTARGS="\$scriptargs"
|
||||
MS_ARCHDIRNAME="\$archdirname"
|
||||
MS_KEEP="\$KEEP"
|
||||
MS_NOOVERWRITE="\$NOOVERWRITE"
|
||||
MS_COMPRESS="\$COMPRESS"
|
||||
MS_CLEANUP="\$cleanup"
|
||||
export MS_BUNDLE MS_LABEL MS_SCRIPT MS_SCRIPTARGS
|
||||
export MS_ARCHDIRNAME MS_KEEP MS_NOOVERWRITE MS_COMPRESS
|
||||
fi
|
||||
|
||||
if test x"\$verbose" = x"y"; then
|
||||
MS_Printf "OK to execute: \$script \$scriptargs \$* ? [Y/n] "
|
||||
read yn
|
||||
if test x"\$yn" = x -o x"\$yn" = xy -o x"\$yn" = xY; then
|
||||
eval "\"\$script\" \$scriptargs \"\\\$@\""; res=\$?;
|
||||
fi
|
||||
else
|
||||
eval "\"\$script\" \$scriptargs \"\\\$@\""; res=\$?
|
||||
fi
|
||||
if test "\$res" -ne 0; then
|
||||
test x"\$verbose" = xy && echo "The program '\$script' returned an error code (\$res)" >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
MS_exec_cleanup
|
||||
|
||||
if test x"\$keep" = xn; then
|
||||
cd "\$TMPROOT"
|
||||
rm -rf "\$tmpdir"
|
||||
fi
|
||||
eval \$finish; exit \$res
|
||||
EOF
|
||||
158
scripts/make/makeself.1
Normal file
158
scripts/make/makeself.1
Normal file
@@ -0,0 +1,158 @@
|
||||
.TH "MAKESELF" "1" "2.5.0"
|
||||
.SH "NAME"
|
||||
makeself \- An utility to generate self-extractable archives.
|
||||
.SH "SYNTAX"
|
||||
.B makeself [\fIoptions\fP] archive_dir file_name label
|
||||
.B [\fIstartup_script\fP] [\fIargs\fP]
|
||||
.SH "DESCRIPTION"
|
||||
This program is a free (GPL) shell utility designed to create self-extractable
|
||||
compressed archives from a directory. The resulting file appears as a shell script, and can be launched as is. The archive
|
||||
will then uncompress itself to a temporary directory and an optional arbitrary
|
||||
command will be executed (for example an installation script).
|
||||
.TP
|
||||
Makeself archives also include checksums for integrity self-validation (CRC and/or MD5/SHA256 checksums).
|
||||
.SH "OPTIONS"
|
||||
The following options are supported:
|
||||
.TP 15
|
||||
.B -v, --version
|
||||
Prints out the makeself version number and exits.
|
||||
.TP
|
||||
.B -h, --help
|
||||
Print out help information.
|
||||
.TP
|
||||
.B --tar-quietly
|
||||
Suppress verbose output from the tar command
|
||||
.TP
|
||||
.B --quiet
|
||||
Do not print any messages other than errors
|
||||
.TP
|
||||
.B --gzip
|
||||
Compress using gzip (default if detected).
|
||||
.TP
|
||||
.B --bzip2
|
||||
Compress using bzip2.
|
||||
.TP
|
||||
.B --bzip3
|
||||
Compress using bzip3.
|
||||
.TP
|
||||
.B --pbzip2
|
||||
Compress using pbzip2.
|
||||
.TP
|
||||
.B --xz
|
||||
Compress using xz.
|
||||
.TP
|
||||
.B --lzo
|
||||
Compress using lzop.
|
||||
.TP
|
||||
.B --lz4
|
||||
Compress using lz4.
|
||||
.TP
|
||||
.B --pigz
|
||||
Compress using pigz.
|
||||
.TP
|
||||
.B --zstd
|
||||
Compress using zstd.
|
||||
.TP
|
||||
.B --base64
|
||||
Encode the archive to ASCII in Base64 format instead of compressing (base64 command required).
|
||||
.TP
|
||||
.B --gpg-encrypt
|
||||
Encrypt the archive using GPG. This will prompt for a password to encrypt with.
|
||||
.TP
|
||||
.B --ssl-encrypt
|
||||
Encrypt the archive using OpenSSL. This will prompt for a password to encrypt with.
|
||||
.TP
|
||||
.B --keep-umask
|
||||
Keep the umask set to shell default, rather than overriding when executing the self-extracting archive.
|
||||
.TP
|
||||
.B --compress
|
||||
Compress using the UNIX 'compress' command.
|
||||
.TP
|
||||
.B --nocomp
|
||||
Do not compress the data.
|
||||
.TP
|
||||
.B --complevel lvl
|
||||
Specify the compression level for gzip, bzip2, pbzip2, xz, zstd, lzo or lz4. Defaults to 9.
|
||||
.TP
|
||||
.B --threads num
|
||||
Specify the number of threads to be used by compressors that support parallelization.
|
||||
.TP
|
||||
.B --tar-format opt
|
||||
Specify the tar archive format (default is ustar); you may use any value accepted by your tar command (such as posix, v7, etc).
|
||||
.TP
|
||||
.B --tar-extra opt
|
||||
Append more options to the tar command line.
|
||||
.TP
|
||||
.B --notemp
|
||||
The archive will create archive_dir in the current directory and
|
||||
uncompress in ./archive_dir.
|
||||
.TP
|
||||
.B --copy
|
||||
Upon extraction, the archive will first copy itself to a temporary directory.
|
||||
.TP
|
||||
.B --append
|
||||
Append more files to an existing makeself archive. The label and startup scripts will then be ignored.
|
||||
.TP
|
||||
.B --current
|
||||
Files will be extracted to the current directory. Both --current and --target dir imply --notemp.
|
||||
.TP
|
||||
.B --target dir
|
||||
Extract directly to a target directory. Directory path can be either absolute or relative.
|
||||
.TP
|
||||
.B --header file
|
||||
Specify location of the header script.
|
||||
.TP
|
||||
.B --help-header file
|
||||
Add a header to the archive's help output.
|
||||
.TP
|
||||
.B --cleanup file
|
||||
Specify a cleanup script that executes on interrupt and when finished successfully.
|
||||
.TP
|
||||
.B --follow
|
||||
Follow the symlinks in the archive.
|
||||
.TP
|
||||
.B --noprogress
|
||||
Do not show the progress during the decompression.
|
||||
.TP
|
||||
.B --nooverwrite
|
||||
Do not extract the archive if the target directory already exists.
|
||||
.TP
|
||||
.B --nox11
|
||||
Disable automatic spawn of an xterm if running in X11.
|
||||
.TP
|
||||
.B --nowait
|
||||
Do not wait for user input after executing embedded program from an xterm.
|
||||
.TP
|
||||
.B --nomd5
|
||||
Do not create a MD5 checksum for the archive.
|
||||
.TP
|
||||
.B --sha256
|
||||
Adds a SHA256 checksum for the archive.
|
||||
.TP
|
||||
.B --nocrc
|
||||
Do not create a CRC32 checksum for the archive.
|
||||
.TP
|
||||
.B --lsm file
|
||||
LSM file describing the package.
|
||||
.TP
|
||||
.B --license file
|
||||
Append a license file.
|
||||
.TP
|
||||
.B --packaging-date date
|
||||
Use provided string as the packaging date instead of the current date.
|
||||
.TP
|
||||
.SH "EXAMPLES"
|
||||
Here is an example, assuming the user has a package image stored in a /home/joe/mysoft,
|
||||
and he wants to generate a self-extracting package named mysoft.sh, which will launch
|
||||
the "setup" script initially stored in /home/joe/mysoft:
|
||||
.TP
|
||||
makeself.sh /home/joe/mysoft mysoft.sh "Joe's Nice Software Package" ./setup
|
||||
.TP
|
||||
Here is also how I created the makeself.run archive which contains the Makeself distribution:
|
||||
.TP
|
||||
makeself.sh --notemp makeself makeself.run "Makeself by Stephane Peter" echo "Makeself has extracted itself"
|
||||
.SH "AUTHORS"
|
||||
Makeself has been written by Stephane Peter <megastep@megastep.org>.
|
||||
.BR
|
||||
This man page was originally written by Bartosz Fenski <fenio@o2.pl> for the
|
||||
Debian GNU/Linux distribution (but it may be used by others).
|
||||
776
scripts/make/makeself.sh
Executable file
776
scripts/make/makeself.sh
Executable file
@@ -0,0 +1,776 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Makeself version 2.5.x
|
||||
# by Stephane Peter <megastep@megastep.org>
|
||||
#
|
||||
# Utility to create self-extracting tar.gz archives.
|
||||
# The resulting archive is a file holding the tar.gz archive with
|
||||
# a small Shell script stub that uncompresses the archive to a temporary
|
||||
# directory and then executes a given script from withing that directory.
|
||||
#
|
||||
# Makeself home page: https://makeself.io/ - Version history available on GitHub
|
||||
#
|
||||
# (C) 1998-2023 by Stephane Peter <megastep@megastep.org>
|
||||
#
|
||||
# This software is released under the terms of the GNU GPL version 2 and above
|
||||
# Please read the license at http://www.gnu.org/copyleft/gpl.html
|
||||
# Self-extracting archives created with this script are explictly NOT released under the term of the GPL
|
||||
#
|
||||
|
||||
MS_VERSION=2.5.0
|
||||
MS_COMMAND="$0"
|
||||
unset CDPATH
|
||||
|
||||
for f in ${1+"$@"}; do
|
||||
MS_COMMAND="$MS_COMMAND \\\\
|
||||
\\\"$f\\\""
|
||||
done
|
||||
|
||||
# For Solaris systems
|
||||
if test -d /usr/xpg4/bin; then
|
||||
PATH=/usr/xpg4/bin:$PATH
|
||||
export PATH
|
||||
fi
|
||||
|
||||
# Procedures
|
||||
|
||||
MS_Usage()
|
||||
{
|
||||
echo "Usage: $0 [args] archive_dir file_name label startup_script [script_args]"
|
||||
echo "args can be one or more of the following :"
|
||||
echo " --version | -v : Print out Makeself version number and exit"
|
||||
echo " --help | -h : Print out this help message"
|
||||
echo " --tar-quietly : Suppress verbose output from the tar command"
|
||||
echo " --quiet | -q : Do not print any messages other than errors."
|
||||
echo " --gzip : Compress using gzip (default if detected)"
|
||||
echo " --pigz : Compress with pigz"
|
||||
echo " --zstd : Compress with zstd"
|
||||
echo " --bzip2 : Compress using bzip2 instead of gzip"
|
||||
echo " --pbzip2 : Compress using pbzip2 instead of gzip"
|
||||
echo " --bzip3 : Compress using bzip3 instead of gzip"
|
||||
echo " --xz : Compress using xz instead of gzip"
|
||||
echo " --lzo : Compress using lzop instead of gzip"
|
||||
echo " --lz4 : Compress using lz4 instead of gzip"
|
||||
echo " --compress : Compress using the UNIX 'compress' command"
|
||||
echo " --complevel lvl : Compression level for gzip pigz zstd xz lzo lz4 bzip2 pbzip2 and bzip3 (default 9)"
|
||||
echo " --threads thds : Number of threads to be used by compressors that support parallelization."
|
||||
echo " Omit to use compressor's default. Most useful (and required) for opting"
|
||||
echo " into xz's threading, usually with '--threads=0' for all available cores."
|
||||
echo " pbzip2 and pigz are parallel by default, and setting this value allows"
|
||||
echo " limiting the number of threads they use."
|
||||
echo " --base64 : Instead of compressing, encode the data using base64"
|
||||
echo " --gpg-encrypt : Instead of compressing, encrypt the data using GPG"
|
||||
echo " --gpg-asymmetric-encrypt-sign"
|
||||
echo " : Instead of compressing, asymmetrically encrypt and sign the data using GPG"
|
||||
echo " --gpg-extra opt : Append more options to the gpg command line"
|
||||
echo " --ssl-encrypt : Instead of compressing, encrypt the data using OpenSSL"
|
||||
echo " --ssl-passwd pass : Use the given password to encrypt the data using OpenSSL"
|
||||
echo " --ssl-pass-src src : Use the given src as the source of password to encrypt the data"
|
||||
echo " using OpenSSL. See \"PASS PHRASE ARGUMENTS\" in man openssl."
|
||||
echo " If this option is not supplied, the user will be asked to enter"
|
||||
echo " encryption password on the current terminal."
|
||||
echo " --ssl-no-md : Do not use \"-md\" option not supported by older OpenSSL."
|
||||
echo " --nochown : Do not give the target folder to the current user (default)"
|
||||
echo " --chown : Give the target folder to the current user recursively"
|
||||
echo " --nocomp : Do not compress the data"
|
||||
echo " --notemp : The archive will create archive_dir in the current directory"
|
||||
echo " and uncompress in ./archive_dir"
|
||||
echo " Note: persistent archives do not strictly require a startup_script"
|
||||
echo " --needroot : Check that the root user is extracting the archive before proceeding"
|
||||
echo " --copy : Upon extraction, the archive will first copy itself to"
|
||||
echo " a temporary directory"
|
||||
echo " --append : Append more files to an existing Makeself archive"
|
||||
echo " The label and startup scripts will then be ignored"
|
||||
echo " --target dir : Extract directly to a target directory"
|
||||
echo " directory path can be either absolute or relative"
|
||||
echo " --current : Files will be extracted to the current directory"
|
||||
echo " Both --current and --target imply --notemp, and do not require a startup_script"
|
||||
echo " --nooverwrite : Do not extract the archive if the specified target directory exists"
|
||||
echo " --tar-format opt : Specify a tar archive format (default is ustar)"
|
||||
echo " --tar-extra opt : Append more options to the tar command line"
|
||||
echo " --untar-extra opt : Append more options to the during the extraction of the tar archive"
|
||||
echo " --nomd5 : Don't calculate an MD5 for archive"
|
||||
echo " --nocrc : Don't calculate a CRC for archive"
|
||||
echo " --sha256 : Compute a SHA256 checksum for the archive"
|
||||
echo " --header file : Specify location of the header script"
|
||||
echo " --cleanup file : Specify a cleanup script that executes on interrupt and when finished successfully."
|
||||
echo " --follow : Follow the symlinks in the archive"
|
||||
echo " --noprogress : Do not show the progress during the decompression"
|
||||
echo " --nox11 : Disable automatic spawn of a xterm"
|
||||
echo " --nowait : Do not wait for user input after executing embedded"
|
||||
echo " program from an xterm"
|
||||
echo " --sign passphrase : Signature private key to sign the package with"
|
||||
echo " --lsm file : LSM file describing the package"
|
||||
echo " --license file : Append a license file"
|
||||
echo " --help-header file : Add a header to the archive's --help output"
|
||||
echo " --packaging-date date"
|
||||
echo " : Use provided string as the packaging date"
|
||||
echo " instead of the current date."
|
||||
echo
|
||||
echo " --keep-umask : Keep the umask set to shell default, rather than overriding when executing self-extracting archive."
|
||||
echo " --export-conf : Export configuration variables to startup_script"
|
||||
echo
|
||||
echo "Do not forget to give a fully qualified startup script name"
|
||||
echo "(i.e. with a ./ prefix if inside the archive)."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Default settings
|
||||
if type gzip >/dev/null 2>&1; then
|
||||
COMPRESS=gzip
|
||||
elif type compress >/dev/null 2>&1; then
|
||||
COMPRESS=compress
|
||||
else
|
||||
echo "ERROR: missing commands: gzip, compress" >&2
|
||||
MS_Usage
|
||||
fi
|
||||
ENCRYPT=n
|
||||
PASSWD=""
|
||||
PASSWD_SRC=""
|
||||
OPENSSL_NO_MD=n
|
||||
COMPRESS_LEVEL=9
|
||||
DEFAULT_THREADS=123456 # Sentinel value
|
||||
THREADS=$DEFAULT_THREADS
|
||||
KEEP=n
|
||||
CURRENT=n
|
||||
NOX11=n
|
||||
NOWAIT=n
|
||||
APPEND=n
|
||||
TAR_QUIETLY=n
|
||||
KEEP_UMASK=n
|
||||
QUIET=n
|
||||
NOPROGRESS=n
|
||||
COPY=none
|
||||
NEED_ROOT=n
|
||||
TAR_ARGS=rvf
|
||||
TAR_FORMAT=ustar
|
||||
TAR_EXTRA=""
|
||||
GPG_EXTRA=""
|
||||
DU_ARGS=-ks
|
||||
HEADER=`dirname "$0"`/makeself-header.sh
|
||||
SIGNATURE=""
|
||||
TARGETDIR=""
|
||||
NOOVERWRITE=n
|
||||
DATE=`LC_ALL=C date`
|
||||
EXPORT_CONF=n
|
||||
SHA256=n
|
||||
OWNERSHIP=n
|
||||
SIGN=n
|
||||
GPG_PASSPHRASE=""
|
||||
|
||||
# LSM file stuff
|
||||
LSM_CMD="echo No LSM. >> \"\$archname\""
|
||||
|
||||
while true
|
||||
do
|
||||
case "$1" in
|
||||
--version | -v)
|
||||
echo Makeself version $MS_VERSION
|
||||
exit 0
|
||||
;;
|
||||
--pbzip2)
|
||||
COMPRESS=pbzip2
|
||||
shift
|
||||
;;
|
||||
--bzip3)
|
||||
COMPRESS=bzip3
|
||||
shift
|
||||
;;
|
||||
--bzip2)
|
||||
COMPRESS=bzip2
|
||||
shift
|
||||
;;
|
||||
--gzip)
|
||||
COMPRESS=gzip
|
||||
shift
|
||||
;;
|
||||
--pigz)
|
||||
COMPRESS=pigz
|
||||
shift
|
||||
;;
|
||||
--zstd)
|
||||
COMPRESS=zstd
|
||||
shift
|
||||
;;
|
||||
--xz)
|
||||
COMPRESS=xz
|
||||
shift
|
||||
;;
|
||||
--lzo)
|
||||
COMPRESS=lzo
|
||||
shift
|
||||
;;
|
||||
--lz4)
|
||||
COMPRESS=lz4
|
||||
shift
|
||||
;;
|
||||
--compress)
|
||||
COMPRESS=compress
|
||||
shift
|
||||
;;
|
||||
--base64)
|
||||
COMPRESS=base64
|
||||
shift
|
||||
;;
|
||||
--gpg-encrypt)
|
||||
COMPRESS=gpg
|
||||
shift
|
||||
;;
|
||||
--gpg-asymmetric-encrypt-sign)
|
||||
COMPRESS=gpg-asymmetric
|
||||
shift
|
||||
;;
|
||||
--gpg-extra)
|
||||
GPG_EXTRA="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--ssl-encrypt)
|
||||
ENCRYPT=openssl
|
||||
shift
|
||||
;;
|
||||
--ssl-passwd)
|
||||
PASSWD=$2
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--ssl-pass-src)
|
||||
PASSWD_SRC=$2
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--ssl-no-md)
|
||||
OPENSSL_NO_MD=y
|
||||
shift
|
||||
;;
|
||||
--nocomp)
|
||||
COMPRESS=none
|
||||
shift
|
||||
;;
|
||||
--complevel)
|
||||
COMPRESS_LEVEL="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--threads)
|
||||
THREADS="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--nochown)
|
||||
OWNERSHIP=n
|
||||
shift
|
||||
;;
|
||||
--chown)
|
||||
OWNERSHIP=y
|
||||
shift
|
||||
;;
|
||||
--notemp)
|
||||
KEEP=y
|
||||
shift
|
||||
;;
|
||||
--copy)
|
||||
COPY=copy
|
||||
shift
|
||||
;;
|
||||
--current)
|
||||
CURRENT=y
|
||||
KEEP=y
|
||||
shift
|
||||
;;
|
||||
--tar-format)
|
||||
TAR_FORMAT="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--tar-extra)
|
||||
TAR_EXTRA="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--untar-extra)
|
||||
UNTAR_EXTRA="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--target)
|
||||
TARGETDIR="$2"
|
||||
KEEP=y
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--sign)
|
||||
SIGN=y
|
||||
GPG_PASSPHRASE="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--nooverwrite)
|
||||
NOOVERWRITE=y
|
||||
shift
|
||||
;;
|
||||
--needroot)
|
||||
NEED_ROOT=y
|
||||
shift
|
||||
;;
|
||||
--header)
|
||||
HEADER="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--cleanup)
|
||||
CLEANUP_SCRIPT="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--license)
|
||||
# We need to escape all characters having a special meaning in double quotes
|
||||
LICENSE=$(sed 's/\\/\\\\/g; s/"/\\\"/g; s/`/\\\`/g; s/\$/\\\$/g' "$2")
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--follow)
|
||||
TAR_ARGS=rvhf
|
||||
DU_ARGS=-ksL
|
||||
shift
|
||||
;;
|
||||
--noprogress)
|
||||
NOPROGRESS=y
|
||||
shift
|
||||
;;
|
||||
--nox11)
|
||||
NOX11=y
|
||||
shift
|
||||
;;
|
||||
--nowait)
|
||||
NOWAIT=y
|
||||
shift
|
||||
;;
|
||||
--nomd5)
|
||||
NOMD5=y
|
||||
shift
|
||||
;;
|
||||
--sha256)
|
||||
SHA256=y
|
||||
shift
|
||||
;;
|
||||
--nocrc)
|
||||
NOCRC=y
|
||||
shift
|
||||
;;
|
||||
--append)
|
||||
APPEND=y
|
||||
shift
|
||||
;;
|
||||
--lsm)
|
||||
LSM_CMD="awk 1 \"$2\" >> \"\$archname\""
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--packaging-date)
|
||||
DATE="$2"
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
;;
|
||||
--help-header)
|
||||
HELPHEADER=`sed -e "s/'/'\\\\\''/g" $2`
|
||||
shift 2 || { MS_Usage; exit 1; }
|
||||
[ -n "$HELPHEADER" ] && HELPHEADER="$HELPHEADER
|
||||
"
|
||||
;;
|
||||
--tar-quietly)
|
||||
TAR_QUIETLY=y
|
||||
shift
|
||||
;;
|
||||
--keep-umask)
|
||||
KEEP_UMASK=y
|
||||
shift
|
||||
;;
|
||||
--export-conf)
|
||||
EXPORT_CONF=y
|
||||
shift
|
||||
;;
|
||||
-q | --quiet)
|
||||
QUIET=y
|
||||
shift
|
||||
;;
|
||||
-h | --help)
|
||||
MS_Usage
|
||||
;;
|
||||
-*)
|
||||
echo Unrecognized flag : "$1"
|
||||
MS_Usage
|
||||
;;
|
||||
*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test $# -lt 1; then
|
||||
MS_Usage
|
||||
else
|
||||
if test -d "$1"; then
|
||||
archdir="$1"
|
||||
else
|
||||
echo "Directory $1 does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
archname="$2"
|
||||
|
||||
if test "$QUIET" = "y" || test "$TAR_QUIETLY" = "y"; then
|
||||
if test "$TAR_ARGS" = "rvf"; then
|
||||
TAR_ARGS="rf"
|
||||
elif test "$TAR_ARGS" = "rvhf"; then
|
||||
TAR_ARGS="rhf"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$APPEND" = y; then
|
||||
if test $# -lt 2; then
|
||||
MS_Usage
|
||||
fi
|
||||
|
||||
# Gather the info from the original archive
|
||||
OLDENV=`sh "$archname" --dumpconf`
|
||||
if test $? -ne 0; then
|
||||
echo "Unable to update archive: $archname" >&2
|
||||
exit 1
|
||||
else
|
||||
eval "$OLDENV"
|
||||
OLDSKIP=`expr $SKIP + 1`
|
||||
fi
|
||||
else
|
||||
if test "$KEEP" = n -a $# = 3; then
|
||||
echo "ERROR: Making a temporary archive with no embedded command does not make sense!" >&2
|
||||
echo >&2
|
||||
MS_Usage
|
||||
fi
|
||||
# We don't want to create an absolute directory unless a target directory is defined
|
||||
if test "$CURRENT" = y; then
|
||||
archdirname="."
|
||||
elif test x"$TARGETDIR" != x; then
|
||||
archdirname="$TARGETDIR"
|
||||
else
|
||||
archdirname=`basename "$1"`
|
||||
fi
|
||||
|
||||
if test $# -lt 3; then
|
||||
MS_Usage
|
||||
fi
|
||||
|
||||
LABEL="$3"
|
||||
SCRIPT="$4"
|
||||
test "x$SCRIPT" = x || shift 1
|
||||
shift 3
|
||||
SCRIPTARGS="$*"
|
||||
fi
|
||||
|
||||
if test "$KEEP" = n -a "$CURRENT" = y; then
|
||||
echo "ERROR: It is A VERY DANGEROUS IDEA to try to combine --notemp and --current." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case $COMPRESS in
|
||||
gzip)
|
||||
GZIP_CMD="gzip -c$COMPRESS_LEVEL"
|
||||
GUNZIP_CMD="gzip -cd"
|
||||
;;
|
||||
pigz)
|
||||
GZIP_CMD="pigz -$COMPRESS_LEVEL"
|
||||
if test $THREADS -ne $DEFAULT_THREADS; then # Leave as the default if threads not indicated
|
||||
GZIP_CMD="$GZIP_CMD --processes $THREADS"
|
||||
fi
|
||||
GUNZIP_CMD="gzip -cd"
|
||||
;;
|
||||
zstd)
|
||||
GZIP_CMD="zstd -$COMPRESS_LEVEL"
|
||||
if test $THREADS -ne $DEFAULT_THREADS; then # Leave as the default if threads not indicated
|
||||
GZIP_CMD="$GZIP_CMD --threads=$THREADS"
|
||||
fi
|
||||
GUNZIP_CMD="zstd -cd"
|
||||
;;
|
||||
pbzip2)
|
||||
GZIP_CMD="pbzip2 -c$COMPRESS_LEVEL"
|
||||
if test $THREADS -ne $DEFAULT_THREADS; then # Leave as the default if threads not indicated
|
||||
GZIP_CMD="$GZIP_CMD -p$THREADS"
|
||||
fi
|
||||
GUNZIP_CMD="bzip2 -d"
|
||||
;;
|
||||
bzip3)
|
||||
# Map the compression level to a block size in MiB as 2^(level-1).
|
||||
BZ3_COMPRESS_LEVEL=`echo "2^($COMPRESS_LEVEL-1)" | bc`
|
||||
GZIP_CMD="bzip3 -b$BZ3_COMPRESS_LEVEL"
|
||||
if test $THREADS -ne $DEFAULT_THREADS; then # Leave as the default if threads not indicated
|
||||
GZIP_CMD="$GZIP_CMD -j$THREADS"
|
||||
fi
|
||||
JOBS=`echo "10-$COMPRESS_LEVEL" | bc`
|
||||
GUNZIP_CMD="bzip3 -dj$JOBS"
|
||||
;;
|
||||
bzip2)
|
||||
GZIP_CMD="bzip2 -$COMPRESS_LEVEL"
|
||||
GUNZIP_CMD="bzip2 -d"
|
||||
;;
|
||||
xz)
|
||||
GZIP_CMD="xz -c$COMPRESS_LEVEL"
|
||||
# Must opt-in by specifying a value since not all versions of xz support threads
|
||||
if test $THREADS -ne $DEFAULT_THREADS; then
|
||||
GZIP_CMD="$GZIP_CMD --threads=$THREADS"
|
||||
fi
|
||||
GUNZIP_CMD="xz -d"
|
||||
;;
|
||||
lzo)
|
||||
GZIP_CMD="lzop -c$COMPRESS_LEVEL"
|
||||
GUNZIP_CMD="lzop -d"
|
||||
;;
|
||||
lz4)
|
||||
GZIP_CMD="lz4 -c$COMPRESS_LEVEL"
|
||||
GUNZIP_CMD="lz4 -d"
|
||||
;;
|
||||
base64)
|
||||
GZIP_CMD="base64"
|
||||
GUNZIP_CMD="base64 --decode -i -"
|
||||
;;
|
||||
gpg)
|
||||
GZIP_CMD="gpg $GPG_EXTRA -ac -z$COMPRESS_LEVEL"
|
||||
GUNZIP_CMD="gpg -d"
|
||||
ENCRYPT="gpg"
|
||||
;;
|
||||
gpg-asymmetric)
|
||||
GZIP_CMD="gpg $GPG_EXTRA -z$COMPRESS_LEVEL -es"
|
||||
GUNZIP_CMD="gpg --yes -d"
|
||||
ENCRYPT="gpg"
|
||||
;;
|
||||
compress)
|
||||
GZIP_CMD="compress -fc"
|
||||
GUNZIP_CMD="(type compress >/dev/null 2>&1 && compress -fcd || gzip -cd)"
|
||||
;;
|
||||
none)
|
||||
GZIP_CMD="cat"
|
||||
GUNZIP_CMD="cat"
|
||||
;;
|
||||
esac
|
||||
|
||||
if test x"$ENCRYPT" = x"openssl"; then
|
||||
if test x"$APPEND" = x"y"; then
|
||||
echo "Appending to existing archive is not compatible with OpenSSL encryption." >&2
|
||||
fi
|
||||
|
||||
ENCRYPT_CMD="openssl enc -aes-256-cbc -salt"
|
||||
DECRYPT_CMD="openssl enc -aes-256-cbc -d"
|
||||
|
||||
if test x"$OPENSSL_NO_MD" != x"y"; then
|
||||
ENCRYPT_CMD="$ENCRYPT_CMD -md sha256"
|
||||
DECRYPT_CMD="$DECRYPT_CMD -md sha256"
|
||||
fi
|
||||
|
||||
if test -n "$PASSWD_SRC"; then
|
||||
ENCRYPT_CMD="$ENCRYPT_CMD -pass $PASSWD_SRC"
|
||||
elif test -n "$PASSWD"; then
|
||||
ENCRYPT_CMD="$ENCRYPT_CMD -pass pass:$PASSWD"
|
||||
fi
|
||||
fi
|
||||
|
||||
tmpfile="${TMPDIR:-/tmp}/mkself$$"
|
||||
|
||||
if test -f "$HEADER"; then
|
||||
oldarchname="$archname"
|
||||
archname="$tmpfile"
|
||||
# Generate a fake header to count its lines
|
||||
SKIP=0
|
||||
. "$HEADER"
|
||||
SKIP=`cat "$tmpfile" |wc -l`
|
||||
# Get rid of any spaces
|
||||
SKIP=`expr $SKIP`
|
||||
rm -f "$tmpfile"
|
||||
if test "$QUIET" = "n"; then
|
||||
echo "Header is $SKIP lines long" >&2
|
||||
fi
|
||||
archname="$oldarchname"
|
||||
else
|
||||
echo "Unable to open header file: $HEADER" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test "$QUIET" = "n"; then
|
||||
echo
|
||||
fi
|
||||
|
||||
if test "$APPEND" = n; then
|
||||
if test -f "$archname"; then
|
||||
echo "WARNING: Overwriting existing file: $archname" >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
USIZE=`du $DU_ARGS "$archdir" | awk '{print $1}'`
|
||||
|
||||
if test "." = "$archdirname"; then
|
||||
if test "$KEEP" = n; then
|
||||
archdirname="makeself-$$-`date +%Y%m%d%H%M%S`"
|
||||
fi
|
||||
fi
|
||||
|
||||
test -d "$archdir" || { echo "Error: $archdir does not exist."; rm -f "$tmpfile"; exit 1; }
|
||||
if test "$QUIET" = "n"; then
|
||||
echo "About to compress $USIZE KB of data..."
|
||||
echo "Adding files to archive named \"$archname\"..."
|
||||
fi
|
||||
|
||||
# See if we have GNU tar
|
||||
TAR=`exec <&- 2>&-; which gtar || command -v gtar || type gtar`
|
||||
test -x "$TAR" || TAR=`exec <&- 2>&-; which bsdtar || command -v bsdtar || type bsdtar`
|
||||
test -x "$TAR" || TAR=tar
|
||||
|
||||
tmparch="${TMPDIR:-/tmp}/mkself$$.tar"
|
||||
(
|
||||
if test "$APPEND" = "y"; then
|
||||
tail -n "+$OLDSKIP" "$archname" | eval "$GUNZIP_CMD" > "$tmparch"
|
||||
fi
|
||||
cd "$archdir"
|
||||
# "Determining if a directory is empty"
|
||||
# https://www.etalabs.net/sh_tricks.html
|
||||
find . \
|
||||
\( \
|
||||
! -type d \
|
||||
-o \
|
||||
\( -links 2 -exec sh -c '
|
||||
is_empty () (
|
||||
cd "$1"
|
||||
set -- .[!.]* ; test -f "$1" && return 1
|
||||
set -- ..?* ; test -f "$1" && return 1
|
||||
set -- * ; test -f "$1" && return 1
|
||||
return 0
|
||||
)
|
||||
is_empty "$0"' {} \; \
|
||||
\) \
|
||||
\) -print \
|
||||
| LC_ALL=C sort \
|
||||
| sed 's/./\\&/g' \
|
||||
| xargs $TAR $TAR_EXTRA --format $TAR_FORMAT -$TAR_ARGS "$tmparch"
|
||||
) || {
|
||||
echo "ERROR: failed to create temporary archive: $tmparch"
|
||||
rm -f "$tmparch" "$tmpfile"
|
||||
exit 1
|
||||
}
|
||||
|
||||
USIZE=`du $DU_ARGS "$tmparch" | awk '{print $1}'`
|
||||
|
||||
eval "$GZIP_CMD" <"$tmparch" >"$tmpfile" || {
|
||||
echo "ERROR: failed to create temporary file: $tmpfile"
|
||||
rm -f "$tmparch" "$tmpfile"
|
||||
exit 1
|
||||
}
|
||||
rm -f "$tmparch"
|
||||
|
||||
if test x"$ENCRYPT" = x"openssl"; then
|
||||
echo "About to encrypt archive \"$archname\"..."
|
||||
{ eval "$ENCRYPT_CMD -in $tmpfile -out ${tmpfile}.enc" && mv -f ${tmpfile}.enc $tmpfile; } || \
|
||||
{ echo Aborting: could not encrypt temporary file: "$tmpfile".; rm -f "$tmpfile"; exit 1; }
|
||||
fi
|
||||
|
||||
fsize=`cat "$tmpfile" | wc -c | tr -d " "`
|
||||
|
||||
# Compute the checksums
|
||||
|
||||
shasum=0000000000000000000000000000000000000000000000000000000000000000
|
||||
md5sum=00000000000000000000000000000000
|
||||
crcsum=0000000000
|
||||
|
||||
if test "$NOCRC" = y; then
|
||||
if test "$QUIET" = "n"; then
|
||||
echo "skipping crc at user request"
|
||||
fi
|
||||
else
|
||||
crcsum=`CMD_ENV=xpg4 cksum < "$tmpfile" | sed -e 's/ /Z/' -e 's/ /Z/' | cut -dZ -f1`
|
||||
if test "$QUIET" = "n"; then
|
||||
echo "CRC: $crcsum"
|
||||
fi
|
||||
fi
|
||||
|
||||
if test "$SHA256" = y; then
|
||||
SHA_PATH=`exec <&- 2>&-; which shasum || command -v shasum || type shasum`
|
||||
if test -x "$SHA_PATH"; then
|
||||
shasum=`eval "$SHA_PATH -a 256" < "$tmpfile" | cut -b-64`
|
||||
else
|
||||
SHA_PATH=`exec <&- 2>&-; which sha256sum || command -v sha256sum || type sha256sum`
|
||||
shasum=`eval "$SHA_PATH" < "$tmpfile" | cut -b-64`
|
||||
fi
|
||||
if test "$QUIET" = "n"; then
|
||||
if test -x "$SHA_PATH"; then
|
||||
echo "SHA256: $shasum"
|
||||
else
|
||||
echo "SHA256: none, SHA command not found"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "$NOMD5" = y; then
|
||||
if test "$QUIET" = "n"; then
|
||||
echo "Skipping md5sum at user request"
|
||||
fi
|
||||
else
|
||||
# Try to locate a MD5 binary
|
||||
OLD_PATH=$PATH
|
||||
PATH=${GUESS_MD5_PATH:-"$OLD_PATH:/bin:/usr/bin:/sbin:/usr/local/ssl/bin:/usr/local/bin:/opt/openssl/bin"}
|
||||
MD5_ARG=""
|
||||
MD5_PATH=`exec <&- 2>&-; which md5sum || command -v md5sum || type md5sum`
|
||||
test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which md5 || command -v md5 || type md5`
|
||||
test -x "$MD5_PATH" || MD5_PATH=`exec <&- 2>&-; which digest || command -v digest || type digest`
|
||||
PATH=$OLD_PATH
|
||||
if test -x "$MD5_PATH"; then
|
||||
if test `basename ${MD5_PATH}`x = digestx; then
|
||||
MD5_ARG="-a md5"
|
||||
fi
|
||||
md5sum=`eval "$MD5_PATH $MD5_ARG" < "$tmpfile" | cut -b-32`
|
||||
if test "$QUIET" = "n"; then
|
||||
echo "MD5: $md5sum"
|
||||
fi
|
||||
else
|
||||
if test "$QUIET" = "n"; then
|
||||
echo "MD5: none, MD5 command not found"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test "$SIGN" = y; then
|
||||
GPG_PATH=`exec <&- 2>&-; which gpg || command -v gpg || type gpg`
|
||||
if test -x "$GPG_PATH"; then
|
||||
SIGNATURE=`$GPG_PATH --pinentry-mode=loopback --batch --yes $GPG_EXTRA --passphrase "$GPG_PASSPHRASE" --output - --detach-sig $tmpfile | base64 | tr -d \\\\n`
|
||||
if test "$QUIET" = "n"; then
|
||||
echo "Signature: $SIGNATURE"
|
||||
fi
|
||||
else
|
||||
echo "Missing gpg command" >&2
|
||||
fi
|
||||
fi
|
||||
|
||||
totalsize=0
|
||||
for size in $fsize;
|
||||
do
|
||||
totalsize=`expr $totalsize + $size`
|
||||
done
|
||||
|
||||
if test "$APPEND" = y; then
|
||||
mv "$archname" "$archname".bak || exit
|
||||
|
||||
# Prepare entry for new archive
|
||||
filesizes="$fsize"
|
||||
CRCsum="$crcsum"
|
||||
MD5sum="$md5sum"
|
||||
SHAsum="$shasum"
|
||||
Signature="$SIGNATURE"
|
||||
# Generate the header
|
||||
. "$HEADER"
|
||||
# Append the new data
|
||||
cat "$tmpfile" >> "$archname"
|
||||
|
||||
chmod +x "$archname"
|
||||
rm -f "$archname".bak
|
||||
if test "$QUIET" = "n"; then
|
||||
echo "Self-extractable archive \"$archname\" successfully updated."
|
||||
fi
|
||||
else
|
||||
filesizes="$fsize"
|
||||
CRCsum="$crcsum"
|
||||
MD5sum="$md5sum"
|
||||
SHAsum="$shasum"
|
||||
Signature="$SIGNATURE"
|
||||
|
||||
# Generate the header
|
||||
. "$HEADER"
|
||||
|
||||
# Append the compressed tar data after the stub
|
||||
if test "$QUIET" = "n"; then
|
||||
echo
|
||||
fi
|
||||
cat "$tmpfile" >> "$archname"
|
||||
chmod +x "$archname"
|
||||
if test "$QUIET" = "n"; then
|
||||
echo Self-extractable archive \"$archname\" successfully created.
|
||||
fi
|
||||
fi
|
||||
rm -f "$tmpfile"
|
||||
Reference in New Issue
Block a user