xref: /minix3/releasetools/x86_hdimage.sh (revision 1717959aeb715ed8fa812a02054cfda1966ed9fd)
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