LINUX.ORG.RU

netctl-auto@, systemd & timeout

 ,


0

1

Юзаю netctl для управления сетями, и всё хорошо, но есть один hiccup. В случае отсутствия одного из интерфейсов, для которых включено автоматическое переключение профилей, systemd при загрузке ждёт старта соответствующего сервиса аж полторы минуты, что довольно неприятно. Вопрос: можно ли как-то, хотя бы, уменьшить таймаут? Или и вовсе уговорить systemd не стартовать сервисы для отсутствующих интерфейсов?

★★★★★

Ответ на: комментарий от Axon

А, это.

Дискуссия уже была (правда, для обычных профилей, не -auto) — но закончилась ничем, что-то им не понравилось.

Моё решение в том, юнит netctl-auto для требуемого интерфейса запускался не как зависимость multi-user.target, а как зависимость юнита этого самого интерфейса. В этом случае netctl-auto будет запускаться при появлении соответствующего интерфейса (в т. ч. если он появился после загрузки системы).

Для netctl-ifplugd всё аналогично.

systemctl disable netctl-auto@$iface
mkdir -p /etc/systemd/system/sys-subsystem-net-devices-$iface.device.wants
cd /etc/systemd/system/sys-subsystem-net-devices-$iface.device.wants
ln -sf /usr/lib/systemd/system/netctl-auto@.service netctl-auto@$iface.service
intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 4)
Ответ на: комментарий от intelfx

Дискуссия уже была (правда, для обычных профилей, не -auto) — https://mailman.archlinux.org/pipermail/arch-projects/2013-February/003602.html — но закончилась ничем.

А жаль, там вполне приличные решения были. Надеюсь, об этом ещё вспомнят.

systemctl disable netctl-auto@$iface
mkdir -p /etc/systemd/system/sys-subsystem-net-devices-$iface.device.wants
cd /etc/systemd/system/sys-subsystem-net-devices-$iface.device.wants
ln -sf /usr/lib/systemd/system/netctl-auto@.service netctl-auto@$iface.service

Спасибо, попробую.

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

С другой стороны, возможно, ты не хочешь, чтобы netctl-auto запускался при появлении интерфейса. А, например, чтобы он запускался исключительно при загрузке системы, но только если интерфейс существует (а если не существует — то несудьба).

В таком случае в юнит можно добавить Requisite=sys-subsystem-net-devices-%i.device, но придётся как-то порешать гонку между обнаружением устройства и запуском юнита.

А ещё можно просто уменьшить таймаут: TimeoutSec=5s.

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

С другой стороны, возможно, ты не хочешь, чтобы netctl-auto запускался при появлении интерфейса.

Да нет, это, как раз, хорошо. Мне это не сильно нужно, но не помешает точно.

В таком случае в юнит можно добавить Requisite=sys-subsystem-net-devices-%i.device, но придётся как-то порешать гонку между обнаружением устройства и запуском юнита.

Гонки нет, потому что отсутствие девайсов наблюдается из-за запуска на разном оборудовании, а не из-за их позднего определения.

А ещё можно просто уменьшить таймаут: TimeoutSec=5s.

Я не нашёл где это сделать.

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

Гонки нет

Гонка будет. Никто не гарантирует, что шина просканируется и девайс обнаружится до того, как дело дойдёт до проверки Requisite= у этого юнита.

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

Я не нашёл где это сделать.

Вариантов несколько, не знаю, какие из них рабочие, но можно так:

/etc/systemd/system/sys-subsystem-net-devices-$iface.device.d/timeout.conf

[Unit]
JobTimeoutSec=5

intelfx ★★★★★
()

Могу робко посоветовать systemd-networkd - это, по сути, тот же netctl, только более плотно прибитый гвоздями к systemd. Он будет стартовать интерфейсы при появлении устройств (через udev).

А вообще, лично меня ковыряние в netctl привело к написанию своих юнитов, которые делали все так как мне надо и когда надо - дефолт оказался недостаточно гибким (см. закон дырявых абстракций).

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

Могу робко посоветовать systemd-networkd - это, по сути, тот же netctl, только более плотно прибитый гвоздями к systemd.

Это вообще никаким местом не то же самое, он по возможностям с netctl рядом не стоял. И он бай дезайн не предназначен для динамического переключения профилей.

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

Вариантов несколько, не знаю, какие из них рабочие, но можно так:

/etc/systemd/system/sys-subsystem-net-devices-$iface.device.d/timeout.conf

О, спасибо. Если не сработает вариант выше, то так и сделаю.

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

не предназначен для динамического переключения профилей.

Естественно. Просто для моих потребностей «динамичское» == «при подключении устройства».

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

В 217-218 сделают возможность управления через дбас :)

Прикольно, может, и допилят когда до готовности к десктопу. Правда, если честно, мне не ясно зачем переизобретать netctl. Лёня в своём репертуаре.

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

Просто для моих потребностей «динамичское» == «при подключении устройства».

Основной юзкейс для таких штук - это подключение к вафле при появлении знакомого SSID в эфире.

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

Уже было сказано много слов на тему того, зачем ещё один сетевой велосипед. Идея в том, чтобы сделать легковесно и избежать кучи разрозненных тулз (т. е. сделать единую state machine). По крайней мере, ни NM, ни connman им не подошёл.

А netctl — это действительно не то; это обёртка над зоопарком тех самых разрозненных утилит. Да ещё и на баше.

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

Ну, может быть. Но для легковесного десктопа на данный момент netctl - это готовое решение, близкое к идеалу.

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

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

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

При наличии девайса профили тоже поднимаются как надо. Красота! Тема решена, спасибо огромное за помощь.

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