-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
155 lines (120 loc) · 5.32 KB
/
Copy pathMakefile
File metadata and controls
155 lines (120 loc) · 5.32 KB
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
#!/usr/bin/env make -f
_TOPDIR := $(realpath $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
_SELF := $(abspath $(lastword $(MAKEFILE_LIST)))
_IMAGE := $(shell basename $(_TOPDIR))
REFS += $(_SELF)
SHOW_ENV_VARS += \
FIRMWARE \
GUEST_OS_TYPE \
DEBIAN13_VERSION \
DEBIAN13_REV \
DEBIAN13_IMAGES_URL \
ISO_IMG_URL \
ISO_SHASUM_URL \
ISO_IMG \
ISO_SHASUM \
ISO_IMG_LOCAL_URL \
ISO_SHASUM_LOCAL_URL
include $(_TOPDIR)/../Makefile
OS ?= $(error OS not defined)
OSARCH ?= $(error OSARCH not defined)
WORKDIR ?= $(error WORKDIR not defined)
_WORKDIR := $(WORKDIR)/$(_IMAGE)
ifeq ($(OSARCH),x86_64)
GUEST_OS_TYPE := debian-64
FIRMWARE ?= bios
ISO_ARCH := amd64
else ifeq ($(OSARCH),arm64)
GUEST_OS_TYPE := arm-debian-64
FIRMWARE ?= efi
ISO_ARCH := $(OSARCH)
else
$(error unknown OSARCH: $(OSARCH))
endif
DST_VMDIR ?= $(_WORKDIR)/packer-dst
BOX_VMDIR ?= $(_WORKDIR)/box
DESTDIR ?= $(_WORKDIR)/output
DEBIAN13_VERSION := 13.2.0
DEBIAN13_REV ?= $(shell date +"%Y%m%d").1
DEBIAN13_IMAGES_URL := https://cdimage.debian.org/cdimage/archive/$(DEBIAN13_VERSION)/$(ISO_ARCH)/iso-cd
ISO_IMG_URL := $(DEBIAN13_IMAGES_URL)/debian-$(DEBIAN13_VERSION)-$(ISO_ARCH)-netinst.iso
ISO_SHASUM_URL := $(DEBIAN13_IMAGES_URL)/SHA256SUMS
ISO_IMG := $(shell basename $(ISO_IMG_URL))
ISO_SHASUM := $(shell basename $(ISO_SHASUM_URL))
ISO_IMG_LOCAL_URL := file://$(_WORKDIR)/$(ISO_IMG)
ISO_SHASUM_LOCAL_URL := file://$(_WORKDIR)/$(ISO_SHASUM)
VMWARE_DISKMANAGER ?= /Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager
$(_WORKDIR):
mkdir -p "$@"
$(_WORKDIR)/$(ISO_IMG): | $(_WORKDIR)
cd $(_WORKDIR) && \
curl -fsSL $(ISO_SHASUM_URL) | grep -- "$(ISO_IMG)" >"$(ISO_SHASUM)" && \
curl -fLO --progress-bar $(ISO_IMG_URL) && \
sha256sum -c $(ISO_SHASUM)
fetch: $(_WORKDIR)/$(ISO_IMG) ## Fetch Debian 13 ISO image
srcvm:
$(error this builder does not require srcvm)
$(DST_VMDIR):
mkdir -p $(DST_VMDIR)
$(DST_VMDIR)/$(_IMAGE).pkr.hcl: $(_TOPDIR)/$(_IMAGE).pkr.hcl.in | $(DST_VMDIR)
sed \
-e "s,%%FIRMWARE%%,$(FIRMWARE),g" \
-e "s,%%OSARCH%%,$(OSARCH),g" \
-e "s,%%ISO_ARCH%%,$(ISO_ARCH),g" \
-e "s,%%GUEST_OS_TYPE%%,$(GUEST_OS_TYPE),g" \
-e "s,%%ISO_URL%%,$(ISO_IMG_LOCAL_URL),g" \
-e "s,%%ISO_CHECKSUM%%,file:$(ISO_SHASUM_LOCAL_URL),g" \
-e "s,%%VM_NAME%%,$(_IMAGE),g" \
-e "s,%%HTTP_DIRECTORY%%,$(TOPDIR)/http,g" \
< $(_TOPDIR)/$(_IMAGE).pkr.hcl.in > $@
$(DST_VMDIR)/$(_IMAGE)-$(ISO_ARCH).pkrvars.hcl: $(_TOPDIR)/$(_IMAGE)-$(ISO_ARCH).pkrvars.hcl
cp $(_TOPDIR)/$(_IMAGE)-$(ISO_ARCH).pkrvars.hcl $@
$(DST_VMDIR)/debian-13.bootstrap.sh: $(_TOPDIR)/debian-13.bootstrap.sh | $(DST_VMDIR)
cp $(_TOPDIR)/debian-13.bootstrap.sh $@
$(DST_VMDIR)/cloud.cfg: $(_TOPDIR)/cloud.cfg | $(DST_VMDIR)
cp $(_TOPDIR)/cloud.cfg $@
$(DST_VMDIR)/cloud-init-dhcp6-disable.patch: $(_TOPDIR)/cloud-init-dhcp6-disable.patch | $(DST_VMDIR)
cp $(_TOPDIR)/cloud-init-dhcp6-disable.patch $@
dstvm: $(_WORKDIR)/$(ISO_IMG) $(DST_VMDIR)/$(_IMAGE).pkr.hcl $(DST_VMDIR)/$(_IMAGE)-$(ISO_ARCH).pkrvars.hcl $(DST_VMDIR)/debian-13.bootstrap.sh $(DST_VMDIR)/cloud.cfg $(DST_VMDIR)/cloud-init-dhcp6-disable.patch ## Prepare packer sources
$(DST_VMDIR)/output-buildvm/$(_IMAGE).vmx: | dstvm
echo "building..." && \
export PACKER_LOG=1 && \
cd $(DST_VMDIR) && \
packer build $(PACKER_ARGS) --var-file=$(_IMAGE)-$(ISO_ARCH).pkrvars.hcl .
for vmdk in $$(find $(DST_VMDIR)/output-buildvm/ -type f -name "$$(grep -- vmdk $@ | cut -d '"' -f 2)"); do \
echo "Skipping defragmentation and shrinking for $${vmdk} as it should have been done in packer" ; \
continue ; \
echo "Defragmenting $${vmdk}..." ; \
$(VMWARE_DISKMANAGER) -d $${vmdk} ; \
echo "Shrinking $${vmdk}..." ; \
$(VMWARE_DISKMANAGER) -k $${vmdk} ; \
done
build: $(DST_VMDIR)/output-buildvm/$(_IMAGE).vmx ## Run packer build
$(BOX_VMDIR):
mkdir -p $(BOX_VMDIR)
$(BOX_VMDIR)/$(_IMAGE).vmx: | $(DST_VMDIR)/output-buildvm/$(_IMAGE).vmx $(BOX_VMDIR)
for vmdk in $$(find $(DST_VMDIR)/output-buildvm/ -type f -name "*.vmdk"); do \
vmdk_bn=$$(basename $${vmdk}) ; \
cd $(BOX_VMDIR) && ln ../packer-dst/output-buildvm/$${vmdk_bn} $${vmdk_bn} ; \
done
cat $(DST_VMDIR)/output-buildvm/$(_IMAGE).vmx | egrep -v -- \
"^displayname|^ethernet0.pcislotnumber|^extendedconfigfile|^nvme0.subnqnuuid|^nvram|^numa|^sata0:1|^remotedisplay.vnc|^uuid.bios|^uuid.location|^vc.uuid|^vmci0.id|^vmotion|^vmxstats.filename" \
> $@
$(BOX_VMDIR)/metadata.json: $(_TOPDIR)/metadata.json.in | $(BOX_VMDIR)
sed -e "s,%%ARCH%%,$(ARCH),g" < $(_TOPDIR)/metadata.json.in > $@
boxvm: $(BOX_VMDIR)/$(_IMAGE).vmx $(BOX_VMDIR)/metadata.json ## Prepare vagrant box VM
$(DESTDIR):
mkdir -p $@
$(DESTDIR)/$(_IMAGE)-v$(DEBIAN13_VERSION)-$(DEBIAN13_REV)-$(ARCH).box: $(BOX_VMDIR)/$(_IMAGE).vmx $(BOX_VMDIR)/metadata.json | $(DESTDIR)
cd $(BOX_VMDIR) && tar -czvf $@ *
$(DESTDIR)/metadata.json: $(_TOPDIR)/metadata-box.json.in | $(DESTDIR)
sed \
-e "s,%%ARCH%%,$(ARCH),g" \
-e "s,%%VERSION%%,$(DEBIAN13_VERSION)-$(DEBIAN13_REV),g" \
< $(_TOPDIR)/metadata-box.json.in > $@
$(DESTDIR)/SHA256SUMS: $(DESTDIR)/$(_IMAGE)-v$(DEBIAN13_VERSION)-$(DEBIAN13_REV)-$(ARCH).box
cd $(DESTDIR) && sha256sum $(_IMAGE)-v$(DEBIAN13_VERSION)-$(DEBIAN13_REV)-$(ARCH).box | tee $@
box: $(DESTDIR)/$(_IMAGE)-v$(DEBIAN13_VERSION)-$(DEBIAN13_REV)-$(ARCH).box $(DESTDIR)/metadata.json $(DESTDIR)/SHA256SUMS ## Create vagrant box
.PHONY: preclean
preclean:
rm -rf $(DST_VMDIR) $(DESTDIR) $(BOX_VMDIR)