我正在尝试在 Debian Stretch 系统上安装 GitLab 社区包,但redis-server
在使用 systemd 启动服务时,其依赖项之一 无法安装。
完整日志:
$ sudo dpkg --configure redis-server
Setting up redis-server (3:3.2.5-4) ...
Job for redis-server.service failed because the control process exited with error code.
See "systemctl status redis-server.service" and "journalctl -xe" for details.
invoke-rc.d: initscript redis-server, action "start" failed.
● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Thu 2016-12-15 15:00:17 UTC; 31ms ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Process: 8764 ExecStart=/usr/bin/redis-server /etc/redis/redis.conf (code=exited, status=227/NO_NEW_PRIVILEGES)
Process: 8761 ExecStartPre=/bin/run-parts --verbose /etc/redis/redis-server.pre-up.d (code=exited, status=227/NO_NEW_PRIVILEGES)
Main PID: 24283 (code=exited, status=227/NO_NEW_PRIVILEGES)
Dec 15 15:00:17 Serverdatorn-Debian systemd[1]: redis-server.service: Unit entered failed state.
Dec 15 15:00:17 Serverdatorn-Debian systemd[1]: redis-server.service: Failed with result 'exit-code'.
dpkg: error processing package redis-server (--configure):
subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
redis-server
通过手动运行可执行文件来启动 redis-server 效果很好:
$ sudo /usr/bin/redis-server /etc/redis/redis.conf
$ sudo tail /var/log/redis/redis-server.log
...
* The server is now ready to accept connections on port 6379
如果您需要我提供任何其他信息,请告诉我。
编辑:
我尝试在文件中NoNewPrivileges
设置yes
和,重新加载并再次启动它,但没有运气,同样的错误。我确实发现运行显示了另一条可能有用的消息:no
redis.service
journalctl -xe
redis-server.service: Failed at step NO_NEW_PRIVILEGES spawning /usr/bin/redis-server: Invalid argument
答案1
我猜你正在遇到这个结果systemd
无新权限=指示。假设该redis-server
软件包通常适用于 Ubuntu 16.04 系统,这表明您的系统可能会自定义全局设置NoNewPrivileges=
或导致 Redis 无法启动的相关指令。
阅读 aboutNoNewPrivileges=
和相关指令链接的文档,然后在您的/etc/systemd/
目录中搜索以查看是否已在您的系统上自定义了这些值。如果没有,请确认 redis
您要安装的软件包确实受您安装的操作系统版本支持。
答案2
早在 2017 年 12 月,这个问题就被作为 Debian bug 提出,但该 bug 在没有服务修复的情况下就被关闭了。如果您有 Chris Lamb 要求的详细信息,请提供。
早在 2017 年 7 月,Debian 的 MariaDB 10.1 软件包就报告了类似的问题,当该软件包从 Debian 中删除时,该软件包已关闭且未修复。
A本地修复是将服务的设置更改为
没有新权限=否 私人设备=否
不要编辑/etc/systemd/system/redis.service
或/usr/lib/systemd/system/redis-server.service
直接。后者根本不应该由本地管理员手动编辑,而前者也不是 Debian 软件包附带的实际服务单元文件。
相反,使用systemctl edit redis.service
创建一个单位插入文件并将设置放在那里。这也daemon-reload
隐式地执行了一项操作,如果要手动修改单元文件,则必须手动执行此操作。
对于那些试图在源代码包中找到它的人:打包的文件redis.service
和[email protected]
文件是由一个名为的 Debian 程序生成的generate-systemd-service-files
。
这是人们在 Debian 人员生成和打包的服务单元中使用 systemd 限制机制时遇到的几个问题之一。其他问题是,它的ProtectHome=yes
设置在启动板错误中阻止了符号链接/home
的工作,并且ReadOnlyDirectories=/
在 StackOverflow 问答中,它的设置产生了 226/NAMESPACE 错误代码。这当地的修复对所有内容都采用相同的形式,即具有设置覆盖的嵌入式单元文件。
进一步阅读
- 毛罗·齐利亚尼 (2017-12-19)。 redis-server 退出,代码为 227/NO_NEW_PRIVILEGES。 Debian 错误#884764。
- 安德鲁·法国 (2016-11-01)。 16.04升级到16.10后redis-server无法启动。启动板错误#1638410。
- https://stackoverflow.com/a/48496530/340790
- ozzloy 回文(2017-07-03)。 mariadb 安装失败并显示 NO_NEW_PRIVILEGES (systemd)。 Debian 错误 #867137。
- systemctl - 服务退出代码和状态信息解释
答案3
您可以在 systemd 服务文件中设置 PrivateDevices=false 以使其正常工作。
答案4
就我而言,我运行的是以前 Debian 版本的旧 Linux 内核,并且有几个服务无法启动,并出现“(code=exited, status=227/NO_NEW_PRIVILEGES)”错误。例如:
ExecStart=/lib/systemd/systemd-logind (code=exited, status=227/NO_NEW_PRIVILEGES)
安装当前的发行版内核并sudo apt-get install linux-image-amd64 && reboot
解决了我的问题。