xref: /freebsd/release/Makefile.ec2 (revision 9f0f30bc1f5f08d25243952bad3fdc6e13a75c2a)
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.endif
65EC2AMILIST+=	ec2ami-${_FL}-${_FS}
66CLEANFILES+=	ec2ami-${_FL}-${_FS}
67ec2ami-${_FL}-${_FS}: cw-ec2-${_FL}-${_FS} ${CW_EC2_PORTINSTALL}
68.if !defined(AWSKEYFILE) || !exists(${AWSKEYFILE})
69	@echo "--------------------------------------------------------------"
70	@echo ">>> AWSKEYFILE must point at AWS keys for EC2 AMI creation"
71	@echo "--------------------------------------------------------------"
72	@false
73.endif
74.if !defined(AWSREGION)
75	@echo "--------------------------------------------------------------"
76	@echo ">>> AWSREGION must be specified EC2 AMI creation"
77	@echo "--------------------------------------------------------------"
78	@false
79.endif
80.if !defined(AWSBUCKET)
81	@echo "--------------------------------------------------------------"
82	@echo ">>> AWSBUCKET must be specified for EC2 AMI creation"
83	@echo "--------------------------------------------------------------"
84	@false
85.endif
86	/usr/local/bin/bsdec2-image-upload ${PUBLISH} ${PUBLICSNAP} \
87	    ${EC2ARCH} ${SSMOPTS_${_FL}_${_FS}} ${BOOTMODEOPT} --sriov --ena \
88	    ${.OBJDIR}/${EC2-${_FL:tu}${_FS:tu}IMAGE} \
89	    "${AMIBASENAME} ${_FL} ${_FS:tu}" \
90	    "${TYPE}/${TARGET} ${GITBRANCH}@${GITREV}" \
91	    ${AWSREGION} ${AWSBUCKET} ${AWSKEYFILE} \
92	    ${EC2SNSTOPIC} ${EC2SNSREL} ${EC2SNSVERS}
93	@touch ${.TARGET}
94.endfor
95.endfor
96
97ec2ami: ec2ami-base-${VMFS}
98ec2amis: ${EC2AMILIST}
99