Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Clover-LegacyDuet #688

Merged
merged 2 commits into from
May 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ jobs:
- name: Build Clover Pack
run: |
chmod +x ./buildme
chmod +x ./Clover_Duet.command
cp -rf ./Clover_Duet.command ./CloverPackage/CloverV2/
./buildme "" ci
- name: Prepare Release Packs
run: |
Expand Down
225 changes: 225 additions & 0 deletions Clover_Duet.command
Original file line number Diff line number Diff line change
@@ -0,0 +1,225 @@
#!/bin/bash
# Clover-LegacyDuet: by chris1111
# Thanks: CloverHackyColor
# Thanks: Acidanthera
apptitle="Clover-LegacyDuet"
version="1.0"
# Set Icon directory and file
iconfile="/System/Library/CoreServices/Finder.app/Contents/Resources/Finder.icns"
printf '\e[8;47;83t'
PARENTDIR=$(dirname "$0")
cd "$PARENTDIR"
echo " "
echo "🚫 Do not use this program on a disk where Clover or OpenCore is already installed!"
rm -rf ./boot*
Sleep 1
cp -Rp ./Bootloaders/x64/{boot6,boot7} ./
cp -Rp ./BootSectors/{boot0af,boot1f32} ./

# Install Clover booter on physical disk.

#get BOOT File
if [ "$2" == "" ]; then
echo " "
echo "Choose (6 or 7) for the Booter
6 = -> Clover EFI 64-bits using SATA to access drives.
7 = -> Clover EFI 64-bit using Bios Block I/O to access drives. "
echo "Make a choice followed by Enter: "

while [ -z "$BOOT" ]; do
read BOOT
done

else
BOOT="$2"
fi

export ARCHS=$BOOT

if [ ! -f "boot${ARCHS}" ] || [ ! -f boot0af ] || [ ! -f boot1f32 ] || [ ! -f EFI/CLOVER/CLOVERX64.efi ]; then
echo "Clover is not build?"
echo "Or you probably have change directory on this package?"
exit 1
fi

if [ "$(uname)" = "Linux" ]; then
if [ "$EUID" -ne 0 ]
then echo "Please run this script as root"
exit
fi
if [ "$(which lsblk)" = "" ]; then
echo "lsblk tool is missing! Try installing util-linux package"
exit 1
fi
if [ "$(which fdisk)" = "" ]; then
echo "fdisk tool is missing!"
exit 1
fi

rm -rf ./origbs
rm -rf ./newbs
rm -rf ./boot*

echo "Select the disk where you want to install boot files:"
lsblk -d | tail -n+2 | cut -d" " -f1
echo "Example: sda"
read -r DRIVE

DRIVE="/dev/${DRIVE}"

if ! lsblk "$DRIVE"; then
echo Disk "${DRIVE}" not found
exit 1
fi

echo "Choose EFI partition on selected disk:"
lsblk -f "${DRIVE}"
echo "Example: sda1"
read -r EFI_PART

EFI_PART="/dev/${EFI_PART}"

if ! lsblk -f "$EFI_PART" | grep -q -e FAT32 -e vfat; then
echo "No FAT32 partition to install"
exit 1
fi

# Write MBR
dd if=boot0af of="$DRIVE" bs=1 count=446 conv=notrunc || exit 1

umount "${EFI_PART}"

dd if="${EFI_PART}" count=1 of=origbs
cp -v boot1f32 newbs
dd if=origbs of=newbs skip=3 seek=3 bs=1 count=87 conv=notrunc
dd if=/dev/random of=newbs skip=496 seek=496 bs=1 count=14 conv=notrunc
dd if=newbs of="${EFI_PART}"

p=/tmp/$(uuidgen)/EFI
mkdir -p "${p}" || exit 1
mount -t vfat "${EFI_PART}" "${p}" -o rw,noatime,uid="$(id -u)",gid="$(id -g)" || exit 1

cp -v "boot${ARCHS}" "${p}/boot" || exit 1
echo "Install EFI -> /Volumes/EFI/EFI Wait. . ."
cp -Rp "EFI" "${p}" || exit 1

echo Check "${p}" boot drive to install Clover Duet

DISK_SCHEME=$(fdisk -l "${DRIVE}" | sed -n 's/.*Disklabel type: *//p')
if [ "$DISK_SCHEME" != "gpt" ]; then
BOOT_FLAG=$(dd if="$DRIVE" bs=1 count=1 status=none skip=$((0x1BE)) | od -t x1 -A n | tr -d ' ')
if [ "$BOOT_FLAG" != "80" ]; then
fdisk "$DRIVE" <<END
p
a
1
w
END
fi
fi
else
rm -rf ./origbs
rm -rf ./newbs

diskutil list
echo "Disable SIP in the case of any problems with installation!!!"
echo "Enter disk number to install to:"
read -r N

if ! diskutil info disk"${N}" | grep -q "/dev/disk"; then
echo Disk "$N" not found
exit 1
fi

if ! diskutil info disk"${N}"s1 | grep -q -e FAT_32 -e EFI; then
echo "No FAT32 partition to install"
exit 1
fi

# Write MBR
echo "Type your password to continue!"
sudo fdisk -uy -f boot0af /dev/rdisk"${N}" || exit 1
echo " "
echo "Clover Duet boot$ARCHS$BO0T will be Install to ➤ EFI System Partition"
echo " "
diskutil umount disk"${N}"s1
sudo dd if=/dev/rdisk"${N}"s1 count=1 of=origbs
cp -v boot1f32 newbs
sudo dd if=origbs of=newbs skip=3 seek=3 bs=1 count=87 conv=notrunc
dd if=/dev/random of=newbs skip=496 seek=496 bs=1 count=14 conv=notrunc
sudo dd if=newbs of=/dev/rdisk"${N}"s1
#if [[ "$(sudo diskutil mount disk"${N}"s1)" == *"mounted" ]]
if sudo diskutil mount disk"${N}"s1 | grep -q mounted; then
cp -v "boot${ARCHS}" "$(diskutil info disk"${N}"s1 | sed -n 's/.*Mount Point: *//p')/boot"
else
p=/tmp/$(uuidgen)/EFI
mkdir -p "${p}" || exit 1
sudo mount_msdos /dev/disk"${N}"s1 "${p}" || exit 1
cp -v "boot${ARCHS}" "${p}/boot" || exit 1
fi

if diskutil info disk"${N}" | grep -q FDisk_partition_scheme; then
sudo fdisk -e /dev/rdisk"$N" <<-MAKEACTIVE
p
f 1
w
y
q
MAKEACTIVE
fi
fi

Sleep 1
rm -rf ./origbs
rm -rf ./newbs
rm -rf ./boot*

while true
do
response=$(osascript -e 'tell app "System Events" to display dialog "Clover Duet is installed!
You can install a Clover EFI folder that you created.
You can use Generic Clover EFI folder from this release.\n\nCancel to not install EFI folder." buttons {"Cancel","Generic Clover EFI","Personal EFI"} default button 3 with title "'"$apptitle"' '"$version"'" with icon POSIX file "'"$iconfile"'" ')

action=$(echo $response | cut -d ':' -f2)

# Exit if Canceled
if [ ! "$action" ] ; then
osascript -e 'display notification "Program closing" with title "'"$apptitle"'" subtitle "User cancelled"'
echo "User cancelled Program Clover-LegacyDuet closing in 2 sec"
Sleep 2
exit 1
fi

if [ "$action" == "Generic Clover EFI" ] ; then
mv ./EFI/CLOVER/config-sample.plist ./EFI/CLOVER/config.plist
Sleep 1
cp -Rp "EFI" "$(diskutil info disk${N}s1 | sed -n 's/.*Mount Point: *//p')"
echo "Install EFI -> /Volumes/EFI/EFI Done!"
mv ./EFI/CLOVER/config.plist ./EFI/CLOVER/config-sample.plist
Sleep 2
Open -R "$(diskutil info disk"${N}"s1 | sed -n 's/.*Mount Point: *//p')/boot"
exit 1
fi

if [ "$action" == "Personal EFI" ] ; then
echo " "
#get EFI folder
if [ "$2" == "" ]; then
echo " "
echo "Move your EFI folder here"
echo "Followed by Enter: "

while [ -z "$EFIfolder" ]; do
read EFIfolder
done

else
EFIfolder="$2"
fi
cp -Rp "$EFIfolder" "$(diskutil info disk${N}s1 | sed -n 's/.*Mount Point: *//p')"
echo "Install EFI -> /Volumes/EFI/EFI Done!"
Sleep 2
Open -R "$(diskutil info disk"${N}"s1 | sed -n 's/.*Mount Point: *//p')/boot"
exit 1
fi
done
8 changes: 8 additions & 0 deletions Clover_Duet.tool
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/bin/bash

cd "$(dirname "$0")" || exit 1
export DUETTOOL=Clover_Duet.command
cp -Rp $DUETTOOL ./CloverPackage/CloverV2
./CloverPackage/CloverV2/$DUETTOOL
Sleep 1
rm -rf ./CloverPackage/CloverV2/$DUETTOOL
2 changes: 1 addition & 1 deletion build_gcc13.sh
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ set -u # exit with error if unbound variables
# here we can change source versions of tools
#
export BINUTILS_VERSION=${BINUTILS_VERSION:-binutils-2.41}
export GCC_VERSION=${GCC_VERSION:-13.2.0}
export GCC_VERSION=${GCC_VERSION:-14.1.0}

# Version of libraries are from ./contrib/download_prerequisites in gcc source directory
export GMP_VERSION=${GMP_VERSION:-gmp-6.3.0} #6.2.1
Expand Down
6 changes: 3 additions & 3 deletions buildme
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,9 @@ checkTools() {
if [[ "$SYSNAME" == Darwin ]]; then
checkXCODE
exportPaths
local GCC131_BIN="$PREFIX/cross/bin/x86_64-clover-linux-gnu-gcc"
if [[ $MYTOOLCHAIN == GCC* ]] && [[ ! -x "${GCC131_BIN}" ]]; then
if [[ $MYTOOLCHAIN == GCC131 ]]; then
local GCC141_BIN="$PREFIX/cross/bin/x86_64-clover-linux-gnu-gcc"
if [[ $MYTOOLCHAIN == GCC* ]] && [[ ! -x "${GCC141_BIN}" ]]; then
if [[ $MYTOOLCHAIN == GCC141 ]]; then
cd "${CLOVERROOT}"
./build_gcc13.sh
else
Expand Down