Hat sich eine feste Version eingeschlichen
[kivitendo-erp.git] / scripts / inst_postgres_deb.sh
1 #!/bin/bash
2 # e = exit on error
3 set -e
4 # x = xtrace
5 #set -x
6
7 FEHLER="Achtung!! Es hat ein Problem gegeben"
8 ERRCNT=0
9 source /usr/share/debconf/confmodule
10
11 #Als root anmelden
12 if [ `id -u` -gt 0 ]; then echo "Bitte als root anmelden"; exit 1; fi
13 POSTGRESQL=`dpkg -l | grep -E "postgresql-[0-9]" | cut -d" " -f3 | sort -r | head -1 -`
14
15 #Datei plpgsql.so suchen
16 #Mit Paketmanager  suchen
17 if [ "$POSTGRESQL#" == "#" ]; then
18     echo $FEHLER
19     echo Keine PostgreSQL mit Paketmanager installiert
20     echo Datenbank bitte manuell einrichten.
21     exit 0
22 else
23    PLPGSQL=`dpkg -L $POSTGRESQL | grep plpgsql.so `
24 fi
25
26 if [ "$PLPGSQL#" == "#" ]; then
27     #Probleme mit Paketmanager, dann zunaechst mit locate, geht schneller
28     updatedb
29     tmp=`locate plpgsql.so 2>/dev/null`
30     PLPGSQL=`echo $tmp | cut -d " " -f 1`
31 fi
32 if [ "$PLPGSQL#" == "#" ]; then
33     #noch nicht gefunden, also mit find suchen
34     tmp=`find /usr/lib -name  plpgsql.so -type f`
35     PLPGSQL=`echo $tmp | cut -d " " -f 1`
36 fi      
37 if [ "$PLPGSQL#" == "#" ]; then
38     echo $FEHLER
39     echo  'plpgsql.so' nicht gefunden.
40     echo Datenbank manuell einrichten.
41     exit 0
42 fi
43
44 #Kann der User postgres die db erreichen
45 cnt=`ps aux | grep postgres | wc -l`
46 if [ $cnt -eq 0 ]; then
47     echo $FEHLER
48     echo Die postgreSQL-Datebbank ist nicht gestartet!
49     echo Datenbank manuell einrichten.
50     exit 0
51 fi
52
53 v8=`su postgres -c "echo 'select version()' | psql template1 2>/dev/null | grep -E "[Ss][Qq][Ll][[:space:]]+8\.[2-9]\.[0-9]" | wc -l"`
54 if [ $v8 -eq 0 ]; then 
55     echo $FEHLER
56     echo Datenbank Version 8x konnte erreicht werden.
57     exit 0
58 fi
59
60 echo "CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler" > lxdbinst.sql
61 echo "AS '$PLPGSQL', 'plpgsql_call_handler'" >> lxdbinst.sql
62 echo "LANGUAGE c;" >> lxdbinst.sql
63 echo "CREATE PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler;" >> lxdbinst.sql
64
65 #writeln 2 1 Datenbankbenutzer einrichten
66 LXOUSER="lxoffice"
67 db_get lx-office-erp/lx-office-erp-user-postgresql-password
68 USRPWD="$RET"
69
70 echo "CREATE USER $LXOUSER with CREATEDB ;" >> lxdbinst.sql
71 echo "ALTER USER $LXOUSER PASSWORD '$USRPWD';" >> lxdbinst.sql
72 echo "UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpgsql';" >> lxdbinst.sql
73
74 su postgres -c "psql template1 < lxdbinst.sql"
75
76 echo "Fehlermeldungen die 'already exists' enthalten koennen ignoriert werden"
77
78 #writeln 12 1 Datenbankberechtigung einrichten
79 PGHBA=`find /etc/postgresql -name pg_hba.conf -type f | sort -r | head -1 -`
80 if [ "$PGHBA#" == "#" ] ; then
81    PGHBA=`find /var/lib -name  pg_hba.conf -type f | sort -r | head -1 -`
82 fi
83
84 if [ "$PGHBA#" == "#" ]; then
85     echo $FEHLER
86     echo 'pg_hba.conf' nicht gefunden.
87     echo "Berechtigungen bitte selber einrichten"
88     ERRCNT=1
89 fi
90
91 cnt=`grep $LXOUSER $PGHBA | wc -l `
92
93 if [ $cnt -eq 0 ]; then 
94     mv $PGHBA  $PGHBA.org
95     echo "local   all         $LXOUSER                                           password" > $PGHBA
96     echo "host    all         $LXOUSER      127.0.0.1         255.255.255.255    password" >> $PGHBA
97     cat $PGHBA.org >> $PGHBA
98 fi 
99
100 CONFDIR=`dirname $PGHBA`
101
102 #postgresql.conf anpassen, liegt vermutlich im gleichen Verzeichnis wie pg_hba.conf
103 if ! [ -f $CONFDIR/postgresql.conf ]; then
104     echo $FEHLER
105     echo 'postgresql.conf' nicht gefunden.
106     echo PostgreSQL selber konfigurieren
107     ERRCNT=1
108 fi
109
110 mv $CONFDIR/postgresql.conf $CONFDIR/postgresql.conf.org
111 #Bei der V8.x OID einschalten.
112 sed 's/^.*default_with_oids.*/default_with_oids = true/i' $CONFDIR/postgresql.conf.org > $CONFDIR/postgresql.conf
113 cnt=`grep default_with_oids $CONFDIR/postgresql.conf | wc -l`
114 if [ $cnt -eq 0 ]; then
115         cp $CONFDIR/postgresql.conf.org $CONFDIR/postgresql.conf
116         echo "default_with_oids = true" >> $CONFDIR/postgresql.conf
117 fi
118
119  
120 PGSQL=`ls -r1 /etc/init.d/postgres*  | head -1 -`
121
122 #writeln 18 1 Datenbank neu starten
123 $PGSQL reload
124
125 if [ $ERRCNT -gt 0 ]; then
126     echo $FEHLER
127     echo Das betrifft aber nicht die Lx-Office Installation
128     echo sondern die Konfiguration der Datenbank.
129     echo $POSTGRESQL , $PGHBA , $CONFDIR/postgresql.conf ??
130     sleep 10
131 fi