makedist-openmamba/platforms/livecd/post.inc.sh

235 lines
7.7 KiB
Bash

# livecd post script
#
# creates a fake installation aimed at producing a kernel image and initrd
# for livecd boot
# make initramfs
[ -e $MOUNTDIR2/boot/grub ] || mkdir -p $MOUNTDIR2/boot/grub
ISOID=
for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do
chroot $MOUNTDIR depmod -a ${KERNEL_MAJVER}${K}
LANG=${LANGUAGE}_${COUNTRY} chroot $MOUNTDIR dracut \
-a dmsquash-live -o squash-live \
--filesystems "autofs4 ext4 overlay squashfs isofs hfsplus nls_utf8" \
--nomdadmconf --nolvmconf \
/boot/initramfs-${KERNEL_MAJVER}${K}.img.gz \
${KERNEL_MAJVER}${K}
# Note: isolinux requires 8.3 filenames
cp $MOUNTDIR/boot/initramfs-${KERNEL_MAJVER}${K}.img.gz \
$MOUNTDIR2/boot/initrd${ISOID}.gz || {
echo "Error: cannot copy file $MOUNTDIR/boot/initramfs-${KERNEL_MAJVER}${K}.img.gz to $MOUNTDIR2/boot/initrd${ISOID}.gz.";
exit 1; }
cp $MOUNTDIR/boot/vmlinuz-${KERNEL_MAJVER}${K} \
$MOUNTDIR2/boot/vmlinuz${ISOID} || {
echo "Error: cannot copy file $MOUNTDIR/boot/vmlinuz-${KERNEL_MAJVER}${K}.img.gz to $MOUNTDIR2/boot/vmlinuz${ISOID}.gz.";
exit 1; }
ISOID=$(($ISOID + 1))
done
# copy grub theme
mkdir -p $MOUNTDIR2/boot/grub/themes
cp -a $MOUNTDIR/usr/share/grub/themes/breeze $MOUNTDIR2/boot/grub/themes/
# add buildinfo
buildinfo="`cat $MOUNTDIR/etc/openmamba-release` ${PLATFORM}"
# configure grub boot loader
cat > $MOUNTDIR2/boot/grub/grub.cfg << _EOF
#
# GRUB configuration generated by openmamba makedist
#
font=unicode
set gfxmode=auto
insmod all_video
insmod gfxterm
insmod gettext
insmod iso9660
insmod biosdisk
terminal_output gfxterm
set timeout=10
# theme
loadfont /boot/grub/themes/breeze/unifont-bold-16.pf2
loadfont /boot/grub/themes/breeze/unifont-regular-14.pf2
loadfont /boot/grub/themes/breeze/unifont-regular-16.pf2
loadfont /boot/grub/themes/breeze/unifont-regular-32.pf2
loadfont /boot/grub/fonts/unicode.pf2
insmod png
set theme=/boot/grub/themes/breeze/theme.txt
export theme
_EOF
#
# Boot entries
#
ROOT_ARGS="root=live:LABEL=${MAKEDIST_TARGET}_${PLATFORM} rd.live.overlay.overlayfs"
ISOID=
for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do
cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
menuentry "openmamba GNU/Linux (${KERNEL_MAJVER}${K})" {
echo "Loading /boot/vmlinuz${ISOID}"
linux /boot/vmlinuz${ISOID} ${ROOT_ARGS} selinux=0 quiet splash ro
echo "Loading /boot/initrd${ISOID}.gz"
initrd /boot/initrd${ISOID}.gz
}
_EOF
ISOID=$(($ISOID + 1))
done
cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
submenu "Advanced options for openmamba GNU/Linux" {
_EOF
#ISOID=
#for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do
# cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
# menuentry "No modeset (${KERNEL_MAJVER}${K})" {
# echo "Loading /boot/vmlinuz${ISOID}"
# linux /boot/vmlinuz${ISOID} ${ROOT_ARGS} selinux=0 quiet splash ro nomodeset
# echo "Loading /boot/initrd${ISOID}.gz"
# initrd /boot/initrd${ISOID}.gz
# }
#_EOF
# ISOID=$(($ISOID + 1))
#done
ISOID=
for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do
cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
menuentry "Debug mode (${KERNEL_MAJVER}${K})" {
echo "Loading /boot/vmlinuz${ISOID}"
linux /boot/vmlinuz${ISOID} ${ROOT_ARGS} ro selinux=0 rddebug
echo "Loading /boot/initrd${ISOID}.gz"
initrd /boot/initrd${ISOID}.gz
}
_EOF
ISOID=$(($ISOID + 1))
done
ISOID=
for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do
cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
menuentry "Debug mode with nomodeset (${KERNEL_MAJVER}${K})" {
echo "Loading /boot/vmlinuz${ISOID}"
linux /boot/vmlinuz${ISOID} ${ROOT_ARGS} ro selinux=0 rddebug nomodeset
echo "Loading /boot/initrd${ISOID}.gz"
initrd /boot/initrd${ISOID}.gz
}
_EOF
ISOID=$(($ISOID + 1))
done
cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
}
_EOF
# install memtest
if [ -e $MOUNTDIR/boot/memtest86+.bin ]; then
cp $MOUNTDIR/boot/memtest86+.bin $MOUNTDIR2/boot/memtest
cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
menuentry 'Memory test' {
insmod part_gpt
insmod fat
linux16 /boot/memtest
}
_EOF
else
echo "Error: /boot/memtest86+.bin not found. Please install the memtest86 package."
exit 1
fi
# copy static files for specific platform
[ -e $TARGETDIR/platforms/$PLATFORM/root ] &&
cp -a --no-preserve=ownership $TARGETDIR/platforms/$PLATFORM/root/* $MOUNTDIR2/
# copy localized static files for specific platform
[ "$LANGUAGE" -a -e $TARGETDIR/platforms/$PLATFORM/root-$LANGUAGE ] &&
cp -a --no-preserve=ownership $TARGETDIR/platforms/$PLATFORM/root-$LANGUAGE/* $MOUNTDIR2/
#
# EFI support section BEGIN
#
# create EFI grub 32 and 64 bit images
mkdir -p $MOUNTDIR/boot/efi/EFI/openmamba/
if [ "${ARCH}" == "x86_64" ]; then
GRUB_ADD="--sbat /usr/share/grub/sbat.csv \
all_video bli boot chain configfile cpuid echo efifwsetup efi_gop efi_uga efinet ext2 \
fat font gettext gfxmenu gfxterm gfxterm gfxterm_background gzio halt help hfsplus \
iso9660 jpeg keystatus linux loadenv loopback ls lsefi lsefimmap lsefisystab lssal \
memdisk minicmd normal ntfs ntfscomp part_apple part_gpt part_msdos password_pbkdf2 \
play png probe reboot regexp search search_fs_file search_fs_uuid search_label sleep \
smbios squash4 test tpm true video video_bochs video_cirrus xfs zfs zfscrypt zfsinfo"
else
# FIXME: i586 provides grub 204 which does not support --sbat and other modules for SB
GRUB_ADD="\
part_gpt part_msdos ntfs ntfscomp hfsplus fat ext2 normal chain boot linux echo \
help gfxterm gettext png efi_gop efi_uga search search_label search_fs_uuid \
iso9660 configfile"
fi
chroot $MOUNTDIR grub-mkimage -o /boot/efi/EFI/openmamba/grubx64.efi -O x86_64-efi \
-p /boot/grub ${GRUB_ADD} || {
echo $"Error: unable to create GRUB x86_64-efi image"
exit 1
}
if [ "${ARCH}" == "i586" ]; then
# 32 bit image
chroot $MOUNTDIR grub-mkimage -o /boot/efi/EFI/openmamba/grubia32.efi -O i386-efi \
-p /boot/grub ${GRUB_ADD} || {
echo $"Error: unable to create GRUB i386-efi image"
exit 1
}
fi
# Sign EFI image for secure boot
chroot $MOUNTDIR openssl req -newkey rsa:2048 -nodes -keyout /root/MOK.key -new -x509 -sha256 -days 3650 -subj "/CN=openmamba Machine Owner Key/" -out /root/MOK.crt
chroot $MOUNTDIR openssl x509 -outform DER -in /root/MOK.crt -out /root/MOK.cer
chroot $MOUNTDIR sbsign --key /root/MOK.key --cert /root/MOK.crt --output /boot/efi/EFI/openmamba/grubx64.efi /boot/efi/EFI/openmamba/grubx64.efi
chroot $MOUNTDIR sbsign --key /root/MOK.key --cert /root/MOK.crt --output /boot/efi/EFI/openmamba/grubia32.efi /boot/efi/EFI/openmamba/grubia32.efi
ISOID=
for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do
chroot $MOUNTDIR sbsign --key /root/MOK.key --cert /root/MOK.crt --output /boot/vmlinuz-${KERNEL_MAJVER}${K} /boot/vmlinuz-${KERNEL_MAJVER}${K}
cp $MOUNTDIR/boot/vmlinuz-${KERNEL_MAJVER}${K} \
$MOUNTDIR2/boot/vmlinuz${ISOID}
ISOID=$(($ISOID + 1))
done
mkdir -p $MOUNTDIR2/EFI/BOOT/
cp $MOUNTDIR/root/MOK.cer $MOUNTDIR2/EFI/
cp $MOUNTDIR/boot/efi/EFI/openmamba/grubx64.efi $MOUNTDIR2/EFI/BOOT/grubx64.efi
if [ "${ARCH}" == "i586" ]; then
cp $MOUNTDIR/boot/efi/EFI/openmamba/grubia32.efi $MOUNTDIR2/EFI/BOOT/bootia32.efi
fi
# Install shim-signed
cp $MOUNTDIR/usr/share/shim-signed/shimx64.efi $MOUNTDIR2/EFI/BOOT/bootx64.efi
cp $MOUNTDIR/usr/share/shim-signed/mmx64.efi $MOUNTDIR2/EFI/BOOT/
#
# EFI support section END
#
# Finally produce the medium
MOUNTDIR=$MOUNTDIR2 produce_media $MEDIA_NAME
for i in $SUBPLATFORM; do
. $TARGETDIR/platforms/$i/settings.inc
CURR_MEDIA_NAME=`PLATFORM=$i media_name`
cat >> $LOCALSTATEDIR/.$MEDIA_NAME.inc.html << _EOF
<br><p><b>Root target(s):</b>
<div><table width="90%"><tr><td>
_EOF
cat $LOCALSTATEDIR/.$CURR_MEDIA_NAME.inc.html >> \
$LOCALSTATEDIR/.$MEDIA_NAME.inc.html
echo "</td></tr></table></div>" >> $LOCALSTATEDIR/.$MEDIA_NAME.inc.html
done
exit 0