Рассказываю. Как вы наверно помните, у меня дома долгие годы живет домашний сервер (
пост о концепции домашнего сервера 2010/04/27), который занимается всякими разными задачами от раздачи интернета до квартирной электроники и прочих экспериментов. Сервер впервые был поставлен господином Морозовским году так в 2001, с тех пор пережил много переездов с железа на железо (в основном с помощью господина Семеняки), но дальнейшее его обслуживание становилось все тяжелее и тяжелее. В последние годы это была большая пыхтящая машина с кучей воткнутых карт и сопутствующей периферией:
Концепция домашнего сервера вообще-то подразумевала, что сервер един, и я им полностью управляю. На самом деле это было не так. Отдельно от нее виcела коробочка WiFi Dlink, которая грелась и раз в несколько лет сжигала свой блок питания. И как она раздает свой WiFi - никаких тонких инструментов у меня не было. Сервером я не управлял тоже - хитроумно настроенная FreeBSD 6.2 со слетевшими портами была сильно выше моей квалификации и не поддавалась никакому управлению, а Семеняка был занят. Постепенно начала сыпаться и квартирная электроника - отказал сканер отпечатка пальца, из-за поплывших параметров электроники в LPT-порту заглючила система звонков. Я отказался от LPT-порта и (
после обсуждений 2013/04/08 перешел на Ардуино. К сожалению, проклятая FreeBSD 6.2 категорически не желала отправлять Ардуине команды - могла только принимать. А обновить FreeBSD со всеми ее jail, dhcp-серверами и хитрейшей картой маршрутизации - это было вне моей квалификации. Одно время я даже думал
нанять админа чтобы привести сервер в порядок, но было понятно, что всех моих проблем и хотелок такой метод не решит. Одновременно я стал задумываться о том, чтобы вообще выкинуть сервер к чертовой матери и поставить какой-нибудь умный маршрутизатор, но
после обсуждений 2013/08/18 пришел к выводу, что это моих проблем не решит, хотя модель роутера ASUS RT-N16, что вы особенно советовали, я запомнил.
Помог случай. Мерзейший WiFi Dlink (второй по счету в квартире) в очередной раз сжег не только свой блок питания, но и себя самого. И я купил ASUS RT-N16 в надежде раздать по квартире автономный от сервера интернет, а сервер как-то починить. Но оказалось, что сервер не нужен - все (абсолютно все) мои потребности решает эта маленькая коробочка ASUS RT-N16 с установленной на ней
DD-WRT «от Олега и единомышленников». Пока я не развесил эту технику красиво и не убрал в короба провода, это выглядит так:
Основной принцип: в этой системе я всё должен уметь сам. К счастью, она оказалась сильно проще полудохлой FSD 6.2, да и мануалов по ней предостаточно. Итак, что это? Сперва пару слов о маршрутизаторе - у него 1 вход интернет-провода, 4 выхода, плюс есть на борту 2 USB-слота. Первая задача - выкинуть штатную прошивку устройства и поставить прошивку нормальную, с которой уже можно работать. Для этого используется внешняя флешка - отныне все программное добро системы лежит там. Я использовал флешку 8Гб сперва, а после воткнул туда же и внешний USB-диск 2ТБ домашнего архива. Это внешний USB, разбитый под ext3 - именно там у меня сейчас домашний сайт и swap. В принципе, можно было с флешкой не морочиться, сразу диск подключать. Хватит ли 2ТБ для домашнего файл-сервера? Раньше я думал, что нет. Но, ей богу, хранить тонны кино дома - это сегодня абсурд. А для всего остального 2ТБ хватит за глаза. Внешнюю коробку для диска надо обязательно брать с вентилятором, я взял за 800 руб
такую, хотя она шумновата. Особый гемор был переписать архивы со старого сервера - там диск был разбит в формате ufs, причем с каким-то таким нетрадиционным размером блоков, что ни один Линукс его прочесть не мог. А полуразрушенный сервер BSD не читал линуксовые диски ext2/ext3/ext4. Поэтому при помощи и с советами Гоши Курячего была проведена адова операция: в сервер был воткнут чистый диск, отформатирован под ufs уже со штатными размерами блоков, на него былро всё слито, затем загружен Линукс, который _этот_ ufs уже хотя бы в режиме чтения смог увидеть и слить обратно на исходный диск, предварительно отформатированный в ext3. Не храните, братцы, диски в ufs, дохлая система. Храните в ext3.
Оказалось, что маршрутизатор не любит, когда на одном разъеме висит много чего, и диск стал отваливаться при заливке больших объемов данных. Поэтому на одном USB у меня винт и флешка, на втором - периферия: звуковые карты и Ардуина:
Звуковые карты - традиционно одна звучит наружу на лестницу, другая внутрь квартиры. Это дверной звонок, оповещения, кукушка, разные прочие сигналы и сообщения, а еще можно музыку играть. USB-карта с бесплатной доставкой по России
стоит от 1{s}lt;/a>. Реально. Подорожали они сейчас - я-то брал еще по 0.91$ :) Не помню точно, какие действия я производил, чтобы установить карту в систему - кажется, никаких. Но при старте Asus я гружу такие модули (а если были загружены, на всякий случай предварительно выгружаю):
показать
/sbin/rmmod snd-timer
/sbin/rmmod snd-hwdep
/sbin/rmmod snd-rawmidi
/sbin/rmmod snd
/sbin/rmmod snd-page-alloc
/sbin/rmmod soundcore
/sbin/insmod soundcore
/sbin/insmod snd-page-alloc
/sbin/insmod snd
/sbin/insmod snd-rawmidi
/sbin/insmod snd-hwdep
/sbin/insmod snd-timer
/sbin/insmod snd-pcm
/sbin/insmod snd-mixer-oss
/sbin/insmod snd-pcm-oss
/sbin/insmod snd-usb-lib
/sbin/insmod snd-usb-audio
Это самодельная коробка с электроникой и реле на базе Ардуино. Например, она открывает дверной замок (замок квартиры электрический). Обычно на этот месте паникеры начинают мне задавать вопросы. Мол, а если заглючит, если электричество отрубят? Отвечаю: этот замок стоит около 8 лет. Проблем с ним не было (а вот прежние механические раз в три года ломались и их выпиливали болгаркой). Замок так просто не ломается (там еще сигнализация самодельная). И у него, как у любого нормального электронного замка есть личинка со штатным ключом. Ключ есть у наиболее консервативных членов семьи. Поэтому если вырубят энергию более чем на полчаса (иначе UPS выдержит), просто откроем ключом. Но вообще он открывается электронно, и это дико удобно. Например, я могу открыть дверь приехавшим гостям, находясь не дома - с мобильника через интернет. И для срабатывания замка я использую 12 вольт от блока питания Asus, чтоб не ставить отдельный блок.
Нормально, никаких проблем. Кстати, Ардуино с Asus согласуется прекрасно. При запуске системы я делаю такую инициализацию:
показать
/sbin/rmmod ftdi_sio
/sbin/rmmod usbserial
/sbin/insmod usbserial
/sbin/insmod ftdi_sio
/bin/stty -F /dev/ttyUSB0 57600 -echo
Новый оптический сканер отпечатков пальцев лежит в коробочке и ждет своего часа, мне все лень с ним разобраться. Но я пока нашел другую игрушку, может даже более удобную - RFID-RC522. Это бесконтактный сканер NFC-ключей, он стоит с доставкой от 135 руб. Штуковина довольно просто подключается к Ардуине шестью проводками и позволяет организовать открытие замка при поднесении к двери ключа. Которым может быть все, что угодно - два ключа в комплекте, московская социальная карта, и даже просто старые карточки метро, это все протокол Mifare 13.56MHz. Для экспериментов я просто спустился в метро и набрал карт из корзинки для отработанных карт. У каждой карты свой уникальный номер, программируешь Ардуину пускать в дом по списку.
Из любопытного: у двух карт метро номер оказался одинаковым. Вряд ли это поможет злоумышленнику прийти с колодой карт и подобрать код, но все равно интересно. Еще любопытное:
моя карта УЭК, по которой я хожу в метро, пару раз выдала читалке свой номер, и с тех пор говорить с ней отказывается глухо. В метро по ней я ходить продолжаю спокойно. Поскольку протокол Mifare - он и в Африке Mifare, я полагаю, что у УЭК внутре стоит какая-то паникерская блокировка от несанкционированных читалок. Для моих задач это неудобно, но конструкторскую задумку разработчиков УЭК и заботу о безопасности я вынужден оценить высоко.
Вдобавок надо сказать, что под DD-WRT вообще легко программируется. Я туда поставил Midnight Commander (не могу без него, там и редактор дивный), gcc, и вот пример программки. Это демон, который вешается в память и ждет строчку сообщения от Ардуины, а когда она придет, передает ее как параметр, запуская процедуру обработки сигнала zvonkido.php Смысл в том, что если строчку от Ардины будет ждать сам zvonkido.php (в моих задачах ожидание события длится часами и даже сутками), то он со своим консольным интерпретатором php будет жрать в памяти 16%. А бинарник жрет 1% памяти.
пример программы
#include
#include
#include
#include
#include
#include
int main(int argc, char* argv[]) {
int fd, ack=1, l=0,i;
char buff[100]="",longbuff[1000]="";
fd=open("/dev/ttyUSB0", O_RDONLY | O_NOCTTY);
while(1) { l=read(fd, buff, 1000);
if(l>=100) { printf(«error length\n»); return 1; }
buff[l]=0;
for(i=0;iif(buff[i]==0) { l=i; break; }
if(buff[i]==0x0D || buff[i]==0x0A) { l=i; buff[l]=0; break; }
if(buff[i]<32 || buff[i]==34 || buff[i]==39) { printf("hack error ['\"]!\n"); l=0; break; }
}
if(l) {
strcpy(longbuff,"/opt/lleo/zvonkido.php '"); strcat(longbuff,buff); strcat(longbuff,"'");
system(longbuff);
}
}
close(fd);
return 0;
}
Итак, что сейчас делает сервер-маршрутизатор?
- раздача интернета, WiFi
- файловый архив Samba (т.н. «диск R:")
- обслуживание нескольких звуковых карт
- работа с Ардуино
- домашний вебсайт
http://home.lleo.me (там пока я поставил mysql + легкий lighttpd, apache ставить не стал, думаю, как под него заточить свой движок, чтоб без mod_rewrite работал)
Я пока не знаю, какую еще придумать задачу, с которой бы он не справился. Учитывая, что USB-устройств туда можно натолкать массу (скоро я, например,восстановлю свой GSM-гейт для приема/отправки SMS).
PS1: К сожалению, закончилась неудачей попытка сделать в Asus
искусственный интеллект, чтобы коробка тихо висела в углу, но отвечала на вопросы: проклятая утилитка rec не захотела писать звук со звуковой карты. Хотя другие утилиты звук пишут, но мне нужна именно эта - она умеет ждать сообщения. Скомпилировал бы кто-нибудь sox толково, и был бы разговаривающий и отвечающий на вопросы интеллект :)
PS2: Роутер Asus RT-N16 прекрасен во всех отношениях. Хотя есть еще мощнее: Asus RT-AC56U Он правда стоит в два раза дороже, но если бы я знал, что оно так хорошо полетит на этой загадочной DD-WRT, я бы купил самый мощный - мало ли какие задачи мне потребуются в будущем? В общем, если вы соберетесь покупать RT-N16, купите у меня (2681 руб, куплен 2 месяца назад, коробка, гарантия, стоит правильная прошивка, в подарок дам звуковую карту :), а я себе тогда 56U куплю.
В принципе на этом отчет о переустройстве домашнего сервера закончен (надеюсь, кому-то это будет полезно). Но девочки, я гляжу, заскучали, поэтому остаток заметки мы посвятим цветочкам и садоводству.
Два месяца назад я писал, что
обустроил на балконе делянку с помидорами, и месяц назад они
активно росли. Сейчас кусты выросли и цветут. Правый ящик на фотке выше, слева направо: «Томат F1 Ласка» вымахал выше всех (не уверен, что это хорошо) и опередил на голову «Томат F1 Сластена» (пара кустов в центре), а слева приютились пышные ростки «Физалиса десертного» который лично я тоже отношу к помидорам. Лично мне больше нравится крайний левый ящик:
Эти крепкие коренастые кусты - «Жемичужина желтая». Они не вымахали так высоко вверх, зато красивы, и уже покрылись цветами. Они прекрасны:
Два маленьких ящичка в центре балкона я добавил позже, недельки через три:
Это «Томат Оранжевая шапочка» и «Томат F1 Карамель». Первая - из породы темно-зеленых и коренастых, вторая - светлая, лезет вверх. Говорят, их надо как-то «прищипывать», но я начинающий огородник и пока не умею. Я только по вашим советам провожу пасынкование - ну, то есть брею подмышки выщипываю листики, которые начинают расти в стыке между ветвями и стволом. Да, Ардуину пока не приделал - поливаю сам.
это перепост заметки, оригинал находится на моем сайте:
http://lleo.me/dnevnik/2014/07/07.html