#!/bin/sh -e

[ -n "$spt_dir" ] || spt_dir=/usr/share/spt3
. $spt_dir/init

# Prepare boot stuff for propagator:
#
# * modules archive (mar)
# * propagator image
# * kernel image

# Cleanup previous possible runs, initialize dirs
rm -Rf $out_dir/isolinux $chroot/.host/modules $chroot/.host/modules.list
mkdir -p $out_dir/isolinux/alt0

# Install required tools in chroot
chroot_install mar propagator

case "$ARCH" in
x86_64)
	LIBDIR=/usr/lib64
	;;
*)
	LIBDIR=/usr/lib
	;;
esac

# generate .VERSION
echo "${ORIGIN:+$ORIGIN }${VERSION:+$VERSION }${SUITE:+$SUITE }${CODENAME:+($CODENAME)}" > $tmp_dir/.VERSION
rm -Rf $chroot/.host/{modules,.VERSION,initfs}
cp -ar "$tmp_dir/.VERSION" "$chroot/.host"
sed -e "s|@MODDIR@|/.isolinux/modules|g;s|@DOTVERSION@|/.host/.VERSION|g;s|@LIBDIR@|$LIBDIR|g" <"$profile_dir/initfs.in" >"$chroot/.host/initfs"
echo $LIBDIR >$chroot/.host/libdir

# copy profile & utils
cp -a "$profile_dir/modules" $chroot/.host/modules.list
cat >"$tmp_dir/script" <<__EOF__
#!/bin/sh -e
rm -rf /.isolinux
mkdir -p /.isolinux/alt0

# copy any available OS kernels with appropriated modules bundles
MEMTEST=\`ls -1 /boot/memtest* 2>/dev/null|head -1\`
[ -z "\$MEMTEST" ] || cp -f /boot/\$(basename \$MEMTEST) /.isolinux/memtest

LIBDIR=\`cat /.host/libdir\`
echo LIBDIR=\$LIBDIR

# get kernel versions
for kver in \$(ls -d /lib/modules/*); do
	if [ ! -r "\$kver/modules.dep" ]; then
		echo "... skipping \$kver as it's not a kernel"
		continue
	fi
	echo "Processing modules for kernel \"\$kver\""
	kver=\${kver##*/}

	mkdir -p /.isolinux/modules

	# kernel image
	cp -a /boot/vmlinuz-\$kver /.isolinux/alt0/vmlinuz-\$kver

	rm -f "/.isolinux/alt0/full-\$kver.cz"

	# generate packed modules file in /.isolinux/modules/modules
	if type mkmodpack >/dev/null 2>&1; then
		mkmodpack -p /.host/modules.list -o /.isolinux/modules/modules -k "\$kver"
	else
		mkmar -r / -p /.host/modules.list -o /.isolinux/modules/modules -k "\$kver"
	fi

	# create initramfs image = modules + fixed propagator part + additional files
	echo "        fixed part"
	zcat \$LIBDIR/propagator/initfs >>/.isolinux/alt0/full-\$kver
	echo "        modules"
	zcat /.isolinux/modules/modules >>/.isolinux/alt0/full-\$kver
	echo "        additional files"
	gencpio /.host/initfs >>/.isolinux/alt0/full-\$kver
	echo "        compressing it all..."
	gzip -c </.isolinux/alt0/full-\$kver >/.isolinux/alt0/full-\$kver.cz
	echo "        OK"

	# remove modules dir
	#rm -rf /.isolinux/modules
done | { [ -z "${verbose}" ] && grep -v "^0x" || cat; }
__EOF__

chroot_exec "$tmp_dir/script" \
	&& Verbose 'Success: boot and initfs stuff make' \
	|| Fatal 'Failed: boot or initfs stuff make'

# move .isolinux prepare inside chroot to the outside
cp -a $chroot/.isolinux/* $out_dir/isolinux/

# garbage collection
chroot_run rm -Rf /.isolinux
rm -f $tmp_dir/script
