forked from turnkeylinux/buildtasks
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bt-vm
executable file
·145 lines (114 loc) · 4.08 KB
/
bt-vm
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
#!/bin/bash -e
# Copyright (c) 2011-2020 TurnKey GNU/Linux - https://www.turnkeylinux.org
#
# This file is part of buildtasks.
#
# Buildtasks is free software; you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by the
# Free Software Foundation; either version 3 of the License, or (at your
# option) any later version.
fatal() { echo "FATAL [$(basename $0)]: $@" 1>&2; exit 1; }
warning() { echo "WARNING [$(basename $0)]: $@"; }
info() { echo "INFO [$(basename $0)]: $@"; }
usage() {
cat<<EOF
Syntax: $(basename $0) [--publish] appname-version
Converts appliance appname-version to vmdk and ovf
Arguments::
appname-version - e.g., core-14.2-jessie-amd64
Options::
--publish - if set, images and meta files will be published
Environment::
BT_DEBUG - turn on debugging
EOF
exit 1
}
while [ "$1" != "" ]; do
case $1 in
--help|-h ) usage;;
--publish) publish="yes";;
*) if [ -n "$appver" ]; then usage; else appver=$1; fi ;;
esac
shift
done
[ -n "$appver" ] || usage
[ -n "$BT_DEBUG" ] && set -x
export BT=$(dirname $(readlink -f $0))
export BT_CONFIG=$BT/config
. $BT_CONFIG/common.cfg
O=$BT_BUILDS/vm
mkdir -p $O
if [ "$publish" == "yes" ]; then
[ -n "$BT_PUBLISH_IMGS" ] || fatal "BT_PUBLISH_IMGS not set"
[ -n "$BT_PUBLISH_META" ] || fatal "BT_PUBLISH_META not set"
else
warning "--publish was not specified"
fi
if [ ! -e /root/vm-setup.done ]; then
$BT/bin/vm-setup
touch /root/vm-setup.done
fi
parsed_appname_version=$($BT/bin/parse-appname-version $appver)
read appname appversion codename arch <<< "$parsed_appname_version"
export BT_VERSION=${appversion}-${codename}-${arch}
export RELEASE="debian/$codename"
export VM_URL="https://www.turnkeylinux.org/$appname"
export VM_FULLNAME="TURNKEY $(echo $appname | tr [a-z] [A-Z] | sed s'/-/ /g')"
case "$appname" in
canvas) export VM_MEMORY=2048 ;;
gitlab) export VM_MEMORY=2048 ;;
jenkins) export VM_MEMORY=1024 ;;
odoo) export VM_MEMORY=1024 ;;
openvas) export VM_MEMORY=1024 ;;
tkldev) export VM_MEMORY=768 ;;
magento) export VM_MEMORY=768 ;;
moodle) export VM_MEMORY=768 ;;
nextcloud) export VM_MEMORY=768 ;;
tomcat-apache) export VM_MEMORY=768 ;;
*) export VM_MEMORY=512 ;;
esac
case "${codename}-${arch}" in
stretch-i386) export VM_GUESTOS="debian9" ;;
stretch-amd64) export VM_GUESTOS="debian9-64" ;;
buster-amd64) export VM_GUESTOS="debian10-64" ;;
bullseye-amd64) export VM_GUESTOS="debian11-64" ;;
*) fatal "vm_guestos could not be determined" ;;
esac
isofile=turnkey-${appname}-${BT_VERSION}.iso
name=turnkey-${appname}-${BT_VERSION}
rootfs=$name.rootfs
cdroot=$name.cdroot
$BT/bin/iso-download $BT_ISOS $BT_VERSION $appname
$BT/bin/iso-verify $BT_ISOS $BT_VERSION $appname
cd $O
tklpatch-extract-iso $BT_ISOS/$isofile
if [[ "$appversion" == *"rc"* ]]; then
$BT/bin/upgrade-pkgs $rootfs
else
$BT/bin/update-pkgs $rootfs
fi
$BT/bin/purge-pkgs $rootfs
tklpatch-apply $rootfs $BT/patches/vm
$BT/bin/rootfs-cleanup $rootfs
$BT/bin/aptconf-tag $rootfs vm
$BT/bin/build-tag $rootfs vm
$BT/bin/vm-bundle $O/$rootfs
$BT/bin/generate-signature $O/$name-vmdk.zip
$BT/bin/generate-signature $O/$name.ova
$BT/bin/generate-buildenv vm $BT_ISOS/$isofile.hash > $O/$name-vmdk.zip.buildenv
$BT/bin/generate-buildenv vm $BT_ISOS/$isofile.hash > $O/$name.ova.buildenv
# publish if specified
if [ "$publish" == "yes" ]; then
export PUBLISH_DEST=${BT_PUBLISH_IMGS}/vmdk/
$BT/bin/publish-files $O/$name-vmdk.zip
export PUBLISH_DEST=${BT_PUBLISH_IMGS}/ova/
$BT/bin/publish-files $O/$name.ova
export PUBLISH_DEST=${BT_PUBLISH_META}/
$BT/bin/publish-files $O/$name-vmdk.{zip.hash,zip.buildenv}
$BT/bin/publish-files $O/$name.{ova.hash,ova.buildenv}
fi
if [ -z "$BT_DEBUG" ] && ! (mount | grep -q $(basename $rootfs)); then
rm -rf $rootfs
rm -rf $cdroot
[ "$publish" == "yes" ] && $BT/bin/clean vm $appver
fi