Сегодня хочу рассказать про домашний веб-сервер, который одновременно прекрасно выполняет функции домашнего медиа-центра (mp3, ip-tv, video, uPnP и т.д.).
Все началось с того, что я уже некоторое время использовал для внутренних нужд сервер HP MicroServer N36L с RAID5 на 4 терабайта(3x2GB HDD WD Green + 8 Gb ECC RAM), с виртуальными машинами на оракловском vBox, который в принципе и неплох, но его постоянное жужжание беспокоило членов семьи в смысле зря съедаемых киловатт в год (если будут интересующиеся, расскажу о нем в одном из следующих постов).
К тому же хотелось чего-нибудь более современного, с возможностью использования в качестве полноценного медиа-центра с прямым подключением к телевизору.
После долгих поисков и сравнений мною был выбран актуальный на текущий момент девайс на rt3188-чипсете: K-R42, 4-х ядерный ЦПУ, с 2Гб озу и 4Гб флеш-памяти (хотя на коробке было гордо указано 8Гб) и 4-х ядерным графически ядром Mali400 на андроиде 4.2.2.
Конечно, все нижеописанное вполне подходит и для других подобных устройств, подключаемых через HDMI к телевизору, но для меня существенным плюсом в выборе было наличие полноценного корпуса для нормального теплообмена, оптического разъема SPDIF для звука и современного чипсета.
Стоимость K-R42 колеблется в районе 90-120$ (geekbuying.com, aliexpress.com вместе с пересылкой), что правда дороже 2-х ядерных стиков/боксов, но сопоставимо со многими другими на том же rt3188 чипсете.
Стоит отметить, что как медиа-центр он работает на ура: актуальный на сегодня XBMC 12.2 Frodo на нем установился и запустился без каких-бы то ни было проблем, управление с пульта довольно гладкое и с этим особых проблем не возникало. Благодаря внешней антенне беспроводная связь работает очень стабильно, нагревается в процессе работы не так чтобы сильно, но под нагрузкой заметно теплый.
1. Ставим линукс.
Какой – мне особой разницы не было, но для простоты выбрал Debian wheezy.
К сожалению, под Mali400 нет работающих драйверов, чтобы получить полноценное ускорение 3D-графики, поэтому вариантов пока нет – надо использовать chroot-окружение, вместо того чтобы перепрошивать девайс начисто на линукс (соответствующие руководства есть уже в сети).
Благо для этого под андроид есть замечательный app: Linux Deploy, дающий на выбор любой из существующих мэйнстрим-дистрибутивов.
Детально описывать не буду, установка довольно тривиальна: достаточно запустить приложение, выбрать желаемую конфигурацию и нажать старт.
Вставив в медиабокс microSD-карту на 8Гб, я выбрал установку на раздел SD-карты без графического окружения(есть конечно же и опция для желающих получить графический десктоп через VNC), в результате установился Дебиан, с автозагрузкой SSH и sudo-пользователем android с паролем changeme.
Заходим по SSH для дальнейшей настройки:
ssh android@<ip-of-the-box>
2. Пользователи и прочая…
Пароль пользователя android естественно стоит сменить с changeme на что-нибудь посеръезнее:
passwd
а также для рута отключим возможность логина по SSH в /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config
PermitRootLogin yes → PermitRootLogin no
если необходимо создать своего полноценного пользователя, то
sudo adduser username
и не забудем добавить его в группы, в которых присутсвует пользователь „android“:
sudo adduser username aid_system aid_radio aid_bluetooth aid_graphics aid_input aid_audio aid_camera aid_log aid_compass aid_mount aid_wifi aid_adb aid_install aid_media aid_dhcp aid_sdcard_rw aid_vpn aid_keystore aid_usb aid_drm aid_available aid_gps aid_media_rw aid_mtp aid_drmrpc aid_nfc aid_sdcard_r aid_shell aid_cache aid_diag aid_net_bt_admin aid_net_bt aid_inet aid_net_raw aid_net_admin aid_net_bw_stats aid_net_bw_acct
В противном случае ваш новый пользователь может не иметь доступа к некоторым устройствам/интернету и т.п.
Необходимые группы можно всегда посмотреть по
groups android
Сделаем теперь обновление свежеустановленной системы:
sudo apt-get update sudo apt-get dist-upgrade
инсталлируем таскменеджер:
sudo apt-get install cron
Чтобы обеспечить доступ к нашему серверу извне, регистрируемся на каком-нибудь DynDNS-сайте (dyn.com, noip.com и т.п.), и инсталлируем клиента для обновления нашего динамического IP-адреса(я использовал ddclient):
sudo apt-get install ddclient
На роутере необходимо разрешить Port Forwarding из интернета для портов 22(SSH), 80(HTTP), 443(HTTPS) на IP нашего „микро“-сервера.
3. Ставим LAMP
Здесь все достаточно тривиально:
sudo apt-get update sudo apt-get install apache2 mysql-server php5 php5-curl php5-gd php5-mysql php-apc
Для удобства дальнейшей настройки ставим графическую панель (вебмин)
cd /tmp wget http://prdownloads.sourceforge.net/webadmin/webmin_1.660_all.deb sudo dpkg -i webmin_1.660_all.deb sudo apt-get -f install sudo service webmin start
(В целях экономии ресурсов вебмин я все время запускаю вручную только когда нужно)
Теперь можно заходить на https://<ip-of-the-box>:10000 с пользователем android и настраивать все что душе угодно.
Если это еще не сделано, перезагружаем вебсервер, чтобы активировать все установленные нами модули:
sudo service apache2 restart
4. Автозагрузка
Для того, чтобы наши службы-демоны автоматически загружались в chroot-окружении при старте нашего бокса, в Linux Deploy предоставляется скрипт /etc/init.d/myscrypt
Мой выглядит так:
#!/bin/sh case "$1" in start) /bin/mount -a /etc/init.d/mysql start /etc/init.d/apache2 start /etc/init.d/ddclient start /etc/init.d/cron start ;; stop) /etc/init.d/apache2 stop /etc/init.d/mysql stop /etc/init.d/ddclient stop /etc/init.d/cron stop /bin/umount /mnt/usb ;; *) echo "Usage: $0 {start|stop}" ;; esac
При „выключении“ медиаплеера с пульта устройство вместо полного отключения переходит в дежурный режим(многие в сети считают эту особенность недостатком, но в нашем случае является неоспоримым достоинством!), при этом все запущенные службы продолжают работать. Загрузка процесора порядка 5%, и всего на одно ядро из 4-х!
5. Устанавливаем ownCloud
5-ой стабильной версией этого облачного сервиса можно уже вполне комфортно пользоваться. Очень подробно установка owncloud описана на официальной странице(http://doc.owncloud.org/server/5.0/admin_manual/), здесь приведу основные шаги относительно к нашей инсталляции:
- Создаем базу данных, например через вебмин-панель, и пользователя для этой базы с полными правами на нее.
- Инсталлируем owncloud. На текущий момент появился репозиторий, который сильно упрощает процесс:
sudo echo 'deb http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_7.0/ /' >> /etc/apt/sources.list.d/owncloud.list sudo apt-get update sudo apt-get install owncloud
Теперь заходим в браузере на
http://<ip-of-the-box>/owncloud/
и завершаем настройку owncloud: вводим данные базы MySQL.
В случае, если инсталлятор жалуется на невозможность использования .htaccess,
изменяем в файле /etc/apache2/sites-enabled/000-default AllowOverride на All:
sudo nano /etc/apache2/sites-enabled/000-default
<Directory /var/www/> … AllowOverride None → AllowOverride All … </Directory>
а также и в файле /etc/apache2/sites-enabled/default-ssl, если предполагается использовать owncloud с SSL:
sudo nano /etc/apache2/sites-enabled/default-ssl
<Directory /var/www/> … AllowOverride None → AllowOverride All … </Directory>
и перезагружаем вебсервер:
sudo service apache2 restart
Дальнейшая настройка owncloud обычно не вызывает проблем и подробно описана в руководстве адмнинистратора.
5.1 Если мало места
Размер „облачного“ хранилища при описанной установке ограничен свободным местом на SD-карте. Удобным способом увеличит объем доступного места является вынесение папки owncloud/data на внешний USB-HDD.
Для этого форматируем внешний USB-диск (его раздел) как ext4, и указываем его точку монтирования в /etc/fstab:
sudo mkdir /mnt/usb_hdd sudo chmod a+rwx /mnt/usb_hdd sudo nano /etc/fstab
… /dev/block/sda1 /mnt/usb_hdd ext4 noatime,acl,user_xattr 1 1 …
Монтируем диск
mount /mnt/usb_hdd
и переносим owncloud/data на него:
sudo mv /var/www/owncloud/data /mnt/usb_hdd/ sudo ln -s /mnt/usb_hdd/data /var/www/owncloud/data
Теперь объем нашего хранилища ограничен только свободным местом на внешнем USB-диске.
6. Бэкап по плану
Легко и быстро, с помощью duplicity, организовывается регулярный backup на внешний сервер, при желании также с шифрованием.
Если основной файл-сервер как у меня расположен в той же сети и поддерживает wake-on-lan, то этот процесс можно полностью автоматизировать(запуск файл-сервера включительно).
sudo apt-get install wakeonlan duplicity
Пусть папка для бэкапов на файл-сервере 192.168.0.2 s mac-address 33:d0:ab:dd:11:c1 называется к примеру /media/backup/owncloud,
а локальный пользователь с правми записи в нее user1.
Настраиваем беспарольный доступ для пользователя root по SSH на файл-сервер:
sudo su ssh-keygen -t rsa (пароль не вводим, просто жмем ввод) ssh-copy-id -i .ssh/id_rsa.pub user1@192.168.0.2 exit
теперь внести задания для таскменеджера в crontab:
sudo crontab -e
49 23 * * * /usr/bin/wakeonlan 33:d0:ab:dd:11:c1 0 0 * * sun /usr/bin/duplicity full --no-encryption --volsize 100 --exclude /tmp --exclude /proc --exclude /sys / rsync://rus@192.168.178.5//media/backup/owncloud 0 0 * * 1-6 /usr/bin/duplicity --no-encryption --volsize 100 --exclude /tmp --exclude /proc --exclude /sys / rsync://rus@192.168.178.5//media/backup/owncloud 0 1 * * sun /usr/bin/duplicity remove-all-but-n-full 2 --force rsync://rus@192.168.178.5//media/backup/owncloud
По этому плану будет производится бэкап всего нашего chroot-окружения, по воскресениям полный, в другие дни инкрементальный, с удалением старых. Если файл-сервер спит, он будет разбужен заранее по сети (если он поддерживает эту функцию).
Ну вот, имеем одновременно работающий медиа-центер и веб-сервер с облачным хранилищем.
Конструктивные критика и предложения приветствуются.
ссылка на оригинал статьи http://habrahabr.ru/post/198492/
Добавить комментарий