Script verschieben
authorHolger Lindemann <hli@lx-system.de>
Wed, 7 Jan 2009 16:13:22 +0000 (16:13 +0000)
committerHolger Lindemann <hli@lx-system.de>
Wed, 7 Jan 2009 16:13:22 +0000 (16:13 +0000)
scripts/inst_postgres.sh [new file with mode: 0755]

diff --git a/scripts/inst_postgres.sh b/scripts/inst_postgres.sh
new file mode 100755 (executable)
index 0000000..84c0c9d
--- /dev/null
@@ -0,0 +1,185 @@
+#!/bin/bash
+#set -x
+function writeln()
+{
+   tput cup $1 $2  # Cursor positionieren
+   tput el         # Rest der Zeile löschen
+   shift 2         # Parameter für die Koordinaten entfernen
+   echo -n $*" "   # Rest der Parameterliste ausgeben
+}
+
+tput clear
+
+#Als root anmelden
+if [ `id -u` -gt 0 ]; then echo "Bitte als root anmelden"; exit 1; fi
+
+writeln 1 1 PostgreSQL fuer Lx-Office vorbereiten
+writeln 2 1 1. plpgsql.so suchen
+PLPGSQL=""
+#Datei plpgsql.so suchen
+
+#Mit Paketmanager (RPM oder APT) suchen
+#PLPGSQL=`dpkg -L postgresql | grep plpgsql.so`
+#PLPGSQL=`rpm -q --list postgres | grep plpgsql.so`
+
+if [ "$PLPGSQL#" == "#" ]; then
+       #Probleme mit Paketmanager, dann zunaechst mit locate, geht schneller
+       writeln 3 3 --locate
+       tmp=`locate plpgsql.so 2>/dev/null`
+       PLPGSQL=`echo $tmp | cut -d " " -f 1`
+fi
+if [ "$PLPGSQL#" == "#" ]; then
+       #noch nicht gefunden, also mit find suchen
+       writeln 3 15 --find /usr/lib
+       tmp=`find /usr/lib -name  plpgsql.so -type f`
+       PLPGSQL=`echo $tmp | cut -d " " -f 1`
+fi     
+if [ "$PLPGSQL#" == "#" ]; then
+       while :; do
+               writeln 4 1 'plpgsql.so' nicht gefunden.
+               tput bold
+               writeln 5 1 "Bitte den Pfad eingeben: "
+               tput rmso
+               read PLPGSQL
+               [ "$PLPGSQL#" != "#" ] && [ -f $PLPGSQL ] && break
+               tput bel
+       done
+fi
+writeln 6 1 ok. 'plpgsql.so' gefunden
+
+#Kann der User postgres die db erreichen
+cnt=`ps aux | grep postgres | wc -l`
+if [ $cnt -eq 0 ]; then
+       tput bel
+       tput bold
+       echo Die postgreSQL-Datebbank ist nicht gestartet
+       tput rmso
+       exit 1
+fi
+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"`
+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"`
+#cnt=`echo  $v7 + $v8 | bc -l`
+if [ $v8 -eq 0 ]; then 
+       if [ $v7 -eq 0 ]; then
+               tput bel
+               tput bold
+               echo User postgres konnte die Datenbank nicht ansprechen
+               tput rmso
+               exit 1; 
+       else
+               tput clear
+               writeln 1 1 Datenbank Version 7x konnte erreicht werden.
+       fi
+else
+       tput clear
+       writeln 1 1 Datenbank Verion 8x konnte erreicht werden.
+fi
+
+echo "CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler" > lxdbinst.sql
+echo "AS '$PLPGSQL', 'plpgsql_call_handler'" >> lxdbinst.sql
+echo "LANGUAGE c;" >> lxdbinst.sql
+echo "CREATE PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler;" >> lxdbinst.sql
+
+writeln 2 1 Datebankbenutzer einrichten
+tput bold
+writeln 3 1 "Bitte den Datenbank-Benutzernamen eingeben [lxoffice]: "
+tput rmso
+read LXOUSER
+if [ "$LXOUSER#" == "#" ]; then LXOUSER="lxoffice"; fi
+while :; do
+       tput bold
+       writeln 4 1 "Bitte ein Kennwort eingeben : "
+       tput rmso
+       read USRPWD
+       if ! [ "$USRPWD#" == "#" ]; then break; fi
+       tput bel
+done;
+
+echo "CREATE USER $LXOUSER with CREATEDB ;" >> lxdbinst.sql
+echo "ALTER USER $LXOUSER PASSWORD '$USRPWD';" >> lxdbinst.sql
+echo "UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'plpgsql';" >> lxdbinst.sql
+
+su postgres -c "psql template1 < lxdbinst.sql"
+
+echo "Fehlermeldungen die 'already exists' enthalten koennen ignoriert werden"
+
+writeln 11 1 Datenbank fuer Lx-Office vorbereitet
+
+writeln 12 1 Datenbankberechtigung einrichten
+#wo ist die pg_hba.conf
+writeln 13 3 --find erst /etc dann /var/lib
+tmp=`find /etc -name pg_hba.conf -type f`
+[ "$tmp#" == "#" ] && tmp=`find /var/lib -name  pg_hba.conf -type f`
+PGHBA=`echo $tmp | cut -d " " -f 1`
+
+if [ "$PGHBA#" == "#" ]; then
+       while :; do
+               writeln 14 1 'pg_hba.conf' nicht gefunden.
+               tput bold
+               writeln 15 1 "Bitte den Pfad eingeben: "
+               tput rmso
+               read PGHBA
+               [ "$PGHBA#" != "#" ] && [ -f $PGHBA ] && break
+               tput bel
+       done
+fi
+writeln 16 1 ok. 'pg_hba.conf' gefunden
+
+cnt=`grep $LXOUSER $PGHBA | wc -l `
+
+if [ $cnt -eq 0 ]; then 
+       mv $PGHBA  $PGHBA.org
+       echo "local   all         $LXOUSER                                           password" > $PGHBA
+       echo "host    all         $LXOUSER      127.0.0.1         255.255.255.255    password" >> $PGHBA
+       cat $PGHBA.org >> $PGHBA
+fi 
+
+CONFDIR=`dirname $PGHBA`
+
+#postgresql.conf anpassen, liegt vermutlich im gleichen Verzeichnis wie pg_hba.conf
+if ! [ -f $CONFDIR/postgresql.conf ]; then
+       #doch nicht da, dann fragen
+        while :; do
+               writeln 13 1 'postgresql.conf' nicht gefunden.
+               tput bold
+                writeln 14 1 "Bitte den Pfad eingeben: "
+               tput rmso
+                read PGCONF
+                [ "$PGCONF#" != "#" ] && [ -f $PGCONF ] && break
+                tput bel
+        done
+       CONFDIR=`dirname $PGCONF`
+fi
+
+mv $CONFDIR/postgresql.conf $CONFDIR/postgresql.conf.org
+if ! [ $v7 -eq 0 ]; then 
+       #Nur bei der V7.x:  tcpip_socket = true
+       sed 's/^.*tcpip_socket.*/tcpip_socket = true/i' $CONFDIR/postgresql.conf.org > $CONFDIR/postgresql.conf
+       cnt=`grep tcpip_socket $CONFDIR/postgresql.conf | wc -l`
+       if [ $cnt -eq 0 ]; then
+               cp $CONFDIR/postgresql.conf.org $CONFDIR/postgresql.conf
+               echo "tcpip_socket = true" >> $CONFDIR/postgresql.conf
+       fi
+else 
+       #Bei der V8.x OID einschalten.
+       sed 's/^.*default_with_oids.*/default_with_oids = true/i' $CONFDIR/postgresql.conf.org > $CONFDIR/postgresql.conf
+       cnt=`grep default_with_oids $CONFDIR/postgresql.conf | wc -l`
+       if [ $cnt -eq 0 ]; then
+               cp $CONFDIR/postgresql.conf.org $CONFDIR/postgresql.conf
+               echo "default_with_oids = true" >> $CONFDIR/postgresql.conf
+       fi
+fi
+
+tmp=`ls /etc/init.d/postgres*`
+PGSQL=`echo $tmp | cut -d " " -f 1`
+
+writeln 18 1 Datenbank neu starten
+$PGSQL restart
+
+tput bold
+tput smso
+writeln 20 12 ok. Das solltes es gewesen sein.
+tput rmso
+tput rmso
+echo