xref: /freebsd/release/Makefile.ec2 (revision c2a55efd74cccb3d4e7b9037b240ad062c203bb8)
1#
2# Makefile for creating an EC2 AMI from a disk image.
3#
4
5.if ${BRANCH} == "CURRENT" || ${BRANCH} == "STABLE" || ${BRANCH} == "PRERELEASE"
6AMINAMESUFFIX!=	date +-${BUILDDATE}
7.endif
8.if defined(EC2PUBLIC) && !empty(EC2PUBLIC)
9PUBLISH=	--public
10.endif
11.if defined(EC2PUBLICSNAP) && !empty(EC2PUBLICSNAP)
12PUBLICSNAP=	--publicsnap
13.endif
14.if defined(EC2SNSTOPIC) && !empty(EC2SNSTOPIC)
15EC2SNSREL=	${REVISION}-${BRANCH}
16EC2SNSVERS=	${GITBRANCH}@${GITREV}
17.endif
18.if ${TARGET_ARCH} != "amd64"
19EC2ARCH=	--${TARGET_ARCH:S/aarch64/arm64/}
20.endif
21.if !defined(AMIBOOTMETHOD)
22AMIBOOTMETHOD=	UEFI-PREFERRED
23.endif
24.if ${AMIBOOTMETHOD} == "UEFI" && ${TARGET_ARCH} == "amd64"
25BOOTMODEOPT=	--uefi
26.endif
27.if ${AMIBOOTMETHOD} == "UEFI-PREFERRED" && ${TARGET_ARCH} == "amd64"
28BOOTMODEOPT=	--uefi-preferred
29.endif
30.if ${AMIBOOTMETHOD} == "UEFI-PREFERRED"
31AMIBASENAME=${TYPE} ${REVISION}-${BRANCH}-${TARGET}${AMINAMESUFFIX}
32.else
33AMIBASENAME=${TYPE} ${REVISION}-${BRANCH}-${TARGET}${AMINAMESUFFIX} ${AMIBOOTMETHOD}
34.endif
35
36CLEANFILES+=		ec2ami
37
38.if !exists(/usr/local/bin/bsdec2-image-upload)
39CW_EC2_PORTINSTALL=	cw-ec2-portinstall
40CLEANFILES+=		${CW_EC2_PORTINSTALL}
41.else
42CW_EC2_PORTINSTALL=
43.endif
44
45cw-ec2-portinstall:
46.if !exists(/usr/local/bin/bsdec2-image-upload)
47. if !exists(${PORTSDIR}/net/bsdec2-image-upload/Makefile)
48.  if !exists(/usr/local/sbin/pkg-static)
49	env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf
50.  endif
51	env ASSUME_ALWAYS_YES=yes pkg install -y net/bsdec2-image-upload
52. else
53	env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/net/bsdec2-image-upload \
54	    BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \
55	    all install clean
56. endif
57.endif
58	@touch ${.TARGET}
59
60.for _FS in ${EC2_FSLIST}
61.for _FL in ${EC2_FLAVOURS:tl}
62.if defined(SSMPREFIX) && !empty(SSMPREFIX)
63SSMOPTS_${_FL}_${_FS}=	--ssm-name ${SSMPREFIX}/${TARGET_ARCH:S/aarch64/arm64/}/${_FL}/${_FS}/${REVISION}/${BRANCH}
64.if ${BRANCH} == "RELEASE"
65SSMOPTSEXTRA_${_FL}_${_FS}=	--ssm-name-extra ${SSMPREFIX}/${TARGET_ARCH:S/aarch64/arm64/}/${_FL}/${_FS}/${REVISION}/${BRANCH}/latest
66.endif
67.endif
68EC2AMILIST+=	ec2ami-${_FL}-${_FS}
69CLEANFILES+=	ec2ami-${_FL}-${_FS}
70ec2ami-${_FL}-${_FS}: cw-ec2-${_FL}-${_FS} ${CW_EC2_PORTINSTALL}
71.if !defined(AWSKEYFILE) || !exists(${AWSKEYFILE})
72	@echo "--------------------------------------------------------------"
73	@echo ">>> AWSKEYFILE must point at AWS keys for EC2 AMI creation"
74	@echo "--------------------------------------------------------------"
75	@false
76.endif
77.if !defined(AWSREGION)
78	@echo "--------------------------------------------------------------"
79	@echo ">>> AWSREGION must be specified EC2 AMI creation"
80	@echo "--------------------------------------------------------------"
81	@false
82.endif
83.if !defined(AWSBUCKET)
84	@echo "--------------------------------------------------------------"
85	@echo ">>> AWSBUCKET must be specified for EC2 AMI creation"
86	@echo "--------------------------------------------------------------"
87	@false
88.endif
89	/usr/local/bin/bsdec2-image-upload ${PUBLISH} ${PUBLICSNAP} \
90	    ${EC2ARCH} ${SSMOPTS_${_FL}_${_FS}} ${SSMOPTSEXTRA_${_FL}_${_FS}} \
91	    ${BOOTMODEOPT} --sriov --ena \
92	    ${.OBJDIR}/${EC2-${_FL:tu}${_FS:tu}IMAGE} \
93	    "${AMIBASENAME} ${_FL} ${_FS:tu}" \
94	    "${TYPE}/${TARGET} ${GITBRANCH}@${GITREV}" \
95	    ${AWSREGION} ${AWSBUCKET} ${AWSKEYFILE} \
96	    ${EC2SNSTOPIC} ${EC2SNSREL} ${EC2SNSVERS}
97	@touch ${.TARGET}
98.endfor
99.endfor
100
101ec2ami: ec2ami-base-${VMFS}
102ec2amis: ${EC2AMILIST}
103