summaryrefslogtreecommitdiffstats
path: root/build/apt/build/build.sh
blob: 427bdc8980691e8943174c175ca4b8fa4aad914c (plain)
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
#!/bin/bash

################################################################################
#
# Copyright (c) 2010 penSec.IT UG (haftungsbeschränkt)
#        http://www.pensec.it
#        mail@pensec.it
# 
# Diese Software wird ohne ausdrückliche oder implizierte Garantie
# bereitgestellt. Auf keinen Fall können die Autoren für irgendwelche Schäden,
# die durch die Benutzung dieser Software entstehen, haftbar gemacht werden.
# 
# Es ist dem Auftraggeber gestattet diese Software für jeden Zweck, inklusive
# kommerzieller Anwendungen, zu benutzten und zu verändern aber nicht
# weiterzuverbreiten, solange folgende Bedingungen erfüllt sind:
# 
#     1. Die Herkunft dieser Software darf nicht falsch dargestellt werden; Sie
#        dürfen nicht angeben, dass Sie die ursprüngliche Software geschrieben
#        haben. Wenn Sie diese Software in einem Produkt benutzten, würde eine
#        Erwähnung geschätzt werden, sie ist aber nicht erforderlich.
#     2. Veränderte Quelltextversionen müssen deutlich als solche
#        gekennzeichnet werden und dürfen nicht als die Originalsoftware
#        dargestellt werden.
#     3. Diese Notiz darf in den Quelltexten nicht verändert oder gelöscht
#        werden.
#
################################################################################



#####
# Baut etherpad aus den Quellen und erstellt ein Debian/Ubuntu Paket
#
# @param $1 (optional) Wenn rebuild, dann wird das Repository neu ausgecheckt
#     anstatt nur geupdated zu werden
# @param $REPOSITORY_URL URL von welcher das Repository geladen werden soll
# @param $REPOSITORY_NAME Name des Paketes welches gebaut werden soll
# @param $REPOSITORY_TYPE Element der Menge {hg, git}
#
if [ "" == "${REPOSITORY_URL}" ]; then
	echo "Missing environment variable REPOSITORY_URL"
	exit 1
fi
if [ "" == "${REPOSITORY_NAME}" ]; then
	echo "Missing environment variable REPOSITORY_NAME"
	exit 1
fi
if [ "" == "${REPOSITORY_TYPE}" ]; then
	echo "Missing environment variable REPOSITORY_TYPE"
	exit 1
fi



#####
# Folgende Parameter sind an das System auf welchem gebaupt wird anzupassen:
#
export JAVA_HOME=/usr/lib/jvm/java-6-sun/
export SCALA_HOME=/usr/share/java
export MYSQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
export JAVA="$JAVA_HOME/bin/java"
export SCALA="$SCALA_HOME/bin/scala"
export PATH="$JAVA_HOME/bin:$SCALA_HOME/bin:$PATH"
#
#####


#####
# Interne Konfiguration, muss nicht angepasst werden
#
REPOSITORY="${REPOSITORY_URL}"
BRANCH="${REPOSITORY_NAME}"

TMP_DIR=".tmp.${REPOSITORY_NAME}"
BUILD_DIR=".build.${REPOSITORY_NAME}"
PACKAGE_DIR=".package.${REPOSITORY_NAME}"
REVISION_FILE=".revision.${REPOSITORY_NAME}"

REBUILD="no"
if [ "rebuild" == "${1}" ]; then
	REBUILD="yes"
fi
#
#####



# Einfaches Update ist nur ausreichend, wenn Repository bereits ausgecheckt
if [ "yes" != "${REBUILD}" ]; then
	if [ -d "${TMP_DIR}" ]; then
		bash -c "cd ${TMP_DIR}; ${REPOSITORY_TYPE} pull"
#		bash -c "cd ${TMP_DIR}; ${REPOSITORY_TYPE} checkout HEAD^1"
	else
		echo "Repository does not exist, will fetch"
		REBUILD="yes"
	fi
fi

# Repository komplett neu auschecken statt nur upzudaten
if [ "yes" == "${REBUILD}" ]; then
	if [ -d "${TMP_DIR}" ]; then
		rm -rf "${TMP_DIR}"
	fi

	# Source aus ,,Offizieller'' Quelle holen
	$REPOSITORY_TYPE clone "${REPOSITORY}" "${TMP_DIR}"
fi



# Checkout halbwegs ueberpruefen
if [ -d "${TMP_DIR}" ]; then
	echo "Checkout seesm successful, continuing..."
else
	echo "Error while checkout, missing directory ${TMP_DIR}"
	exit 1
fi

# Haesslicher Fix um mit dem Google Repository arbeiten zu koennen (trunk
# und branches in mercurial, wtf?)
if [ -d "${TMP_DIR}/trunk" ]; then
	touch "${TMP_DIR}/LICENSE"
	touch "${TMP_DIR}/README.md"
	bash -c "cd ${TMP_DIR}; cp -r trunk/* ./"
fi



# Jar neu bauen
echo ""
echo "Trying to apply patch. If it detects the patch doesn't match just skip"
echo ""
cp "build/makejar.diff" "${TMP_DIR}/makejar.diff"
bash -c "cd ${TMP_DIR}; patch -p1 < makejar.diff" 
bash -c "cd ${TMP_DIR}/infrastructure; ./bin/makejar.sh"
bash -c "cd ${TMP_DIR}/infrastructure/ace; bin/make normal etherpad"
cp "${TMP_DIR}/infrastructure/build/appjet.jar" "${TMP_DIR}/etherpad/appjet-eth-dev.jar"



# Testet die gebaute Version
#bash -c "./build/test-build.sh"



# Buildrevision erhoehen und Kontrolldatei bauen
REVISION="0"
if [ -f "${REVISION_FILE}" ]; then
	REVISION=`cat "${REVISION_FILE}"`
	REVISION=`expr $REVISION + 1`
fi
echo $REVISION > "${REVISION_FILE}"

# Debian-Control-File patchen
cp "DEBIAN/control" "${TMP_DIR}/control.0"
sed "s/%BRANCH%/${BRANCH}/" "${TMP_DIR}/control.0" > "${TMP_DIR}/control.1"
sed "s/%REVISION%/${REVISION}/" "${TMP_DIR}/control.1" > "${TMP_DIR}/control.2"
cp "${TMP_DIR}/control.2" "${TMP_DIR}/control"

# Installations- und Deinstallationsskript patchen
cp "DEBIAN/prerm" "${TMP_DIR}/prerm"
cp "DEBIAN/postinst" "${TMP_DIR}/postinst.0"
sed "s/%BRANCH%/${BRANCH}/" "${TMP_DIR}/postinst.0" > "${TMP_DIR}/postinst.1"
cp "${TMP_DIR}/postinst.1" "${TMP_DIR}/postinst"

# debconf Templates patchen
cp "DEBIAN/templates" "${TMP_DIR}/templates.0"
sed "s/%BRANCH%/${BRANCH}/" "${TMP_DIR}/templates.0" > "${TMP_DIR}/templates.1"
cp "${TMP_DIR}/templates.1" "${TMP_DIR}/templates"

# Init-Skript patchen
cp "etc/init.d/etherpad" "${TMP_DIR}/init.0"
sed "s/%BRANCH%/${BRANCH}/" "${TMP_DIR}/init.0" > "${TMP_DIR}/init.1"
cp "${TMP_DIR}/init.1" "${TMP_DIR}/init"

# Konfigurationsverzeichnis kopieren
cp -r "etc" "${TMP_DIR}/etc"



# Paketumgebung bauen
if [ -d "${BUILD_DIR}" ]; then
	sudo rm -r "${BUILD_DIR}"
fi
mkdir "${BUILD_DIR}"
mkdir -p "${BUILD_DIR}/DEBIAN"
mkdir -p "${BUILD_DIR}/usr/share/etherpad"
mkdir -p "${BUILD_DIR}/usr/share/doc/etherpad"
mkdir -p "${BUILD_DIR}/var/log/etherpad"



# Benoetigte Dateien zusammenfuehren
cp "${TMP_DIR}/control" "${BUILD_DIR}/DEBIAN/control"
cp "${TMP_DIR}/postinst" "${BUILD_DIR}/DEBIAN/postinst"
cp "${TMP_DIR}/prerm" "${BUILD_DIR}/DEBIAN/prerm"
cp "${TMP_DIR}/templates" "${BUILD_DIR}/DEBIAN/templates"
cp -r "${TMP_DIR}/etc" "${BUILD_DIR}/"
cp "${TMP_DIR}/init" "${BUILD_DIR}/etc/init.d/etherpad"
cp -r "${TMP_DIR}/etherpad" "${BUILD_DIR}/usr/share/etherpad"
cp "build/run.sh" "${BUILD_DIR}/usr/share/etherpad/etherpad/bin"
mkdir -p "${BUILD_DIR}/usr/share/etherpad/etherpad/data"
cp -r "${TMP_DIR}/infrastructure" "${BUILD_DIR}/usr/share/etherpad"
cp "${TMP_DIR}/COPYING" "${BUILD_DIR}/usr/share/doc/etherpad"
cp "${TMP_DIR}/LICENSE" "${BUILD_DIR}/usr/share/doc/etherpad"
cp "${TMP_DIR}/README.md" "${BUILD_DIR}/usr/share/doc/etherpad"



# Eigentliches Paket bauen
sudo chown -R root:root "${BUILD_DIR}"
sudo chmod +x "${BUILD_DIR}/DEBIAN/postinst"
sudo chmod +x "${BUILD_DIR}/DEBIAN/prerm"
sudo chmod +x "${BUILD_DIR}/etc/init.d/etherpad"
sudo chmod -R 777 "${BUILD_DIR}/usr/share/etherpad/etherpad/data"

if [ -d "${PACKAGE_DIR}" ]; then
	rm -rf "${PACKAGE_DIR}"
fi
mkdir "${PACKAGE_DIR}"

dpkg-deb --build "${BUILD_DIR}" "${PACKAGE_DIR}"



# Paket in lokales Repository aufnehmen
PACKAGE=`bash -c "cd ${PACKAGE_DIR}; find . -name *.deb"`

if [ "yes" == "${DEPLOY_TO_LOCAL_REPOSITORY}" ]; then
	if [ -f "${PACKAGE_DIR}/${PACKAGE}" ]; then
		cp "${PACKAGE_DIR}/${PACKAGE}" "/var/www/packages"
		bash -c "cd /var/www/packages; reprepro -b . includedeb lenny ${PACKAGE}; rm ${PACKAGE}"
	else
		echo "No package in ${PACKAGE_DIR}"
	fi
fi

echo "Finished building package ${PACKAGE}"