майже Домашній сервер або розповідь про All-in-one, який зміг

Пролог

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

Сага ця почалася позаминулим літом, коли я, сильно захворівши, залишився вдома наодинці зі своїм бронхітом і страшним бажанням зробити щось тепле, лампове і затишний — щоб порадувати себе. В голові давно зріла ідея централізації багатьох дуже корисних функціоналів в одному пристрої, тому вирішено було рухатися в цьому напрямку (а заодно і поглибити знання в сфері *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 тому з модів з серії «підсвічування слота в трехдюймовом дисководі». Але цей корпус став моїм першим (і останнім) дітищем, яке було зібрано без попереднього планування і, що називається, «на око». Фото нутрощів корпусу мені не дозволяє викласти банальний сором за скоєне, так як на кожному етапі робіт мені доводилося терпіти потік матюків і лютої ненависті від внутрішнього перфекціоніста. Будь ласка, ніколи не повторюйте такі експерименти якщо поруч немає досвідченого психолога.

З горем навпіл закінчивши складання корпусу і обклеївши його чорною матовою автомобільної плівкою я отримав наступне:





Розміри: 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'-Guns, куплений на стиме, підключивши один з двох xbox wireless receiver до сервера.

У планах дослідження в основному в бік розумного будинку:

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

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

15) Керування пристроями — в пульті від телевізора відламана кришка батарейного відсіку, з-за цього він постійно глючить. У пульті від ресивера вічно напівмертві батарейки і доводиться вставати і регулювати гучність. Оскільки нічого з цього не входить в мої плани, коли я приніс собі чай і налаштувався дивитися кіно на ліжку, то доводиться шукати вихід із ситуації. І поки що він один: виносний USB ІК трансивер + софт, який можна навчити один раз всіх сигналів від усіх ДУ — і потім робити з ними все, що заманеться — через смартфон.

16) " Оновлення музики на телефоні — коли телефон підключається до домашньої мережі, на ньому автоматично стартує samba сервер і расшаривает карту пам'яті телефону. Хотів написати скрипт, який в разі, якщо в папці з музикою на сервері з'явилося щось нове, автоматично завантажував це нове на телефон у папку New, попередньо видаливши найстарішу з підпапок цієї папки, якщо місця для закачування не вистачає. Таким чином, передбачається автоматична ротація музики на телефоні майже без моєї участі — потрібно тільки віддалено поставити торрент на закачування і по приходу додому все станеться само собою.

17) Whatever comes to mind — …

Висновки

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

Спасибі за увагу, чекаю на критику, відгуки і пропозиції в коментарях.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.