-
Notifications
You must be signed in to change notification settings - Fork 19
/
bt-container
executable file
·134 lines (105 loc) · 3.92 KB
/
bt-container
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
#!/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 container template
Arguments::
appname-version - e.g., core-14.2-jessie-amd64
Options::
--publish - if set, image 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
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
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"
os_arch=$(dpkg --print-architecture)
[ "$arch" == "$os_arch" ] || fatal "os_arch mismatch: $arch != $os_arch"
case "$appname" in
canvas) export ON_MEMORY=0.50 ;;
gitlab) export ON_MEMORY=0.50 ;;
jenkins) export ON_MEMORY=0.50 ;;
clipbucket) export ON_MEMORY=0.50 ;;
tkldev) export ON_MEMORY=0.50 ;;
moodle) export ON_MEMORY=0.33 ;;
tomcat-apache) export ON_MEMORY=0.33 ;;
*) export ON_MEMORY=0.25 ;;
esac
case "$codename" in
stretch) debianversion="debian-9" ;;
buster) debianversion="debian-10" ;;
bullseye) debianversion="debian-11" ;;
bookworm) debianversion="debian-12" ;;
trixie) debianversion="debian-13" ;;
*) fatal "debianversion could not be determined" ;;
esac
O=$BT_BUILDS/container
mkdir -p $O
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
[[ "$appversion" == *"rc"* ]] && $BT/bin/upgrade-pkgs $rootfs
$BT/bin/purge-pkgs $rootfs
tklpatch-apply $rootfs $BT/patches/headless
tklpatch-apply $rootfs $BT/patches/container
$BT/bin/rootfs-cleanup $rootfs
$BT/bin/aptconf-tag $rootfs proxmox
$BT/bin/build-tag $rootfs proxmox
# bundle proxmox tarball using stupid naming convention
stupidname="${debianversion}-turnkey-${appname}_${appversion}-1_${arch}"
# remove postfix sockets to stop tar whinging
find $rootfs/var/spool/postfix/ -type s -delete
info "creating Proxmox container build ($stupidname.tar.gz)"
tar -C $rootfs -zcf $stupidname.tar.gz .
$BT/bin/generate-signature $O/$stupidname.tar.gz
$BT/bin/generate-buildenv container $BT_ISOS/$isofile.hash > $O/$stupidname.tar.gz.buildenv
# publish if specified
if [ "$publish" == "yes" ]; then
export PUBLISH_DEST=${BT_PUBLISH_IMGS}/proxmox/
$BT/bin/publish-files $O/$stupidname.tar.gz
export PUBLISH_DEST=${BT_PUBLISH_META}/
$BT/bin/publish-files $O/$stupidname.{tar.gz.hash,tar.gz.buildenv}
fi
if [ -z "$BT_DEBUG" ] && ! (mount | grep -q $(basename $rootfs)); then
rm -rf $rootfs
rm -rf $cdroot
[ "$publish" != "yes" ] || $BT/bin/clean container $appver
fi