- fix non-printable character in sh script;
- add UEFI and GPT partition table handling:
* move backup GPT data structures to the end of the disk after
dumping the image to disk;
* mount the 3rd partition as root if EFI system partition (ESP) is
present, while also mounting ESP separately;
* use the appropiate path for grub.cfg depending on whether UEFI
is used or not;
* add a few seconds of delay to allow all GPT partitions to be
properly discovered before attempting to mount sysroot;
- extend requires to include the full `cloud-utils` package and its
dependencies (e.g. util-linux, qemu-img-ev, cloud-utils-growpart)
since the AArch64 base image does not include growpart like the
x86_64 base image does (x86_64 base image qcow2 being newer than
its aarch64 counterpart - version 1801 versus 1708);
While at it, fix loading the ipmi_ssif kernel module on AArch64.
Co-authored-by: Jimmy Lafontaine Rivera <lafonj@gmail.com>
Signed-off-by: Alexandru Avadanii <Alexandru.Avadanii@enea.com>
Change-Id: Ibef1b8fc16c3d95eca1ac87ec8cc3b449df1eb0a
+function is_esp_partition_present(){
+ check_params 1 "$@"
+ device=$1
+ if [ 'vfat' = "$(blkid -o value -s TYPE ${device}1)" ]; then
+ return 0
+ fi
+ return 1
+}
+
function get_config_from_device_end(){
check_params 1 "$@"
local BOOTDEVICE=$1
function get_config_from_device_end(){
check_params 1 "$@"
local BOOTDEVICE=$1
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
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}"
continue
fi
logmsg "Erasing existing GPT and MBR data structures from ${hd_dev}"
+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
logmsg "${rootdev} dumped successfully!"
echo "Finishing installation... Please wait." > $CONSOLE_DEV
parted ${rootdev} --script -- mkpart primary 50GiB -1
partprobe ${rootdev}
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 [ $? -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
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 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"
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"
run_crit chroot /sysroot /bin/bash -c \"xfs_growfs /\"
logmsg "Copying cloud guest image"
+if [ "${rootdev_has_uefi}" -eq 0 ]; then
+ umount /sysroot/boot/efi
+fi
umount /sysroot/dev
umount /sysroot/proc
umount /sysroot/sys
umount /sysroot/dev
umount /sysroot/proc
umount /sysroot/sys
- instmods = sr_mod mpt3sas raid_class scsi_transport_sas weak-updates/be2iscsi/be2iscsi ipmi_msghandler ipmi_devintf ipmi_si
+ instmods = sr_mod mpt3sas raid_class scsi_transport_sas weak-updates/be2iscsi/be2iscsi ipmi_msghandler ipmi_devintf ipmi_si ipmi_ssif
}
install_python_module() {
}
install_python_module() {
Name: image-provision
Version: %{_version}
Name: image-provision
Version: %{_version}
Summary: Contains dracut modules used for provisioning master image from a boot CD.
License: %{_platform_licence}
Source0: %{name}-%{version}.tar.gz
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
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.
%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
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