1# $OpenBSD: Makefile,v 1.41 2025/01/03 02:23:20 kn Exp $ 2 3INSTALLBOOT ?= /usr/sbin/installboot 4DRY_RUN = ${INSTALLBOOT} -n 5REAL_RUN = ${INSTALLBOOT} 6 7# see distrib/${MACHINE}/ramdisk/install.md for FORMAT_DISK values 8# default to root on softraid(4) on all architectures that have 9# bootstrap + kernel + installboot(8) support for it 10.if ${MACHINE} == "amd64" # assume EFI/GPT 11FORMAT_DISK = fdisk -gy -b 532480 12DISK_BLOCKS = 768 13STAGENAMES = biosboot boot 14USE_SOFTRAID ?= Yes 15.elif ${MACHINE} == "arm64" 16STAGENAMES = BOOTAA64.EFI 17USE_SOFTRAID ?= Yes 18.elif ${MACHINE} == "armv7" 19STAGENAMES = BOOTARM.EFI 20.elif ${MACHINE} == "i386" 21FORMAT_DISK = fdisk -iy 22STAGENAMES = biosboot boot 23USE_SOFTRAID ?= Yes 24.elif ${MACHINE} == "macppc" # assume MBR 25FORMAT_DISK = fdisk -iy -b '2048@1:06' 26STAGENAMES = ofwboot 27.elif ${MACHINE} == "octeon" 28FORMAT_DISK = fdisk -iy -b '65536@64:C' 29STAGENAMES = boot 30.elif ${MACHINE} == "powerpc64" 31STAGENAMES = boot 32.elif ${MACHINE} == "riscv64" 33STAGENAMES = BOOTRISCV64.EFI 34USE_SOFTRAID ?= Yes 35.elif ${MACHINE} == "sparc64" 36FORMAT_DISK = true # NOOP 37STAGENAMES = bootblk ofwboot 38USE_SOFTRAID ?= Yes 39.else 40# missing: alpha, hppa, landisk, loongson, luna88k 41regress: 42 @echo SKIPPED 43.endif 44 45# how distrib/$(arch -s)/*/install.md:md_prep_fdisk() formats the root disk 46FORMAT_DISK ?= fdisk -iy -b '32768@32768:C' 47DISK_BLOCKS ?= 128 48STAGEDIR = /usr/mdec 49STAGEFILES = ${STAGENAMES:=${STAGEDIR}/%} 50# is installboot(8) built with -DSOFTRAID? 51USE_SOFTRAID ?= No 52 53.if ${USE_SOFTRAID:L} == "yes" 54# install on multi-chunk RAID 1C with keydisk so installboot(8) must 55# - iterate over chunks 56# - ignore the keydisk/not install to it 57NDISKS ?= 2 58KEYDISKFILE = keydisk.img 59KEYDEVFILE = keydev.txt 60.else 61NDISKS = 1 62.endif 63 64DISKFILES != jot -w disk%d.img -- ${NDISKS} 65DISKDEVFILES != jot -w diskdev%d.txt -- ${NDISKS} 66ROOTDEVFILE = rootdev.txt 67MOUNTPOINT = mnt 68 69 70REGRESS_SETUP_ONCE = create-root 71 72# |1.img ... n.img| |1.img 1.txt| 73# |1.txt ... n.txt| => |... ... | 74# |n.img n.txt| 75FILETUPLES != { echo ${DISKFILES} ${KEYDISKFILE}; \ 76 echo ${DISKDEVFILES} ${KEYDEVFILE} ; } | \ 77 rs -T -- $$((${NDISKS} + 1)) 2 78create-disks: 79.for diskfile devfile in ${FILETUPLES} 80 dd if=/dev/zero of=${diskfile} bs=1m count=0 seek=${DISK_BLOCKS} status=none 81 ${SUDO} vnconfig -- ${diskfile} 1>${devfile} 82 ${SUDO} ${FORMAT_DISK} -- "$$(<${devfile})" 1>/dev/null 83. if ${USE_SOFTRAID:L} == "yes" 84 echo 'RAID *' | ${SUDO} disklabel -wAT- -- "$$(<${devfile})" 1>/dev/null 85. endif 86.endfor 87 88create-root: create-disks 89.if ${USE_SOFTRAID:L} == "yes" 90 ${SUDO} bioctl -l"$$(sed -- s/$$/a/ ${DISKDEVFILES} | paste -sd, -- -)" \ 91 -c1C -k"$$(<${KEYDEVFILE})"a -- softraid0 | \ 92 grep -o -- 'sd[0-9]*$$' 1>${ROOTDEVFILE} 93 ${SUDO} ${FORMAT_DISK} -- "$$(<${ROOTDEVFILE})" 1>/dev/null 94.else 95 ln -s -- ${DISKDEVFILES} ${ROOTDEVFILE} 96.endif 97 ${SUDO} disklabel -Aw -- "$$(<${ROOTDEVFILE})" 98 ${SUDO} newfs -q -- "$$(<${ROOTDEVFILE})"a 1>/dev/null 99 mkdir -p -- ${MOUNTPOINT} 100 ${SUDO} mount -- /dev/"$$(<${ROOTDEVFILE})"a ${MOUNTPOINT} 101 ${SUDO} mkdir -- ${MOUNTPOINT}/usr 102 ${SUDO} cp -r -- ${STAGEDIR} ${MOUNTPOINT}/usr/ 103 104 105# must be first as some targets expect a working filesystem 106REGRESS_TARGETS = prepare 107 108prepare: 109 ${SUDO} ${REAL_RUN} -p -- "$$(<${ROOTDEVFILE})" 110 111SUCCESS_TESTS += dry-prepare \ 112 dry-default \ 113 dry-root \ 114 root \ 115 root-stages 116REGRESS_TARGETS += ${SUCCESS_TESTS} 117REGRESS_ROOT_TARGETS += ${SUCCESS_TESTS} 118 119dry-prepare: 120 ${SUDO} ${DRY_RUN} -p -- "$$(<${ROOTDEVFILE})" 121dry-default: 122 ${SUDO} ${DRY_RUN} -- "$$(<${ROOTDEVFILE})" 123dry-root: 124 ${SUDO} ${DRY_RUN} -r/ -- "$$(<${ROOTDEVFILE})" 125 126root: 127 ${SUDO} ${REAL_RUN} -r ${MOUNTPOINT} -- "$$(<${ROOTDEVFILE})" 128root-stages: 129 ${SUDO} ${REAL_RUN} -- "$$(<${ROOTDEVFILE})" ${STAGEFILES} 130 131 132FAILURE_TESTS = dry-prepare-root \ 133 dry-prepare-stages \ 134 dry-nodisk-stages \ 135 dry-toofew \ 136 dry-toomany 137REGRESS_EXPECTED_FAILURES += ${FAILURE_TESTS} 138REGRESS_TARGETS += ${FAILURE_TESTS} 139REGRESS_ROOT_TARGETS += dry-nodisk-stages 140 141dry-prepare-root: 142 ${DRY_RUN} -p -r/ -- "$$(<${ROOTDEVFILE})" 2>/dev/null 143dry-prepare-stages: 144 ${DRY_RUN} -p -- "$$(<${ROOTDEVFILE})" ${STAGEFILES} 2>/dev/null 145 146dry-nodisk-stages: 147 ${SUDO} ${DRY_RUN} -- ${STAGEFILES} 2>/dev/null 148 149dry-toofew: 150 ${DRY_RUN} -- 2>/dev/null 151dry-toomany: 152 ${DRY_RUN} -- disk stage1 stage2 too many 2>/dev/null 153 154 155CLEANFILES = *.txt *.img 156REGRESS_CLEANUP = cleanup 157 158# allow failure to always cleanup as much as possible 159.IGNORE: cleanup 160cleanup: 161 ${SUDO} umount -- ${MOUNTPOINT} 2>/dev/null 162 rmdir -- ${MOUNTPOINT} 2>/dev/null 163.if ${USE_SOFTRAID:L} == "yes" 164 ${SUDO} bioctl -d -- "$$(<${ROOTDEVFILE})" 2>/dev/null 165.endif 166.for _ devfile in ${FILETUPLES} 167 ${SUDO} vnconfig -u -- "$$(<${devfile})" 2>/dev/null 168.endfor 169 170.include <bsd.regress.mk> 171