summaryrefslogtreecommitdiff
path: root/regress/usr.sbin/installboot/Makefile
blob: fba0646f926e67563d491498e4702bd8fd1c7a95 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#	$OpenBSD: Makefile,v 1.1 2022/08/21 17:03:18 kn Exp $

INSTALLBOOT ?=		/usr/sbin/installboot -v
DRY_RUN =		${INSTALLBOOT} -n
REAL_RUN =		${INSTALLBOOT}

# installboot(8) behaviour for multi-chunk softraid(4) differs across platforms
NCHUNKS ?=		1 2
CHUNKFILES =		${NCHUNKS:=chunk%.img}
DEVFILES =		${NCHUNKS:=vnd%.txt}
SRFILE =		sr.txt
# allow testing with real bootstrap, e.g. for size constraints or formats
STAGEFILE ?=		stage.empty
MOUNTPOINT ?=		/mnt

REGRESS_SETUP_ONCE =	copy-bootstrap-to-softraid

create-new-chunks:
.for n in ${NCHUNKS}
	dd if=/dev/zero  of=chunk${n}.img bs=1m count=0 seek=32 status=none
	${SUDO} vnconfig -- chunk${n}.img 1>vnd${n}.txt
.endfor

# what the installer does, see /usr/src/distrib/$(machine)/ramdisk/install.md
format-new-chunks: create-new-chunks
.for devfile in ${DEVFILES}
.if   ${MACHINE} == "amd64"	# assume BIOS/MBR
	${SUDO} fdisk -iy -- "$$(<${devfile})" 1>/dev/null
.elif ${MACHINE} == "arm64"
	${SUDO} fdisk -g -y -b32768 -- "$$(<${devfile})" 1>/dev/null
.endif
	printf 'a\n\n\n\nRAID\nw\nq\n' | \
		${SUDO} disklabel -E -- "$$(<${devfile})" 1>/dev/null
.endfor

create-new-softraid: format-new-chunks
	${SUDO} bioctl -l"$$(sed -- s/$$/a/ ${DEVFILES} | paste -sd, -- -)" \
	    -cc -- softraid0 | \
		awk -- '{ print $$NF }' 1>${SRFILE}

format-new-softraid: create-new-softraid
	${SUDO} disklabel -Aw -- "$$(<${SRFILE})"
	${SUDO} newfs -- "$$(<${SRFILE})"a
	${SUDO} mount -- /dev/"$$(<${SRFILE})"a ${MOUNTPOINT}

copy-bootstrap-to-softraid: format-new-softraid
	${SUDO} mkdir -- ${MOUNTPOINT}/usr
	${SUDO} cp -r -- /usr/mdec ${MOUNTPOINT}/usr/


# most but not all usages rquire the EFI filesystem to be usable
.if ${MACHINE} == "arm64"
REGRESS_TARGETS = prepare

# what the installer does, see /usr/src/distrib/$(machine)/ramdisk/install.md
# do this as regress target and not in format-new-chunks
# XXX -p is not yet softraid(4) aware
prepare:
	${SUDO} ${REAL_RUN} -p -- "$$(<${SRFILE})"
.else
REGRESS_TARGETS =	# empty
.endif
REGRESS_TARGETS +=	dry-prepare \
			dry-default \
			dry-root \
			root-installer \
			root-explicit-stages

dry-prepare:
	${SUDO} ${DRY_RUN} -p -- "$$(<${SRFILE})"

dry-default:
	${SUDO} ${DRY_RUN} -- "$$(<${SRFILE})"

dry-root:
	${SUDO} ${DRY_RUN} -r/ -- "$$(<${SRFILE})"

# what the installer does, see /usr/src/distrib/$(machine)/ramdisk/install.md
# XXX fails with N > 1 on sparc64, 1 <= N <= 4 works on amd64
root-installer:
	${SUDO} installboot -r /mnt "$$(<${SRFILE})"


REGRESS_EXPECTED_FAILURES =	dry-prepare-root \
				dry-prepare-stage \
				dry-nodisk-stage \
				dry-toomany
REGRESS_TARGETS +=		${REGRESS_EXPECTED_FAILURES}

dry-prepare-root:
	${DRY_RUN} -p -r/ -- "$$(<${SRFILE})"

dry-prepare-stage:
	touch -- ${STAGEFILE}
	${DRY_RUN} -p -- "$$(<${SRFILE})" ${STAGEFILE}

dry-nodisk-stage:
	touch -- ${STAGEFILE}
	${SUDO} ${DRY_RUN} -- ${STAGEFILE}

dry-toomany:
	touch -- ${STAGEFILE}
	${DRY_RUN} -- disk stage1 stage2 too many


CLEANFILES =		${CHUNKFILES} ${DEVFILES} ${SRFILE} ${STAGEFILE}
REGRESS_CLEANUP =	cleanup

# allow failure to always cleanup as much as possible
cleanup:
	-${SUDO} umount -- /mnt
	-${SUDO} bioctl -d -- "$$(<${SRFILE})"
.for devfile in ${DEVFILES}
	-${SUDO} vnconfig -u -- "$$(<${devfile})"
.endfor

.include <bsd.regress.mk>