当我在 FreeBSD 监狱中初始化 PostgreSQL 数据库时出现问题。
我找到了一篇关于这个问题的文章。我尝试了它的建议,但我没有运气,我不知道为什么。有链接:PostgreSQL in jail。
我还阅读了关于内核资源的 PostgreSQL 文档:
如果通过启用
sysctl
' 在 FreeBSD 监狱security.jail.sysvipc_allowed
中运行,则在不同监狱中运行的 postmaster 应该由不同的操作系统用户运行。这提高了安全性,因为它可以防止非 root 用户干扰不同监狱中的共享内存或信号量,并允许 PostgreSQL IPC 清理代码正常运行。(在 FreeBSD 6.0 及更高版本中,IPC 清理代码无法正确检测其他监狱中的进程,从而阻止了不同监狱中同一端口上的 postmaster 运行。)
我做了什么:
- 我编辑
/etc/rc.conf
(在主机上)并添加了该行jail_sysvipc_allow="YES"
- 在监狱机器中
/etc/sysctl.conf
,我添加了一行security.jail.sysvipc_allowed=1
我多次重新启动监狱机器。我还没有重新启动主机,也不想。
希望有人能给我一个解决方案或一些建议。非常感谢。
这是我重新启动监狱时的消息:
/etc/rc.d/sysctl: WARNING: unable to set security.jail.sysvipc_allowed=1
或者当我手动运行 sysctl 时:(在监狱中)
root@xxxxx:/home/xxxx# sysctl security.jail.sysvipc_allowed=1
security.jail.sysvipc_allowed: 0
sysctl: security.jail.sysvipc_allowed: Operation not permitted
Freebsd 版本:FreeBSD xxxxxxx 9.1-PRERELEASE FreeBSD 9.1-PRERELEASE
postgreSQL 版本:postgresql-server-9.1.4
错误信息:
root@xxxxxx:/home/xxx # /usr/local/etc/rc.d/postgresql initdb
The files belonging to this database system will be owned by user "pgsql".
This user must also own the server process.
The database cluster will be initialized with locale C.
The default text search configuration will be set to "english".
creating directory /usr/local/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 10
selecting default shared_buffers ... 400kB
creating configuration files ... ok
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=2146304, 03600).
child process exited with exit code 1
initdb: removing data directory "/usr/local/pgsql/data"
更新:
在主机中,/etc/sysctl.conf:security.jail.sysvipc_allowed=1 /etc/rc.conf:jail_sysvipc_allow="YES"
在监狱服务器中,没有额外的 jail_sysvipc 配置。
主机中的 sysctl 值:
root@xxxxx:/home/xxxx# sysctl -a | grep 'sysvipc'
security.jail.param.allow.sysvipc: 0
security.jail.sysvipc_allowed: 1
我仍然收到与以前相同的错误消息。
另外,我想知道 security.jail.param.allow.sysvipc 是否有任何东西?因为,在主机中,我不允许设置它。(security.jail.param.allow.sysvipc 0-> 0)