четверг, 28 января 2010 г.

Wake On LAN

Я тут решил таки настроить WOL на сервере. А то непорядок получается- погасить я его удаленно могу, а вот включить- фиг.

Сначала надо разобраться с железом.

Ясное дело, надо убедиться, что 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 на роутере. Я это не пробовал.

2 комментария:

  1. Большое спасибо!
    Работает. Про $netdown лучше бы сказать в первую очередь. А то я сначала сам нашёл, а потом уже тут прочёл. :)
    И, разве обязательно каждый раз при загрузке делать "ethtool -s eth0 wol g"?

    ОтветитьУдалить
  2. Спасибо, упомянул про $netdown в начале. Про ethtool- я уже забыл, зачем я его в загрузку воткнул. Напишите, пожалуйста в комментах, если он действительно не нужен при загрузке.

    ОтветитьУдалить