if [ -b /dev/$hd_dev ] && (( is_removable $hd_dev ) || ( is_partition $hd_dev ) || ( is_loop $hd_dev )); then
logmsg "Removable, loop or partition $hd_dev. Skipping..."
continue
- elif ! [ -b /dev/$hd_dev ];then
+ elif ! [ -b /dev/$hd_dev ]; then
continue
fi
logmsg "Erasing existing GPT and MBR data structures from ${hd_dev}"
fi
sync
+partprobe ${rootdev}
+is_esp_partition_present "${rootdev}"
+rootdev_has_uefi=$?
+
+# For UEFI systems (which imply using a GPT partition table), fix the GPT backup
+# data structures by moving them to the end of the disk; rootfs partition will
+# have index 3 (1=ESP, 2=boot, 3=rootfs), unlike BIOS/MBR layout where it has 1.
+if [ "${rootdev_has_uefi}" -eq 0 ]; then
+ sgdisk -e "${rootdev}"
+ sleep 5
+ rootpartno=3
+else
+ rootpartno=1
+fi
+
logmsg "${rootdev} dumped successfully!"
echo "Finishing installation... Please wait." > $CONSOLE_DEV
parted ${rootdev} --script -- mkpart primary 50GiB -1
partprobe ${rootdev}
-mount ${rootdev}1 /sysroot/
+# For GPT and 3 partitions, it might take some time to (re)discover them all
+sleep 5
+mount "${rootdev}${rootpartno}" /sysroot/
if [ $? -ne 0 ];then
logmsg "FAILED TO MOUNT SYSROOT. All hope is lost"
exit 255
fi
+if [ "${rootdev_has_uefi}" -eq 0 ]; then
+ mount "${rootdev}1" /sysroot/boot/efi
+ if [ $? -ne 0 ];then
+ logmsg "FAILED TO MOUNT EFI SYSTEM PARTITION. All hope is lost"
+ exit 255
+ fi
+fi
+
kernel_cmdline="intel_iommu=on iommu=pt crashkernel=256M"
# Check if this has a iscsi target if so, add extra cmdline option for HDD boot.
iscsiadm -m fw >/dev/null 2>&1
run_crit mount -o bind /dev /sysroot/dev
run_crit mount -o bind /proc /sysroot/proc
run_crit mount -o bind /sys /sysroot/sys
-run_crit chroot /sysroot /bin/bash -c \"/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg\"
+if [ "${rootdev_has_uefi}" -eq 0 ]; then
+ run_crit chroot /sysroot /bin/bash -c \"/usr/sbin/grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg\"
+else
+ run_crit chroot /sysroot /bin/bash -c \"/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg\"
+fi
logmsg "Extending partition and filesystem size"
-run_crit chroot /sysroot /bin/bash -c \"growpart ${rootdev} 1\"
+run_crit chroot /sysroot /bin/bash -c \"growpart ${rootdev} ${rootpartno}\"
run_crit chroot /sysroot /bin/bash -c \"xfs_growfs /\"
logmsg "Copying cloud guest image"
sync
+if [ "${rootdev_has_uefi}" -eq 0 ]; then
+ umount /sysroot/boot/efi
+fi
umount /sysroot/dev
umount /sysroot/proc
umount /sysroot/sys
Name: image-provision
Version: %{_version}
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: Contains dracut modules used for provisioning master image from a boot CD.
License: %{_platform_licence}
Source0: %{name}-%{version}.tar.gz
BuildArch: noarch
BuildRequires: rsync
-Requires: cloud-init, dracut, coreutils, parted, gzip, iproute, util-linux, findutils, kmod, kbd, iscsi-initiator-utils, qemu-img-ev, gdisk, tar, wget, curl, glibc, hw-detector
+Requires: cloud-init, dracut, coreutils, parted, gzip, iproute, cloud-utils, findutils, kmod, kbd, iscsi-initiator-utils, gdisk, tar, wget, curl, glibc, hw-detector
%description
This RPM contains dracut modules. They are used for provisioning master image from a boot CD.
grep -q "net.ifnames=0" /etc/default/grub
if [[ $? == 0 ]];then
sed -i 's/net.ifnames=0 //' /etc/default/grub
- grub2-mkconfig > /etc/grub2.cfg
+ # /etc/grub2[-efi].cfg are symlinks to /boot/.../grub.cfg
+ if [ -e /etc/grub2.cfg ]; then
+ grub2-mkconfig > /etc/grub2.cfg
+ fi
+ if [ -e /etc/grub2-efi.cfg ]; then
+ grub2-mkconfig > /etc/grub2-efi.cfg
+ fi
fi