Как я победил XBMC
или домашний медиа-центр на базе Linux

Начальная идея выглядела как необходимость иметь дома возможность резервного копирования самых нужных данных, но чтобы не плодить компы было решено обновить существующий медиа-плеер на базе Windows. В дополнение к уже имеющемуся железу был куплен новый корпус Morex 6600B (в него таки можно одновременно установить 3 HDD и CD-ROM), 2 жестких диска Western Digital серии green 1.0Tb и самый маленький и дешевый SATA контроллер на два устройства - ST-Lab A-410 (на основе чипа Silicon Image 3132, у него полноценный биос, но он все же не умеет аппаратный RAID). Все это, хоть и не просто, но собралось и, что самое главное завелось без проблем.
В качестве ОС была выбрана Ubuntu, как имеющая лучшую поддержку имеющегося железа, после Windows. На нее планировалась установка XBMC. Были опробованы Lubuntu 11.10, Xubuntu 11.04, Ubuntu 11.10, Xubuntu 11.04, но у всех них была одна серьезная проблема - не было возможности вывода звука через HDMI штатными средствами.
В процессе этих перестановок был таки найден рабочий рецепт для вывода звука через HDMI на чипах Nvidia MCP73, который вкратце сводится к тому, что:
Включаем компьютер по сети
Технология Wake-on-LAN известна давно, но применяется не часто. В моем случае встала задача включать домашний компьютер из офиса. Казалось бы все просто, но требовалось не только включить, но и понять включился-ли он в автоматическом режиме. В общем ситуация отображена на схеме:

С удаленного компьютера у меня есть доступ по SSH к моему домашнему серверу, который постоянно включен. С этого сервера будет отправляться команда на включение соседнего компьютера. Все выглядит вполне просто, пока речь не заходит о проверке, включился компьютер или нет силами того, кто его пытался включить. Но обо всем по порядку.
Ubuntu 9.10 + lm_sensors + ITE IT8721F/IT8758E

Получив для своего домашнего сервера новую материнскую плату Foxconn D42S на основе чипсета Intel NM10 Express, я столкнулся с рядом проблем при миграции с предыдущего железа. Одной из них стала неаозможность использования lm_sensors для мониторига оборотов вентилятора (можно было видеть только температуру, да и то на virtual device).
Обновив пакет lm-sensors до последней доступной версии, я узнал что на моей плате установлен чип ITE IT8721F/IT8758E, с которого можно получить все нужные параметры, но вот только драйвер для него "to-be-written". Изучив список поддерживаемых устройств, я узнал что мой чип все же поддерживается в поледней версии sensors (на данный момент 3.3.0), но с уточнением что Supported since kernel 2.6.37 or standalone driver. Это безусловно радовало, но не все так просто: мне предстояло либо собирать драйвер из исходников, либо пытаться вживить в свою Ubuntu 9.10 ядро 2.6.37, которого нет даже в самой свежей убунте.
От вживления нестабильного ядра я отказался сразу, оставалось попробовать собрать драйвер.
VPN сервер за роутером
Давно хотелось иметь возможность попадать в свою домашнюю сеть из любой точки интернета. В большинстве случаев описанных в примерах роутер и VPN сервер являлись одной и тоже физической машиной, а в моем случае VPN сервер будет внутри сети за роутером и клиент, подключающийся по VPN должен будет попадать в мою сеть в том же диапазоне адресов что и локальные участники, чтоб максимально упростить совместную работу.
Все это мне удалось сделать из интернета от стрим, роутера D-link DSL-2640u/BRU/D и сервера на основе Ubuntu 9.10 и выглядит это примерно так:

Мониторинг Load Average средствами MRTG
Историческая справка. Load Average (LA) - показатель нагрузки в UNIX-подобных системах. Он отражает число процессов в очереди на исполнение, которые ожидают ресурсов для продолжения работы (еще их называют блокирующие процессы). Как правило, происходит ожидание таких ресурсов, как центральный процессор, дисковая подсистема ввода/вывода или сетевая подсистема ввода/вывода. Высокие значения показателей load average говорят о том, что система не справляется с нагрузкой.
Казалось бы, задача вполне тривиальная, интернет пестрит примерами конфигов MRTG для отображения Load Average. В общем они все сводятся к этому:
Target[localhost_loadavg]: laLoad.2&laLoad.3:public@localhost
где laLoad.2 - Load Average усредненный за 5 минут, а laLoad.3 - за 15 минут (на всякий случай laLoad.1 - это за 1 минуту).
Но в реальности оказывается (по крайней мере у меня на Ubuntu Server 9.10) что на графике всегда стабильно 0. При не сильно нагруженной системе это может быть и не заметно, но тем не менее всегда 0 быть не может.
Так в чем же дело? Ведь snmpget выдает вполне реальную информацию:
# snmpget -v 2c -c public localhost UCD-SNMP-MIB::laLoad.2
UCD-SNMP-MIB::laLoad.2 = STRING: 0.07
Данные действительно вполне реальны, но есть две проблемы, из-за которых MRTG может не рисовать график: первое, тип данных STRING, и второе, значение много меньше единицы и даже меньше, чем 0,1. По моему опыту, MRTG может игнорировать значения меньше 0,1 или типа STRING, отсюда всегда пустой график.
