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