Домашний почти сервер или сказ про All-in-one, который смог

в 8:18, , рубрики: diy или сделай сам, NAS, Ubuntu, Медиаплееры, медиаплейер, моддинг корпусов

Пролог

Забегая немного вперёд, скажу, что эта одна из тех историй о поиске решений, балансирующих между затратами и функционалом и дележе опытом с остальными, дабы сохранить время и нервы. Возможно, кто-то увидит в статье новое применение серверу, который есть у него на данный момент. Я ни в коем случае не претендую на экспертное мнение в любой из затронутых ниже тем и буду рад конструктивной критике. Слово «почти» в заголовке фигурирует по той причине, что в моём понимании устройство выбралось за серверные рамки, коими я их себе представляю. Для тех, кому не интересен путь, но интересен результат — сухой остаток с выводами в конце статьи.

Сага эта началась позапрошлым летом, когда я, сильно приболев, остался дома наедине со своим бронхитом и страшным желанием сделать что-то тёплое, ламповое и уютненькое — чтобы порадовать себя. В голове давно зрела идея централизации многих очень полезных функционалов в одном устройстве, поэтому решено было двигаться в этом направлении (а заодно и углубить познания в сфере *nix, ибо до этого момента все они сводились к ковырянию DD-WRT на своём роутере). К концу дня high level design требований к устройству был готов и в первоначальном виде выглядел так:

1) Бесшумность — как инженера-акустика по образованию, меня от этого термина передёргивает, поэтому остановимся на том, что я не должен слышать устройство с расстояния в 1 м.

2) Габариты — всё должно уместится в полку высотой 160 мм, по длине и ширине особых ограничений не было.

3) Давать доступ к моему 2 ТБ (на то время) винту при выключенной основной машине — доступ должен быть для устройств как внутри сети (телефон и ноутбук), так и снаружи (рабочая машина). Поскольку я не хотел переустанавливать софт на основной машине, то критическим требованием было монтирование диска в качестве самба шары — в качестве того же Disc D:, которым он был до этого.

4) Возможность поднять свой сайт для утилитарных нужд — оповещения друзей и знакомых о новых поступлениях музыки у меня на FTP.

5) Возможность качать торренты 24/7, опять таки без включения ББ.

После осознания требований, я начал вполне логично посматривать на NAS'ы и подобные устройства. Но оказалось, что помимо неудовлетворительной ценовой политике этот класс устройств обладает лично для меня ещё целой пачкой недостатков: шумные вентиляторы, малая мощность процессоров на борту, большие габариты, ограниченный функционал встроенной прошивки и/или невозможность её сменить и т.д. Raspberry-PI и прочие подобные были отброшены из за проблем с доступностью, слишком узкой специализацией платформы и неудовлетворительным соотношением затрат к полученным возможностям (bang for the buck, если говорить иначе).

Изучив ещё немного рынок, я понял, что нужно собирать что-то своё на x86. А раз уже собирать полноценный ПК, то и список изначальных требований стал расти в геометрической прогрессии. Но дабы не запутать читателя окончательно, попробую сначала рассказать про эволюцию железа, а уж потом про софт.

Железо

Сначала была сделана ревизия всего, что было под рукой — для того, что бы знать, от чего отталкиваться. Она показала наличие лишь одной свободной планки DDR3 на 2 гига и оставшегося после апгрейда старенького SSD Kingston на 64 ГБ. Итого, необходимо было определится с платформой и охлаждением. Поскольку на ББ стоит Core 2500K, то в целях взаимозаменяемости (да и просто потому что так захотелось) были выбраны камень под 1155 и недорогая Mini-ITX плата. Особо не заморачиваясь и прочитав тесты бюджетных камней и плат, были куплены Celeron G530 и AsRock H67M-ITX. На то время всё это обошлось в ~150$, что вполне вкладывалось в бюджет средненького NAS'а.

С охлаждением всё было посложнее. Хотелось сделать что-то наполовину пассивное в духе корпусов с встроенным оребрением или около того. Для этого был куплен алюминиевый профиль и не менее алюминиевый лист. Изначально планировалось сделать точки соприкосновения для процессора и винчестера с корпусом с блэкджеком и теплотрубками и внешний радиатор, который через термопрокладку был бы приклеен к корпусу и обдувался внешним 120 мм. вентилятором на пониженных оборотах. Но потом было решено отказаться от этой затеи в основном из-за ограничений по времени и я занялся поиском надлежащего корпуса для своего сетапа, параллельно разбираясь с софтовой частью. Тут передо мной стала проблема: винт, который планировалось использовать как основное хранилище, был упакован в Scythe Quiet Drive, который с функциями охлаждения и шумоподавления справлялся на твёрдую 5-ку. Но при этом найти компактный корпус, который сочетал бы в себе 5" отсек, mini-ITX формат и при этом обладал нужными размерами — оказалось задачей непосильной: все корпуса-кандидаты имели или полноформатный блок питания, или массу свободного места внутри и неудобную компоновку, или стоили абсолютно невменяемых денег. Опуская детали душевных метаний и поисков скажу, что примерно полгода сервер просуществовал в более чем бюджетном корпусе DTS mini-ITX CS23, который был куплен для сборки сетапа хоть во что-то.

Но, как водится, тяга к улучшениям и стремление ужать всё это добро в действительно компактный корпус взяло верх: решено было сделать компактный корпус с воздушным охлаждением и внешним БП, который удовлетворял бы всем моим требованиям. И как-то сам собой нарисовался небольшой челендж — сделать всё это без предварительных чертежей за день. Не могу себя назвать матёрым моддером, но ветераном этого дела назвать могу, так как начинал лет 8-9 назад с модов из серии «подсветка слота в трёхдюймовом дисководе». Но этот корпус стал моим первым (и последним) детищем, которое было собрано без предварительного планирования и, что называется, «на глаз». Фото внутренностей корпуса мне не позволяет выложить банальный стыд за содеянное, так как на каждом этапе работ мне приходилось терпеть поток мата и лютой ненависти от внутреннего перфекциониста. Пожалуйста, никогда не повторяйте такие эксперименты если рядом нет опытного психолога.

С горем пополам закончив сборку корпуса и обклеив его чёрной матовой автомобильной плёнкой я получил следующее:

Домашний почти сервер или сказ про All in one, который смог

Домашний почти сервер или сказ про All in one, который смог

Размеры: 250х200х150мм. (ДГВ). Внутри все стенки обклеены бюджетной шумкой для авто для срезания высоких частот и остатков верхней середины, которые пробиваются из корпуса с винтом. Внешний блок питания так и не был найден отдельно от корпуса, поэтому был куплен корпус DTS E-3001, который стал донором БП на 60 ватт и части площадки для крепления материнской платы.

На тот момент температурная статистика внутри корпуса оставляла желать лучшего: боксовый кулер + плотная компоновка элементов + воздушная подушка создаваемая внутри полки, где был размещён корпус + жёсткие требования к шуму (и, как следствие, низкие обороты вентиляторов) давали 63-65 градусов при полной загрузке процессора или 49-51 в простое, даже несмотря на продувку почти всего корпуса 120-кой на пониженных оборотах. Поскольку в следствии проблемы, описанной мной ниже в разделе «Софт», камень сменился с Celeron G530 на немного более горячий под нагрузкой Core i3-3225, нужно было искать выход из ситуации. Как оказалось, альтернатив в низкопрофильном сегменте бюджетных было не так и мало, но достойных оказалось всего несколько. Выбор пал на Arctic Freezer 11 LP, и вот что я получил: летом в комнате без кондиционера в простое 43-44 градуса, а под нагрузкой температура не превышала 57 градусов. Это уже гораздо больше походило на температурный режим для длительного непрерывного использования.

Позже винчестер был заменён на 3 ТБ WD NAS series, добавлен внешний USB 3.0 кардридер, оперативная память расширена до 8 Гб и в такой конфигурации мой домашний комбайн существует и по сей день. Но всё это было бы просто изысканиями на тему корпуса для мини-ПК, если бы не софт.

Софт

Изначально вопрос выбора софтовой платформы не стоял — решено было использовать Ubuntu по причине распостранённости и популярности (да и просто хотелось посмотреть, что оно такое). Desktop версию выбрал по причине того, что уже на этом этапе использовать сервер планировал как медиаплеер, подключённый к 47" панели, чтобы не включать лишний раз ББ. На то время как раз только вышел 12.04 LTS, так что сразу накатил его и понеслось знакомство.

Знакомство сразу же омрачнилось приличными тормозами Unity через VNC при плохом канале. А так как управление сервером подразумевалось только удалённое и не только из внутренней сети, то решение пересесть на Gnome было вполне предсказуемым. Но тут я столкнулся с такими проблемами: tearing при просмотре видео, который отсутствовал на юнити и периодические артефакты при просмотре видео mplayer'ом с использованием аппаратного декодирования через встроенную Intel HD3000. Mplayer был выбран по причине простоты, скорости, наличия какого никакого софта для ДУ под Android и главное — минимального использования ресурсов процессора. Несколькочасовой гуглёж показал, что в обоих проблемах я не одинок. И если первая решалась использованием vaapi-gl кодека вместо дефолтного vaapi, то решение по второй мной найдено так и не было. В разных источниках звучали разные мнения о причинах: от кривых mesa драйверов, до кривых инструкций для аппаратного декодирования видео в процессоре. В пользу последних говорило сравнение картинки HD3000 и HD4000, где артефакты отсутствовали при идентичных настройках mplayer'а. В конце концов этот факт (и небольшая нехватка процессорной мощности) стал толчком для пересадки на Core i3-3225.

В качестве пульта ДУ для просмотра видео до сих пор используется SSHMote (ныне Project Coversal), который помимо массы достоинств имеет один огромный недостаток — при использовании SSH подключение к потерянной сессии невозможно (или я не нашёл как это сделать, хотя ковырялся прилично). На практике это означает, что если по каким-то причинам (телефон закрыл приложение для освобождения памяти, потеряна связь с роутером и т.д.) SSH сессия была разорвана, приходится подключаться к серверу по VNC или опять таки SSH, закрывать приложение и переоткрывать снова. Или досматривать видео без возможности им управлять, так как при открытии новой сессии через SSHMote открывается новое окно и получаем два видео, из которого можем управлять одним.

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

1) NAS — хранилище расшарено по самбе. Идеальные замеры по копированию с шары и на неё приводить специально не буду, лучше скажу, что по опыту использования в спарке с TP-Link 1043ND, а потом с ASUS RT-AC68U в скорость диска, по субъективным ощущениям, никогда не упирался.

2) Торрент качалка — чуть ли не единственный пункт, с которым проблем не было совсем. Transmission-gtk + TransGui для доступа к нему + Remote Transmission под Android. У последнего, правда, есть несколько нюансов и среди них — невозможность добавления закачки в папку, отличную от той, которая стоит по умолчанию на сервере.

3) FTP — тут без сюрпризов: vsftpd + pam идентификация. Но, как выяснилось, настроить его так как нужно оказалось проблематично. Видимо, никому кроме меня не приходила в голову столь извращённая форма использования:

анонимный доступ — юзер чрутится в папку pub с правами read only;

доступ с логином и паролем — юзер имеет доступ к всему FTP — папки income и pub с правами full access в обе папки (вот тут и начались проблемы).

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

4) Радио — изначально планировалось использовать IDJC в связке с icecast2 для вещания музыки, но IDJC плохо себя вёл и кушал память, поэтому был заменён на банальный, но безотказный и нетребовательный к ресурсам mpd. Он прост как угол дома и выполняет только одну функцию — вещать плейлист за пределы квартиры, где его могут услышать все желающие из числа моих знакомых. Метрики не снимал (хотя надо бы, конечно), но при хорошем гигабитном канале 20-30 пиров сервер тянет без каких-то серьёзных изменений процессорной загрузки.

5) Фото банк — давно хотелось сливать себе фото в хранилище без участия основной машины и, желательно, меня тоже. Для этого был написан простенький скрипт на баше, который подвязан на incrond. Обе карты CF были прописаны в fstab для статического монтирования в одни и те же папки. После того, как я вставляю карту в кардридер incrond, который мониторит появление одной из двух папок, начинает отрабатывать мой скрипт. Для правильного тайминга пришлось добавить паузу в 5 секунд. Скрипт копирует все фото с карточки в папку вида ../Foto/Unsorted/dd.mm.yyyy и затем удаляет их с карточки.

6) Виртуальные машины — для того, что бы у меня всегда под рукой была Win7 х64 машина с установленным на ней необходимым софтом, я решил поднять таковую с помощью Virtual Box. После проброса портов на роутере получилась эдакая прокся, с которой я могу делать то, что мне нужно, если это не позволяется в сети, в которой я нахожусь. Всё прошло гладко за исключением одного момента, на который я просто плюнул и отложил его решение до лучших времён: корректно автоматически погасить машину при перезагрузке сервера не получается. Просмотрев всевозможные решения через скрипты в папках rc, я понял, что, скорее всего, проблема в правах, но что с ними не так конкретно понять не смог. Поскольку сервер перегружаю мягко говоря нечасто, то решение проблемы было отодвинуто примерно на 2017 год.

7) Игровой сервер — периодически поднимаются on demand сервера CS 1.6 и LFD2. Стартуют абсолютно без проблем с полпинка.

8) Видиоплеер — используется связка из mplayer2-vaapi + SSHMote. Оба работают безотказно, кроме нюансов с управлением, которые были описаны ранее. Процент загрузки процессора при проигрывании самых тяжёлых рипов FullHDx60FPS — 3-4%. Из недостатков такого сетапа стоит ещё отметить почти полную невозможность работы с плейлистами: если возможность загрузить только целиком папку и навигация по этому списку будет только вперёд-назад — и то вслепую. Конкретный файл из папки выбрать можно только в режиме проигрывания одиночного файла.

9) Аудиоплейер — используется VLC в связке с Remote for VLC под андроид. Как по мне, то это лучший вариант — удобный виджет для ДУ, поддержка всего, что можно ожидать от аудиоплеера и нет проблем с переподключением сессий.

10) Web server — используется apache + Joomla по причине «Чем проще — тем лучше». На просторах интернета масса руководств как поднять такую конфигурацию, я воспользовался первым попавшимся. Оба сайта, которые крутятся на сервере, имеют утилитарный характер и кол-во уникальных посещений не превышает 10-20 в месяц на двоих.

11) Perforce P4 server — в качестве vcs для своих микропроектов была выбрана бесплатная версия P4 на 20 workspace'ов без ограничения по количеству файлов. Тут тоже всё прозрачно — все настраивается и работает можно сказать «из коробки».

12) Игры — как оказалось, HD4000 вполне хватает чтобы поиграть во что-то нетребовательное, не мешая функционировать всем остальным сервисам. В качестве proof of concept перепрошёл Jets'n'Guns, купленный на стиме, подключив один из двух xbox wireless receiver к серверу.

В планах изыскания в основном в строну умного дома:

13) Видеонаблюдение — хотелось бы на сервер завести стрим с камеры, которая будет показывать парковку и так же установить видеоглазок.

14) GPS статистика — в тёплое время езжу на работу в основном на байке, в зимнее на машине, на обоих собираюсь поставить GPS трэкеры. Хотелось бы запилить разнообразные выборки по маршрутам местам и прочему. Just for fun.

15) Управление устройствами — в пульте от телевизора отломана крышка батарейного отсека, из за этого он постоянно глючит. В пульте от ресивера вечно полумёртвые батарейки и приходится вставать и регулировать громкость вручную. Поскольку ничего из этого не входит в мои планы, когда я принёс себе чай и настроился смотреть кино на кровате, то приходится искать выход из ситуации. И пока что он один: выносной USB ИК трансивер + софт, который можно обучить один раз всем сигналам от всех ДУ — и потом делать с ними всё, что захочется — через смартфон.

16) Обновление музыки на телефоне — когда телефон подключается к домашней сети, на нём автоматически стартует samba сервер и расшаривает карту памяти телефона. Хотел написать скрипт, который в случае, если в папке с музыкой на сервере появилось что-то новое, автоматически закачивал это новое на телефон в папку New, предварительно удалив самую старую из подпапок в этой папке, если места для закачки не хватает. Таким образом, предполагается автоматическая ротация музыки на телефоне почти без моего участия — нужно только удалённо поставить торрент на закачку и по приходу домой всё случится само собой.

17) Whatever comes to mind — …

Выводы

Статья получилась немного сумбурной и не такой сфокусированной, как хотелось бы, но всё же надеюсь, что основные моменты передать удалось. На данный момент мой «почти сервер» окупил себя с лихвой: за сравнимые с хорошим NAS'ом деньги я получил функционал в разы больший, чем могли бы предоставить лучшие представители этого класса устройств. А самое приятное, что запаса для расширения этого функционала для моих нужд хватит с головой и не придётся тратится на апгрейд основных элементов ещё как минимум год-два, а то и больше. Так же удалось добиться «невидимости» устройства в повседневной жизни — из за малых габаритов его почти не видно среди прочих вещей в тумбе и совершенно не слышно даже моими чуткими ушами.

Спасибо за внимание, жду критику, отзывы и предложения в комментариях.

Автор:

Источник

* - обязательные к заполнению поля