Debian Jessie перезапуск сети VirtualBox после пробуждения (resume)

В Debian Jessie (в отличии от Debian Wheezy) для управления службами используется systemd и с некоторыми из служб возникают проблемы.
Одна из них: VirtualBox не перезапускает свои виртуальные сетевые адаптеры после пробуждения системы из сна.

Когда это происходит:

  1. Если у вас установлен и используется VirtualBox версии 4.3.8 и ниже (на более высоких не проверял)
  2. Если в VirtualBox у вас настроен host-only адаптер
  3. Вы «усыпили» ваш реальный компьютер, например закрыв крышку ноутбука, после чего «разбудили его»

Каковы признаки:

  1. Виртуальная машина перестаёт пинговаться
  2. Подключиться к виртуальной машине по ssh также невозможно
  3. Если одна из папок виртуальной машины была примонтирована с помощью sshfs, все процессы, пытающиеся ей пользоваться намертво зависают

Что делать?

IP-адрес виртуального адаптера

Для перезапуска вручную можно использовать команду вроде этой (адрес 192.168.100.1 — это адрес моего host-only адаптера, настроенного в VirtualBox):

# ifconfig vboxnet0 192.168.100.1 up

и именно ей я и пользовался в течении какого-то времени, пока это окончательно не достало, и я решил автоматизировать процесс.

Для автоматизации мы создадим новую службу systemd, которая будет выполняться при событии «resume» (то есть пробуждении компьютера)

Создадим файл скрипта для восстановления сети

Файл положим в /opt/bin/resume-vboxnet0.sh, его содержимое — банальные две строчки:

#!/bin/bash
ifconfig vboxnet0 192.168.100.1 up

Создадим новую службу systemd:

Новая служба в systemd представлена также отдельным файлом с содержимым:

[Unit]
# Название службы
Description=Reconfigure vboxnet0 after resume
# Когда служба должна вызываться:
After=suspend.target
After=hibernate.target
After=hybrid-sleep.target
 
[Service]
# Тип службы - одиночный запуск (т.е. это не демон, 
# который запускается и работает в фоне,
# а просто одноразовый скрипт)
Type=oneshot
# Запуск скрипта resume-vboxnet.sh
ExecStart=/opt/bin/resume-vboxnet.sh
 
[Install]
# Какими службами востребована данная служба:
WantedBy=suspend.target
WantedBy=hibernate.target
WantedBy=hybrid-sleep.target

Содержимое этого файла нужно положить в папку /lib/systemd/sys/ под каким-нибудь запоминающимся именем, например resume-vboxnet.service.
В этой папке, хранятся все установленные системные службы systemd.

# nano /lib/systemd/sys/resume-vboxnet.service

Установим свежесозданную службу, так чтобы systemd начал принимать её во внимание:

# systemctl reenable resume-vboxnet.service

Проверим работоспособность

Теперь попробуем закрыть крышку ноутбука, чтобы он «уснул» (или какой у вас там настроен способ «усыпления» машины?), после чего «пробуждаем» его, и смотрим, в каком состоянии находится сеть.


Оставить комментарий