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