我最近把我的一个应用服务器升级到了CentOS 6(.2),当我可以解决以下问题的时候,它已经准备好用于生产了。 每当我尝试通过semanage的方式添加一个自定义http端口,我不断收到以下错误信息:
libsemanage.semanage_exec_prog: Child process /sbin/setfiles did not exit cleanly. libsemanage.semanage_install_active: setfiles returned error code -1. libsemanage.semanage_exec_prog: Child process /sbin/setfiles did not exit cleanly. libsemanage.semanage_install_active: setfiles returned error code -1. /usr/sbin/semanage: Could not commit semanage transaction
我试图运行的命令:
semanage port -a -t http_port_t -p tcp 27960
当前内核:
2.6.32-220.4.1.el6.x86_64 #1 SMP Tue Jan 24 02:13:44 GMT 2012 x86_64 x86_64 x86_64 GNU/Linux
当前policycoreutils-python:
2.0.83-19.18.el6
最后,目前的selinux设置:
SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 24 Policy from config file: targeted
有人遇到过这个问题吗? 如果是的话你是如何解决的?
提前致谢
– 编辑 –
我检查了/ var / log / messages,看起来像semanage由于“内核:内存不足:杀死进程1648(semanage)得分769或牺牲孩子”而失败。 这很奇怪,因为我有一个接近完全克隆(在linode.com上)具有相同的CPU /内存规格和命令运行良好。
free -t -m在服务器上semanage不断失败:
total used free shared buffers cached Mem: 489 79 410 0 0 11 -/+ buffers/cache: 67 422 Swap: 0 0 0 Total: 489 79 410
在数字海洋有一个非常类似的问题。 一些VM主机(Digital Ocean,AWS,Rackspace)可能没有默认启用交换空间,这显然导致semanage被杀死。
在我玩过的CentOS 7虚拟机上,执行命令之前, semanage需要300到400 MB的可用内存,才能成功运行而不会死亡。
发现这个问题,当我实现自己的定制内核和预先封装的内核时,我忘了添加一个交换驱动器。 当我添加交换驱动器,命令运行良好。