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.if ${EC2_FORMAT} == "vmdks" 36EC2_VMDK= --vmdk 37.endif 38 39CLEANFILES+= ec2ami 40 41.if !exists(/usr/local/bin/bsdec2-image-upload) 42CW_EC2_PORTINSTALL= cw-ec2-portinstall 43CLEANFILES+= ${CW_EC2_PORTINSTALL} 44.else 45CW_EC2_PORTINSTALL= 46.endif 47 48cw-ec2-portinstall: 49.if !exists(/usr/local/bin/bsdec2-image-upload) 50. if !exists(${PORTSDIR}/net/bsdec2-image-upload/Makefile) 51. if !exists(/usr/local/sbin/pkg-static) 52 env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf 53. endif 54 env ASSUME_ALWAYS_YES=yes pkg install -y net/bsdec2-image-upload 55. else 56 env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/net/bsdec2-image-upload \ 57 BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \ 58 all install clean 59. endif 60.endif 61 @touch ${.TARGET} 62 63.for _FS in ${EC2_FSLIST} 64.for _FL in ${EC2_FLAVOURS:tl} 65.if defined(SSMPREFIX) && !empty(SSMPREFIX) 66SSMOPTS_${_FL}_${_FS}= --ssm-name ${SSMPREFIX}/${TARGET_ARCH:S/aarch64/arm64/}/${_FL}/${_FS}/${REVISION}/${BRANCH} 67.if ${BRANCH} == "RELEASE" 68SSMOPTSEXTRA_${_FL}_${_FS}= --ssm-name-extra ${SSMPREFIX}/${TARGET_ARCH:S/aarch64/arm64/}/${_FL}/${_FS}/${REVISION}/${BRANCH}/latest 69.endif 70.endif 71EC2AMILIST+= ec2ami-${_FL}-${_FS} 72CLEANFILES+= ec2ami-${_FL}-${_FS} 73ec2ami-${_FL}-${_FS}: cw-ec2-${_FL}-${_FS} ${CW_EC2_PORTINSTALL} 74.if !defined(AWSKEYFILE) || !exists(${AWSKEYFILE}) 75 @echo "--------------------------------------------------------------" 76 @echo ">>> AWSKEYFILE must point at AWS keys for EC2 AMI creation" 77 @echo "--------------------------------------------------------------" 78 @false 79.endif 80.if !defined(AWSREGION) 81 @echo "--------------------------------------------------------------" 82 @echo ">>> AWSREGION must be specified EC2 AMI creation" 83 @echo "--------------------------------------------------------------" 84 @false 85.endif 86.if !defined(AWSBUCKET) 87 @echo "--------------------------------------------------------------" 88 @echo ">>> AWSBUCKET must be specified for EC2 AMI creation" 89 @echo "--------------------------------------------------------------" 90 @false 91.endif 92 /usr/local/bin/bsdec2-image-upload ${PUBLISH} ${PUBLICSNAP} \ 93 ${EC2ARCH} ${SSMOPTS_${_FL}_${_FS}} ${SSMOPTSEXTRA_${_FL}_${_FS}} \ 94 ${BOOTMODEOPT} ${EC2_VMDK} --sriov --ena \ 95 ${.OBJDIR}/${EC2-${_FL:tu}${_FS:tu}IMAGE} \ 96 "${AMIBASENAME} ${_FL} ${_FS:tu}" \ 97 "${TYPE}/${TARGET} ${GITBRANCH}@${GITREV}" \ 98 ${AWSREGION} ${AWSBUCKET} ${AWSKEYFILE} \ 99 ${EC2SNSTOPIC} ${EC2SNSREL} ${EC2SNSVERS} 100 @touch ${.TARGET} 101.endfor 102.endfor 103 104ec2ami: ec2ami-base-${VMFS} 105ec2amis: ${EC2AMILIST} 106