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