LINUX.ORG.RU

Обновления пакетов затирают конфиги systemd

 ,


1

2

Я пошел на небольшой риск и поставил Ubuntu 16.04 в качестве операционной системы для моего домашнего сервера. Все работает идеально, за исключением одного: обновления пакетов затирают конфиги systemd, которые я вручную редактировал. Приведу примеры.
1. Чтобы пофиксить баг, связанный с квадратиками вместо кириллицы, нужно отредактировать файл /lib/systemd/system/systemd-vconsole-setup.service и вместо

ExecStart=/bin/true
написать
ExecStart=/bin/setupcon
2. Я transmission-daemon запускаю от обычного пользователя, чтобы не нарушались права на скачанные файлы. Для этого я в /lib/systemd/system/transmission-daemon.service в переменную User вписал свое имя пользователя вместо debian-transmission.
Так вот, обновление systemd затирает конфиг 1-го пункта. Сегодня или вчера там обновился transmission-daemon и затер мне 2-й пункт. Как сделать так, чтобы при обновлении пакетов конфиги в systemd не затирались? А то я чувствую, меня редактирование конфигов каждый раз после обновления рано или поздно задолбает.

★★★★★

Не нужно редактировать файлы в /lib/systemd/system/, нужно предварительно копировать их в /etc/systemd/syste/, там редактировать, делать systemctl daemon-reload и перезапускать соответствующий сервис.

Nirvandil
()

Потому что в /lib лежат системные файлы, которые будут перезаписываться при обновлении самого пакета.

Локальные настройки надо хранить в /etc, в данном случае в /etc/systemd/system

Ну а ещё у systemctl есть какой-то режим edit

kss ★★★★★
()

Юниты не стоит редактировать in-place прямо в /usr/lib. Естественно, они будут там затираться. Вместо этого ты можешь:

  • скопировать юнит целиком в /etc (под тем же именем) и там его исправить;
  • создать в /etc/systemd/system каталог имяюнита.service.d, в нём — файл с расширением .conf с нужной директивой (секцию перед ней написать не забудь).

В последнем случае учти, что некоторые директивы (Environment=, Exec*=, все директивы зависимостей) не заменяются, а дополняются. Как этого избежать — смотри маны.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

скопировать юнит целиком в /etc (под тем же именем) и там его исправить

Прямо в корневой каталог /etc? Я попробовал так сделать, но изменений не произошло. А вот стоило скопировать нужные конфиги в /etc/systemd/system, как советовал Nirvandil так сразу стала применяться модифицированная мной версия.
Но поскольку я это все протестировал в виртуалке, которую не обновлял пару недель, для сервака это все еще нуждается в тестировании. Надеюсь, что все сработает нормально. Но я это узнаю не раньше, чем при следующем обновлении systemd или transmission-daemon

Rinaldus ★★★★★
() автор топика
Ответ на: комментарий от Rinaldus

Да, разумеется, в /etc/systemd/system. Там же нужно создавать .d-подкаталоги с кусками юнитов.

Когда я писал «в /etc», то имел в виду «в тот ./systemd/system, что находится в /etc».

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

в нормальных пм такое поведение настраивается

smilessss ★★★★★
()

В /lib не нужно ничего редактировать.
И копировать ничего никуда не нужно.

systemctl edit systemd-vconsole-setup.service
systemctl --full edit transmission-daemon.service
man systemctl

ArcFi
()
Ответ на: комментарий от ArcFi

ТС не хочет делать правильно. ТС хочет поныть. Зря ты цитируешь ему маны, которые оно принципиально не читает.

dhameoelin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.