Домашний медиа-сервер на основе Ubuntu Server 12.04 LTS
tutorial
Привет,
Хабр! В ходе обсуждения одной статьи про «идеальную» домашнюю сеть,
возник спор, что лучше, аппаратный NAS или мини-компьютер с Linux
дистрибутивом. Автор предлагал использовать аппаратный NAS, т. к. якобы
он проще в администрировании, не требует знаний Linux, да и вообще NAS
тихий. Но при этом, для просмотра на DLNA-телевизоре видео, который он
не поддерживает, предлагал включать ноутбук с транскодирующим DLNA. Меня
это, мягко говоря, удивило, т. к. в идеальной сети такого быть не
должно. Поэтому хочу представить своё видение одного из ключевых
компонентов домашней сети — централизованного хранилища данных, и
основано оно будет на мини-ПК с ОС Ubuntu Server.
Что нам нужно?В первую очередь от NAS требуется, конечно,
надёжное хранение данных и удобный доступ ним. В первую очередь для
надёжности необходим RAID, потому как потерять весь домашний медиа-архив
из-за отказавшего жёсткого диска как минимум глупо. Для доступа к
данным необходимо настроить FTP и Samba-доступ. Конечно потребности у
каждого свои, поэтому если вы используете MacOS или Linux, то вам
наверняка больше потребуются другие протоколы (NFS, AFP), я же опишу
настройку так, как я её делал для себя.
Для доступа к медиа-данным со smart-телевизоров, нам потребуется
DLNA-сервер. А для для удобства скачивания, нам нужен torrent-клиент. Ну
и желательно всё это администрировать через веб-интерфейс.
Почему не аппаратный NAS?Казалось бы, производители давно
позаботились о пользователях, и давно выпускают готовые коробочки
специально для домашнего применения. Но у них есть недостатки:
1) Они дорогие. Вы вряд ли найдёте дешевле 20000 руб. NAS c возможностью
подключения 4-х жёстких дисков, с процессором Atom. Те, что стоят
недорого, в них обычно применяется слабенький процессор, которого уже не
хватет на тот же torrent при одновременном скачивании двух потоков
данных (просмотр фильма по DLNA и копирование, например, фоток). Собрать
же полноценный мини-ПК на основе mini-ITX материнской плате с Atom и 4
Гбайтами памяти у меня получилось всего за 6000 рублей!
2) Они ограничены. То есть в нём предусмотрены только те функции,
которые заложил производитель. Чтобы расширить его возможности, обычно
требуются «танцы с бубном», т. к. ядро в прошивке бывает сильно
урезанным. Применяя же Ubuntu, вы практически ничем не ограничены —
огромный репозитарий всевозможного софта позволит вам сделать из вашего
сервера всё что угодно, вплоть до поднятия виртуальных машин.
Почему не FreeNAS или OpenFiler?Спросите вы. Во-первых, смотри
пункт №2 недостатков аппаратных NAS, то есть наращивание функционала
данных дистрибутивов очень проблематично, тогда как у Ubuntu есть
огромный репозитарий уже настроенного софта. Во-вторых, это огромные
системные требования, в частности FreeNAS 8 требует минимум 2 Гб
оперативной памяти, а новые версии OpenFiler вообще уже не выпускают под
x86-архитектуру. Кроме того у FreeNAS как-то не гладко идёт развитие —
версия 0.7 который имеет торрент клиент и DLNA-сервер давно устарела, в
восьмой, коммерческой версии мне так и не удалось настроить DLNA, да и с
предлагающейся файловой системой ZFS как то сложно, в случае отказа
системы, как прикажете восстанавливать данные? Сложно.
Почему выбран дистрибутив Server 12.04 LTS?LTS (Long Term
Support) — это дистрибутив с длительным периодом поддержки и выпуском
обновлений. Так как нам нужен сервер, который, по возможности, единожды
настроив, мог бы спокойно работать в дальнейшем годами, то выбирать
лучше именно эту версию дистрибутива.
Server версия выбрана очевидно, т. к. в идеале нам совершенно не нужно
растрачивать ресурсы на графическую оболочку. Хотя если вы, пока только
знакомитесь с linux, или уже работали с desktop-версией ubuntu, то в
принципе можете выбрать и обычную версию дистрибутива, это не
принципиально.
НачнёмУстановка вполне прозрачна, поэтому особо подробно описывать её не буду. Подробнее лишь остановлюсь на разбивке жёстких дисков.



Я взял бюджетную материнскую плату без поддержки аппаратного RAID, да и
на моей практике аппаратный RAID встроенный в материнскую плату часто
показывает себя не с лучшей стороны, поэтому организовывать мы будем так
называемый «программный» RAID. Для хранения данных будут использоваться
два новеньких жёстких диска. Лишних носителей информации у меня не
оказалось, поэтому диск буду разбивать на два раздела, один из которых
будет системным, а второй — для данных. Оба раздела на двух жёстких
дисках будут объединены в RAID 1 (все операции для удобства я выполняю
на виртуальной машине, так что не обращайте внимание на маленький размер
разделов).
Сначала создаём таблицу разделов на первом диске и разбиваем его на две
части. Помечаем их как «раздел для RAID», хотя это и не обязательно.


Аналогично разбивается и второй диск. После чего выбираем пункт
«Настройка программного RAID». Говорим «Создать MD-устройство», выбираем
первые разделы на двух дисках. Аналогично с разделами для данных. К
слову, RAID можно динамично менять и расширять, поэтому если у вас пока
только один жёсткий, но планируете покупку второго — смело настраивайте,
после покупки запросто сможете его подцепить.


После создания RAID, помечаем их для использования. Выбираем файловую
систему ext4, и назначаем точки монтирования: системный раздел как
корень (/), а раздел данных в произвольное место (я предпочитаю
монтировать в папку /mnt).


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

Раздел подкачки создавать не буду, т. к. во-первых его можно сделать
файлом, а во-вторых лично мне он не нужен — на моём мини-ПК установлено 4
Гб, при этом использование памяти никогда не превышало более 10% (400
Мбайт), а в обычном состоянии и того меньше (прямо сейчас используется
всего 130 Мбайт). Хотя если вы планируете поднимать виртуальные машины,
возможно, она вам и понадобится, поэтому после установки я опишу как
создать файл подкачки, сейчас же на предложение создать swap-раздел
отвечаем отрицательно.

После непродолжительного процесса копирования файлов система начнёт
обновлять данные с репозитариев, а после спросит, каким образом будут
устанавливаться обновления. Так как у нас администрирование системы
сводится к минимуму, выбираем автоматическое обновление. Затем система
спросит, какие пакеты необходимо установить сразу же. Я выбрал OpenSSH
(нам нужна удалённая командная строка), LAMP (понадобится для
веб-интерфейса), Print server (в этой статье я не буду описывать
подключение принтера), и конечно Samba file server для доступа с
windows-машин.

Ну и в финальной стадии система запросит пароль для MySQL и запрос на
установку GRUB. Перезагружаемся — система установлена! Залогинемся,
чтобы посмотреть какой ip-адрес нам присвоил DHCP (также это можно
сделать с помощью команды ifconfig), в моём случае был выдан адрес
192.168.1.180.
 
Всё, можно отключать монитор и убирать системник в удобное место, дальше
будем работать с ним через SSH. Я использую для этого PUTTY.

Конфигурация
1) файл подкачкиВ первую очередь опишу как настроить файл
подкачки, если он вам действительно нужен, всё делается буквально в
несколько строчек команд.
Создаём файл заполненый нулями:> sudo dd if=/dev/zero of=/swap bs=1M count=2048
Подготавливаем его для использования как swap:> sudo mkswap /swap
Добавляем в файл fstab наш созданный файл для использования как файл подкачки:
> sudo nano /etc/fstab
/swap none swap sw 0 0
Перезагружаемся:> sudo shutdown -r now
2) обновление ПОСразу же обновляем все пакеты, делается это двумя командами:> sudo apt-get update
> sudo apt-get upgrade
3) Веб-интерфейсДля управления системой через веб-интерфейс
есть есть пакет webim, но его к сожалению в репозитарии нет, поэтому
скачаем подготовленный пакет вручную:> wget http://prdownloads.sourceforge.net/webadmin/webmin_1.580_all.deb
Для установки webim потребуются некоторые зависимые пакеты, в моём
случае это такой список, возможно, вам потребуется включить ещё
что-нибудь.> sudo apt-get install libnet-ssleay-perl libauthen-pam-perl libio-pty-perl apt-show-versions
Ну и собственно установка:> sudo dpkg --install webmin_1.580_all.deb
Всё, можно заходить в веб-интерфейс:https:

4) Настраиваем ftp-доступДля ftp я использую pure-ftpd (хотя вы можете выбрать на свой вкус — proftpd и vsftpd)
Создадим публичную папку:> sudo mkdir /mnt/data/public
Устанавливаем pure-ftpd из репозитария:> sudo apt-get install pure-ftpd
В принципе можно уже заходить под системным аккаунтом, но это не совсем
хорошо для повседневного использования. Сделаем виртуальный аккаунт с
доступом только к публичной папке:> sudo pure-pw useradd public -u local -g nogroup -d /mnt/data/public
Обновим базу данных:> sudo pure-pw mkdb
Включим использование виртуальных пользователей:> sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/50pure
Перезапускаем сервис:> sudo service pure-ftpd restart
5) SambaНастроим доступ к серверу с windows-машин, более того у
меня лично дома семья большая и требуется разделение прав между
несколькими пользователями. А для удобного редактирования прав на папки
прямо из Windows (через вкладку «безопасность» в свойствах), будем
использовать ACL.
Домена у нас нет, поэтому придётся создать пользователей таких же, как и на windows-машинах:> sudo useradd -d /home/PaulZi -s /bin/true -g users PaulZi
Задаём пароль, такой же, как на windows:> sudo passwd PaulZi
Добавляем созданного пользователя к Samba:> sudo smbpasswd -a PaulZi
Для управления расширенными правами, можете установить утилиты (необязательно):> sudo apt-get install acl
> sudo apt-get install attr
Для того, чтобы samba работала с ACL, необходима файловая система с
поддержкой POSIX ACL, ext4 вполне подходит, но по умолчанию она
примонтирована без этой поддержки. Для включения этой возможности
добавим опцию «acl» в файл /etc/fstab. Но более того, в Windows
реализована поддержка наследования прав, чтобы и это реализовать в
linux, нужно чтобы samba где-то хранила дополнительные данные. Для этого
необходимо включить расширенные атрибуты файлов, опция «user_xattr».
Заодно запретим выполнение файлов на всём разделе с данными, с помощью
опции «noexec» (для безопасности):> sudo nano /etc/fstab
/dev/md0 /mnt/data ext4 defaults,noexec,acl,user_xattr 0 2
Перезагружаемся:> sudo shutdown -r now
Редактируем настройки samba (для краткости привожу только изменения и добавления):> sudo nano /etc/samba/smb.conf
[global]
workgroup = Home
netbios name = Server
security = user
admin users = PaulZi
map acl inherit = yes
store dos attributes = yes
map archive = no
map system = no
map hidden = no
map readonly = no
[public]
comment = Public
path = /mnt/data/public
browseable = yes
read only = no
guest ok = yes
inherit permissions = yes
inherit acls = yes
inherit owner = yes
hide unreadable = yes
Перезапускаем сервис:> sudo service smbd restart
6) DLNA/UPnP — серверВ качестве DLNA-сервера я выбрал minidlna.
Выбрал его по одной просто причине, что он не тянет за собой кучу
ненужных зависимостей, как MediaTomb и Serviio (они тянут Java либо
графические библиотеки). Однако если вам необходим транскодинг, советую
установить один из них, вместо minidlna.
Установка из репозитария:> sudo apt-get install minidlna
Настраиваем:> sudo nano /etc/minidlna.conf
media_dir=/mnt/data/public
friendly_name=Ubuntu
Перезапускаем:> sudo service minidlna restart
7) torrentНу и последний освещённый в данной статье сервис —
torrent-клиент. Я использую Transmission, как успешно зарекомендовавший
себя клиент с веб-интерфейсом.
Устанавливаем:> sudo apt-get install transmission-daemon
Останавливаем сервис, иначе все изменения затрутся после завершения процесса:> sudo service transmission-daemon stop
Настраиваем:> sudo nano /etc/transmission-daemon/settings.json
"download-dir": "/mnt/data/public/torrents"
"rpc-password": "local"
"rpc-username": "local"
"rpc-whitelist-enabled": false
Тут меняем четыре настройки — задаём путь для загрузки, имя пользователя
и пароль для веб-интерфейса, а также отключаем «белый» список доступа к
интерфейсу — разрешаем для всех. Пароль указываем в открытом виде,
после последующего запуска он будет зашифрован.
Запускаем сервис:> sudo service transmission-daemon start
Заходим в веб-интерфейс, убеждаемся, что всё хорошо:http:

ПослесловиеВ итоге мы получили вполне себе полноценный домашний
сервер. Конечно в статье указано лишь базовые настройки сервисов, и
скорее всего вам нужно будет что-то настроить под себя. Да и возможно
вам потребуется какие-то дополнительные сервисы, но как видно из статьи,
всё это делается довольно просто, без особых «плясок с бубном»,
достаточно всего лишь обратиться к гуглу — по настройке сервисов в
Ubuntu информации очень много.
http://habrahabr.ru/post/145585/
|