Видеонаблюдение в Ubuntu Server

Продолжаю цикл статей про сервер на убунте. Какой умный дом без видеонаблюдения за каждым углом? Тем более, что это так просто сделать и это тратит так мало ресурсов процессора.

В этом действительно нет ничего сложного, сделаем всё с помощью mjpeg-streamer. Я пробовал также вариант с ffmpeg/ffserver, в новых версиях убунты они стали называться avconv. Однако, я столкнулся со следующей проблемой — видео накапливается в буфере, и выходит наружу со скоростью полтора-два раза меньше. То есть, спустя пару минут работы такого видеосервера появляется задержка примерно в минуту. Что будет спустя час, я не проверял — снёс и установил mjpeg-streamer :)Удивительно, но правка конфигов, переход на сверх-убогое качество видео, изменение значений fps ничего не дали.

Скачиваем сборку mjpg-streamer. С ней были проблемы, вот отремонтированная версия.

Устанавливаем: sudo apt-get install libjpeg62 && sudo dpkg —install mjpeg-streamer_fixed.deb

Запускаем: sudo mjpg_streamer -i «input_uvc.so -d /dev/video0″ -o «output_http.so -p 8091″

Просмотр видео по адресу «ip сервера»91/?action=stream, встраивать в html можно так: <img src=»http://192.168.1.1091/?action=stream»/>

Ссылки: 1, 2.

Моя домашняя сеть

У меня дома три компьютера x86, несколько arm-based компьютеров и переменное количество мобильных устройств.

Вся сеть держится на Wi-Fi роутере ASUS RT-N16, перешитом на DD-WRT. Не могу сказать, что доволен им. Сетевые разъёмы были выбраны явно самые дешёвые — после нескольких десятков подключений они окисляются и портятся. Методы вроде протирки контактов ацетоном дают лишь временное появление контакта. Можно попробовать подобраться к контактам стирательной резинкой, но это тоже довольно тяжело сделать в узком пространстве. Скорее всего, поможет дремель с полировальным кругом — но есть опасность сдвинуть контакты со своих мест.

Ещё к нему периодически не могут подключиться некоторые устройства по wi-fi, но это скорее проблема устройств.

Сейчас роутер установлен внутрь HTPC, с жёстко закреплёнными сетевыми проводами. Всё работает, но надежды нет. Наверное, придётся перепаивать ethernet-разъёмы, или сделать выносную патч-панель.

Основной компьютер в сети, несколько месяцев работавший веб-сервером — Core-i3. Второй компьютер — HTPC, на котором почти постоянно работает оболочка xbmc; а когда не работает xbmc — работает скринсейвер с фотографиями.

Третий x86 компьютер — сервер на Atom, которому посвящено большинство постов в блоге. Без корпуса, поэтому находится в укромном месте, чтобы не быть на виду.

Около выходной двери висит китайский планшет c Ethernet-гнездом, на нём отображается веб-страница с новостями, пробками и погодой. Скоро он будет отображать страницу управления умным домом. Планшет называется Flytouch 3. За давностию лет у него слетела прошивка, была найдена такая (версия для устройства с питанием от 9 вольт), одна полезная тема, другая полезная тема. Дисплей 1024*600 пикселей. Плата версии sv8811_v4p1, процессор — imapx210. Ему нужно 9 вольт, поэтому он питается от 12 вольт через преобразователь.

Для нужд видеонаблюдения я применяю TL-MR3020, перешитый на OpenWRT. К нему подключена видеокамера Logitech C270, питание к роутеру сделано самодельной PoE (передача питания по незадействованным линиям Ethernet), так что к нему подходит только ethernet-провод. Если его питать от блока питания, то можно передавать сигнал по Wi-Fi, и обеспечить полную автономность.

Для уменьшения количества блоков питания и увеличения их КПД все устройства, которые могут питаться от 12 вольт или меньше — питаются от общей линии 12 вольт, напрямую или через преобразователь. Эта линия будет проложена проводом КВВГ-нг на 4 жилы: 2 на питание, 2 — шина CAN для умного дома. В дальнейшем питание будет переведено на 19 вольт от блока питания ноутбука, и установлен аккумулятор в качестве ИБП.

Мониторинг состояния сервера

Поскольку мы взяли курс на максимальную тишину и экономичность сервера, встаёт вопрос о контроле температуры и прочих параметров.

В первую очередь, нужно следить за температурой процессора и жёсткого диска. Получить информацию о процессоре нам поможет утилита sensors (sudo apt-get install lm-sensors && sudo sensors-detect && sensors). Для жёсткого диска используем hddtemp (sudo apt-get install hddtemp && hddtemp).

Я подготовил простенький скрипт, который даст возможность удобно получать эту информацию:

sensors | sed -n '3,1p' | awk '{print "Процессор - " $3}' > temp.data
sudo hddtemp /dev/sda | awk '{print "Винчестер - " $4}' >> temp.data

Его можно записать в cron, и иметь возможность постоянно следить за показаниями:

sudo crontab -e

в конце добавить */1 * * * * /путь к скрипту/gettemp

Мини-сервер на Ubuntu

Начинаю цикл постов про создание сервера на Убунту. Чем он отличается от сотен таких же? Да ничем, наверное. Тем не менее, возможно вы прочитаете здесь что-то полезное для вас.

Была сделана попытка сделать его как можно дешевле: многие компоненты найдены просто в шкафу. Материнская плата — Intel D945GCLF2, имеет на борту процессор Atom 330 (два ядра с гипертредингом); 4 виртуальных слабеньких ядра — вполне достаточно для начала.

Список задач, которые будет выполнять сервер:

  • Файлохранилище (фильмы, музыка, фотографии, рабочие файлы и т.д.), с шифрованным доступом снаружи;
  • Хостинг пары сайтов (этот блог и novokosino.tk);
  • Мозг умного дома;
  • Джаббер-сервер;
  • Медиасервер (под этим я понимаю mpd и подобные штуки);
  • Учёт и маршрутизация трафика + балансирование/резервирование по нескольким интернет-подключениям;
  • Почтовый сервер;
  • VPN-сервер;
  • Tor/I2P-прокси.

Вообще, в итоге хотелось бы провести эксперимент сетевой независимости — воплотить все сервисы, которыми я пользуюсь у гугла (кроме поиска, конечно), дропбокса и прочих на своём сервере.

Начинка сервера

Материнская плата — Intel D945GCLF2

Процессор — Intel Atom 330

Память — 2ГБ DDR2-800.

Жёсткий диск — Samsung HD204UI

Материнская плата имеет 1 гигабитный сетевой порт на микросхеме RTL8111.

Жёсткий диск разбит на три раздела — /, swap и /home:

user@server:/$ mount | grep sda
/dev/sda1 on / type ext2 (rw,errors=remount-ro)
/dev/sda6 on /home type reiserfs (rw)

user@server:~$ df -h | grep sda
Filesystem Size Used Avail Use% Mounted on
/dev/sda1   19G 2,0G   16G  12% /
/dev/sda6  1,8T 738G  1,1T  41% /home

user@server:~$ swapon -s
Filename       Type Size Used Priority
/dev/sda5 partition 4,7G    0       -1