1#!/bin/bash 2#* Copyright (c) 2020-2022 Intel Corporation. 3# postinst script for acrn kernel 4set -e 5 6if [ -f /usr/lib/grub/grub-mkconfig_lib ]; then 7 . /usr/lib/grub/grub-mkconfig_lib 8 LX=linux16 9elif [ -f /usr/lib/grub/update-grub_lib ]; then 10 . /usr/lib/grub/update-grub_lib 11 LX=linux 12else 13 # no grub file, so we notify and exit gracefully 14 echo "Cannot find grub config file, exiting." >&2 15 exit 0 16fi 17 18filename="/etc/grub.d/40_custom" 19menu=$(grep ACRN_deb_multiboot2 ${filename}) || true 20 21type=$(lsblk -l |awk '$NF == "/" {print $1}') 22pattern='^/dev/.* UUID="([^"]+)".* PARTUUID="([^"]+)"' 23while IFS= read -r line; do 24 if [[ $line =~ $pattern ]]; then 25 uuid="${BASH_REMATCH[1]}" 26 partuuid="${BASH_REMATCH[2]}" 27 fi 28done < <(blkid |grep ext4 |grep ${type}) 29 30if ls /boot/vmlinuz*acrn-service-vm* 1> /dev/null 2>&1;then 31 service_vm_kernel=$(ls -tr /boot/vmlinuz-*acrn-service-vm* | tail -1) 32else 33 service_vm_kernel=$(ls /boot/vmlinuz-* | tail -1) 34fi 35 36if [ -z "$menu" ];then 37cat>"${filename}"<<EOF 38 #!/bin/sh 39 exec tail -n +3 \$0 40 menuentry 'ACRN multiboot2 ' --id ACRN_deb_multiboot2 { 41 load_video 42 insmod gzio 43 insmod part_gpt 44 insmod ext2 45 search --no-floppy --fs-uuid --set $uuid 46 multiboot2 /boot/acrn.bin root=PARTUUID=$partuuid 47 48 } 49 50EOF 51fi 52 53sed -i '/Linux_bzImage/d' ${filename} || true 54sed -i '/multiboot2 \/boot/a\module2 '$service_vm_kernel' Linux_bzImage' ${filename} 55 56sync 57