进一步阅读

进一步阅读

我正在尝试在 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和,重新加载并再次启动它,但没有运气,同样的错误。我确实发现运行显示了另一条可能有用的消息:noredis.servicejournalctl -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 错误代码。这当地的修复对所有内容都采用相同的形式,即具有设置覆盖的嵌入式单元文件。

进一步阅读

答案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解决了我的问题。

相关内容