tree: full rework

Signed-off-by: AuxXxilium <info@auxxxilium.tech>
This commit is contained in:
AuxXxilium 2024-07-26 16:57:14 +02:00
parent 3a28bf0ee9
commit 68ca715f7a
11 changed files with 60 additions and 110 deletions

View File

@ -831,6 +831,7 @@ function updateMenu() {
6 "Update LKMs" \ 6 "Update LKMs" \
7 "Update Modules" \ 7 "Update Modules" \
8 "Update Patches" \ 8 "Update Patches" \
9 "Switch Buildroot" \
2>"${TMP_PATH}/resp" 2>"${TMP_PATH}/resp"
[ $? -ne 0 ] && break [ $? -ne 0 ] && break
case "$(cat ${TMP_PATH}/resp)" in case "$(cat ${TMP_PATH}/resp)" in
@ -1006,6 +1007,25 @@ function updateMenu() {
writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}" writeConfigKey "arc.builddone" "false" "${USER_CONFIG_FILE}"
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")" BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
;; ;;
9)
# Ask for Arc Branch
dialog --clear --backtitle "$(backtitle)" --title "Switch Buildroot" \
--menu "Which Branch?" 0 0 0 \
1 "x - latest" \
2 "s - stable" \
2>"${TMP_PATH}/opts"
opts=$(cat ${TMP_PATH}/opts)
[ -z "${opts}" ] && return 1
if [ ${opts} -eq 1 ]; then
ARCBRANCH="x"
elif [ ${opts} -eq 2 ]; then
ARCBRANCH="s"
fi
writeConfigKey "arc.branch" "${ARCBRANCH}" "${USER_CONFIG_FILE}"
ARCBRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
dialog --backtitle "$(backtitle)" --title "Switch Buildroot" --aspect 18 \
--msgbox "Updates are using ${ARCBRANCH} Branch!" 0 0
;;
esac esac
done done
return return
@ -1047,6 +1067,7 @@ function sysinfo() {
VENDOR=$(dmesg 2>/dev/null | grep -i "DMI:" | sed 's/\[.*\] DMI: //i') VENDOR=$(dmesg 2>/dev/null | grep -i "DMI:" | sed 's/\[.*\] DMI: //i')
ETHX="$(ls /sys/class/net/ 2>/dev/null | grep eth)" ETHX="$(ls /sys/class/net/ 2>/dev/null | grep eth)"
ETHN="$(echo ${ETHX} | wc -w)" ETHN="$(echo ${ETHX} | wc -w)"
ARCBRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")" CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")" BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"
if [ "${CONFDONE}" == "true" ]; then if [ "${CONFDONE}" == "true" ]; then
@ -1143,7 +1164,7 @@ function sysinfo() {
TEXT+="\n\Zb$(lspci -s ${NETBUS} -nnk | awk '{$1=""}1' | awk '{$1=$1};1')\Zn\n" TEXT+="\n\Zb$(lspci -s ${NETBUS} -nnk | awk '{$1=""}1' | awk '{$1=$1};1')\Zn\n"
done done
# Print Config Informations # Print Config Informations
TEXT+="\n\Z4> Arc: ${ARC_VERSION}\Zn" TEXT+="\n\Z4> Arc: ${ARC_VERSION} | Branch: ${ARCBRANCH}\Zn"
TEXT+="\n Subversion: \ZbAddons ${ADDONSVERSION} | Configs ${CONFIGSVERSION} | LKM ${LKMVERSION} | Modules ${MODULESVERSION} | Patches ${PATCHESVERSION}\Zn" 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 | Build: \Zb${CONFDONE} | ${BUILDDONE}\Zn"
TEXT+="\n Config Version: \Zb${CONFIGVER}\Zn" TEXT+="\n Config Version: \Zb${CONFIGVER}\Zn"

View File

@ -57,6 +57,7 @@ RAIDCONTROLLER="$(readConfigKey "device.raidcontroller" "${USER_CONFIG_FILE}")"
SASCONTROLLER="$(readConfigKey "device.sascontroller" "${USER_CONFIG_FILE}")" SASCONTROLLER="$(readConfigKey "device.sascontroller" "${USER_CONFIG_FILE}")"
# Get Config/Build Status # Get Config/Build Status
ARCBRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")" CONFDONE="$(readConfigKey "arc.confdone" "${USER_CONFIG_FILE}")"
BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")" BUILDDONE="$(readConfigKey "arc.builddone" "${USER_CONFIG_FILE}")"

View File

@ -7,17 +7,6 @@ function bootDSM () {
# Check if machine has EFI # Check if machine has EFI
[ -d /sys/firmware/efi ] && EFI=1 || EFI=0 [ -d /sys/firmware/efi ] && EFI=1 || EFI=0
# Proc open nvidia driver when booting
NVPCI_ADDR=$(lspci -nd 10de: | grep -e 0300 -e 0302 | awk '{print $1}')
if [ -n "${NVPCI_ADDR}" ]; then
modprobe -r nouveau || true
NVDEV_PATH=$(find /sys/devices -name *${NVPCI_ADDR} | grep -v supplier)
for DEV_PATH in ${NVDEV_PATH}; do
if [ -e ${DEV_PATH}/reset ]; then
echo 1 > ${DEV_PATH}/reset || true
fi
done
fi
# Print Title centralized # Print Title centralized
clear clear
COLUMNS=${COLUMNS:-50} COLUMNS=${COLUMNS:-50}
@ -127,7 +116,7 @@ function bootDSM () {
CMDLINE["syno_ttyS0"]="serial,0x3f8" CMDLINE["syno_ttyS0"]="serial,0x3f8"
CMDLINE["syno_ttyS1"]="serial,0x2f8" CMDLINE["syno_ttyS1"]="serial,0x2f8"
else else
# CMDLINE["SMBusHddDynamicPower"]="1" CMDLINE["SMBusHddDynamicPower"]="1"
CMDLINE["syno_hdd_detect"]="0" CMDLINE["syno_hdd_detect"]="0"
CMDLINE["syno_hdd_powerup_seq"]="0" CMDLINE["syno_hdd_powerup_seq"]="0"
fi fi
@ -139,7 +128,7 @@ function bootDSM () {
CMDLINE['earlycon']="uart8250,io,0x3f8,115200n8" CMDLINE['earlycon']="uart8250,io,0x3f8,115200n8"
CMDLINE['console']="ttyS0,115200n8" CMDLINE['console']="ttyS0,115200n8"
CMDLINE['consoleblank']="600" CMDLINE['consoleblank']="600"
CMDLINE['no_console_suspend']="1" # CMDLINE['no_console_suspend']="1"
CMDLINE['root']="/dev/md0" CMDLINE['root']="/dev/md0"
CMDLINE['rootwait']="" CMDLINE['rootwait']=""
CMDLINE['loglevel']="15" CMDLINE['loglevel']="15"
@ -160,8 +149,8 @@ function bootDSM () {
CMDLINE['modprobe.blacklist']+="mpt3sas" CMDLINE['modprobe.blacklist']+="mpt3sas"
fi fi
fi fi
CMDLINE['kvm.ignore_msrs']="1" # CMDLINE['kvm.ignore_msrs']="1"
CMDLINE['kvm.report_ignored_msrs']="0" # CMDLINE['kvm.report_ignored_msrs']="0"
if echo "apollolake geminilake" | grep -wq "${PLATFORM}"; then if echo "apollolake geminilake" | grep -wq "${PLATFORM}"; then
CMDLINE["intel_iommu"]="igfx_off" CMDLINE["intel_iommu"]="igfx_off"
fi fi
@ -307,6 +296,16 @@ function bootDSM () {
# Clear logs for dbgutils addons # Clear logs for dbgutils addons
rm -rf "${PART1_PATH}/logs" >/dev/null 2>&1 || true rm -rf "${PART1_PATH}/logs" >/dev/null 2>&1 || true
# Unload all network interfaces
for D in $(readlink /sys/class/net/*/device/driver); do rmmod -f "$(basename ${D})" 2>/dev/null || true; done
# Unload all graphics drivers
# for D in $(readlink /sys/class/drm/*/device/driver); do rmmod -f "$(basename ${D})" 2>/dev/null || true; done
for D in $(lsmod | grep -E '^(nouveau|amdgpu|radeon|i915)' | awk '{print $1}'); do rmmod -f "${D}" 2>/dev/null || true; done
for I in $(find /sys/devices -name uevent -exec bash -c 'cat {} 2>/dev/null | grep -Eq "PCI_CLASS=0?30[0|1|2]00" && dirname {}' \;); do
[ -e ${I}/reset ] && cat ${I}/vendor >/dev/null | grep -iq 0x10de && echo 1 >${I}/reset || true # Proc open nvidia driver when booting
done
KERNELLOAD="$(readConfigKey "kernelload" "${USER_CONFIG_FILE}")" KERNELLOAD="$(readConfigKey "kernelload" "${USER_CONFIG_FILE}")"
[ "${KERNELLOAD}" == "kexec" ] && kexec -a -e || poweroff [ "${KERNELLOAD}" == "kexec" ] && kexec -a -e || poweroff
exit 0 exit 0

View File

@ -7,6 +7,7 @@
function upgradeLoader () { function upgradeLoader () {
local ARCNIC="$(readConfigKey "arc.nic" "${USER_CONFIG_FILE}")" local ARCNIC="$(readConfigKey "arc.nic" "${USER_CONFIG_FILE}")"
local AUTOMATED="$(readConfigKey "automated" "${USER_CONFIG_FILE}")" local AUTOMATED="$(readConfigKey "automated" "${USER_CONFIG_FILE}")"
local ARCBRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
if [ -z "${1}" ]; then if [ -z "${1}" ]; then
# Check for new Version # Check for new Version
idx=0 idx=0
@ -43,35 +44,35 @@ function upgradeLoader () {
( (
# Download update file # Download update file
echo "Downloading ${TAG}" echo "Downloading ${TAG}"
local URL="https://github.com/AuxXxilium/arc/releases/download/${TAG}/arc-${TAG}.img.zip" local URL="https://github.com/AuxXxilium/arc/releases/download/${TAG}/arc-${ARCBRANCH}-${TAG}.img.zip"
if [ "${ARCNIC}" == "auto" ]; then if [ "${ARCNIC}" == "auto" ]; then
curl -#kL "${URL}" -o "${TMP_PATH}/arc-${TAG}.img.zip" 2>&1 | while IFS= read -r -n1 char; do curl -#kL "${URL}" -o "${TMP_PATH}/arc-${ARCBRANCH}-${TAG}.img.zip" 2>&1 | while IFS= read -r -n1 char; do
[[ $char =~ [0-9] ]] && keep=1 ; [[ $char =~ [0-9] ]] && keep=1 ;
[[ $char == % ]] && echo "Download: $progress%" && progress="" && keep=0 ; [[ $char == % ]] && echo "Download: $progress%" && progress="" && keep=0 ;
[[ $keep == 1 ]] && progress="$progress$char" ; [[ $keep == 1 ]] && progress="$progress$char" ;
done done
else else
curl --interface ${ARCNIC} -#kL "${URL}" -o "${TMP_PATH}/arc-${TAG}.img.zip" 2>&1 | while IFS= read -r -n1 char; do curl --interface ${ARCNIC} -#kL "${URL}" -o "${TMP_PATH}/arc-${ARCBRANCH}-${TAG}.img.zip" 2>&1 | while IFS= read -r -n1 char; do
[[ $char =~ [0-9] ]] && keep=1 ; [[ $char =~ [0-9] ]] && keep=1 ;
[[ $char == % ]] && echo "Download: $progress%" && progress="" && keep=0 ; [[ $char == % ]] && echo "Download: $progress%" && progress="" && keep=0 ;
[[ $keep == 1 ]] && progress="$progress$char" ; [[ $keep == 1 ]] && progress="$progress$char" ;
done done
fi fi
if [ -f "${TMP_PATH}/arc-${TAG}.img.zip" ]; then if [ -f "${TMP_PATH}/arc-${ARCBRANCH}-${TAG}.img.zip" ]; then
echo "Downloading Upgradefile successful!" echo "Downloading Upgradefile successful!"
else else
echo "Error downloading Upgradefile!" echo "Error downloading Upgradefile!"
sleep 5 sleep 5
return 1 return 1
fi fi
unzip -oq "${TMP_PATH}/arc-${TAG}.img.zip" -d "${TMP_PATH}" unzip -oq "${TMP_PATH}/arc-${ARCBRANCH}-${TAG}.img.zip" -d "${TMP_PATH}"
rm -f "${TMP_PATH}/arc-${TAG}.img.zip" >/dev/null rm -f "${TMP_PATH}/arc-${ARCBRANCH}-${TAG}.img.zip" >/dev/null
echo "Installing new Loader Image..." echo "Installing new Loader Image..."
# Process complete update # Process complete update
umount "${PART1_PATH}" "${PART2_PATH}" "${PART3_PATH}" umount "${PART1_PATH}" "${PART2_PATH}" "${PART3_PATH}"
dd if="${TMP_PATH}/arc.img" of=$(blkid | grep 'LABEL="ARC3"' | cut -d3 -f1) bs=1M conv=fsync dd if="${TMP_PATH}/arc-${ARCBRANCH}.img" of=$(blkid | grep 'LABEL="ARC3"' | cut -d3 -f1) bs=1M conv=fsync
# Ask for Boot # Ask for Boot
rm -f "${TMP_PATH}/arc.img" >/dev/null rm -f "${TMP_PATH}/arc-${ARCBRANCH}.img" >/dev/null
echo "Upgrade done! -> Rebooting..." echo "Upgrade done! -> Rebooting..."
sleep 2 sleep 2
) 2>&1 | dialog --backtitle "$(backtitle)" --title "Upgrade Loader" \ ) 2>&1 | dialog --backtitle "$(backtitle)" --title "Upgrade Loader" \
@ -85,6 +86,7 @@ function upgradeLoader () {
function updateLoader() { function updateLoader() {
local ARCNIC="$(readConfigKey "arc.nic" "${USER_CONFIG_FILE}")" local ARCNIC="$(readConfigKey "arc.nic" "${USER_CONFIG_FILE}")"
local AUTOMATED="$(readConfigKey "automated" "${USER_CONFIG_FILE}")" local AUTOMATED="$(readConfigKey "automated" "${USER_CONFIG_FILE}")"
local ARCBRANCH="$(readConfigKey "arc.branch" "${USER_CONFIG_FILE}")"
if [ -z "${1}" ]; then if [ -z "${1}" ]; then
# Check for new Version # Check for new Version
idx=0 idx=0
@ -126,38 +128,37 @@ function updateLoader() {
( (
# Download update file # Download update file
echo "Downloading ${TAG}" echo "Downloading ${TAG}"
local URL="https://github.com/AuxXxilium/arc/releases/download/${TAG}/update.zip" local URL="https://github.com/AuxXxilium/arc/releases/download/${TAG}/update-${ARCBRANCH}.zip"
local SHA="https://github.com/AuxXxilium/arc/releases/download/${TAG}/checksum.sha256" local SHA="https://github.com/AuxXxilium/arc/releases/download/${TAG}/checksum-${ARCBRANCH}.sha256"
if [ "${ARCNIC}" == "auto" ]; then if [ "${ARCNIC}" == "auto" ]; then
curl -#kL "${URL}" -o "${TMP_PATH}/update.zip" 2>&1 | while IFS= read -r -n1 char; do curl -#kL "${URL}" -o "${TMP_PATH}/update-${ARCBRANCH}.zip" 2>&1 | while IFS= read -r -n1 char; do
[[ $char =~ [0-9] ]] && keep=1 ; [[ $char =~ [0-9] ]] && keep=1 ;
[[ $char == % ]] && echo "Download: $progress%" && progress="" && keep=0 ; [[ $char == % ]] && echo "Download: $progress%" && progress="" && keep=0 ;
[[ $keep == 1 ]] && progress="$progress$char" ; [[ $keep == 1 ]] && progress="$progress$char" ;
done done
curl -skL "${SHA}" -o "${TMP_PATH}/checksum.sha256" curl -skL "${SHA}" -o "${TMP_PATH}/checksum-${ARCBRANCH}.sha256"
else else
curl --interface ${ARCNIC} -#kL "${URL}" -o "${TMP_PATH}/update.zip" 2>&1 | while IFS= read -r -n1 char; do curl --interface ${ARCNIC} -#kL "${URL}" -o "${TMP_PATH}/update-${ARCBRANCH}.zip" 2>&1 | while IFS= read -r -n1 char; do
[[ $char =~ [0-9] ]] && keep=1 ; [[ $char =~ [0-9] ]] && keep=1 ;
[[ $char == % ]] && echo "Download: $progress%" && progress="" && keep=0 ; [[ $char == % ]] && echo "Download: $progress%" && progress="" && keep=0 ;
[[ $keep == 1 ]] && progress="$progress$char" ; [[ $keep == 1 ]] && progress="$progress$char" ;
done done
curl --interface ${ARCNIC} -skL "${SHA}" -o "${TMP_PATH}/checksum.sha256" curl --interface ${ARCNIC} -skL "${SHA}" -o "${TMP_PATH}/checksum-${ARCBRANCH}.sha256"
fi fi
if [ "$(sha256sum "${TMP_PATH}/update.zip" | awk '{print $1}')" = "$(cat ${TMP_PATH}/checksum.sha256 | awk '{print $1}')" ]; then if [ "$(sha256sum "${TMP_PATH}/update-${ARCBRANCH}.zip" | awk '{print $1}')" = "$(cat ${TMP_PATH}/checksum-${ARCBRANCH}.sha256 | awk '{print $1}')" ]; then
echo "Download successful!" echo "Download successful!"
unzip -oq "${TMP_PATH}/update.zip" -d "${TMP_PATH}" unzip -oq "${TMP_PATH}/update-${ARCBRANCH}.zip" -d "${TMP_PATH}"
echo "Installing new Loader Image..." echo "Installing new Loader Image..."
mv -f "${TMP_PATH}/grub.cfg" "${USER_GRUB_CONFIG}" mv -f "${TMP_PATH}/grub.cfg" "${USER_GRUB_CONFIG}"
mv -f "${TMP_PATH}/ARC-VERSION" "${PART1_PATH}/ARC-VERSION" mv -f "${TMP_PATH}/ARC-VERSION" "${PART1_PATH}/ARC-VERSION"
mv -f "${TMP_PATH}/bzImage-arc" "${ARC_BZIMAGE_FILE}" mv -f "${TMP_PATH}/bzImage-arc" "${ARC_BZIMAGE_FILE}"
mv -f "${TMP_PATH}/initrd-arc" "${ARC_RAMDISK_FILE}" mv -f "${TMP_PATH}/initrd-arc" "${ARC_RAMDISK_FILE}"
rm -f "${TMP_PATH}/update.zip" rm -f "${TMP_PATH}/update-${ARCBRANCH}.zip"
else else
echo "Error getting new Version!" echo "Error getting new Version!"
sleep 5 sleep 5
updateFailed updateFailed
fi fi
[ -f "${TMP_PATH}/update.zip" ] && rm -f "${TMP_PATH}/update.zip"
echo "Update done!" echo "Update done!"
sleep 2 sleep 2
) 2>&1 | dialog --backtitle "$(backtitle)" --title "Update Loader" \ ) 2>&1 | dialog --backtitle "$(backtitle)" --title "Update Loader" \

View File

@ -82,6 +82,7 @@ if grep -q "automated_arc" /proc/cmdline; then
else else
writeConfigKey "automated" "false" "${USER_CONFIG_FILE}" writeConfigKey "automated" "false" "${USER_CONFIG_FILE}"
fi fi
[ echo "${ARC_VERSION}" | grep -q "s" ] && writeConfigKey "arc.branch" "s" "${USER_CONFIG_FILE}" || writeConfigKey "arc.branch" "x" "${USER_CONFIG_FILE}"
[ -f "${PART3_PATH}/automated" ] && rm -f "${PART3_PATH}/automated" >/dev/null [ -f "${PART3_PATH}/automated" ] && rm -f "${PART3_PATH}/automated" >/dev/null
# Check for compatibility # Check for compatibility
compatboot compatboot
@ -110,6 +111,7 @@ for ETH in ${ETHX}; do
sleep 1 sleep 1
fi fi
[ "${ETH::3}" = "eth" ] && ethtool -s ${ETH} wol g 2>/dev/null || true [ "${ETH::3}" = "eth" ] && ethtool -s ${ETH} wol g 2>/dev/null || true
[ "${ETH::3}" = "eth" ] && ethtool -K ${ETH} rxhash off 2>/dev/null || true
initConfigKey "${ETH}" "${MACR}" "${USER_CONFIG_FILE}" initConfigKey "${ETH}" "${MACR}" "${USER_CONFIG_FILE}"
done done
ETHN="$(echo ${ETHX} | wc -w)" ETHN="$(echo ${ETHX} | wc -w)"

View File

@ -78,7 +78,7 @@ set menu_color_normal=white/black
set menu_color_highlight=white/red set menu_color_highlight=white/red
set color_normal=white/black set color_normal=white/black
set ARC_CMDLINE="earlyprintk earlycon=uart8250,io,0x3f8,115200n8 console=ttyS0,115200n8 root=/dev/ram rootwait pcie_aspm=off net.ifnames=0 nox2apic nomodeset iommu=off" set ARC_CMDLINE="earlyprintk earlycon=uart8250,io,0x3f8,115200n8 console=ttyS0,115200n8 root=/dev/ram rootwait pcie_aspm=off net.ifnames=0 nox2apic nomodeset intremap=off"
search --set=root --label "ARC3" search --set=root --label "ARC3"
if [ -e /automated ]; then if [ -e /automated ]; then

Binary file not shown.

View File

@ -204,7 +204,7 @@ function getTheme() {
function getBuildroot() { function getBuildroot() {
echo "Getting Buildroot begin" echo "Getting Buildroot begin"
TAG="${1:-latest}" TAG="${1:-latest}"
local DEST_PATH="${2:-br}" local DEST_PATH="${2:-brx}"
if [ "${TAG}" = "latest" ]; then if [ "${TAG}" = "latest" ]; then
TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-buildroot/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')" TAG="$(curl -s https://api.github.com/repos/AuxXxilium/arc-buildroot/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')"

View File

@ -1,74 +0,0 @@
#!/usr/bin/env bash
#
# Copyright (C) 2023 AuxXxilium <https://github.com/AuxXxilium> and Ing <https://github.com/wjz304>
#
# This is free software, licensed under the MIT License.
# See /LICENSE for more information.
#
GRUB=${1:-"grub-2.12"}
BIOS=${2:-"i386-pc i386-efi x86_64-efi"}
NAME=${3:-"ARC"}
curl -#kLO https://ftp.gnu.org/gnu/grub/${GRUB}.tar.gz
tar -zxvf ${GRUB}.tar.gz
pushd ${GRUB}
echo depends bli part_gpt > grub-core/extra_deps.lst
for B in ${BIOS}; do
b=${B}
b=(${b//-/ })
echo "Make ${b[@]} ..."
mkdir -p ${B}
pushd ${B}
../configure --prefix=$PWD/usr -sbindir=$PWD/sbin --sysconfdir=$PWD/etc --disable-werror --target=${b[0]} --with-platform=${b[1]}
make
make install
popd
done
popd
rm -f grub.img
dd if=/dev/zero of=grub.img bs=1M seek=1024 count=0
echo -e "n\np\n1\n\n+50M\nn\np\n2\n\n+50M\nn\np\n3\n\n\na\n1\nw\nq\n" | fdisk grub.img
fdisk -l grub.img
LOOPX=$(sudo losetup -f)
sudo losetup -P ${LOOPX} grub.img
sudo mkdosfs -F32 -n ${NAME}1 ${LOOPX}p1
sudo mkfs.ext2 -F -L ${NAME}2 ${LOOPX}p2
sudo mkfs.ext4 -F -L ${NAME}3 ${LOOPX}p3
rm -rf ${NAME}1
mkdir -p ${NAME}1
sudo mount ${LOOPX}p1 ${NAME}1
sudo mkdir -p ${NAME}1/EFI
sudo mkdir -p ${NAME}1/boot/grub
cat >device.map <<EOF
(hd0) ${LOOPX}
EOF
sudo mv device.map ${NAME}1/boot/grub/device.map
for B in ${BIOS}; do
args=""
args+=" ${LOOPX} --target=${B} --no-floppy --recheck --grub-mkdevicemap=${NAME}1/boot/grub/device.map --boot-directory=${NAME}1/boot"
if [[ "${B}" == *"efi" ]]; then
args+=" --efi-directory=${NAME}1 --removable --no-nvram"
else
args+=" --root-directory=${NAME}1"
fi
sudo ${GRUB}/${B}/grub-install ${args}
done
if [ -d ${NAME}1/boot/grub/fonts ] && [ -f /usr/share/grub/unicode.pf2 ]; then
sudo cp /usr/share/grub/unicode.pf2 ${NAME}1/boot/grub/fonts
fi
sudo sync
sudo umount ${LOOPX}p1
sudo losetup -d ${LOOPX}
sudo rm -rf ${NAME}1
gzip grub.img