lleo_kaganov (lleo_kaganov) wrote,
lleo_kaganov
lleo_kaganov

Categories:

Домашний сервер и помидоры


Рассказываю. Как вы наверно помните, у меня дома долгие годы живет домашний сервер (пост о концепции домашнего сервера 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 я гружу такие модули (а если были загружены, на всякий случай предварительно выгружаю):

Это самодельная коробка с электроникой и реле на базе Ардуино. Например, она открывает дверной замок (замок квартиры электрический). Обычно на этот месте паникеры начинают мне задавать вопросы. Мол, а если заглючит, если электричество отрубят? Отвечаю: этот замок стоит около 8 лет. Проблем с ним не было (а вот прежние механические раз в три года ломались и их выпиливали болгаркой). Замок так просто не ломается (там еще сигнализация самодельная). И у него, как у любого нормального электронного замка есть личинка со штатным ключом. Ключ есть у наиболее консервативных членов семьи. Поэтому если вырубят энергию более чем на полчаса (иначе UPS выдержит), просто откроем ключом. Но вообще он открывается электронно, и это дико удобно. Например, я могу открыть дверь приехавшим гостям, находясь не дома — с мобильника через интернет. И для срабатывания замка я использую 12 вольт от блока питания Asus, чтоб не ставить отдельный блок.
Нормально, никаких проблем. Кстати, Ардуино с Asus согласуется прекрасно. При запуске системы я делаю такую инициализацию:

Новый оптический сканер отпечатков пальцев лежит в коробочке и ждет своего часа, мне все лень с ним разобраться. Но я пока нашел другую игрушку, может даже более удобную — RFID-RC522. Это бесконтактный сканер NFC-ключей, он стоит с доставкой от 135 руб. Штуковина довольно просто подключается к Ардуине шестью проводками и позволяет организовать открытие замка при поднесении к двери ключа. Которым может быть все, что угодно — два ключа в комплекте, московская социальная карта, и даже просто старые карточки метро, это все протокол Mifare 13.56MHz. Для экспериментов я просто спустился в метро и набрал карт из корзинки для отработанных карт. У каждой карты свой уникальный номер, программируешь Ардуину пускать в дом по списку.

Из любопытного: у двух карт метро номер оказался одинаковым. Вряд ли это поможет злоумышленнику прийти с колодой карт и подобрать код, но все равно интересно. Еще любопытное: моя карта УЭК, по которой я хожу в метро, пару раз выдала читалке свой номер, и с тех пор говорить с ней отказывается глухо. В метро по ней я ходить продолжаю спокойно. Поскольку протокол Mifare — он и в Африке Mifare, я полагаю, что у УЭК внутре стоит какая-то паникерская блокировка от несанкционированных читалок. Для моих задач это неудобно, но конструкторскую задумку разработчиков УЭК и заботу о безопасности я вынужден оценить высоко.

Вдобавок надо сказать, что под DD-WRT вообще легко программируется. Я туда поставил Midnight Commander (не могу без него, там и редактор дивный), gcc, и вот пример программки. Это демон, который вешается в память и ждет строчку сообщения от Ардуины, а когда она придет, передает ее как параметр, запуская процедуру обработки сигнала zvonkido.php Смысл в том, что если строчку от Ардины будет ждать сам zvonkido.php (в моих задачах ожидание события длится часами и даже сутками), то он со своим консольным интерпретатором php будет жрать в памяти 16%. А бинарник жрет 1% памяти.

пример программы
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>

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;i<l;i++) {
if(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
Tags: программирование, сделай сам, электроника
Subscribe

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments