
Debian Stretch システムに GitLab コミュニティ パッケージをインストールしようとしていますが、redis-server
systemd を使用してサービスを起動すると、依存関係の 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
両方に設定し、再ロードして再起動してみましたが、うまくいかず、同じエラーが発生しました。実行すると、役立つ可能性のある別のメッセージが表示されることがわかりました。yes
no
redis.service
journalctl -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 エラー コードが発生することなどがあります。地元修正はすべてに対して同じ形式、つまり設定のオーバーライドを含むドロップイン ユニット ファイルになります。
参考文献
- マウロ・ジリアーニ(2017-12-19)。 redis-server がコード 227/NO_NEW_PRIVILEGES で終了しました. Debian バグ #884764。
- アンドリュー・フランス (2016-11-01). 16.04 から 16.10 にアップグレードした後、redis-server が起動に失敗する. Launchpad バグ #1638410。
- https://stackoverflow.com/a/48496530/340790
- ozzloy palindromemordnilap (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
問題が解決しました。