История изменений
Исправление Spider55, (текущая версия) :
только ifupdown есть.
В итоге всё нашлось. Дело не в pppd, он то как раз всё делает правильно если стоит флаг persist, он бесконечно долго пытается поднять интерфейс.
Всю картину портит networking.service, он выжидает какое-то время timeout не подъема интерфейса и прибивает процесс пытающийся поднять сей интерфейс.
я не правильно понимал логику работы. А надо было так:
auto ppp0 надо убрать, тогда networking.service не будет пытаться самостоятельно поднять ppp0 при загрузке (по факту это делает ifup -a, которого пинает уже «сервис»), тогда сервис поднимет всё ещё auto eth0 и тот выполнит по факту своего поднятия post-up ifup ppp0, но и это не всё. ifup ppp0 заблокирует выполнение пока pppd не поднимет интерфейс, а значит post-up будет ждать окончания всего этого, а это значит что мы не ушли от timeout сервиса.
И тут я не придумал ничего лучше как сделать это через nohup ifup ppp0 || true (пишу упрощено, для понимания смысла). Тогда post-up возвращается мгновенно и eth0 считается поднятым.
ppp0 же когда нить поднимется, это проверено. Затем по факту поднятия systemd вызовет событие ifup@ppp0.service на After= которого можно повесить события что делать после подъёма ppp0, например я поднимаю всякие VPN и прочую ерунду. Ну в прочем это к делу уже не относится.
Исходная версия Spider55, :
только ifupdown есть.
В итоге всё нашлось. Дело не в pppd, он то как раз всё делает правильно если стоит флаг persist, он бесконечно долго пытается поднять интерфейс.
Всю картину портит networking.service, он выжидает какое-то время timeout не подъема интерфейса и прибивает процесс пытающийся поднять сей интерфейс.
я не правильно понимал логику работы. А надо было так:
auto ppp0 надо убрать, тогда networking.service не будет пытаться самостоятельно поднять ppp0 при загруке (по факту это делаеть ifup -a, которого пинает уже «сервис»), тогда сервис поднимет всё ещё auto eth0 и тот выполнит по факту своего поднятия post-up ifup ppp0, но и это не всё. ifup ppp0 заблокирует выполнение пока pppd не поднимет интерфейс, а значит post-up будет ждать окончания всего этого, а это значит что мы не ушли от timeout сервиса.
И тут я не придумал ничего лучше как сделать это через nohup ifup ppp0 || true (пишу упрощено, для понимания смысла). Тогда post-up возвращается мгновенно и eth0 считается поднятым.
ppp0 же когда нить поднимется, это проверено. Затем по факту поднятия systemd вызовет событие ifup@ppp0.service на After= которого можно повесить события что делать после подъёма ppp0, например я поднимаю всякие VPN и прочую ерунду. Ну в прочем это к делу уже не относится.