“– Чем на досуге занимаются физики? — Естественно, физикой!” А чем Linux-админы? Да всем, чем придётся. В том числе и Linux’ами. Помнится, когда я завёл свой первый компьютер, многие недоумённо спрашивали: “А на кой он дома?” Сейчас такого вопроса уже не задают. Зато сейчас, думаю, всё ещё нужно объяснять для чего нужен “антресольный сервер” на Linux.
Итак, мой “домашний сервер” представляет собой отслуживший своё десктоп Celeron III 1,3GHz, 512MB, HDD 20GB+200GB. В машине торчит две сетевых карточки Intel — по одной сервер подключается к Корбине, по другой раздаёт это соединение по квартире.
Установленный софт: Slackware Linux 12.2, Apache/PHP/MySQL, Samba, Named, NTPd, Squid, no-ip.org клиент, несколько самописных скриптов (о них чуть подробнее ниже). Машина имеет удалённый вход по SSH и мониторится через Zabbix, поэтому я всегда в курсе её состояния и могу удалённо ею управлять.
В обязанности сервера входит:
- Как уже было сказано, поддержание круглосуточного коннекта и обеспечение доступа в интернет всем желающим (в пределах квартиры, естественно). Для этого я написал скриптик, который отслеживает доступность интернета и при необходимости поднимает упавшую pptp-сессию. Кроме того, этот же скрипт отслеживает, не завершили ли при отсутствии коннекта свою работу Named, NTPd и Squid. При необходимости он запускает и эти службы;
- Защита квартирных компьютеров от злых хакеров снаружи. Самый обычный iptables, NAT, Port-mapping (для работы eMule и uTorrent);
- Хранение разных файлов, в основном музыки и раздача её по сети. Под музыку отдан диск 200ГБ. По нынешним меркам, конечно, немного, но мне хватает. А доступ по сети обеспечивает Samba. Если нужно, я могу выложить на сервер файл, который будет доступен и снаружи: наличие динамического DNS-имени позволяет давать HTTP-ссылки. Очень удобно!
- Сервер времени NTPd;
- Проигрывание музыки. Для этого в машине стоят две PCI звуковые платы: Creative Labs SB Audigy и Creative Labs SB Live!.
Вот про музыку остановлюсь чуть подробнее. Ещё на позапрошлой работе мы соорудили прототип музыкального Juke-box’а, в задачу которого входило круглосуточно играть всю MP3-музыку, которую на него регулярно сгружали из сети. Я немного его доработал под свои интересы. К сожалению, не знаю, как отнесутся мои прежние работодатели к обнародованию исходников, поэтому пока опишу всё на словах.
Вначале первый скрипт-индексатор (все скрипты написаны на PHP) рекурсивно обходит каталог музыки, добавляя в одну из таблиц MySQL-базы все файлы (путь, id3-тэги, время последнего проигрывания). Индексатор запускается по cron’у, раз в сутки, но его можно выполнить и вручную.
Другой скрипт запускает консольный плеер музыки (mplayer), одновременно формируя стек-очередь на проигрывание (другая таблица базы). Очередь на проигрывание можно смотреть через Web-интерфейс. Здесь же можно “отстрелить” то, что не хочется слышать сейчас или, наоборот, заказать своё. Очередь на проигрывание формируется случайным образом из той музыки, которая дольше всего не игралась. Но заказанное человеком имеет несомненный приоритет и проигрывается в первую очередь. Когда “человеческая” очередь заканчивается, система продолжает играть случайную музыку. Эдакая радиостанция по заявкам, но без новостей и рекламы. Сейчас на моей домашней машине около 170ГБ музыки. Всего в базе 29826 мелодий самых разных жанров и направлений. Это примерно 3480 часов или около 124 суток непрерывного звучания.
Хохмы ради я ещё пробовал накачать из интернета разных крылатых фраз из фильмов, мультиков, заиндексировать их в отдельную базу и пускать вразбивку между музыкой. Получилось забавно, но быстро надоело и я это выключил.
Web-интерфейс осуществляет расширенный поиск в базе по автору, альбому, жанру, названию композиции или по имени файла (на случай, если id3-теги в файле не прописаны).
Выход звуковой карточки подключён к музыкальному центру в режиме усилителя. Благодаря серверу я давно забыл о компакт-дисках и FM-радиостанциях. Кстати, mplayer позволяет играть музыку не только из файлов, но и из потоков, поэтому я, немного поэкспериментировав, добавил в базу музыки несколько потоков интернет-радиостанций, которые тоже можно заказать из Web-интерфейса.
Если мне надоело слушать музыку — я просто выключаю музыкальный центр. Проигрывание mplayer’ом продолжается и в любой момент можно “подключиться к радиостанции Linux”.
Чего хотелось бы ещё?
- перевести подключение с pptp на l2tp. Говорят, будет быстрее. Работы ведутся, но медленно;
- организовать точку доступа Wi-Fi;
- экспериментирую с mpd, но это совсем другая система и, похоже, она мне не пригодится.
- подключить пульт дистанционного управления (IR remote control), чтобы регулировать громкость и “отстреливать” музыку без Web-интерфейса
Пишите, если кого заинтересовал мой опыт. Буду рад комментам, советам, вопросам!
Для какой цели установлено 2 звуковушки ?
по описанию вроде используется одна, звук от которой уходит в музыкальный центр для усиления и т.д….
Если это не противоречит правилам, хотелось бы посмотреть на “механику” работы с музыкой…
Вообще, музыкальные скрипты могут работать в многозонном варианте: несколько звуковушек, независимые стеки и заказ мелодий. Так что можно сделать отдельную музыку в ванной, только колонки влагозащищённые найти бы 🙂
А нужен ли скрипт для мониторинга и поднятия PPTP? По-моему опции persist вполне хватает
Как выяснилось, не всегда. Может, это такая специфика корбины (dhcp ip, соединение с pptp-сервером по доменному имени)
Не всегда. Вот у меня иногда pptp-сессия “зависает”, т.е. не отваливается (чтобы сработало persist), но и данные не передаются. Ругаюсь и переконнект делаю руками.
Вот у меня скрипт и мониторит: если пинги во внешнюю сетку перестают ходить, перезапускает pptp.
Скриптами на радиостанцию не поделетесь, а то хотел такое же для себя сделать, но знаний и умений мало?
Скрипты дать не могу — не я их писал, думаю, владелец будет не в восторге, а вот алгоритм и форматы таблиц базы данных попробую вскорости отписать.
Очень интересная статья, обязательно продолжай писать на тему домашнего сервера. Можно где нибудь твои скрипты скачать?
У меня дома тоже стоит сервер, правда на Ubuntu 8.10
И тоже пользуюсь Корбиной. Но инет раздает маленькая коробочка Linksys WRT54GL. Насчет l2tp – так эта коробочка легко использует его. Одно НО: пришлось прописать IP vpn-сервера вместо DNS имени.
Теперь насчет сервера. Он у меня для rtorrent’а. Качает все торренты, которые я кидаю в директорию расшаренную по самбе. Также извне прокинут ssh порт на сервер, что позволяет с работы поставить качаться фильм.
WiFi раздает опять же маленькая коробочка. Исторически сложлось так, что простые действия возложены на линксис. Если бы раньше появилось железо под сервер – тоже бы настроил весь инет через сервер.
А насчет музыки – меня идея не впечатлила, но как известно: “на вкус и цвет все фломастеры разные” 🙂 Так что успехов Вам в этом интересном деле затачивания сервера под себя.
Я использую как wifi точку свой сервачёк. Но хотелось бы научится многому из описанного. Например тому, как давать внешние ссылки.
Попробую в ближайшее время отписать про динамический DNS 🙂
По поводу музыки: наконец-то дошли руки потестить mpd (Music Player Daemon). Делает примерно то же самое: сканит определенную директорию на предмет музыки и заносит данные в свою базу. Затем из этих песен можно формировать плейлисты, которые он будет играть.
Весь кайф в том, что это демон — то есть гуя он в принципе не имеет и управляется через сетевой сокет (по дефолту 127.0.0.1:6600, но можно и в локалку выпустить), и к нему можно прикрутить произвольный фронтенд. Например, гуевый gmpc или консольный mpc. Лично я юзаю веб-фронтенд RelaXXPlayer и вполне им доволен. Я думаю, достоинства веб-фронтенда можно не описывать 😉
Да, я его тоже немножко пробовал
Уведомление: Дела летние, домашние | Блог FlyCat.Info: КОТорый летает...
А мне больше понравилось про колонку в ванне. А есть ли специальные колнки которые по вайфай соединяются и влагоустойчивыее?
Большую половину из перечисленных сетевых задач, плюс раздачу доступа по wifi, делает один маленький adsl-модем с точкой доступа. Держать для этих нужд отдельный жрущий киловаты сервер можно разве только в образовательных целях.
Не понял, зачем нужен самописанный (да еще и с закрытым кодом) скрипт для музыки, связка “mpd + shoutcast + mpc на выбор” уделывают описанную функциональность с большой форой.