Turris jako webserver - PostgreSQL

Když už jsem se rozhodl přesunout svůj web na Turris rozhodl jsem se také, že vyměním databázi. Bylo to celkem jednoduché rozhodnutí. S Postgresem pracuji každý den, takže se dá říct, že vím co od něj mohu očekávat.

Co je tedy potřeba udělat pro to aby na Turrisu běžel PostgreSQL?
Nejdříve nainstalovat potřebné balíčky

opkg update
opkg install pgsql-server shadow-su


Po úspěšné instalaci je potřeba upravit konfigurační soubor postgresql (/etc/config/postgresql).

config postgresql config
option PGUSER postgres
option PGDATA /mnt/tsd/postgresql/data
option PGLOG /mnt/tsd/postgresql/logs/postgresql.log
option PG_CTL /usr/bin/pg_ctl

Proměnná PGUSER je hlavní uživatel postgresql, PGDATA je cesta k adresáři ve kterém budou uloženy datové soubory databáze. PGLOG je umístění logovacího souboru. Všechna umístění jsem změnil na sd kartu abych zbytečně nezatěžoval vnitřní pamět Turrisu.

chown postgres /mnt/tsd/postgresql/data
Na sd kartě jsem samozřejmě musel vytvořit potřebnou adresářovou strukturu.
Datovému adresáři je nutné nastavit jako vlastníka uživatele postgres aby do něho mohl bez problémů zapisovat.

Pak je již možné provést inicializaci databáze.

su - postgres
LC_COLLATE="C" initdb --pwprompt -D /mnt/tsd/postgresql/data/

Inicializace trvá několik minut.

ln -s /usr/bin/su /bin/su
Ještě je také nutné vytvořit symlink na su


Pak jsem začal nastavovat postgresql.
V datovém adresáři postgresql (/mnt/tsd/postgresql/data/) vytvořila inicializace několik souborů.
Prvním z nich je postgresql.conf (/mnt/tsd/postgresql/data/postgresql.conf).

listen_addresses = \'localhost, 192.168.1.1\'
V tomto souboru jsem musel přidat další adresu na které bude databázový server poslouchat.

Další soubor je pghba.conf (/mnt/tsd/postgresql/data/pghba.conf).

host all all 192.168.1.2/24 trust
V tomto souboru jsem přidal nastavení, že z mého počítače je možné se do databáze také připojit abych mohl používat nástroje jako je pgAdmin III. :-)

Tak a pak to přišlo.
Spuštění postgresql.

/etc/init.d/postgresql start
To u mě nezafungovalo.
V logu se objevilo su: Cannot drop the controlling terminal.
Google zjistil, že se asi jedná o chybu v shadow-su (https://github.com/openwrt/packages/issues/1521).

Takže konec.

Jediná možnost jak spustit postgresql je:

su - postgres
postgres -D /mnt/tsd/postgresql/data

A nechat běžet na pozadí.

Doufám, že se mi podaří ještě přijít na nějaký lepší způsob jak postgres spouštět protože takto se mi to nelíbí.

Update 21.12.2016

Po instalaci nové verze 3.3 Turris OS došlo k odinstalaci původní verze PostgreSQL 9.0 a instalaci PostgreSQL 9.5.

Od této aktualizace je již možné spouštět PostgreSQL standardním způsobem, t.j. pomocí /etc/init.d/postgresql start
Bohužel, ale nedošlo k migraci databází a tak ztráta dat byla na světě :-).

Turris, Webserver, PostgreSQL

- (11. 8. 2017)

Líbil se vám článek?

Nasdílejte ho svým přátelům na sociálních sítích.

Google+

Názory, připomínky a jiné komentáře

Čau když chci provést inicializaci databáze tak mě to vyhodí tuhle chybu nevíš jak a kde si mám to heslo nastavit ?

root@turris:~# su – postgres
No passwd entry for user '–'
root@turris:~# LC_COLLATE="C" initdb --pwprompt -D /mnt/nas/postgresql/data/
initdb: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will
own the server process.

Díky za upozornění. Už jsem ty příkazy upravil.

Nemá to být su – postgres ale su - postgres :-) Rozdíl je v pomlčce a spojovníku.

dík za rychlou reakci, ale stejně pořád vyhazuje chybu:
root@turris:~# su - postgres
No directory, logging in with HOME=/
root@turris:~# LC_COLLATE="C" initdb --pwprompt -D /mnt/nas/postgresql/data/
initdb: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will
own the server process.

Po spuštění su - postgres tam musí být postgres@turris:~$

Existuje uživatel postgres? (cat /etc/passwd)

Spouštíš to samostatně a nebo obojí najednou?
Zkus to spustit samostatně. Nejdřív su - postgres
Co to udělá?

Vytvořeného uživatele jsem měl, ale vyzkoušel jsem smazat a vytvořit znovu to pomohlo, ale zamotávám se dál a dál :-( ..
postgres@turris:/$ LC_COLLATE="C" initdb --pwprompt -D /mnt/nas/postgresql/data/
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locales
COLLATE: C
CTYPE: C.UTF-8
MESSAGES: C
MONETARY: C
NUMERIC: C
TIME: C
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".

Data page checksums are disabled.

fixing permissions on existing directory /mnt/nas/postgresql/data ... initdb: could not change permissions of directory "/mnt/nas/postgresql/data": Operation not permitted
postgres@turris:/$

Vrátit se zpět na root (příkazem exit).

Pak spustit chown postgres /mnt/tsd/postgresql/data

Pak znovu su - postgres

Pak pokud budeš přihlášenej jako postgres tak spustit ten init
LC_COLLATE="C" initdb --pwprompt -D /mnt/nas/postgresql/data/

děkuji a promiň já přiděloval idiot práva rootu

Už to teda funguje?

Samozřejmě že ne, ale už to začínám vzdávat :-D

Nevzdávat! :-)

Jakýho vlastníka má teď adresář /mnt/nas/postgresql/data/ ?

cd /mnt/nas/postgresql
ls -all

Mělo by tam být toto
drwx------ 12 postgres root 4096 Dec 8 2016 data

Případně je v adresáři nějaký obsah?
Pokud ano tak je potřeba

chown postgres -R /mnt/nas/postgresql/data

Pokud je vlastník správně nastaven tak by měla být chyba

fixing permissions on existing directory /mnt/nas/postgresql/data ... initdb: could not change permissions of directory "/mnt/nas/postgresql/data": Operation not permitted

opravena.

Jako uživatel postgres by mělo být možné zavolat inicializaci.

V adresáři je obsah
root@turris:/# cd /mnt/nas/postgresql
root@turris:/mnt/nas/postgresql# ls -all
drwxrwxrwx 19 postgres root 4096 Aug 11 23:19 data

postgres@turris:/$ /etc/init.d/postgresql start
chmod: /dev/null: Operation not permitted
Failed to connect to ubus

FATAL: data directory "/mnt/nas/postgresql/data" has group or world access
DETAIL: Permissions should be u=rwx (0700).
postgres@turris:/$

sem bezradný :-D .. Vidím to že zítra zase zajedu koupit NAS :-D
Jinak moc děkuji za snahu mě pomoct

postgres@turris:/$ postgres -D /mnt/nas/postgresql/data
FATAL: data directory "/mnt/nas/postgresql/data" has group or world access
DETAIL: Permissions should be u=rwx (0700).

Spouštěj /etc/init.d/postgresql start jako root, ne jako postgres

A ta další hláška znamená, že si adresáři data nastavil moc velký oprávnění. Změň to na 700

chmod 700 -R /mnt/nas/postgresql/data

PostgreSQL chce aby do toho adresare mel pristup jen jeho uzivatel.

Ro neudělá nic

ps | grep postgresql

Mělo by to vypsat něco jako
2695 postgres 146m S /usr/bin/postmaster -D /mnt/nas/postgresql/data
2741 root 1532 S grep postgresql

a to znamená, že postgresql běží a můžeš se zkusit připojit

24168 postgres 145m S /usr/bin/postmaster -D /mnt/nas/postgresql/data
25933 root 1092 R grep postgresql

teď se mě to povedlo nějak spustit sice ne přes ten root, ale alespoň to naběhlo. Teď už mě čeká jen připojení se na tu db :-)
mockrat děkuji za ochotu a za snahu

Spouštění a vypínání jako root
příkaz:
/etc/init.d/postgresql start
- spustí postgresql a pokud je všechno správně tak nic nevypisuje

/etc/init.d/postgresql stop
- vypne postgresql a pokud je vše správně tak nic nevypíše

/etc/init.d/postgresql status
- měl by vypsat stav, jestli běží nebo ne, ale vypisuje nějaký blbosti, stav ověříš tím ps | grep postgresql

Při připojování je důležitý na který adrese poslouchá (nastavuje se v postgresql.conf) a taky z jakých IP adres se na něj můžeš připojit (nastavuje se v pghba.conf). Oba dva soubory jsou v tom adresáři data.

Děkuji já teď stejně zjistil že postgresql je pro moje účely na nic a že se musím poprat z mysql

To je článek vedle. :-)

Vložit nový komentář
Kája z Norska
Kája z Norska

Jsem programátor, horolezec a tak trochu FlexiBee fanatik :-).
Na CharlieBlogu sepisuji své nápady a poznatky už od roku 2006.