Postgresql in freenas Jail

Существует проблема с запуском postgresql в Jail environment.

При запуске

/usr/local/etc/rc.d/postgresql initdb

оно ругается

creating template1 database in /usr/local/pgsql/data/base/1 ... FATAL:  could not create shared memory segment: Function not implemented
DETAIL:  Failed system call was shmget(key=1, size=1622016, 03600).

Для исправления конкретного Jail-а, надо передать этому jail-у параметр “allow.sysvipc=1”. Так, для Jail-a с номером $Jid=3, надо выполнить

jail -m jid=3 allow.sysvipc=1

Во freenas этот параметр выставляется в виде sysctl-а для соответствующего Jail-а. Надо иметь в виду, что в окне настройки Jail-a эти sysctl-ы должны перечисляться через запятую, например: allow.raw_sockets=true,allow.sysvipc=1

FreeBSD postgresql quickstart

Совсем коротко теория.

  • sysrc мы не рассматриваем.
  • Перед запуском postgresql надо создать первоначальные базы данных. Это делается командой
    /usr/local/etc/rc.d/postgresql initdb

    Оно же выставит владельца директории с базами и исправит права доступа.

  • После этого запускается postgresql командой

    service postgresql start

  • Для работы с базами данных используется утилита psql
  • psql при запуске должен подключаться к какой-либо базе
  • При запуске initdb (/usr/local/etc/rc.d/postgresql initdb) оно создало 3 базы:
    1. postgres
    2. template0
    3. template1
  • Администратор баз данных должен быть непривилегированным пользователем
  • При установке postgresql-server оно создало непривилегированного пользователя pgsql
  • Если при запуске postgresql оно ругается на

    pg_ctl: could not read file "/usr/local/pgsql/data/postmaster.opts"

    , то запускать надо командой

    /usr/local/bin/postgres -D /usr/local/pgsql/data

Таким образом, на FreeBSD для установки postgresql и корректного входа в базу “postgres” достаточно выполнения следующего набора действий:

pkg install postgresql84-server
# выставить sysrc
mkdir -p -m 0777 /usr/local/pgsql/data
/usr/local/etc/rc.d/postgresql initdb
su pgsql
/usr/local/bin/postgres -D /usr/local/pgsql/data
psql -d postgres

Сидя в pgsql-е, создать базу my_base, пользователя для этой базы my_user и войти в my_base можно командами

CREATE DATABASE my_base;
CREATE USER my_user WITH PASSWORD 'my_password';
GRANT ALL PRIVILEGES ON DATABASE my_base TO my_user;
\c my_base

Войти из шелла в базу template1 как пользователь pgsql без выполнения su pgsql:

psql -d template1 -U pgsql

Созздать базу из шелла, а затем ее обрушить, но уже из postgresql

/usr/local/bin/createdb -U pgsql my_base
psql -d template1 -U pgsql
DROP DATABASE my_base;
\q
embedded/freenas_jail_pgsql.txt · Last modified: 2015/05/16 12:45 by rybario
About this template
CC Attribution-Share Alike 4.0 International
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5