Part::get_chart - Laden eines dazugehörigen Chart-Objektes über Buchungsgruppe
[kivitendo-erp.git] / scripts / inst_postgres_deb.sh
1 #!/bin/bash
2 #set -x
3
4 # e = exit on error
5 set -e
6 # x = xtrace
7 #set -x
8
9 source /usr/share/debconf/confmodule
10
11
12 function writeln()
13 {
14    tput cup $1 $2  # Cursor positionieren
15    tput el         # Rest der Zeile löschen
16    shift 2         # Parameter für die Koordinaten entfernen
17    echo -n $*" "   # Rest der Parameterliste ausgeben
18 }
19
20 #tput clear
21
22 #Als root anmelden
23 if [ `id -u` -gt 0 ]; then echo "Bitte als root anmelden"; exit 1; fi
24
25 #writeln 1 1 PostgreSQL fuer Lx-Office vorbereiten
26 #writeln 2 1 1. plpgsql.so suchen
27 PLPGSQL=""
28 #Datei plpgsql.so suchen
29
30 #Mit Paketmanager (RPM oder APT) suchen
31 #PLPGSQL=`dpkg -L postgresql | grep plpgsql.so`
32 #PLPGSQL=`rpm -q --list postgres | grep plpgsql.so`
33
34 if [ "$PLPGSQL#" == "#" ]; then
35         #Probleme mit Paketmanager, dann zunaechst mit locate, geht schneller
36 #       writeln 3 3 --locate
37         tmp=`locate plpgsql.so 2>/dev/null`
38         PLPGSQL=`echo $tmp | cut -d " " -f 1`
39 fi
40 if [ "$PLPGSQL#" == "#" ]; then
41         #noch nicht gefunden, also mit find suchen
42 #       writeln 3 15 --find /usr/lib
43         tmp=`find /usr/lib -name  plpgsql.so -type f`
44         PLPGSQL=`echo $tmp | cut -d " " -f 1`
45 fi      
46 if [ "$PLPGSQL#" == "#" ]; then
47         while :; do
48 #               writeln 4 1 'plpgsql.so' nicht gefunden.
49 #               tput bold
50 #               writeln 5 1 "Bitte den Pfad eingeben: "
51 #               tput rmso
52 #               read PLPGSQL
53                 [ "$PLPGSQL#" != "#" ] && [ -f $PLPGSQL ] && break
54  #              tput bel
55         done
56 fi
57 #writeln 6 1 ok. 'plpgsql.so' gefunden
58
59 #Kann der User postgres die db erreichen
60 cnt=`ps aux | grep postgres | wc -l`
61 if [ $cnt -eq 0 ]; then
62 #       tput bel
63 #       tput bold
64         echo Die postgreSQL-Datebbank ist nicht gestartet!
65 #       tput rmso
66         exit 1
67 fi
68 v7=`su postgres -c "echo 'select version()' | psql template1 2>/dev/null | grep -E "[Ss][Qq][Ll][[:space:]]+7\.[0-9]\.[0-9]" | wc -l"`
69 v8=`su postgres -c "echo 'select version()' | psql template1 2>/dev/null | grep -E "[Ss][Qq][Ll][[:space:]]+8\.[0-9]\.[0-9]" | wc -l"`
70 #cnt=`echo  $v7 + $v8 | bc -l`
71 if [ $v8 -eq 0 ]; then 
72         if [ $v7 -eq 0 ]; then
73 #               tput bel
74 #               tput bold
75                 echo User postgres konnte die Datenbank nicht ansprechen
76 #               tput rmso
77                 exit 1; 
78         else
79                 # do nothing
80                 echo ""
81
82 #               tput clear
83 #               writeln 1 1 Datenbank Version 7x konnte erreicht werden.
84         fi
85 else
86         # do nothing
87         echo ""
88 #       tput clear
89 #       writeln 1 1 Datenbank Version 8x konnte erreicht werden.
90 fi
91
92 echo "CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler" > lxdbinst.sql
93 echo "AS '$PLPGSQL', 'plpgsql_call_handler'" >> lxdbinst.sql
94 echo "LANGUAGE c;" >> lxdbinst.sql
95 echo "CREATE PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler;" >> lxdbinst.sql
96
97 #writeln 2 1 Datenbankbenutzer einrichten
98 #tput bold
99 #writeln 3 1 "Bitte den Datenbank-Benutzernamen (Kleinbuchstaben) eingeben [lxoffice]: "
100 #tput rmso
101 #read LXOUSER
102 #if [ "$LXOUSER#" == "#" ]; then LXOUSER="lxoffice"; fi
103 #while :; do
104 #       tput bold
105 #       writeln 4 1 "Bitte ein Kennwort eingeben : "
106 #       tput rmso
107 #       read USRPWD
108         if ! [ "$USRPWD#" == "#" ]; then break; fi
109 #       tput bel
110 #done;
111
112 LXOUSER="lxoffice"
113
114 db_get lx-office-erp/lx-office-erp-user-postgresql-password
115 USRPWD="$RET"
116
117
118 echo "CREATE USER $LXOUSER with CREATEDB ;" >> lxdbinst.sql
119 echo "ALTER USER $LXOUSER PASSWORD '$USRPWD';" >> lxdbinst.sql
120 echo "UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpgsql';" >> lxdbinst.sql
121
122 su postgres -c "psql template1 < lxdbinst.sql"
123
124 echo "Fehlermeldungen die 'already exists' enthalten koennen ignoriert werden"
125
126 #writeln 11 1 Datenbank fuer Lx-Office vorbereitet
127
128 #writeln 12 1 Datenbankberechtigung einrichten
129 #wo ist die pg_hba.conf
130 #writeln 13 3 --find erst /etc dann /var/lib
131 tmp=`find /etc -name pg_hba.conf -type f`
132 [ "$tmp#" == "#" ] && tmp=`find /var/lib -name  pg_hba.conf -type f`
133 PGHBA=`echo $tmp | cut -d " " -f 1`
134
135 if [ "$PGHBA#" == "#" ]; then
136         while :; do
137 #               writeln 14 1 'pg_hba.conf' nicht gefunden.
138 #               tput bold
139 #               writeln 15 1 "Bitte den Pfad eingeben: "
140 #               tput rmso
141 #               read PGHBA
142                 [ "$PGHBA#" != "#" ] && [ -f $PGHBA ] && break
143  #              tput bel
144         done
145 fi
146 #writeln 16 1 ok. 'pg_hba.conf' gefunden
147
148 cnt=`grep $LXOUSER $PGHBA | wc -l `
149
150 if [ $cnt -eq 0 ]; then 
151         mv $PGHBA  $PGHBA.org
152         echo "local   all         $LXOUSER                                           password" > $PGHBA
153         echo "host    all         $LXOUSER      127.0.0.1         255.255.255.255    password" >> $PGHBA
154         cat $PGHBA.org >> $PGHBA
155 fi 
156
157 CONFDIR=`dirname $PGHBA`
158
159 #postgresql.conf anpassen, liegt vermutlich im gleichen Verzeichnis wie pg_hba.conf
160 if ! [ -f $CONFDIR/postgresql.conf ]; then
161         #doch nicht da, dann fragen
162         while :; do
163 #               writeln 13 1 'postgresql.conf' nicht gefunden.
164 #               tput bold
165 #                writeln 14 1 "Bitte den Pfad eingeben: "
166 #               tput rmso
167 #                read PGCONF
168                 [ "$PGCONF#" != "#" ] && [ -f $PGCONF ] && break
169  #               tput bel
170         done
171         CONFDIR=`dirname $PGCONF`
172 fi
173
174 mv $CONFDIR/postgresql.conf $CONFDIR/postgresql.conf.org
175 if ! [ $v7 -eq 0 ]; then 
176         #Nur bei der V7.x:  tcpip_socket = true
177         sed 's/^.*tcpip_socket.*/tcpip_socket = true/i' $CONFDIR/postgresql.conf.org > $CONFDIR/postgresql.conf
178         cnt=`grep tcpip_socket $CONFDIR/postgresql.conf | wc -l`
179         if [ $cnt -eq 0 ]; then
180                 cp $CONFDIR/postgresql.conf.org $CONFDIR/postgresql.conf
181                 echo "tcpip_socket = true" >> $CONFDIR/postgresql.conf
182         fi
183 else 
184         #Bei der V8.x OID einschalten.
185         sed 's/^.*default_with_oids.*/default_with_oids = true/i' $CONFDIR/postgresql.conf.org > $CONFDIR/postgresql.conf
186         cnt=`grep default_with_oids $CONFDIR/postgresql.conf | wc -l`
187         if [ $cnt -eq 0 ]; then
188                 cp $CONFDIR/postgresql.conf.org $CONFDIR/postgresql.conf
189                 echo "default_with_oids = true" >> $CONFDIR/postgresql.conf
190         fi
191 fi
192
193  
194 tmp=`ls /etc/init.d/postgres*`
195 PGSQL=`echo $tmp | cut -d " " -f 1`
196
197 #writeln 18 1 Datenbank neu starten
198 $PGSQL reload
199
200 #tput bold
201 #tput smso
202 #writeln 20 12 ok. Das sollte es gewesen sein.
203 #tput rmso
204 #tput rmso
205 echo