aboutsummaryrefslogtreecommitdiff
path: root/release/Makefile.vagrant
blob: 4abcaa891ed34c6358ce6cddadcdc5036d0300f2 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#
# $FreeBSD$
#
# Makefile for producing and uploading Vagrant boxes to Hashicorp Atlas
#
# Usage Example:
#   Create a Vagrant image for VirtualBox:
#     make vagrant-box WITH_VMIMAGES=y WITH_CLOUDWARE=y \
#       CLOUDWARE=vagrant-virtualbox VMFORMATS=vmdk
#
#   To create a Vagrant image for VMWare and Upload it to Atlas:
#     VAGRANT_KEY is your Atlas API Token
#     VAGRANT_USERNAME is your Atlas Username
#     env VAGRANT_KEY=foo VAGRANT_USERNAME=bar make vagrant-upload \
#       WITH_VMIMAGES=y WITH_CLOUDWARE=y CLOUDWARE=vagrant-vmware \
#       VMFORMATS=vmdk
#     For more info: https://www.vagrantup.com/docs/other/atlas.html
#

VAGRANT_IMG?=		${.OBJDIR}/vagrant.vmdk
VAGRANT_UPLOAD_TGTS=	vagrant-check-depends
CLEANFILES+=		${VAGRANT_UPLOAD_TGTS}

.if defined(VAGRANT_UPLOAD_CONF) && !empty(VAGRANT_UPLOAD_CONF)
. for VAR in _KEY _USERNAME
VAGRANT${VAR}!=		grep -E ^VAGRANT${VAR} ${VAGRANT_UPLOAD_CONF} | awk -F'	' '{print $$2}'
ATLAS${VAR}:=		${VAGRANT${VAR}}
. endfor
.endif

.if ${BRANCH} == "STABLE" || ${BRANCH} == "CURRENT" || ${BRANCH} == "PRERELEASE"
SNAPSHOT_DATE!=		date +-${BUILDDATE}
.endif

VAGRANT_VERSION!=	date +%Y.%m.%d
VAGRANT_TARGET:=	${OSRELEASE}${SNAPSHOT_DATE}
.if !empty(CLOUDWARE)
. for _PROVIDER in ${CLOUDWARE}
.  if ${_PROVIDER:tu:MVAGRANT*}
VAGRANT_PROVIDERS+=	${_PROVIDER:tu:S/VAGRANT-//:tl}
.  endif
. endfor
.endif
VAGRANT_PROVIDERS?=	vmware virtualbox


vagrant-check-depends:
.for VAR in _KEY _USERNAME _VERSION
. if !defined(VAGRANT${VAR}) || empty(VAGRANT${VAR})
	@echo "Variable VAGRANT${VAR} cannot be empty."
	@false
. endif
.endfor
.if !exists(/usr/local/bin/curl)
. if !exists(${PORTSDIR}/ftp/curl/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 curl
. else
	make -C ${PORTSDIR}/ftp/curl BATCH=1 all install clean
. endif
.endif

.for PROVIDER in ${VAGRANT_PROVIDERS}
CLEANFILES+=	vagrant-do-package-${PROVIDER} ${VAGRANT_TARGET}.${PROVIDER}.box
CLEANDIRS+=	${PROVIDER}
VAGRANT_UPLOAD_TGTS+=	vagrant-do-upload-${PROVIDER}

${PROVIDER}:
	@mkdir -p ${PROVIDER}

${VAGRANT_TARGET}.${PROVIDER}.box: ${PROVIDER} cw-vagrant-${PROVIDER} vagrant-create-${PROVIDER}-metadata
	@echo "==> PACKAGING: ${VAGRANT_TARGET}.${PROVIDER}.box in `pwd`"
	@cp vagrant-${PROVIDER}.vmdk ${PROVIDER}/vagrant.vmdk
. if ${PROVIDER} == "virtualbox"
	@(cd ${.OBJDIR}/${PROVIDER} && echo '{"provider":"${PROVIDER}"}' > metadata.json)
	@(cd ${.OBJDIR}/${PROVIDER} && tar -czf ../${VAGRANT_TARGET}.${PROVIDER}.box metadata.json box.ovf vagrant.vmdk)
. elif ${PROVIDER} == "vmware"
	@(cd ${.OBJDIR}/${PROVIDER} && echo '{"provider":"${PROVIDER}_desktop"}' > metadata.json)
	@(cd ${.OBJDIR}/${PROVIDER} && tar -czf ../${VAGRANT_TARGET}.${PROVIDER}.box metadata.json vagrant.vmx vagrant.vmdk)
. endif

CLEANFILES+=	vagrant-do-upload-${PROVIDER}
vagrant-do-upload-${PROVIDER}: vagrant-box
. if ${PROVIDER} == "virtualbox"
	${.CURDIR}/scripts/atlas-upload.sh -b ${TYPE}-${REVISION}-${BRANCH} -f ${VAGRANT_TARGET}.${PROVIDER}.box -p ${PROVIDER} -k ${VAGRANT_KEY} -u ${VAGRANT_USERNAME} -v ${VAGRANT_VERSION}
. elif ${PROVIDER} == "vmware"
	${.CURDIR}/scripts/atlas-upload.sh -b ${TYPE}-${REVISION}-${BRANCH} -f ${VAGRANT_TARGET}.${PROVIDER}.box -p ${PROVIDER}_desktop -k ${VAGRANT_KEY} -u ${VAGRANT_USERNAME} -v ${VAGRANT_VERSION}
. endif
	touch ${.OBJDIR}/${.TARGET}

vagrant-box: ${VAGRANT_TARGET}.${PROVIDER}.box

.endfor

vagrant-upload:	${VAGRANT_UPLOAD_TGTS}

vagrant-create-virtualbox-metadata: virtualbox/box.ovf

virtualbox/box.ovf: ${.CURDIR}/scripts/box.ovf
	cp ${.ALLSRC} virtualbox/

vmware/vagrant.vmx:
	@(cd vmware && echo '.encoding = "UTF-8"' > vagrant.vmx)
	@(cd vmware && echo 'bios.bootorder = "hdd,CDROM"' >> vagrant.vmx)
	@(cd vmware && echo 'checkpoint.vmstate = ""' >> vagrant.vmx)
	@(cd vmware && echo 'cleanshutdown = "TRUE"' >> vagrant.vmx)
	@(cd vmware && echo 'config.version = "8"' >> vagrant.vmx)
	@(cd vmware && echo 'displayname = "${VAGRANT_TARGET}"' >> vagrant.vmx)
	@(cd vmware && echo 'ethernet0.addresstype = "generated"' >> vagrant.vmx)
	@(cd vmware && echo 'ethernet0.bsdname = "en0"' >> vagrant.vmx)
	@(cd vmware && echo 'ethernet0.connectiontype = "nat"' >> vagrant.vmx)
	@(cd vmware && echo 'ethernet0.displayname = "Ethernet"' >> vagrant.vmx)
	@(cd vmware && echo 'ethernet0.linkstatepropagation.enable = "FALSE"' >> vagrant.vmx)
	@(cd vmware && echo 'ethernet0.pcislotnumber = "33"' >> vagrant.vmx)
	@(cd vmware && echo 'ethernet0.present = "TRUE"' >> vagrant.vmx)
	@(cd vmware && echo 'ethernet0.virtualdev = "e1000"' >> vagrant.vmx)
	@(cd vmware && echo 'ethernet0.wakeonpcktrcv = "FALSE"' >> vagrant.vmx)
	@(cd vmware && echo 'floppy0.present = "FALSE"' >> vagrant.vmx)
	@(cd vmware && echo 'guestos = "freebsd-64"' >> vagrant.vmx)
	@(cd vmware && echo 'gui.fullscreenatpoweron = "FALSE"' >> vagrant.vmx)
	@(cd vmware && echo 'gui.viewmodeatpoweron = "windowed"' >> vagrant.vmx)
	@(cd vmware && echo 'memsize = "512"' >> vagrant.vmx)
	@(cd vmware && echo 'sound.startconnected = "FALSE"' >> vagrant.vmx)
	@(cd vmware && echo 'softpoweroff = "TRUE"' >> vagrant.vmx)
	@(cd vmware && echo 'scsi0.pcislotnumber = "16"' >> vagrant.vmx)
	@(cd vmware && echo 'scsi0.present = "TRUE"' >> vagrant.vmx)
	@(cd vmware && echo 'scsi0.virtualdev = "lsilogic"' >> vagrant.vmx)
	@(cd vmware && echo 'scsi0:0.filename = "vagrant.vmdk"' >> vagrant.vmx)
	@(cd vmware && echo 'scsi0:0.present = "TRUE"' >> vagrant.vmx)
	@(cd vmware && echo 'tools.synctime = "TRUE"' >> vagrant.vmx)
	@(cd vmware && echo 'usb.present = "FALSE"' >> vagrant.vmx)
	@(cd vmware && echo 'virtualhw.productcompatibility = "hosted"' >> vagrant.vmx)
	@(cd vmware && echo 'virtualhw.version = "9"' >> vagrant.vmx)

vagrant-create-vmware-metadata: vmware/vagrant.vmx