[systemd-udev] ppp: корректный автостарт system‐wide демона

в 19:40, , рубрики: linux, systemd, udev, Настройка Linux

Пакет usb_modeswitch обычно поставляется с готовыми udev‐правилами для автоматического переключения режима модема. ppp, независимо от него, помимо самого себя, включает сервис для демонизации. Эти конфигурации независимы друг от друга.

[systemd-udev] ppp: корректный автостарт system‐wide демона - 1

Если использовать их одновременно, может возникнуть конфликт: pppd запустится до того, как udev переключит модем usb_modeswitch -J‐ем.

Можно оставить на откуп Restart=on-failure с RestartSec=5s, но спортивно ли это?

„Just dying to be saved…” Converge

Для начала редактируем usb_modeswitch.conf – DisableSwitching=yes. Этот файл неявно используется "дефолтными" правилами – они нам не пригодятся, хоть и мешать не будут.

Теперь – systemctl disable ppp@….service. Втягивание юнита из multi-user.target нам впредь не потребуется; [Install] более не полезен.

Осталось сделать так, чтобы это всё заработало вновь – уже по‐другому.

„Beaten awake to murder again.” PsyOpus

Новое udev‐правило призвано решить проблему, поставленную ранее: оно должно сначала сообщить задачу usb_modeswitch‐у, и только потом обратиться к systemd.

В подсистеме USB устройство можно определить двумя атрибутами‐идентификаторами: idVendor и idProduct. Их можно увидеть lsusb‐ом – они располагаются соответственно после "ID".

Сказанное почти в точности соответствует первой строке новой конфигурации:

$ su -
$ cd /etc/udev/rules.d
$ cat > 20-provider-modem.rules <<< …

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="…", ATTR{idProduct}=="…", RUN+="/usr/sbin/usb_modeswitch -v $attr{idVendor} -p $attr{idProduct} -J"

– уточнять систему счисления (0x) не нужно.

Теперь мы переходим к рассмотрению другой подсистемы – теперь для нас важен ttyUSB0. Снова обращаемся к любимому текстовому редактору:

$ cat >> 20-provider-modem.rules <<< …

SUBSYSTEM=="tty", KERNEL=="ttyUSB0", TAG+="systemd", ENV{SYSTEMD_WANTS}="ppp@provider.service"

– здесь udev в надлежащий момент сообщает systemd о возможности запуска ppp@.

Наконец:

$ udevadm control --reload

„Well just cease the torment, it's weighting on my mind, the pressure you apply…” TesseracT

Меня однажды очень заинтересовало умозаключение intelfx о взаимосвязи systemd и udev:

udev и systemd — офигенно мощные фреймворки, дополняющие друг друга.

systemd основан на модели зависимостей: выполнить X, если Y доступно.
udev — на модели событий: когда Y станет доступным, выполнить X.

Связь userspace с kernel действительно подчёркивается очень выразительно, и это не может не впечатлять. Продемонстрированный пример – может, немного немногообещающий или посредственный – всецело раскрывает потенциал этого инструмента.

Автор: kalterfive

Источник

Поделиться новостью

* - обязательные к заполнению поля