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í.