Ticket #21880: osm

File osm, 10.1 KB (added by stadionbau@…, 4 years ago)

Startup script for josm which is called in console.

Line 
1#!/bin/bash
2#
3# Copyright (C) 2012 "Cobra" from <http://www.openstreetmap.org>
4#
5# This program is free software: you can redistribute it and/or modify
6# it under the terms of the GNU General Public License as published by
7# the Free Software Foundation, either version 3 of the License, or
8# (at your option) any later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13# GNU General Public License for more details.
14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16#
17#
18# homepage und wiki für dieses script: http://github.com/cobra/josm-update-script http://wiki.github.com/cobra/josm-update-script
19#
20# Startup-script für josm:
21# - aktualisiert josm falls nötig auf die aktuelle Version von latest oder tested (einstellbar)
22# - sichert alte Versionen (sehr hilfreich, wenn die neue Version nicht funktioniert wie gewünscht)
23# - erlaubt es, eine alte Version zu starten (per josm -r [revision])
24# - übergibt alle Argumente an JOSM, nützlich um einen oder mehrere Dateien direkt in JOSM zu öffnen
25# - setzt Umgebungsvariablen, übergibt die passenden Parameter an Java und sorgt dafür, dass alsa benutzt wird
26# - schreibt eine Logdatei nach ~/.josm/josm.log
27#
28# Konfiguration (in der Datei josm-de.conf):
29# - Verzeichnis für die gespeicherten josm-Versionen anpassen, falls gewünscht
30# - josm-Variante wählen (latest/tested)
31# - Anzahl der gesicherten Versionen anpassen, falls gewünscht
32# - Wird compiz (3D-Desktop) benutzt? Dann bitte die entsprechende Zeile auskommentieren
33# - Menge des für josm verfügbaren Speichers anpassen
34# - Wer andere Parameter für java oder josm ändern möchte, kann das in der letzten Zeile tun
35#
36# Benutzung:
37# josm.sh [-hloqu] [-r revision] [-v version] [DATEI(EN)]
38#
39# Optionen:
40# -h gibt einen Hilfetext aus
41# -l zeigt alle verfügbaren Revisionen von josm an, josm wird nicht gestartet
42# -o arbeitet offline ohne update-Versuch
43# -q unterdrückt josms Ausgabe auf das Terminal, schreibt nur die Logdatei
44# -r startet die angegebene Version von josm, als Argument entweder eine (lokal vorhandene) Revisionsnummer angeben oder "last" für die vorletzte gespeicherte
45# -s aktuelle Revision aus dem SVN laden und kompilieren. Kann mit -u und -r kombiniert werden. svn und ant müssen dafür installiert sein.
46# -u aktualisiert josm ohne es zu starten
47# -v startet statt der konfigurierten Version von josm die hier angegebene (kann "latest" oder "tested" sein)
48#
49
50# include configuration file
51. `dirname $0`/josm/josm-de.conf
52usage="Benutzung: `basename $0` [-h] [-j jar-Datei] [-l] [-o] [-q] [-r Revision] [-u] [-v Version] [Dateien]"
53# global variables
54rev_tested=0
55rev_tested=0
56rev_nightly=0
57rev_local=0
58rev_svn=0
59# flags
60override_rev=0
61override_jar=0
62update=0
63bequiet=0
64offline=0
65svn=0
66
67# if $dir doesn't exist, create it (initial setup):
68if [ -d $dir ]; then :
69 else mkdir -p $dir; echo "Verzeichnis $dir existiert nicht; wird angelegt..."
70fi
71if [ -d ~/.josm ]; then :
72 else mkdir ~/.josm; echo "Verzeichnis ~/.josm existiert nicht; wird angelegt..."
73fi
74
75cd $dir
76
77checkrev() {
78 # checks archive for certain revision
79 # parameter: revision to check
80 # returns: 0 if revision is present
81 if ls $dir/josm*.jar | grep $1 >/dev/null; then
82 return 0
83 else return 1
84 fi
85}
86
87getbuildrev() {
88 # reads revisions of josm
89 # parameter: version to check, either "latest" or "tested"
90 # returns: revision of given version, 0 when connection timed out
91 if [ $offline -eq 0 ]; then
92 wget -qO /tmp/josm-version --tries=$retries --timeout=$timeout http://josm.openstreetmap.de/version
93 if [ $? -ne 0 ]; then
94 offline=1
95 echo "Konnte aktuelle Version nicht vom Server lesen, wechsle in Offline-Modus" >&2
96 return 1
97 fi
98 rev_latest=`grep latest /tmp/josm-version | cut -d ' ' -f 2`
99 rev_tested=`grep tested /tmp/josm-version | cut -d ' ' -f 2`
100 rev_nightly=`grep $1 /tmp/josm-version | cut -d ' ' -f 2`
101 return 0
102 else return 1
103 fi
104}
105
106getlocalrev() {
107 # parameter: none
108 # returns: the newest local revision
109 if ls josm-*.jar > /dev/null; then
110 rev_local=`ls josm*.jar | cut -d '-' -f 2 | cut -d '.' -f 1 | tail -n 1`
111 return 0
112 else return 1
113 fi
114}
115
116update() {
117 # parameter: $1: version to update, either "latest" or "tested"; $2: revision
118 # returns: 0 for successful update, 1 for failed update
119 if [ $offline -eq 0 ]; then
120 echo "lade josm-$version, revision $2 herunter..."
121 wget -O josm-$2.jar http://josm.openstreetmap.de/download/josm-$1.jar
122 return $?
123 else return 1
124 fi
125}
126
127terminate() {
128 # terminates this script, tail and josm
129 echo "beende... bitte warten"
130 kill -TERM $josmpid
131 if [ $bequiet -eq 0 ]
132 then kill $tailpid
133 fi
134}
135
136trap terminate SIGINT SIGTERM
137
138# parse arguments
139set -- `getopt "hj:loqr:suv:" "$@"` || {
140 echo $usage 1>&2
141 exit 1
142}
143
144while :
145 do
146 case "$1" in
147 -h) echo $usage; exit 0 ;;
148 -j) shift; override_jar=1; jarfile="$1" ;;
149 -l) echo "Verfügbare josm-Versionen: "; ls josm*.jar | cut -d '-' -f 2 | cut -d '.' -f 1 ; exit 0 ;;
150 -o) offline=1 ;;
151 -q) bequiet=1 ;;
152 -r) shift; override_rev=1; rev="$1" ;;
153 -s) svn=1 ;;
154 -u) update=1 ;;
155 -v) shift; version="$1" ;;
156 --) break ;;
157 esac
158 shift
159 done
160shift
161
162### -s: use svn
163if [ $svn -eq 1 ]; then
164 if [ $offline -eq 1 ]; then
165 echo "Kein Zugriff auf das svn im offline-Modus. Ende."
166 exit 1
167 fi
168 if ! svn --version > /dev/null ; then
169 echo "svn konnte nicht gefunden werden. Bitte zuerst svn installieren."
170 exit 1
171 fi
172 if ! ant -version > /dev/null ; then
173 echo "ant konnte nicht gefunden weredn. Bitte zuerst ant installieren."
174 exit 1
175 fi
176
177 if [ $override_rev -eq 1 ]; then
178 #checkout specific revision
179 echo "Revision $rev wird ausgecheckt..."
180 svn co -r $rev http://josm.openstreetmap.de/svn/trunk $svndir
181 if [ $? -ne 0 ]; then
182 echo "Auschecken fehlgeschlagen. Ende."
183 exit 1
184 fi
185 cd $svndir
186 else
187 # checkout latest svn revision
188 if [ -d $svndir ]; then
189 cd $svndir
190 echo "svn-Repository auf Updates prüfen..."
191 svn up
192 if [ $? -ne 0 ]; then
193 echo "svn-Update fehlgeschlagen. Ende."
194 exit 1
195 fi
196 else
197 echo "Lokale Arbeitskopie existiert nicht, auschecken..."
198 svn co http://josm.openstreetmap.de/svn/trunk $svndir
199 if [ $? -ne 0 ]; then
200 echo "Auschecken fehlgeschlagen. Ende."
201 exit 1
202 fi
203 cd $svndir
204 fi
205 fi
206
207 # get revision, check against existing binaries
208 rev_svn=`svn info | grep Revision | cut -d ' ' -f 2`
209
210 if checkrev $rev_svn; then
211 # no changes, use existing binary
212 echo "Revision $rev_svn ist bereits vorhanden, Kompilieren wird übersprungen."
213 rev=$rev_svn
214 else
215 # build josm, move to archive; you can add any options fo ant here if you need them
216 echo "Versuche, Revision $rev_svn zu kompilieren..."
217 ant
218 if [ $? -eq 0 ]; then
219 echo "Kompilieren von Revision $rev_svn aus dem SVN erfolgreich"
220 cp $svndir/dist/josm-custom.jar $dir/josm-$rev_svn.jar
221 rev=$rev_svn
222 else
223 echo "Kompilieren fehlgeschlagen, Ende."
224 exit 1
225 fi
226 fi
227
228 # terminate if -u is set as well
229 if [ $update -eq 1 ]; then
230 echo "Update aus svn ist vollständig, Ende."
231 exit 0;
232 else
233 cd $dir
234 fi
235
236### -u: update
237elif [ $update -eq 1 ]; then
238 if [ $offline -eq 0 ]; then
239 getbuildrev $version
240 if checkrev $rev_nightly; then
241 echo "josm-$version revision $rev_nightly ist aktuell"
242 exit 0
243 else
244 echo "josm-$version revision $rev_nightly ist verfügbar, aktualisieren..."
245 update $version $rev_nightly
246 exit 0
247 fi
248 else
249 echo "offline - keine Aktualisierung möglich. Ende"
250 exit 1
251 fi
252
253
254### -r: start specified revision
255elif [ $override_rev -eq 1 ]; then
256 if [ $rev = last ]; then
257 rev=`ls josm*.jar | cut -d '-' -f 2 | cut -d '.' -f 1 | tail -n 2 | head -n 1`
258 fi
259 if checkrev $rev; then
260 echo "Erzwinge Benutzung von Version $rev"
261 else
262 echo "Revision $rev konnte nicht gefunden werden! `basename $0` -l zeigt eine Liste der verfügbaren Versionen. Ende."
263 exit 1
264 fi
265
266### normal start and update - tested
267elif [ $version = tested ]; then
268 getbuildrev $version
269 if checkrev $rev_nightly; then
270 echo "Lokale Revision $rev_nightly ist aktuell"
271 rev=$rev_nightly
272 else
273 echo "Lokale Revision ist $rev_local, neueste verfügbare Revision ist $rev_nightly - starte Download von josm-$version..."
274 update $version $rev_nightly
275 rev=$rev_nightly
276 fi
277
278### override jar file
279elif [ $override_jar -eq 1 ]; then
280 echo "nutze manuell gewählte jar-Datei $jarfile"
281
282### normal start and update - latest
283else
284 getlocalrev
285 getbuildrev $version
286 if [ $rev_local -ge $rev_nightly ]; then
287 echo "Lokale Revision ist $rev_local, neueste verfügbare Revision ist $rev_nightly - benutze lokale Revision $rev_local"
288 rev=$rev_local
289 else
290 echo "Lokale Revision ist $rev_local, neueste verfügbare Revision ist $rev_nightly - starte Download von josm-$version..."
291 update $version $rev_nightly
292 rev=$rev_nightly
293 fi
294fi
295
296### cleanup
297if [ $offline -eq 0 -a $override_jar -eq 0 ]; then
298 i=1
299 while [ `ls josm*.jar | grep -c ''` -gt $numbackup ]; do
300 oldestrev=`ls josm*.jar | cut -d '-' -f 2 | cut -d '.' -f 1 | head -n $i | tail -n 1`
301 # don't delete current tested
302 if [ $oldestrev -ne $rev_tested ]; then
303 echo "Lösche josm Revision $oldestrev"
304 rm josm-$oldestrev.jar
305 else i=`expr $i + 1`
306 fi
307 if [ `expr $i + 1` -eq $numbackup ]; then
308 echo "Fehler beim Aufräumen - \$numbackup ist zu niedrig."
309 break;
310 fi
311 done
312fi
313
314# start josm: use alsa instead of oss, enable 2D-acceleration, set maximum memory for josm, pass all arguments to josm and write a log:
315 cd $OLDPWD
316 echo "starte josm..."
317
318 if [ $override_jar -ne 1 ]; then
319 jarfile="$dir/josm-$rev.jar"
320 fi
321
322 # use aoss only if it's installed
323 aoss > /dev/null 2>&1
324 if [ $? -eq 1 ]; then
325 aoss java -jar -Xmx$mem -Dsun.java2d.opengl=$useopengl $jarfile $@ >~/.josm/josm.log 2>&1 &
326 else
327 /home/stefan/bin/jdk-11.0.2/bin/java -jar -Xmx$mem -Dsun.java2d.opengl=$useopengl $jarfile $@ >~/.josm/josm.log 2>&1 &
328 fi
329
330 josmpid=$!
331
332 echo "josm wurde mit mit Prozess-ID $! gestartet"
333
334 if [ $bequiet -eq 0 ]
335 then tail -f ~/.josm/josm.log &
336 tailpid=$!
337 fi
338
339 wait $josmpid
340 if [ $bequiet -eq 0 ]
341 then kill $tailpid
342 fi
343 echo "josm wurde beendet"