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