#!/bin/bash

if [ -n "$(find /boot/efi/boot/grub* -name normal.mod 2> /dev/null)" ]; then
	MEASURELIST_PATH=$(ls -d /boot/efi/boot/grub*)
fi

if [ -n "$(find /boot/grub* -name normal.mod 2> /dev/null)" ]; then
	MEASURELIST_PATH=$(ls -d /boot/grub*)
fi

if [ -z "$MEASURELIST_PATH" ];then
	echo "ERROR: not find grub mod files"
	exit 0
fi

if [ -d /boot/grub ]; then
	GRUB_PROBE="grub-probe"
	GRUB_MKRELPATH="grub-mkrelpath"
fi
if [ -d /boot/grub2 ]; then
	GRUB_PROBE="grub2-probe"
	GRUB_MKRELPATH="grub2-mkrelpath"
fi

if [ -z "$GRUB_PROBE" ];then
	echo "ERROR: not find grub probe commond"
	exit 0
fi

FILE=".measurelist"
MEASURELIST="$MEASURELIST_PATH/$FILE"
MEASURELIST_TMP="$MEASURELIST.tmp"

create_list()
{
	NORMAL_PATH=$(find /boot -name normal.mod)
	GRUB_MOD_PATH=${NORMAL_PATH%/*}
	#GRUB_EFI_FIELS=$(find /boot/efi -name "*.efi" 2> /dev/null)
	KERNEL_FILES=$(ls /boot/Image-* /boot/vmlinuz-* 2> /dev/null)
	INITRAMFS_FILES=$(ls /boot/initrd.img-* /boot/initramfs.img-* /boot/initramfs-* 2> /dev/null)

	#echo "$MEASURELIST"			>  "$MEASURELIST_TMP"
	#for efi in $GRUB_EFI_FIELS
	#do
	#	echo "$efi"			>> "$MEASURELIST_TMP"
	#done

	echo "$GRUB_MOD_PATH/measurefiles.mod"	>> "$MEASURELIST_TMP"
	echo "$GRUB_MOD_PATH/hashsum.mod"	>> "$MEASURELIST_TMP"
	echo "$GRUB_MOD_PATH/normal.mod"	>> "$MEASURELIST_TMP"
	echo "$GRUB_MOD_PATH/linux.mod"		>> "$MEASURELIST_TMP"

	for image in $KERNEL_FILES
	do
		echo $image			>> "$MEASURELIST_TMP"
	done

	for initramfs in $INITRAMFS_FILES
	do
		echo $initramfs			>> "$MEASURELIST_TMP"
	done

	echo "/etc/rc.local"			>> "$MEASURELIST_TMP"
	echo "/etc/modules"			>> "$MEASURELIST_TMP"
}

create_measure_list()
{
	rm -f $MEASURELIST
	touch $MEASURELIST

	cat "$MEASURELIST_TMP" | while read path
	do
		[ -z "$path" -o ! -f "$path"  ] && continue

		bios_dev=$($GRUB_PROBE --target drive "$path" | sed 's/ $//g')

		[ -z "$bios_dev" ] && continue
		[ -n "$(echo "$bios_dev" | grep "lvmid")" ] && continue

		real_path=$($GRUB_MKRELPATH "$path")
		part_name=$(echo "$bios_dev" | awk -F, '{print $2}')
		bios_path="(,${part_name}${real_path}"
		line=$(sha256sum "$path" | awk -v name="$bios_path" '{print $1 "  " name}')

		echo "$line" >> $MEASURELIST
	done
	rm -f "$MEASURELIST_TMP"
}

create_list
create_measure_list
