参考文献

参考文献

Debian Stretch システムに GitLab コミュニティ パッケージをインストールしようとしていますが、redis-serversystemd を使用してサービスを起動すると、依存関係の 1 つである のインストールに失敗します。

完全なログ:

$ 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両方に設定し、再ロードして再起動してみましたが、うまくいかず、同じエラーが発生しました。実行すると、役立つ可能性のある別のメッセージが表示されることがわかりました。yesnoredis.servicejournalctl -xe

redis-server.service: Failed at step NO_NEW_PRIVILEGES spawning /usr/bin/redis-server: Invalid argument

答え1

おそらくあなたはこの結果に遭遇していると思いますsystemd 新しい権限なし=ディレクティブ。パッケージが Ubuntu 16.04 システムで一般的に動作すると仮定すると、これは、システムのカスタム グローバル設定または関連するディレクティブが Redis の起動失敗の原因になっているredis-server可能性があることを示しています。NoNewPrivileges=

リンクされているドキュメントNoNewPrivileges=と関連ディレクティブを読んでから、/etc/systemd/ディレクトリを検索して、システムでこれらの値のいずれかがカスタマイズされているかどうかを確認します。カスタマイズされていない場合は、インストールするパッケージが、インストール先のオペレーティング システムのバージョンで実際にサポートされていることを確認し redisます。

答え2

これは 2017 年 12 月に Debian のバグとして報告されましたが、サービス修正なしでバグはクローズされました。Chris Lamb が要求した詳細をお持ちの場合は、提供してください。

同様の問題は、2017 年 7 月に Debian の MariaDB 10.1 パッケージでも報告されましたが、パッケージが Debian から削除されたときに修正されずにクローズされました。

ローカル修正サービスの設定を変更することです

NoNewPrivileges=いいえ
プライベートデバイス=いいえ

/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 の制限メカニズムを使用する際に発生するいくつかの問題のうちの 1 つです。他の問題としては、 launchpad のバグで、そのProtectHome=yes設定によりシンボリック リンクが機能しなくなる/homeことや、StackOverflow Q&A で、そのReadOnlyDirectories=/設定により 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問題が解決しました。

関連情報