Parcourir la source

dracut/autoinstaller: Handle UEFI systems

Michael Aldridge il y a 3 mois
Parent
commit
df8a44e1ef
2 fichiers modifiés avec 46 ajouts et 33 suppressions
  1. 0 8
      dracut/autoinstaller/autoinstall.cfg
  2. 46 25
      dracut/autoinstaller/install.sh

+ 0 - 8
dracut/autoinstaller/autoinstall.cfg

@@ -8,14 +8,6 @@
 # default: the first disk that isn't the installer
 #disk=/dev/hda
 
-# bootpartitionsize: controls how large the boot partition will be
-# default: 500M
-#bootpartitionsize=500M
-
-# swapsize: how large should the swap partition be
-# default: equal to the installed physical memory
-#swapsize=
-
 # ===
 # XBPS Configuration
 # ===

+ 46 - 25
dracut/autoinstaller/install.sh

@@ -39,28 +39,44 @@ VAI_get_address() {
 
 VAI_partition_disk() {
     # Paritition Disk
-    sfdisk "${disk}" <<EOF
-,$bootpartitionsize
-,${swapsize}K
-;
+
+    if [ -d /sys/firmware/efi ] ; then
+        VAI_info_msg "Partitioning Disk for UEFI Boot"
+        sfdisk "${disk}" <<EOF
+label: gpt
+,100M,U,
+,,L,
+EOF
+    else
+        VAI_info_msg "Partitioning Disk for BIOS Boot"
+        sfdisk "${disk}" <<EOF
+label: dos
+,,L,*
 EOF
+    fi
 }
 
 VAI_format_disk() {
     # Make Filesystems
-    mkfs.ext4 -F "${disk}1"
-    mkfs.ext4 -F "${disk}3"
-    if [ "${swapsize}" -ne 0 ] ; then
-        mkswap -f "${disk}2"
+    if [ -d /sys/firmware/efi ] ; then
+        mkfs.vfat -F32 "${disk}1"
+        mkfs.ext4 -F "${disk}2"
+    else
+        mkfs.ext4 -F "${disk}1"
     fi
 }
 
 VAI_mount_target() {
     # Mount targetfs
     mkdir -p "${target}"
-    mount "${disk}3" "${target}"
-    mkdir "${target}/boot"
-    mount "${disk}1" "${target}/boot"
+
+    if [ -d /sys/firmware/efi ] ; then
+        mount "${disk}2" "${target}"
+        mkdir -p "${target}/boot/efi"
+        mount "${disk}1" "${target}/boot/efi"
+    else
+        mount "${disk}1" "${target}"
+    fi
 }
 
 VAI_install_xbps_keys() {
@@ -70,7 +86,12 @@ VAI_install_xbps_keys() {
 
 VAI_install_base_system() {
     # Install a base system
-    XBPS_ARCH="${XBPS_ARCH}" xbps-install -Sy -R "${xbpsrepository}" -r /mnt base-system grub
+    _grub="grub"
+    if [ -d /sys/firmware/efi ] ; then
+        _grub="${_grub} grub-x86_64-efi"
+    fi
+
+    XBPS_ARCH="${XBPS_ARCH}" xbps-install -Sy -R "${xbpsrepository}" -r /mnt base-system ${_grub}
 
     # Install additional packages
     if [  -n "${pkgs}" ] ; then
@@ -80,6 +101,11 @@ VAI_install_base_system() {
 }
 
 VAI_prepare_chroot() {
+    # Mount efivars if this is an EFI system
+    if [ -d /sys/firmware/efi ] ; then
+        mount -t efivarfs none /sys/firmware/efi/efivars
+    fi
+
     # Mount dev, bind, proc, etc into chroot
     mount -t proc proc "${target}/proc"
     mount --rbind /sys "${target}/sys"
@@ -141,14 +167,13 @@ VAI_configure_grub() {
 VAI_configure_fstab() {
     # Grab UUIDs
     uuid1="$(blkid -s UUID -o value "${disk}1")"
-    uuid2="$(blkid -s UUID -o value "${disk}2")"
-    uuid3="$(blkid -s UUID -o value "${disk}3")"
-
-    # Installl UUIDs into /etc/fstab
-    echo "UUID=$uuid3 / ext4 defaults,errors=remount-ro 0 1" >> "${target}/etc/fstab"
-    echo "UUID=$uuid1 /boot ext4 defaults 0 2" >> "${target}/etc/fstab"
-    if [ "${swapsize}" -ne 0 ] ; then
-        echo "UUID=$uuid2 swap swap defaults 0 0" >> "${target}/etc/fstab"
+    if [ -d /sys/firmware/efi ] ; then
+        uuid2="$(blkid -s UUID -o value "${disk}2")"
+        echo "UUID=$uuid1 /boot/efi vfat defaults 0 0" >> "${target}/etc/fstab"
+        echo "UUID=$uuid2 / ext4 defaults,errors=remount-ro 0 1" >> "${target}/etc/fstab"
+
+    else
+        echo "UUID=$uuid1 / ext4 defaults,errors=remount-ro 0 1" >> "${target}/etc/fstab"
     fi
 }
 
@@ -195,11 +220,8 @@ VAI_end_action() {
 
 VAI_configure_autoinstall() {
     # -------------------------- Setup defaults ---------------------------
-    bootpartitionsize="500M"
     disk="$(lsblk -ipo NAME,TYPE,MOUNTPOINT | awk '{if ($2=="disk") {disks[$1]=0; last=$1} if ($3=="/") {disks[last]++}} END {for (a in disks) {if(disks[a] == 0){print a; break}}}')"
     hostname="$(ip -4 -o -r a | awk -F'[ ./]' '{x=$7} END {print x}')"
-    # XXX: Set a manual swapsize here if the default doesn't fit your use case
-    swapsize="$(awk -F"\n" '/MemTotal/ {split($0, b, " "); print b[2] }' /proc/meminfo)";
     target="/mnt"
     timezone="America/Chicago"
     keymap="us"
@@ -256,7 +278,7 @@ VAI_main() {
     VAI_print_step "Configuring installer"
     VAI_configure_autoinstall
 
-    VAI_print_step "Configuring disk using scheme 'Atomic'"
+    VAI_print_step "Configuring disk"
     VAI_partition_disk
     VAI_format_disk
 
@@ -307,4 +329,3 @@ if getargbool 0 auto  ; then
     # Very important to release this before returning to dracut code
     set +e
 fi
-