forked from RP1/RaveOS-arch
Added Michaelsoft Windblows detect and entry create script for systemd-boot
This commit is contained in:
parent
d78ba5af01
commit
1501056c6d
1 changed files with 89 additions and 0 deletions
89
detect_windows.sh
Executable file
89
detect_windows.sh
Executable file
|
@ -0,0 +1,89 @@
|
|||
#!/bin/bash
|
||||
|
||||
# systemd-boot utility script to add Michaelsoft boot entry into systemd-boot
|
||||
# AlexC (c) 2025
|
||||
|
||||
# Check if the systemd-boot is installed
|
||||
if ! command -v bootctl &> /dev/null; then
|
||||
echo "systemd-boot not found. Please install systemd-boot."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Function to detect the EFI partition
|
||||
detect_efi_partition() {
|
||||
# Search for the FAT32 filesystem, which is used for EFI partitions
|
||||
efi_partition=$(blkid | grep -i 'vfat' | awk -F: '{print $1}')
|
||||
|
||||
if [ -z "$efi_partition" ]; then
|
||||
echo "No EFI partition detected."
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "$efi_partition"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Function to check if Windows boot files exist in the EFI partition
|
||||
check_windows_boot_files() {
|
||||
local efi_partition=$1
|
||||
local efi_dir_mount_point="/mnt/efi"
|
||||
|
||||
# Mount the EFI partition temporarily to check for Windows boot files
|
||||
mount "$efi_partition" "$efi_dir_mount_point" &> /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to mount EFI partition."
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check if Windows boot files exist in /EFI/Microsoft/Boot/
|
||||
if [ ! -f "$efi_dir_mount_point/EFI/Microsoft/Boot/bootmgfw.efi" ]; then
|
||||
echo "Windows boot files not found in the EFI partition."
|
||||
umount "$efi_dir_mount_point"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Clean up by unmounting the EFI partition
|
||||
umount "$efi_dir_mount_point"
|
||||
return 0
|
||||
}
|
||||
|
||||
# Function to add Windows entry to systemd-boot
|
||||
add_windows_entry() {
|
||||
local efi_partition=$1
|
||||
local boot_loader_dir="/boot/loader/entries"
|
||||
local windows_entry="$boot_loader_dir/windows.conf"
|
||||
|
||||
# Create the entry directory if it doesn't exist
|
||||
mkdir -p "$boot_loader_dir"
|
||||
|
||||
# Add the Windows entry to systemd-boot
|
||||
echo "Creating systemd-boot entry for Windows..."
|
||||
cat <<EOF > "$windows_entry"
|
||||
title Windows
|
||||
efi /EFI/Microsoft/Boot/bootmgfw.efi
|
||||
options root=$efi_partition ro
|
||||
EOF
|
||||
|
||||
echo "Windows boot entry added successfully."
|
||||
}
|
||||
|
||||
# Detect EFI partition and check for Windows boot files
|
||||
efi_partition=$(detect_efi_partition)
|
||||
if [ $? -eq 0 ]; then
|
||||
check_windows_boot_files "$efi_partition"
|
||||
if [ $? -eq 0 ]; then
|
||||
add_windows_entry "$efi_partition"
|
||||
else
|
||||
echo "Windows boot files are not present. Please ensure Windows is installed properly."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Could not detect EFI partition."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Reload systemd-boot to recognize the new entry
|
||||
bootctl update
|
||||
|
||||
echo "systemd-boot entry for Windows has been added and systemd-boot has been updated."
|
||||
exit 0
|
Loading…
Reference in a new issue