Instalace PostgreSQL na FreeBSD v prostředí Jail
Instalace PostgreSQL do jailů je prakticky shodná s instalací na železo ovšem s jednou drobnou změnou. V tomto krátkém návodu si ukážeme, jak na to.
Instalace z Portů
portmaster -d databases/postgresql10-client databases/postgresql10-server
Zapínám jen -O3
a vypínám (globálně) NLS
:
Kompilace serveru
Kompilace clienta
Po úspěsné kompilaci nám balíčkovací systém radí co udělat dál, takže směle do toho:
Add something similar to this to /etc/login.conf:
postgres:\
:lang=en_US.UTF-8:\
:setenv=LC_COLLATE=C:\
:tc=default:
and run `cap_mkdb /etc/login.conf'.
Then add 'postgresql_class="postgres"' to /etc/rc.conf.
Jenže, pokud se teď pokusíme provést inicializaci db:
service postgresql oneinitdb
tak selže s chybou:
running bootstrap script ... 2018-06-21 10:49:31.505 CEST [77352] FATAL: could not create shared memory segment: Function not implemented
2018-06-21 10:49:31.505 CEST [77352] DETAIL: Failed system call was shmget(key=1, size=48, 03600).
Musíme tedy tomuto jailu povolit systémová volání.
Nastavení jailu pro PostgreSQL Server
Dřív stačilo do /etc/rc.conf
přidat řádek jail_sysvipc_allow="YES"
, dnes
již toto nefunguje a je nutné zapínat SysVIPC pro jednotlivé jaily (což
rozhodně dává větší smysl).
V definici našeho jailu (/etc/jail.conf
) tedy povolíme IPC:
allow.sysvipc=1;
Kompletní nastavení jailu potom může vypadat:
pg {
path = /tank/jails/pg;
mount.devfs;
allow.sysvipc=1;
host.hostname = pg.xxx;
ip4.addr = xxx;
interface = em0;
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
}
Po restartu jailu:
service jail restart pg
už příkaz service postgresql oneinitdb
projde.
Nynní můžeme nastavit v /etc/rc.conf
:
postgresql_enable="YES"
a službu zapnout:
service postgresql start
Závěr
Určitě nedoporučuji zapínat allow.sysvipc
pro všechny jaily (tj dávat si to
někam do template pro /etc/jail.conf
). Jako vždy zde platí zásada povolovat
jen to, co je nezbytně nutné. Mám v tuto chvíli asi 20 jailů pro mnoho různých
účelů a jen 3 znich mají nainstalovaný PostgreSQL server a tedy i zapnutý
SysVIPC. Ty ostatní to k ničemu nepotřebují.