From 38e559c1f6e9469d1ef3115293f9cfaae646378b Mon Sep 17 00:00:00 2001 From: Holger Lindemann Date: Mon, 30 Jun 2008 11:08:19 +0000 Subject: [PATCH] Script zum Einrichten der Datenbank --- sql/inst_postgres.sh | 185 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100755 sql/inst_postgres.sh diff --git a/sql/inst_postgres.sh b/sql/inst_postgres.sh new file mode 100755 index 000000000..84c0c9d35 --- /dev/null +++ b/sql/inst_postgres.sh @@ -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 -- 2.20.1