2424export DEBIAN_FRONTEND=noninteractive
2525source config.sh
2626
27+
2728if [ -f $logfile ] ; then rm $logfile ; fi
2829touch $logfile
2930SILENT=$logfile
4748if test -n " ${3} " ; then
4849 PASS=${3}
4950elif test -z " $PASS " ; then
50- read -p " Interactive Brokers Account Password: " PASS
51+ read -ps " Interactive Brokers Account Password: " PASS
5152fi
52- read -p " Demoaccount? [y|N]:" answer
53- if [ ! $answer = ' y' ] && [ ! $answer = ' j' ] ; then
54- DEMOACCOUNT=0
55- else
56- DEMOACCOUNT=1
53+
54+ if test -z $DEMOACCOUNT ; then
55+ read -p " Demoaccount? [y|N]:"
56+ if [ ! $REPLY = ' y' ] && [ ! $REPLY = ' j' ] ; then
57+ DEMOACCOUNT=0
58+ else
59+ DEMOACCOUNT=1
60+ fi
5761fi
5862
5963if test -n " ${5} " ; then
6064 SSH_MIDDLEMAN_SERVER=${5}
6165elif test -z " $SSH_MIDDLEMAN_SERVER " ; then
6266 read -p " Bezeichnung oder IP des Endpunkts des SSH-Tunnels [return=keinen Tunnel verwenden]: " SSH_MIDDLEMAN_SERVER
6367fi
68+
6469if test -z $SSH_MIDDLEMAN_SERVER ; then
6570 SETUP_AUTOSSH=0
6671else
9297echo " -------------------------"
9398echo " Containter: $CONTAINER "
9499echo " Login: $LOGIN "
95- echo " Password: **** " # $PASS"
100+ echo " Password: **** " # $PASS"
96101echo " Demoaccount: ` if [ $DEMOACCOUNT -eq 1 ] ; then echo " ja" ; else echo " nein" ; fi ` "
102+ echo " Gateway/TWS: ` if [ " $PRODUCT " = tws ] ; then echo " $INSTANCE " ; else echo " Gateway" ; fi ` "
97103if [ $SETUP_AUTOSSH -eq 1 ] ; then
98104 echo " PORT: $SSH_PORT_NUMBER "
99105 echo " Backport: $SSH_MONITORING_PORT_NUMBER "
@@ -108,6 +114,18 @@ if [[ -n $cont || $cont == 'n' ]] ; then
108114 exit 255
109115fi
110116
117+
118+
119+ print_status (){
120+ echo " [+] $* "
121+ }
122+ print_error () {
123+ echo " [!] $* "
124+ }
125+
126+
127+
128+
111129check_lxd (){
112130# LXD vereint die Vorteile virtueller Rechner (Xen et.\,al.) und die Ressourceneffizienz von Containern (aka Docker).
113131# Es ist Open-Source und gut dokumentiert. Ferner gibt eine API für eine Steuerung durch Skripte.
@@ -122,29 +140,29 @@ check_lxd(){
122140# # Wir testen die Version
123141
124142 if [ ` snap list | grep -c lxd ` -eq 1 ] || [ ` systemctl is-active lxd.service` = " active" ] ; then
125- echo " LXD ist installiert und gestartet"
143+ print_status " LXD ist installiert und gestartet"
126144 else
127- echo " LXD ist nicht installiert oder nicht aktiv"
128- echo " Abbruch!"
145+ print_error " LXD ist nicht installiert oder nicht aktiv"
146+ print_error " Abbruch!"
129147 exit 99
130148 fi
131149 lxd_version=` lxd --version | awk -F' .' ' { print $1 }' `
132150 lxd_subversion=` lxd --version | awk -F' .' ' { print $2 }' `
133151 if [ $lxd_version -lt $MIN_LXD_VERSION ] || [ $lxd_subversion -lt $MIN_LXD_SUBVERSION ] ; then
134- echo " LXD-Version nicht geeignet. "
135- echo " Mindestens 4.11 ist erforderlich. "
136- echo " ` lxd --version` gefunden "
152+ print_error " LXD-Version nicht geeignet. "
153+ print_error " Mindestens 4.11 ist erforderlich. "
154+ print_error " ` lxd --version` gefunden "
137155 return 1
138156 else
139- echo " LXD version ` lxd --version` installiert --- OK"
157+ print_status " LXD version ` lxd --version` installiert --- OK"
140158 return 0
141159 fi
142160}
143161
144162prepare_lxd (){
145163# # Ist Ubuntu-Minimal bereits als Remote angelegt?
146164 if lxc remote list | grep -q ubuntu-minimal ; then
147- echo " Ubuntu-minimal ist bereits als remote gelistet"
165+ print_status " Ubuntu-minimal ist bereits als remote gelistet"
148166 else
149167 lxc remote add --protocol simplestreams ubuntu-minimal https://cloud-images.ubuntu.com/minimal/releases/
150168 fi
@@ -153,16 +171,16 @@ prepare_lxd(){
153171#
154172# Aufsetzen für X11-Nutzung
155173
156- if [ -f lxdguiprofile.txt ] ; then
157- echo " GUI-Profilidatei ist bereits heruntergeladen"
174+ if test -f lxdguiprofile.txt ; then
175+ print_status " GUI-Profilidatei ist bereits heruntergeladen"
158176 else
159177 wget https://blog.simos.info/wp-content/uploads/2018/06/lxdguiprofile.txt -o lxdguiprofile.txt
160178 fi
161- if lxc profile list | grep -q gui ; then
162- echo " GUI Profil ist bereits angelegt"
179+ if lxc profile show gui 1> /dev/null ; then
180+ print_status " GUI Profil ist bereits angelegt"
163181 else
164182 lxc profile create gui
165- cat lxdguiprofile.txt | lxc profile edit gui
183+ lxc profile edit gui < lxdguiprofile.txt
166184 # alias anlegen
167185 lxc alias add ubuntu ' exec @ARGS@ -- sudo --login --user ubuntu'
168186 fi
@@ -176,7 +194,7 @@ launch_image(){
176194 return 1
177195 else
178196 lxc launch --profile default --profile gui ubuntu-minimal:f $CONTAINER
179- echo " $LXD_DELAY Sekunden warten, bis das Netzwerk betriebsbereit ist"
197+ print_status " $LXD_DELAY Sekunden warten, bis das Netzwerk betriebsbereit ist"
180198 sleep $LXD_DELAY
181199 return 0
182200 fi
@@ -187,7 +205,7 @@ download_ib_software(){
187205 if [ -f $IB_PROGRAM ] ; then
188206 :
189207 else
190- echo " Hole $PRODUCT vom offiziellen Server"
208+ print_status " Hole $PRODUCT vom offiziellen Server"
191209 wget $IB_PATH
192210 chmod a+x $IB_PROGRAM
193211 fi
@@ -201,7 +219,7 @@ check_container(){
201219 if lxc list | grep -q $CONTAINER && [ ` lxc list | grep $CONTAINER | awk -F ' |' ' { print $3 }' ` = " RUNNING" ] && [ ` lxc list | grep $CONTAINER | awk -F' |' ' { if($4 ~ /[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/ ) {print 1} else {print 0}}' ` -eq 1 ] ; then
202220 return 0
203221 else
204- echo ' Networking is not active'
222+ print_error ' Networking is not active'
205223 return 1
206224 fi
207225}
@@ -213,26 +231,26 @@ init_container(){
213231# # TWS / Gateway installieren
214232 local access_container=" lxc exec $CONTAINER -- sudo --login --user ubuntu --"
215233 if [ ` $access_container ls /home/ubuntu | wc -l ` -eq 0 ] ; then
216- echo " Home-Directory des Containers ist leer"
217- echo " Installiere $PRODUCT "
218- echo " warte $LXD_DELAY Sekunden bis sich der Container initialisiert hat"
234+ print_status " Home-Directory des Containers ist leer"
235+ print_status " Installiere $PRODUCT "
236+ print_status " warte $LXD_DELAY Sekunden bis sich der Container initialisiert hat"
219237 sleep $LXD_DELAY
220238
221- echo " Installiere Java Das dauert einige Minuten ..."
239+ print_status " Installiere Java Das dauert einige Minuten ..."
222240 $access_container sudo apt-get update >> $SILENT
223241 $access_container sudo apt-get install -y openjdk-14-jre >> $SILENT
224242
225243# testen, ob java installiert ist:
226244# $access_container dpkg -s openjdk-14-jre | grep -c installed
227- echo " Falls java an dieser Stelle nicht installiert wurde ... wir holen dies später nach!"
245+ print_error " Falls java an dieser Stelle nicht installiert wurde ... wir holen dies später nach!"
228246 lxc file push $IB_PROGRAM $CONTAINER /home/ubuntu/
229- echo " Installiere ${PRODUCT} . Das dauert einige Minuten ..."
247+ print_status " Installiere ${PRODUCT} . Das dauert einige Minuten ..."
230248 # $access_container DISPLAY= $IB_PROGRAM <<<""$'\n'
231249 lxc exec --user 1000 --group 1000 --env " DISPLAY=" $CONTAINER -- bash --login /home/ubuntu/$IB_PROGRAM <<< " " $' \n ' >> $SILENT
232250# >> $SILENT
233251 return 0
234252 else
235- echo " Container ist nicht leer. Konfiguration übersprungen!"
253+ print_error " Container ist nicht leer. Konfiguration übersprungen!"
236254 return 1
237255 fi
238256}
@@ -246,16 +264,16 @@ apply_ibc(){
246264 local ibc_file=IBCLinux-$IBC_VERSION .zip
247265 local access_container=" lxc exec $CONTAINER -- sudo --login --user ubuntu -- "
248266 if [ -f $ibc_file ] ; then
249- echo " IBC-$IBC_VERSION ist bereits lokal vorhanden "
267+ print_status " IBC-$IBC_VERSION ist bereits lokal vorhanden "
250268 else
251- echo " Hole IBC-Archiv vom GitHub-Server"
269+ print_status " Hole IBC-Archiv vom GitHub-Server"
252270 wget $IBC_PATH >> $SILENT
253271 fi
254272 # # Erstelle ibc-Verzeichnis im Container
255273 if [ ` $access_container find /home/ubuntu -type d -name ibc | wc -l ` -ne 0 ] ; then
256- echo " Verzeichnis ibc bereits vorhanden. "
257- echo " Installation von IBC wird übersprungen."
258- echo " Es wird keine crontab installiert."
274+ print_error " Verzeichnis ibc bereits vorhanden. "
275+ print_error " Installation von IBC wird übersprungen."
276+ print_error " Es wird keine crontab installiert."
259277 else
260278 $access_container sudo apt-get install -y openjdk-14-jre >> $SILENT
261279 $access_container mkdir ibc
@@ -308,7 +326,7 @@ install_simple_monitor(){
308326 # Simple-Monitor installieren
309327 local access_container=" lxc exec $CONTAINER -- sudo --login --user ubuntu --"
310328 if [ ` $access_container find /home/ubuntu -type d -name simple-monitor | wc -l ` -ne 0 ] ; then
311- echo " simple monitor ist bereits angelegt"
329+ print_status " simple monitor ist bereits angelegt"
312330 return 1
313331 else
314332 {
@@ -372,7 +390,7 @@ setup_reverse_tunnel(){
372390 echo " ++++++++++++++++++++++++++++++++++++++++++++++ "
373391 read -p " nach <CR> gehts weiter" read
374392
375- echo " Installiere lokal abgelegte Zertifikate im Container"
393+ print_status " Installiere lokal abgelegte Zertifikate im Container"
376394 # install certificates to access the container via ssh and reverse ssh
377395 touch certificates.sh
378396 for certificate in * .pub
@@ -381,7 +399,7 @@ setup_reverse_tunnel(){
381399 if [ " $certificate " = dummy.pub ] || [ " $certificate " = $CONTAINER .pub ] ; then
382400 :
383401 else
384- echo " installiere $certificate "
402+ print_status " installiere $certificate "
385403 cat $certificate >> certificates.sh
386404 fi
387405 done
@@ -412,16 +430,16 @@ setup_reverse_tunnel(){
412430 lxc file push reverse-tunnel ${CONTAINER} /${SSH_TUNNEL_LOCATION}
413431 rm reverse-tunnel
414432
415- echo " SSH-Tunnel wird installiert."
433+ print_status " SSH-Tunnel wird installiert."
416434
417435 lxc exec $CONTAINER -- /$SSH_TUNNEL_LOCATION
418436 sleep 3
419437 fi
420438 check_tunnel
421439 if [ $? -eq 0 ] ; then
422- echo " Revese Tunnel ist gestartet"
440+ print_status " Revese Tunnel ist gestartet"
423441 else
424- echo " Restart des Containers erforderlich für den Start des Reverse SSH Tunnels"
442+ print_error " Restart des Containers erforderlich für den Start des Reverse SSH Tunnels"
425443 fi
426444}
427445
@@ -445,23 +463,23 @@ launch_image
445463download_ib_software
446464
447465init_container
448- echo " +++++++++++++++++++++++++++++++++++++++ "
449- echo " Container ${CONTAINER} ist angelegt "
466+ print_status " +++++++++++++++++++++++++++++++++++++++ "
467+ print_status " Container ${CONTAINER} ist angelegt "
450468
451469if [ $SETUP_AUTOSSH -eq 1 ] ; then
452470 setup_reverse_tunnel
453- echo " Reverse Tunnel ist aufgebaut "
471+ print_status " Reverse Tunnel ist aufgebaut "
454472fi
455473
456474
457475
458- echo " Installiere IBC "
476+ print_status " Installiere IBC "
459477 apply_ibc
460478
461- echo " Installiere simple-monitor "
479+ print_status " Installiere simple-monitor "
462480 install_simple_monitor
463481
464- export DEBIAN_FRONTEND=newt
465482 run_ats
466483
484+ export DEBIAN_FRONTEND=newt
467485
0 commit comments