Сначала надо разобраться с железом.
Ясное дело, надо убедиться, что BIOS поддерживает этот самый WOL. Мне, например, повезло, и включать в моем древнем BIOSе вообще ничего не понадобилось. Хотя, я по опциям и прошелся, но ничего не нашел, пришлось гуглить. Оказалось, что все включено по умолчанию и выключается какой-то мутной хренью в Power Manangement.
У меня сервер подключен к роутеру шнурком, так что проблемы с WOL over Wi-Fi у меня нет вообще. У кого сервер висит на вайфае- гугль вам в помощь.
Также, хорошо бы, чтобы у сервера был static IP.
Теперь настроим софт.
Я все делал как описано вот в этом посте. Там все по-английски, да и воды много. Плюс, в новой убунте чуток поменялся скрипт halt (поменяли опцию -i на $netdown, см. п. 7 внизу), о чем ниже. Вкратце, на сервере надо сделать вот что.
1. Поставить ethtool на сервер:
sudo apt-get install ethtool
2. Запомнить MAC адрес сервера и сетевой интерфейс:
ifconfig | grep HW
Смотрим, что там больше всего похоже на правду- какой MAC адрес знаком роутеру, тот интерфейс и надо использовать.
3. Создать скрипт wakeonlanconfig:
cd /etc/init.d/
sudo vim wakeonlanconfig
4. ... и записать в него:
#!/bin/bash
ethtool -s eth0 wol g
У меня интерфейс eth0, у вас может быть другой, см. п.2.
5. ... и еще установить и запустить наш скрипт:
sudo chmod +x /etc/init.d/wakeonlanconfig
sudo update-rc.d -f wakeonlanconfig defaults
sudo /etc/init.d/wakeonlanconfig
6. Неплохо бы и проверить, что скрипт работает:
sudo ethtool eth0
Должен написать что-то типа
Supports Wake-on: pg
Wake-on: g
7. Поправить скрипт halt, чтобы питание на сетевуху не вырубалось:
sudo vim /etc/init.d/halt
Ищем строчку типа "halt -d -f -i $poweroff $hddown" и убираем -i, чтобы было
halt -d -f $poweroff $hddown
В новой убунте -i заменили на переменную $netdown.
8. Вырубить сервер:
sudo halt
Смотрим, что с сетевухой. У меня, например, на ней после halt сразу же погас светодиод. Как это лечить- написано ниже. Если светодиод не погас, то
9a. Поставить wakeonlan на клиенте:
sudo apt-get install wakeonlan
9b. С клиента послать магический пакет:
wakeonlan AA:BB:CC:DD:EE:FF
MAC надо взять из п.2.
Отмечу, что иногда магический пакет теряется, поэтому слать их надо понастойчивей- раза два-три.
10. Дебажить, если сервер не хочет оживать.
Вот здесь, опять же по-английски, сказано, что проверять. Я тут перевел.
a) Смотрим, как настроен наш eth0 (или что там у вас):
cat /sys/class/net/eth0/device/power/wakeup
Если говорит "disabled", то надо добавить вот такую строку в /etc/init.d/wakeonlanconfig:
echo enabled > /sys/class/net/eth0/device/power/wakeup
b) Находим sysfs node сетевой карты:
lspci -tv
Ищем Ethernet Controller или что-то подобное. Например, получилось
+-1d.7 Intel Corporation 82801EB/ER (ICH5/ICH5R) USB2 EHCI Controller
+-1e.0-[0000:03]----08.0 Intel Corporation 82562EZ 10/100 Ethernet Controller
+-1f.0 Intel Corporation 82801EB/ER (ICH5/ICH5R) LPC Interface Bridge
В нашем случае- sysfs node = 1e.0
c) Находим Device сетевой карты в списке wakeup:
cat /proc/acpi/wakeup
Ищем там все тот же sysfs node. Например получили:
Device S-state Status Sysfs node
USB1 S3 disabled pci:0000:00:1d.0
USB2 S3 disabled pci:0000:00:1d.1
USB3 S3 disabled pci:0000:00:1d.2
USB4 S3 disabled pci:0000:00:1d.3
USBE S3 disabled pci:0000:00:1d.7
SLOT S5 disabled pci:0000:00:1e.0
Значит, нам нужен Device SLOT.
d) Добавляем наш Device в /etc/init.d/wakeonlanconfig.
Вот такую строку надо добавить в конец /etc/init.d/wakeonlanconfig:
echo SLOT > /proc/acpi/wakeup
У меня заработало только после такой правки конфига.
Если надо будить машину по интернету, то можно пробросить порт 9 UDP на роутере. Я это не пробовал.
Большое спасибо!
ОтветитьУдалитьРаботает. Про $netdown лучше бы сказать в первую очередь. А то я сначала сам нашёл, а потом уже тут прочёл. :)
И, разве обязательно каждый раз при загрузке делать "ethtool -s eth0 wol g"?
Спасибо, упомянул про $netdown в начале. Про ethtool- я уже забыл, зачем я его в загрузку воткнул. Напишите, пожалуйста в комментах, если он действительно не нужен при загрузке.
ОтветитьУдалить