248 lines
8.5 KiB
Bash
248 lines
8.5 KiB
Bash
# livedvd 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"
|
|
for l in $MULTILANGUAGE; do
|
|
case $l in
|
|
"en") LABEL="English"; LOCALELANG="en_US.UTF-8"; VCONSOLEKEYMAP="us" ;;
|
|
"it") LABEL="Italiano"; LOCALELANG="it_IT.UTF-8"; VCONSOLEKEYMAP="it" ;;
|
|
"fr") LABEL="Français"; LOCALELANG="fr_FR.UTF-8"; VCONSOLEKEYMAP="fr" ;;
|
|
"es") LABEL="Español"; LOCALELANG="es_ES.UTF-8"; VCONSOLEKEYMAP="es" ;;
|
|
"de") LABEL="Deutsch"; LOCALELANG="de_DE.UTF-8"; VCONSOLEKEYMAP="de" ;;
|
|
*) LABEL="$l"
|
|
esac
|
|
# Enable glibc locale
|
|
sed -i "s|#${LOCALELANG}|${LOCALELANG}|" ${MOUNTDIR}/etc/locale.gen
|
|
cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
|
|
submenu "${LABEL}" {
|
|
_EOF
|
|
|
|
ISOID=
|
|
for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do
|
|
cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
|
|
menuentry "openmamba GNU/Linux (${KERNEL_MAJVER}${K} - ${l})" {
|
|
echo "Loading /boot/vmlinuz${ISOID}"
|
|
linux /boot/vmlinuz${ISOID} ${ROOT_ARGS} selinux=0 quiet splash ro locale.LANG=$LOCALELANG vconsole.keymap=$VCONSOLEKEYMAP
|
|
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} - ${l})" {
|
|
echo "Loading /boot/vmlinuz${ISOID}"
|
|
linux /boot/vmlinuz${ISOID} ${ROOT_ARGS} ro selinux=0 rddebug locale.LANG=$LOCALELANG vconsole.keymap=$VCONSOLEKEYMAP
|
|
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} - ${l})" {
|
|
echo "Loading /boot/vmlinuz${ISOID}"
|
|
linux /boot/vmlinuz${ISOID} ${ROOT_ARGS} ro selinux=0 rddebug nomodeset locale.LANG=$LOCALELANG vconsole.keymap=$VCONSOLEKEYMAP
|
|
echo "Loading /boot/initrd${ISOID}.gz"
|
|
initrd /boot/initrd${ISOID}.gz
|
|
}
|
|
_EOF
|
|
ISOID=$(($ISOID + 1))
|
|
done
|
|
|
|
cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF
|
|
}
|
|
}
|
|
_EOF
|
|
done
|
|
|
|
chroot $MOUNTDIR locale-gen
|
|
|
|
# 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
|
|
}
|
|
|
|
# 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
|
|
}
|
|
|
|
# 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/ENROLLME.cer
|
|
cp $MOUNTDIR/boot/efi/EFI/openmamba/grubx64.efi $MOUNTDIR2/EFI/BOOT/grubx64.efi
|
|
cp $MOUNTDIR/boot/efi/EFI/openmamba/grubia32.efi $MOUNTDIR2/EFI/BOOT/bootia32.efi
|
|
|
|
# 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
|