forked from covertsh/ubuntu-autoinstall-generator
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
117 lines (95 loc) · 2.57 KB
/
Makefile
File metadata and controls
117 lines (95 loc) · 2.57 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
#!make
-include .env
TODAY ?= $(shell date +"%Y-%m-%d")
GCC ?= /bin/bash
GCMD ?= ./ubuntu-autoinstall-generator.sh
GCFLAGS ?= --all-in-one
USER_DATA_INFILE ?= ./user-data.template.yaml
USER_DATA_FILE ?= ./user-data.yaml
PROJECT := simple
PASSWORD ?= ubuntu
INSTALL_SSH_SERVER ?= false
PUB_KEY ?= $(shell cat id_rsa.pub)
ENCRYPTED_PASSWORD ?= $(shell /usr/bin/openssl passwd -1 $(PASSWORD))
RANDOM_ADJ := $(shell cat /usr/share/dict/words \
| grep -E '^[[:alpha:]]{1,5}$$' \
| grep -e 'ly$$' -e 'ing$$' -e 'ed$$'\
| sed -e 's/\(.*\)/\L\1/'| shuf -n1)
RANDOM_WORD := $(shell cat /usr/share/dict/words \
| grep -E '^[[:alpha:]]{1,5}$$' \
| shuf -n1 \
| sed -e s/"'s"/""/g \
| sed -e 's/\(.*\)/\L\1/' \
| sed -e 's/ *$$//g')
HOSTNAME ?= $(RANDOM_ADJ)-$(RANDOM_WORD)
USERNAME ?= ubuntu
ISO_OUTFILE ?= $(HOSTNAME)_$(TODAY).iso
ENV_CONTENTS := $(shell cat ./.env)
MAKE_ENV += ENCRYPTED_PASSWORD
MAKE_ENV += PUB_KEY
MAKE_ENV += HOSTNAME
MAKE_ENV += USERNAME
MAKE_ENV += INSTALL_SSH_SERVER
SHELL_EXPORT := $(foreach v,$(MAKE_ENV),$(v)='$($(v))' )
CDROM ?= $(shell find . -maxdepth 1 -type f -iname "*_$(TODAY).iso" | head -1)
RELEASE ?= 20.04
INSTALLER := /usr/bin/virt-install
URI ?= qemu:///system
RAM ?= 2096
DISK ?= pool=default,size=25,bus=virtio,format=qcow2
VCPUS ?= 1
OS_TYPE := linux
OS_VARIANT := ubuntu$(RELEASE)
NETWORK ?= network:default
GRAPHICS ?= vnc
CONSOLE ?= pty,target_type=serial
VM_NAME ?= $(HOSTNAME)
compile:
$(MAKE) get_pub_key
ifneq (,$(findstring HOSTNAME,$(ENV_CONTENTS)))
# Found
else
echo "\nHOSTNAME=$(HOSTNAME)" >> ./.env;
endif
$(SHELL_EXPORT) envsubst <$(USER_DATA_INFILE) >$(USER_DATA_FILE); \
$(GCC) $(GCMD) $(GCFLAGS) --user-data $(USER_DATA_FILE) --destination $(ISO_OUTFILE)
encrypt_password:
@/usr/bin/openssl passwd -1 $(PASSWORD)
create_keypair:
ssh-keygen -t rsa -b 4096 -f id_rsa -C $(PROJECT) -N "" -q
chmod 600 id_rsa
write_file:
$(SHELL_EXPORT) envsubst <$(USER_DATA_INFILE) >$(USER_DATA_FILE)
get_pub_key:
ifeq ($(PUB_KEY),)
$(MAKE) create_keypair
endif
build_user_data:
$(MAKE) get_pub_key
$(MAKE) write_file
remove_old_keys:
rm ./*id_rsa*
rm ./*SHA256SUMS*
rm ./*.keyring
cleanup_isos:
rm -f ./*.iso
make_clean_all:
$(MAKE) remove_old_keys
$(MAKE) cleanup_isos
install:
$(INSTALLER) \
--connect=$(URI) \
--name $(VM_NAME) \
--ram $(RAM) \
--disk $(DISK) \
--vcpus $(VCPUS) \
--os-type $(OS_TYPE) \
--os-variant $(OS_VARIANT) \
--network $(NETWORK) \
--graphics $(GRAPHICS) \
--console $(CONSOLE) \
--cdrom $(CDROM) \
--force --debug
all:
$(MAKE) compile
$(MAKE) install