diff --git a/release/Makefile.gce b/release/Makefile.gce new file mode 100644 index 000000000000..c7d6a75fb300 --- /dev/null +++ b/release/Makefile.gce @@ -0,0 +1,69 @@ +# +# $FreeBSD$ +# +# +# Makefile for uploading Google Compute Engine disk images. +# + +GCE_IMG?= ${.OBJDIR}/gce.raw +GCE_UPLOAD_TGTS= gce-check-depends \ + gce-do-package \ + gce-do-upload +# I do not yet have a better way to deal with the "must be run interactively" +# thing, so this is a fail-safe "do not do anything." +.if !defined(GCE_LOGIN_SKIP) || empty(GCE_LOGIN_SKIP) +GCE_UPLOAD_TGTS= gce-do-login +.endif +CLEANFILES+= ${GCE_UPLOAD_TGTS} + +GCE_BUCKET?= + +.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE" +SNAPSHOT_DATE!= date +-%Y-%m-%d-%H-%M +.endif + +# Really? Uppercase characters are not allowed? Sigh... +# And don't even get me started on the '.'. +GCE_TARGET:= ${OSRELEASE:S,.raw,,:tl:S,.,-,g}${SNAPSHOT_DATE} + +gce-upload: ${GCE_UPLOAD_TGTS} + +gce-check-depends: +.for VAR in _BUCKET +. if !defined(GCE${VAR}) || empty(GCE${VAR}) + @echo "Variable GCE${VAR} cannot be empty." + @false +. endif +.endfor +.if !exists(/usr/local/bin/gcutil) +. if !execho ists(${PORTSDIR}/net/google-cloud-api/Makefile) +. if !exists(/usr/local/sbin/pkg-static) + env ASSUME_ALWAYS_YES=yes pkg bootstrap -yf +. endif + env ASSUME_ALWAYS_YES=yes pkg install -y net/google-cloud-api +. else + make -C ${PORTSDIR}/net/google-cloud-api BATCH=1 all install clean +. endif +.endif + +gce-do-package: + @# Yes, really... Sigh. + cd ${.OBJDIR} && mv gce.raw disk.raw + cd ${.OBJDIR} && tar --format=gnutar -zcf \ + ${GCE_TARGET:S,${.OBJDIR}/,,}.tar.gz disk.raw + cd ${.OBJDIR} && mv disk.raw gce.raw + touch ${.OBJDIR}/${.TARGET} + +gce-do-login: + @echo "This requires human interaction, which is not yet supported." + @true + +gce-do-upload: + @# Fallthrough in case the bucket already exists. + /usr/local/bin/gsutil mb gs://${GCE_BUCKET} || true + /usr/local/bin/gsutil cp ${.OBJDIR}/${GCE_TARGET}.tar.gz \ + gs://${GCE_BUCKET}/ + /usr/local/bin/gcutil addimage ${GCE_TARGET} \ + gs://${GCE_BUCKET}/${GCE_TARGET}.tar.gz + touch ${.OBJDIR}/${.TARGET} + diff --git a/release/Makefile.vm b/release/Makefile.vm index ae7c3aa0295c..c9f4477a04c2 100644 --- a/release/Makefile.vm +++ b/release/Makefile.vm @@ -155,3 +155,4 @@ cloudware-install: .include "${.CURDIR}/Makefile.ec2" .include "${.CURDIR}/Makefile.azure" +.include "${.CURDIR}/Makefile.gce" diff --git a/release/tools/gce-package.sh b/release/tools/gce-package.sh deleted file mode 100755 index 5d8ec3311303..000000000000 --- a/release/tools/gce-package.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# Script to handle packaging cloud images for GCE. -# -# XXX: -# This script only exists to help in automating image creation, -# and reimplementing this is intended (in other words, this is -# temporary). - -usage() { - echo "Usage:" - echo "$(basename ${0}) -D -I -S " - exit 1 -} - -main() { - while getopts "D:I:W:" opt; do - case ${opt} in - D) - DESTDIR="${OPTARG}" - ;; - I) - INFILE="${OPTARG}" - ;; - S) - WORLDDIR="${OPTARG}" - ;; - *) - usage - ;; - esac - done - shift $(( ${OPTIND} - 1 )) - - if [ -z "${DESTDIR}" -o -z "${INFILE}" -o -z "${WORLDDIR}" ]; then - usage - fi - - OUTFILE="$(make -C ${WORLDDIR}/release -V OSRELEASE).tar.gz" - - cd ${DESTDIR} && tar --format=gnutar -zcf ${OUTFILE} ${INFILE} -} - -main "$@"