systemd-200: осторожно, /usr/lib/sysctl.d/

Сегодня битый час разбирался, почему у меня после обновления сломался интернет.
ОКАЗЫВАЕТСЯ, в systemd верси 200 появился новый файлик /usr/lib/sysctl.d/50-default.conf, а в нём ЭТО:
# Source route verification
net.ipv4.conf.default.rp_filter = 1

Что особо интересно, sysctl НИЧЕГО НЕ ЗНАЕТ о каталоге /usr/lib/sysctl.d/ и (закономерно) игнорирует его. Новый каталог НЕ упоминается в man sysctl, но упоминается в man sysctl.d, который как выяснилось, теперь принадлежит пакету systemd, а не procps-ng, как раньше.

Этот каталог – нововведение systemd и интерпретируется им же, а не sysctl. До версии 200 он был практически незаметен, там был только файлик coredump.conf с единственной строчкой для настройки вывода "core dumped". В новом systemd-200 появился новый файл 50-default.conf с несколькими параметрами, которые изменяют настройки sysctl в обход конфигов sysctl.

Автор нововведения – никто иной, как Kay Sievers, автор udev:
http://cgit.freedesktop.org/systemd/systemd/commit/sysctl.d?id=8f27a2212ee8d6311c88ef4358953ad0d7bfa851

Если вы знаете, что делать с sysctl, /etc/sysctl.conf, /etc/sysctl.d/, /proc/sys/ и делаете это – теперь придётся иметь в виду ещё и /usr/lib/sysctl.d/ . Если требуется заблокировать нежелательные/неожиданные изменения параметров sysctl при обновлении, можно сделать это в pacman.conf строчкой
NoUpgrade = etc/sysctl.conf usr/lib/sysctl.d/*
Новые конфиги в этом случае будут распаковываться с суффиксом .pacnew и не будут применяться до вашего их "одобрения" вручную, предупреждения о них как обычно будут в выводе пакмана.
Про это упоминалось в новости на opennet.ru, причём нововведение было ещё в systemd 199 (который в стабильные репозитории не попал, потому что через несколько дней вышел 200-й релиз).
lampslave, спасибо, действительно :)
В любом случае, у нас этой новости ещё не было.
Кстати, по ссылке есть и другие интересные вещи, например параметр ядра net.ifnames=0
Я вот не пробовал, но по идее приоритет настроек /etc/sysctl.d/ должен быть выше чем в /usr/lib/sysctl.d/ и даже выше чем в /etc/sysctl.conf
может попробовать параметр net.ipv4.conf.default.rp_filter = 0 прописать например в /etc/sysctl.d/net.conf.

И не нужны будут никакие шаманства в pacman.conf
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
nafanja
Я вот не пробовал, но по идее приоритет настроек /etc/sysctl.d/ должен быть выше чем в /usr/lib/sysctl.d/ и даже выше чем в /etc/sysctl.conf
может попробовать параметр net.ipv4.conf.default.rp_filter = 0 прописать например в /etc/sysctl.d/net.conf.

И не нужны будут никакие шаманства в pacman.conf
Совершенно верно, я могу как угодно переопределить эти параметры, в том числе и через /etc/sysctl.d/ , но я говорил не о переопределении отдельных ИЗВЕСТНЫХ параметров, а о предотвращении появления ЛЮБЫХ НОВЫХ, которое может иметь непредсказуемый эффект. Блокирование обновления usr/lib/sysctl/* в pacman.conf решает эту задачу ЗАРАНЕЕ, а любые файлы в /etc/sysctl.d/ и параметры в /etc/sysctl.conf – только ПОСЛЕ ТОГО, как я о них узнаю и переопределю.
Вот так привыкнешь, а потом забудешь про pacman.conf, и после новой установки опять ломать голову почему что то не работает...
Как мне кажется лучше уж запомнить что настройки по умолчанию находятся тут /usr/lib/sysctl.d/ и тут /etc/sysctl.conf, а переопределять их стоит тут /etc/sysctl.d/

А корректировать pacman.conf это больше как частный случай, а не правило...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
читайте рассылку, да ;)
такие дела.
Настройки sysctl , к сожалению, не всегда очевидны, их последствия трудно предсказать, а их изменения трудно опознать по внешним признакам.
Если товарисчи мейнтейнеры хотя переписать конфиги, пускай пишут их в .pacnew, как во всех нормальных пакетах. Собственно, именно такого поведения я и добился манипуляцией с pacman.conf

И ещё раз – переопределять параметры systemd я могу где угодно, собственно я это уже и так сделал. Но НА БУДУЩЕЕ мне нужно не переопределять, а контролировать их появление – мне совершенно не нужны пакеты, которые манипулируют настройками сети и ядра вообще без моего ведома, да ещё в обход стандартных конфигов. /usr/lib/sysctl.d/* – конфиги НЕШТАТНЫЕ, они НЕ обрабатываются sysctl, никаких "дефолтов" /usr/lib/ в sysctl не предусмотрено. Дефолты sysctl – в ядре, остальное от лукавого.

Кстати, дефолтные обновляемые конфиги в /usr/lib/ вообще не очень хорошая идея, именно потому, что контролируются только пост фактум, и их переопределение в /etc/ слишком напоминает латание дыр вдогонку.

И ещё – вы совершенно зря затеяли спор. Я же сказал в самом начале – ЕСЛИ НУЖНО – вот способ. Кому НЕ нужно – просьба не беспокоиться :)
Natrio, после первого прочтения показалось что это как инструкция к действию типа - Kay Sievers редиска натворил делов испортил все,
а не просто как совет типа - хотите можно и так сделать...
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Я писал так:
Если вы знаете, что делать с sysctl, /etc/sysctl.conf, /etc/sysctl.d/, /proc/sys/ и делаете это – теперь придётся иметь в виду ещё и /usr/lib/sysctl.d/ . Если требуется заблокировать нежелательные/неожиданные изменения параметров sysctl при обновлении, можно сделать это в pacman.conf строчкой
Если кому что тут показалось не то – прошу прощения :)

Я просто предупредил всех, кого может затронуть это нововведение, и поделился одним из возможных решений проблемы.
 
Зарегистрироваться или войдите чтобы оставить сообщение.