Как запустить usb modeswitch перед настройкой сети?

Я использую Huawei E3531 для подключения Raspberry Zero, работающего на vanilla Raspbian 8.0 (jessie) к интернету. По мере того как это для удаленного автономного применения, для этого нужно мочь автоматически получить назад онлайн после сил-светомаскировки.

Я сконфигурировал usb_modeswitch для переключения USB-режима на cdc_ether, который надежно вызывает eth0 после modeswitch. К сожалению usb_modeswitch начинается после сетевые устройства настроены, поэтому network-link не вызывается при холодной загрузке (хорошо работает при перезагрузке, где режим уже установлен правильно).

По данным https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/ это должно быть возможным, чтобы добавить network-pre.цель-директивы к сервису, чтобы заставить его работать, прежде чем сеть настроена:

network-pre.цель-это цель, которая может быть использована для заказа услуг
перед любой сетью интерфейс настроен.
Основная цель для использования с обслуживаниями брандмауэра которые хотят
чтобы установить брандмауэр перед запуском любого сетевого интерфейса.

пассивный блок: вы не можете начать его сразу и оно не вытягивано
в службой сетевого управления, но службой, которая
хочет убежать раньше него.
[..]
Службы, которые необходимо запустить до настройки сети
должны доводить до=сети-до.цель и также набор Хочет=сеть-предварительно.цель
чтобы потянуть его внутрь.
Таким образом, если на самом деле нет услуги, которую нужно заказать
прежде чем сеть является целью, не втягивается, следовательно избегая
любая ненужная точка синхронизации.

я модифицировал в/var/lib в/systemd в/системы/usb_modeswitch@.служба и добавил До-/Хочет-директивы, таким образом:

[Unit]
Description=USB_ModeSwitch
Before=network-pre.target
Wants=network-pre.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/usb_modeswitch_dispatcher --switch-systemd %I
Environment="TMPDIR=/run"

что теперь приводит к Ошибка "цикл заказа" при загрузке:

[..]
[  OK  ] Started Trigger Flushing of Journal to Persistent Storage.
[ SKIP ] Ordering cycle found, skipping LSB: Raise network interfaces.
[ SKIP ] Ordering cycle found, skipping Network (Pre)
[  OK  ] Created slice system-usb_modeswitch.slice.
[..]

вот вывод systemctl шоу ..:

root@raspberrypi:/lib/systemd/system# systemctl show -p Requires,Wants,Requisite,BindsTo,PartOf,Before,After usb_modeswitch@.
Requires=basic.target
Requisite=
Wants=network-pre.target system-usb_modeswitch.slice
BindsTo=
PartOf=
Before=network-pre.target shutdown.target
After=systemd-journald.socket basic.target system-usb_modeswitch.slice

root@raspberrypi:/lib/systemd/system# systemctl show -p Requires,Wants,Requisite,BindsTo,PartOf,Before,After usb_modeswitch@.service
Failed to get properties: Unit name usb_modeswitch@.service is not valid.
root@raspberrypi:/lib/systemd/system#

мне тоже интересно, почему systemctl шоу работает с usb_modeswitch@. а не с usb_modeswitch@.служба

удаление двух строк в служебном файле восстанавливает старое поведение без ошибок пропуска.

есть ли другой способ вызвать сетевые интерфейсы после usb_modeswitch? Нужно ли что-то еще адаптировать в systemd-конфигурации, чтобы это работало?

30
задан Christian Benke
15.12.2022 12:36 Количество просмотров материала 3209
Распечатать страницу

1 ответ

Я был в состоянии исправить проблему, используя следующую конфигурацию:

[Unit]
Description=USB_ModeSwitch
DefaultDependencies=no
After=local-fs.target systemd-sysctl.service
Before=network-pre.target shutdown.target
Wants=network-pre.target
Conflicts=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/usb_modeswitch_dispatcher --switch-systemd %I
Environment="TMPDIR=/run"

Я нашел решение через комментарий на Ubuntu-bugreport, который относится к аналогичной проблеме с shorewall вместо usb_modeswitch.

DefaultDependencies определяется как:

неявно дополнит все настроенные зависимости типа Wants= or Requires= зависимостями типа After=

Я не проверял, является ли этот параметр ключевой частью конфигурации или его можно пропустить.

--

вот полное объяснение из вышеупомянутого сообщения об ошибке (для shorewall вместо usb_modeswitch):

Shorewall не приходит с описанием блока обслуживания systemd родным. Такое описание создается при загрузке по /Либ системы-генераторы/systemd в//помощью systemd-SysV в-генератора на основе / etc / init.d / shorewall. Однако я заметил, что заголовок LSB /etc/init.d / shorewall хочет, чтобы служба запускалась из /etc / rcS.d, что довольно рано, и в то же время требуется-Start: $network $remote_fs, что является довольно сильным требованием. Фактически, это единственный скрипт в /etc / rcS.d, который требует $network (ну, кроме shorewall6, который демонстрирует точно такую же проблему). Смотреть в автоматическ-произведенный блок в/run/systemd / generator.позднее / короткое время.услуга показывает:

DefaultDependencies=no
Before=sysinit.target shutdown.target
After=network-online.target remote-fs.target
Wants=network-online.target
Conflicts=shutdown.target

это выглядит проблематично: sysinit.target-это очень ранняя цель, большинство сервисов более высокого уровня запускаются после нее, и на многих системах (включая мою) различные зависимости сделают сеть онлайн.цель доступна только после sysinit.цель.

какова бы ни была точная причина, эта конфигурация работает для меня и, похоже, не имеет никаких нежелательных эффектов.

1
отвечен Christian Benke 2022-12-16 20:24

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх