[решено] systemd, сеть и виртуальные машины в libvirt

Собственно сабж.
На борту имеется виртуальная машина "роутер", которая является шлюзом для хоста и остальных виртуалок.
В арче - Network manager

мне необходимо прописывать правильный маршрут в инет после запуска "роутера" (через 60 сек ожидания его запуска). Как это правильно сделать?
Сейчас я сеть поднимаю руками:
#/root/.autostart/vmlan.bash

ip tuntap add dev tap5 mode tap user rocko
ifconfig tap5 up
/sbin/route add default gw 10.29.89.2
nmcli radio wifi off
nmcli radio wifi on

Я пытаюсь сделать сервис:
[Unit]
Description=Autostart lan for VM
After=network.target network-online.target
After=NetworkManager-wait-online.service
After=NetworkManager.service
After=syslog.target
Requires=network.target  network-online.target
Requires=NetworkManager.service
Requires=libvirtd.service
[Timer]
OnBootSec=60

[Service]
Type=oneshot
RemainAfterExit=yes
User=root
Group=root
ExecStart=-/root/.autostart/vmlan.bash
#TimeoutSec=10

[Install]
WantedBy=multi-user.target
Но он срабатывает раньше..
Подскажите пожалуйста, как это сделать правильно и желательно по феншую? В идеале: оставить надстройку NM сверху, подружить netctl с libvirt и заставить прописываться маршруты после того, как виртуальный "роутер" запустится и поднимет инет.

пс все проблемы берут свои корни из проблем с подьемом сети в libvirt в арче с его netctl. У них там какая то адовая несовместимость..
ничего непонятно... что такое виртуальный роутер??))(т.е. вы в виртуалке запускаете ещё одну систему, чтоб она делала что?? прописывала петлевые маршруты в опережения хоста??)
почему это чудо действие которое вы хотите не может сделать хост??
если расклад такой то это проблематично, непонятно когда стартанёт то через что вы там сделали роутер и потом его ещё запустит.
Ошибки в тексте-неповторимый стиль автора©
интересный способ скрестить таймер и сервис в одном флаконе :)

п.с.
таймер
сервис

Сервис определяет время своего запуска после старта системы либо своего перезапуска(например после падения).
Таймер запускает сервис(ы) // это отдельный файл.
Таймер определяет точное время или период запуска указанного сервиса.
На виртуалке стоит настроенный микротик с проброшенным физическим сетевым адаптером, на микротике dhcp, впны и прочее. Удобная вещь, вся сеть под рукой, не надо ставить горы софта на хост и править конфу в случае чего. Подобные вещи я всегда выношу на отдельные виртуальные машины, дабы не плодить мусор на хосте.
Микротик имеет общую сеть с хостом, маршрут до инета строится: Inet -> mikrotik -> arch
При надобности ему добавляются виртуальные сетевые адаптеры для вирт машин. Но это другая история.
Задача сделать так, что бы в случае старта виртуальной машины, а так же работоспособности сети на хосте, через 60 секунд запускался скрипт, создающий tap интерфейс и прописывающий маршрут.
Хочется сделать это по-человечески(а не писать скрипты в микротике) и наконец поизучать systemd.
rockon
Задача сделать так, что бы в случае старта виртуальной машины, а так же работоспособности сети на хосте, через 60 секунд запускался скрипт, создающий tap интерфейс и прописывающий маршрут.

Будет проще написать на хосте скрипт запуска виртуальной машины где после запуска машины будет проверяться наличие сети и при её наличии запускаться нужный скрипт через 60 секунд. (виртуалку ведь в ручную запускаете ?)

Здесь не та область применения для systemd
хотя можно конечно по извращаться и всё же использовать systemd, например, написать таймер который с некоторой периодичностью будет дергать сервис который в совю очередь будет запускать скрипт в котором будет проводится проверка на наличие сети и запущенности виртуалки, и ели ответ положительный то запускать конфигурационный скрипт.

п.с.
затем можно автоматизировать(если нужно) и запускать сам скрипт запуска виртуальной машины после старта системы(хоста) с помощью systemd.
red
rockon
Задача сделать так, что бы в случае старта виртуальной машины, а так же работоспособности сети на хосте, через 60 секунд запускался скрипт, создающий tap интерфейс и прописывающий маршрут.

Будет проще написать на хосте скрипт запуска виртуальной машины где после запуска машины будет проверяться наличие сети и при её наличии запускаться нужный скрипт через 60 секунд. (виртуалку ведь в ручную запускаете ?)

Здесь не та область применения для systemd
хотя можно конечно по извращаться и всё же использовать systemd, например, написать таймер который с некоторой периодичностью будет дергать сервис который в совю очередь будет запускать скрипт в котором будет проводится проверка на наличие сети и запущенности виртуалки, и ели ответ положительный то запускать конфигурационный скрипт.

п.с.
затем можно автоматизировать и запускать скрипт запуска виртуальной машины после старта системы(хоста) с помощью systemd.

Виртуалка с микротиком запускается автоматом средствами libvirt и к моменту появления рабочего стола уже работает.
По поводу таймера - я правильно понял, что рядом с vmlan.service надо положить vmlan.timer
с содержанием примерно таким:

[Timer]
OnBootSec=60
Unit=vmlan.service
[Install]
WantedBy=multi-user.target
rockon
Unit=vmlan.service
можно не указывать если имена файла сервиса и таймера одинаковы

rockon
WantedBy=multi-user.target
WantedBy=timers.target

в [Timer] еще нужно указывать период либо точное время

Если вам нужно запустить только один раз после старта системы то таймер не нужен, достаточно одного сервиса
red
rockon
Unit=vmlan.service
можно не указывать если имена файла сервиса и таймера одинаковы

rockon
WantedBy=multi-user.target
WantedBy=timers.target

в [Timer] еще нужно указывать период либо точное время

Если вам нужно запустить только один раз после старта системы то таймер не нужен, достаточно одного сервиса
Вы меня запутали. Если мне надо, что бы прогрузилось после старта системы - я создам .service.
Но мне надо, что бы прогрузился виртуальный микротик(60 секунд), а уже потом прописались маршруты. Это должно происходить один раз, после старта системы и таймер должен начать работать с момента, как стартует виртуальная машина (т.е. libvird.service запущен)
Я сделал таймер, предварительно убрав службу из автозагрузки - результат достигнут. Думаю, можно сказать что проблема решена.Спасибо за наводку про таймеры.
rockon
Но мне надо, что бы прогрузился виртуальный микротик(60 секунд), а уже потом прописались маршруты.
просто в самом скрипте нужно было поставить задержку в 60секунд (sleep 60)

п.с.
возможно как-то так:

[Unit]
After=network.target

After=libvirtd.service
Requires=libvirtd.service

[Service]
Type=oneshot
...
[Install]
WantedBy=default.target

# cat /root/.autostart/vmlan.bash

#!/bin/bash

sleep 60
...

 
Зарегистрироваться или войдите чтобы оставить сообщение.