Linux/passwd: User für postgres

Mein Eintrag für postgres sieht wir folgt aus (/etc/passwd):

postgres:x:108:113:PostgreSQL administrator,,,:/usr/lib/postgresql/8.4/bin:/bin/bash

a) Ist das vernünftig?

b) Habe ich DESWEGEN einige für mich unerklärliche Probleme?

c) Wie sieht das bei Euch (und problemlos funktionierendem PG) aus?

PS: Man sieht - ich bin kein Linux-Crack. Aber ich bin lernfähig :slight_smile:

Warum nimmst du nicht einfach das Paket deines Betriebssystems und lässt selbiges alles notwendige erledigen?
Den Benutzer im “bin” Verzeichnis enden zu lassen … na ja, wird funktionieren, ist aber keine geschickte Wahl.

Wenn du es selbst kompiliert hast solltest du es unter /usr/local/… plazieren, dann wird es auch vom Paketmanager in Ruhe gelassen.

Gruß Uwe

Na, Ihr seid mir noch Freunde: Kritik ja, aber nicht wie ich’s am Besten einrichten soll :astonished:

Nein, zurück zum Ernst.

  1. Wo soll ich den User “postgres” denn SONST landen lassen? In /usr/lib/… ist PG installiert (worden). Soll ich’s in passwd leer lassen? Kannst du mir bitte ein Beispiel hinstellen?

  2. Nein, ich hab’s nicht selbst kompiliert, sondern mittels apt-get installiert. Es ist automatisch in /usr/lib/ gestrandet.

Mühsam finde ich, dass ich (nach “su postgres”) für die Utilities immer diese langen Verzeichnisse eingeben muss und nicht einfach “pg_ctl” oder “initdb” eingeben kann. Kann mir vielleicht jemand sagen (Beispiel zeigen), wie ich mir das vereinfachen könnte, OHNE den in passwd von Euch kritisierten Eintrag? Wie gesagt: Ich fahre mit Debian/Linux.

Was mir verdächtig vorkommt, ist die Meldung “Could not change to root” (s. Beispiel):

postgres@nas:/root$ /usr/lib/postgresql/8.4/bin/pg_ctl --help
[color=#ff0000]could not change directory to "/root"[/color]
pg_ctl is a utility to start, stop, restart, reload configuration files,
report the status of a PostgreSQL server, or signal a PostgreSQL process.

Usage:
...ff...

Fall für Re: could not change directory to “/root” ?

Andreas

Super, Andreas! Mit “su - postgres” ist dieses Problem verschwunden. Und wieder habe ich was gelernt :slight_smile:

Doch die langen Verzeichnisnamen muss ich noch immer eingeben. Und wie ich passwd am besten einrichte weiss ich auch noch immer nicht. :::frowning:

Um die langen Pfade wegzukriegen mußt du den Pfad zum Programm der Pfad-Variablen hinzufügen. also etwa so:

export PATH=$PATH:/pfad/zum/programm

Gruß Uwe

Danke Uwe.

Doch: So viel war mir auch schon klar, doch ich weiss nicht WIE und WO ich das tun soll. Es soll ja automatisch passieren, nach dem Einloggen (also nach “su - postgres”).

Ich hab’s jetzt mal hingebastelt, indem ich in /etc/profile, unmittelbar vor “export path” dies eingebaut habe (108 = postgres):

if [ "`id -u`" -eq 108 ]; then
  PATH="/usr/local/bin:/usr/bin:/bin:[color=#b22222]/usr/lib/postgresql/8.4/bin:[/color]/usr/local/games:/usr/games"
fi

Das funktioniert zwar (yipee!), doch ich bin nicht so überzeugt, dass dies der richtige Ort dafür ist.

OK. Ich zeige hier mal, wie ich das jetzt gemacht habe. Vielleicht haben andere ja eine ähnliche Frage, dann können sie hier eine (EINE) Antwort finden:

  1. In /etc/passwd eingetragen/geändert:
postgres:x:108:113:PostgreSQL administrator,,,:/home/postgres:/bin/bash
  1. Dann ein Verzeichnis /home/postgres/ erstellt. Owner und Group = postgres. Mit rwxr-xr-x.

  2. Dort drin eine Datei .profile wie folgt erstellt:

# /home/postgres/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

[color=#ff0000]# rts 2011-08-05 >
PATH="$PATH:/usr/lib/postgresql/8.4/bin"

function mypath(){
    old=$IFS
    IFS=:
    printf "%s\n" $PATH
    IFS=$old
}
# rts 2011-08-05 <
[/color]

*) Meine speziellen Anpassungen für PG sind rot gekennzeichnet, das Andere ist sozusagen Standard. Die Funktion mypath kann ich nach einem “su - postgres” aufrufen: Sie zeigt mir den gegenwärtigen PATH an; schön lesbar aufbereitet. Nach einem Upgrade kann das hilfreich sein.