
Я пытаюсь установить пакет сообщества GitLab в системе Debian Stretch, но одна из его зависимостей, 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
NoNewPrivileges=директива. Если предположить, что redis-server
пакет в целом работает в системах Ubuntu 16.04, это говорит о том, что ваша система может иметь пользовательские глобальные настройки NoNewPrivileges=
или связанную с ними директиву, из-за которой Redis не запускается.
Прочитайте документы по ссылкам about NoNewPrivileges=
и связанные директивы, затем найдите в своем /etc/systemd/
каталоге, чтобы узнать, были ли какие-либо из этих значений настроены в вашей системе. Если нет, убедитесь, что redis
устанавливаемый вами пакет действительно поддерживается в версии операционной системы, в которую вы его устанавливаете.
решение2
Это было поднято как ошибка Debian еще в декабре 2017 года, но ошибка была закрыта без исправления сервиса. Если у вас есть детали, которые запросил Крис Лэмб, пожалуйста, предоставьте их.
Похожая проблема была обнаружена в пакете Debian MariaDB 10.1 еще в июле 2017 года и была закрыта без исправления, когда пакет был удален из Debian.
Алокальное исправлениеизменить настройки сервиса, чтобы быть
NoNewPrivileges=нет PrivateDevices=нет
Не редактируйте напрямую /etc/systemd/system/redis.service
or /usr/lib/systemd/system/redis-server.service
. Последний вообще не должен редактироваться вручную локальными администраторами, а первый не является фактическим файлом сервисного модуля, который поставляется с пакетом Debian.
Вместо этого используйте systemctl edit redis.service
для созданияфайл вставки блокаи поместить туда настройки. Это также делает daemon-reload
неявно, что пришлось бы делать вручную, если бы кто-то вручную модифицировал файлы юнитов.
Для тех, кто пытается найти это в исходном пакете: пакеты redis.service
и [email protected]
файлы генерируются программой Debian под названиемgenerate-systemd-service-files
.
Это одна из нескольких проблем, с которыми люди сталкивались при использовании механизмов ограничения systemd в служебных модулях, которые генерируются и упаковываются людьми из Debian. Другие проблемы заключаются в том, что его ProtectHome=yes
настройка останавливает /home
работу символически связанного, в ошибке launchpad, и что его ReadOnlyDirectories=/
настройка выдает код ошибки 226/NAMESPACE, в StackOverflow Q&A.местныйисправление имеет одинаковую форму для всех: вставной файл модуля с переопределением настроек.
дальнейшее чтение
- Мауро Зилиани (19 декабря 2017 г.). redis-server завершает работу с кодом 227/NO_NEW_PRIVILEGES. Ошибка Debian № 884764.
- Эндрю Франс (01.11.2016). redis-server не запускается после обновления с 16.04 до 16.10. Ошибка Launchpad № 1638410.
- https://stackoverflow.com/a/48496530/340790
- ozzloy палиндромеморднилап (2017-07-03). Установка mariadb завершается неудачей с сообщением NO_NEW_PRIVILEGES (systemd). Ошибка Debian № 867137.
- systemctl - коды завершения службы и пояснения к информации о состоянии
решение3
Чтобы все заработало, можно установить PrivateDevices=false в файле службы systemd.
решение4
В моем случае я использовал старое ядро Linux из предыдущей версии Debian, и несколько служб не смогли запуститься с ошибкой "(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
решила мою проблему.