1# 2# Makefile for uploading Google Compute Engine disk images. 3# 4 5GCE_UPLOAD_TGTS= gce-check-depends \ 6 gce-do-package \ 7 gce-do-upload 8# I do not yet have a better way to deal with the "must be run interactively" 9# thing, so this is a fail-safe "do not do anything." 10.if !defined(GCE_LOGIN_SKIP) || empty(GCE_LOGIN_SKIP) 11GCE_UPLOAD_TGTS= gce-do-login 12.endif 13CLEANFILES+= ${GCE_UPLOAD_TGTS} 14 15GCE_BUCKET?= 16GCE_LICENSE?= 17 18.if ${TARGET_ARCH} == "amd64" 19GCE_ARCH= X86_64 20.elif ${TARGET_ARCH} == "aarch64" 21GCE_ARCH= ARM64 22.else 23GCE_ARCH= UNSUPPORTED_IN_GCE 24.endif 25 26.if !defined(GCE_FAMILY) || empty(GCE_FAMILY) 27GCE_FAMILY= ${TYPE:tl}-${REVISION:S,.,-,}-${TARGET} 28.endif 29 30.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE" 31SNAPSHOT_DATE= -v${BUILDDATE} 32GCE_FAMILY_SUFX= -snap 33.endif 34 35gce-upload: ${GCE_UPLOAD_TGTS} 36 37gce-check-depends: 38.for VAR in _BUCKET 39. if !defined(GCE${VAR}) || empty(GCE${VAR}) 40 @echo "Variable GCE${VAR} cannot be empty." 41 @false 42. endif 43.endfor 44.if !exists(/usr/local/bin/gcloud) 45. if !exists(${PORTSDIR}/net/google-cloud-sdk/Makefile) 46. if !exists(/usr/local/sbin/pkg-static) 47 env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf 48. endif 49 env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-sdk \ 50 lang/python 51. else 52 env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/net/google-cloud-sdk \ 53 BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \ 54 all install clean 55 env UNAME_r=${UNAME_r} make -C ${PORTSDIR}/lang/python \ 56 BATCH=1 WRKDIRPREFIX=/tmp/ports DISTDIR=/tmp/distfiles \ 57 all install clean 58. endif 59.endif 60 61gce-do-login: 62 @echo "This requires human interaction, which is not yet supported." 63 @true 64 65.for _FS in ${GCE_FSLIST} 66GCE_IMG_${_FS}= ${.OBJDIR}/gce.${_FS}.raw 67# Really? Uppercase characters are not allowed? Sigh... 68# And don't even get me started on the '.'. 69GCE_TARGET_${_FS}= ${OSRELEASE:S,.raw,,:tl:S,.,-,g}-${_FS}${SNAPSHOT_DATE} 70 71gce-do-package-${_FS}: 72 @# Yes, really... Sigh. 73 cd ${.OBJDIR} && mv ${GCE_IMG_${_FS}} disk.raw 74 cd ${.OBJDIR} && tar --format=gnutar -zcf \ 75 ${GCE_TARGET_${_FS}:S,${.OBJDIR}/,,}.tar.gz disk.raw 76 cd ${.OBJDIR} && mv disk.raw ${GCE_IMG_${_FS}} 77 touch ${.OBJDIR}/${.TARGET} 78 79gce-do-upload-${_FS}: 80 @# Fallthrough in case the bucket already exists. 81 /usr/local/bin/gsutil mb gs://${GCE_BUCKET} || true 82 /usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET_${_FS}}.tar.gz \ 83 gs://${GCE_BUCKET}/ 84 /usr/local/bin/gcloud compute images create ${GCE_TARGET_${_FS}} \ 85 --architecture=${GCE_ARCH} \ 86 --family=${GCE_FAMILY}-${_FS}${GCE_FAMILY_SUFX} ${GCE_LICENSE} \ 87 --guest-os-features=GVNIC,UEFI_COMPATIBLE \ 88 --source-uri gs://${GCE_BUCKET}/${GCE_TARGET_${_FS}}.tar.gz 89 touch ${.OBJDIR}/${.TARGET} 90.endfor 91 92gce-do-package: gce-do-package-${VMFS} 93gce-do-upload: gce-do-upload-${VMFS} 94