117eed55fSLionel Sambuc#!/usr/bin/env bash 2a9db0ea1SBen Grasset -e 3a9db0ea1SBen Gras 417eed55fSLionel Sambuc# 517eed55fSLionel Sambuc# This script creates a bootable image and should at some point in the future 669eead77SJean-Baptiste Boric# be replaced by the proper NetBSD infrastructure. 717eed55fSLionel Sambuc# 817eed55fSLionel Sambuc 9a9db0ea1SBen Gras: ${ARCH=i386} 10a9db0ea1SBen Gras: ${OBJ=../obj.${ARCH}} 1169eead77SJean-Baptiste Boric: ${TOOLCHAIN_TRIPLET=i586-elf32-minix-} 12a9db0ea1SBen Gras: ${BUILDSH=build.sh} 132d6bbeb0SJean-Baptiste Boric 142d6bbeb0SJean-Baptiste Boric: ${SETS="minix-base minix-comp minix-games minix-man minix-tests tests"} 1509143af2SBen Gras: ${IMG=minix_x86.img} 1617eed55fSLionel Sambuc 1717eed55fSLionel Sambucif [ ! -f ${BUILDSH} ] 1817eed55fSLionel Sambucthen 1917eed55fSLionel Sambuc echo "Please invoke me from the root source dir, where ${BUILDSH} is." 2017eed55fSLionel Sambuc exit 1 2117eed55fSLionel Sambucfi 2217eed55fSLionel Sambuc 2369eead77SJean-Baptiste Boric# we create a disk image of about 2 gig's 2469eead77SJean-Baptiste Boric# for alignment reasons, prefer sizes which are multiples of 4096 bytes 2569eead77SJean-Baptiste Boric: ${BOOTXX_SECS=32} 2669eead77SJean-Baptiste Boric: ${ROOT_SIZE=$(( 128*(2**20) - ${BOOTXX_SECS} * 512 ))} 2769eead77SJean-Baptiste Boric: ${HOME_SIZE=$(( 128*(2**20) ))} 2869eead77SJean-Baptiste Boric: ${USR_SIZE=$(( 1792*(2**20) ))} 29*1717959aSRalf Neeb: ${EFI_SIZE=$(( 0 ))} 30a9db0ea1SBen Gras 3169eead77SJean-Baptiste Boric# set up disk creation environment 3269eead77SJean-Baptiste Boric. releasetools/image.defaults 3369eead77SJean-Baptiste Boric. releasetools/image.functions 342d00147bSKoustubha Bhat 3569eead77SJean-Baptiste Boricecho "Building work directory..." 3669eead77SJean-Baptiste Boricbuild_workdir "$SETS" 37b12bb579SKees Jongenburger 3869eead77SJean-Baptiste Boricecho "Adding extra files..." 39a7a79fa1SJean-Baptiste Boricworkdir_add_hdd_files 402d00147bSKoustubha Bhat 41a7a79fa1SJean-Baptiste Boric# add kernels 422d6bbeb0SJean-Baptiste Boricadd_link_spec "boot/minix_latest" "minix_default" extra.kernel 432d6bbeb0SJean-Baptiste Boricworkdir_add_kernel minix_default 442d6bbeb0SJean-Baptiste Boricworkdir_add_kernel minix/$RELEASE_VERSION 45a9db0ea1SBen Gras 4669eead77SJean-Baptiste Boric# add boot.cfg 4769eead77SJean-Baptiste Boriccat >${ROOT_DIR}/boot.cfg <<END_BOOT_CFG 482d6bbeb0SJean-Baptiste Boricmenu=Start MINIX 3:load_mods /boot/minix_default/mod*; multiboot /boot/minix_default/kernel rootdevname=c0d0p0 492d6bbeb0SJean-Baptiste Boricmenu=Start latest MINIX 3:load_mods /boot/minix_latest/mod*; multiboot /boot/minix_latest/kernel rootdevname=c0d0p0 502d6bbeb0SJean-Baptiste Boricmenu=Start latest MINIX 3 in single user mode:load_mods /boot/minix_latest/mod*; multiboot /boot/minix_latest/kernel rootdevname=c0d0p0 bootopts=-s 512d51bc64Srlfnbmenu=Start MINIX 3 ALIX:load_mods /boot/minix_default/mod*;multiboot /boot/minix_default/kernel rootdevname=c0d0p0 console=tty00 consdev=com0 ata_no_dma=1 522d6bbeb0SJean-Baptiste Boricmenu=Edit menu option:edit 532d6bbeb0SJean-Baptiste Boricmenu=Drop to boot prompt:prompt 54a7a79fa1SJean-Baptiste Boricclear=1 55a7a79fa1SJean-Baptiste Borictimeout=5 562d6bbeb0SJean-Baptiste Boricdefault=2 572d6bbeb0SJean-Baptiste Boricmenu=Start MINIX 3 ($RELEASE_VERSION):load_mods /boot/minix/$RELEASE_VERSION/mod*; multiboot /boot/minix/$RELEASE_VERSION/kernel rootdevname=c0d0p0 5869eead77SJean-Baptiste BoricEND_BOOT_CFG 5969eead77SJean-Baptiste Boricadd_file_spec "boot.cfg" extra.boot 60a9db0ea1SBen Gras 6169eead77SJean-Baptiste Boricecho "Bundling packages..." 6269eead77SJean-Baptiste Boricbundle_packages "$BUNDLE_PACKAGES" 63a9db0ea1SBen Gras 6469eead77SJean-Baptiste Boricecho "Creating specification files..." 6569eead77SJean-Baptiste Boriccreate_input_spec 6669eead77SJean-Baptiste Boriccreate_protos "usr home" 6709143af2SBen Gras 682d6bbeb0SJean-Baptiste Boric# Clean image 692d6bbeb0SJean-Baptiste Boricif [ -f ${IMG} ] # IMG might be a block device 702d6bbeb0SJean-Baptiste Boricthen 712d6bbeb0SJean-Baptiste Boric rm -f ${IMG} 722d6bbeb0SJean-Baptiste Boricfi 732d6bbeb0SJean-Baptiste Boric 7417eed55fSLionel Sambuc# 7517eed55fSLionel Sambuc# Generate /root, /usr and /home partition images. 7617eed55fSLionel Sambuc# 7769eead77SJean-Baptiste Boricecho "Writing disk image..." 78a7a79fa1SJean-Baptiste Boric 79a7a79fa1SJean-Baptiste Boric# all sizes are written in 512 byte blocks 80a7a79fa1SJean-Baptiste BoricROOTSIZEARG="-b $((${ROOT_SIZE} / 512 / 8))" 81a7a79fa1SJean-Baptiste BoricUSRSIZEARG="-b $((${USR_SIZE} / 512 / 8))" 82a7a79fa1SJean-Baptiste BoricHOMESIZEARG="-b $((${HOME_SIZE} / 512 / 8))" 83a7a79fa1SJean-Baptiste Boric 84*1717959aSRalf Neebif [ ${EFI_SIZE} -ge 512 ] 85*1717959aSRalf Neebthen 86*1717959aSRalf Neeb fetch_and_build_grub 87*1717959aSRalf Neeb 88*1717959aSRalf Neeb : ${EFI_DIR=$OBJ/efi} 89*1717959aSRalf Neeb rm -rf ${EFI_DIR} && mkdir -p ${EFI_DIR}/boot/minix_default ${EFI_DIR}/boot/efi 90*1717959aSRalf Neeb create_grub_cfg 91*1717959aSRalf Neeb cp ${MODDIR}/* ${EFI_DIR}/boot/minix_default/ 92*1717959aSRalf Neeb cp ${RELEASETOOLSDIR}/grub/grub-core/booti386.efi ${EFI_DIR}/boot/efi 93*1717959aSRalf Neeb cp ${RELEASETOOLSDIR}/grub/grub-core/*.mod ${EFI_DIR}/boot/efi 94*1717959aSRalf Neebfi 95*1717959aSRalf Neeb 9669eead77SJean-Baptiste BoricROOT_START=${BOOTXX_SECS} 9769eead77SJean-Baptiste Boricecho " * ROOT" 9869eead77SJean-Baptiste Boric_ROOT_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${ROOTSIZEARG} -I $((${ROOT_START}*512)) ${IMG} ${WORK_DIR}/proto.root) 9969eead77SJean-Baptiste Boric_ROOT_SIZE=$(($_ROOT_SIZE / 512)) 10017eed55fSLionel SambucUSR_START=$((${ROOT_START} + ${_ROOT_SIZE})) 10169eead77SJean-Baptiste Boricecho " * USR" 10269eead77SJean-Baptiste Boric_USR_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${USRSIZEARG} -I $((${USR_START}*512)) ${IMG} ${WORK_DIR}/proto.usr) 10369eead77SJean-Baptiste Boric_USR_SIZE=$(($_USR_SIZE / 512)) 10417eed55fSLionel SambucHOME_START=$((${USR_START} + ${_USR_SIZE})) 10569eead77SJean-Baptiste Boricecho " * HOME" 10669eead77SJean-Baptiste Boric_HOME_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${HOMESIZEARG} -I $((${HOME_START}*512)) ${IMG} ${WORK_DIR}/proto.home) 10769eead77SJean-Baptiste Boric_HOME_SIZE=$(($_HOME_SIZE / 512)) 108a9db0ea1SBen Gras 10917eed55fSLionel Sambuc# 11017eed55fSLionel Sambuc# Write the partition table using the natively compiled 11117eed55fSLionel Sambuc# minix partition utility 11217eed55fSLionel Sambuc# 113*1717959aSRalf Neebif [ ${EFI_SIZE} -ge 512 ] 114*1717959aSRalf Neebthen 115*1717959aSRalf Neeb dd if=/dev/zero bs=${EFI_SIZE} count=1 > ${OBJ}/efi.img 116*1717959aSRalf Neeb EFI_START=$((${HOME_START} + ${_HOME_SIZE})) 117*1717959aSRalf Neeb echo " * EFI" 118*1717959aSRalf Neeb ${CROSS_TOOLS}/nbmakefs -t msdos -s ${EFI_SIZE} -o "F=32,c=1" ${OBJ}/efi.img ${EFI_DIR} 119*1717959aSRalf Neeb dd if=${OBJ}/efi.img >> ${IMG} 120*1717959aSRalf Neeb ${CROSS_TOOLS}/nbpartition -m ${IMG} ${BOOTXX_SECS} 81:${_ROOT_SIZE}* 81:${_USR_SIZE} 81:${_HOME_SIZE} EF:1+ 121*1717959aSRalf Neebelse 122*1717959aSRalf Neeb ${CROSS_TOOLS}/nbpartition -m ${IMG} ${BOOTXX_SECS} 81:${_ROOT_SIZE}* 81:${_USR_SIZE} 81:${_HOME_SIZE} 123*1717959aSRalf Neebfi 124*1717959aSRalf Neeb 12569eead77SJean-Baptiste Boric${CROSS_TOOLS}/nbinstallboot -f -m ${ARCH} ${IMG} ${DESTDIR}/usr/mdec/bootxx_minixfs3 12669eead77SJean-Baptiste Boric 127a7a79fa1SJean-Baptiste Boricecho "" 12869eead77SJean-Baptiste Boricecho "Disk image at `pwd`/${IMG}" 129a7a79fa1SJean-Baptiste Boricecho "" 130a7a79fa1SJean-Baptiste Boricecho "To boot this image on kvm using the bootloader:" 131a7a79fa1SJean-Baptiste Boricecho "qemu-system-i386 --enable-kvm -m 256 -hda `pwd`/${IMG}" 132a7a79fa1SJean-Baptiste Boricecho "" 133bbb8908cSLionel Sambucecho "To boot this image on kvm:" 134a7a79fa1SJean-Baptiste Boricecho "cd ${MODDIR} && qemu-system-i386 --enable-kvm -m 256M -kernel kernel -append \"rootdevname=c0d0p0\" -initrd \"${mods}\" -hda `pwd`/${IMG}" 135*1717959aSRalf Neebecho "To boot this image on kvm with EFI (tianocore OVMF):" 136*1717959aSRalf Neebecho "qemu-system-i386 -L . -bios OVMF-i32.fd -m 256M -drive file=minix_x86.img,if=ide,format=raw" 137