|
|
А началось все довольно прозаично. Датой начала можно довольно точно назвать июль 98 года.
Тогда, имея Интернет на работе захотелось мне отвести немного
интернета домой. Задача вполне понятная, вполне классическая, и решения в общем-то известны.
Поскольку выделенной специально под это машинки у меня тогда не было, работали все под
windows 95 и изменить это было нереально (пересадите-ка человека, привыкшего к винворду
под старофис для линукса - он же с ума сойдет), пришлось строить систему под windows 95.
Выглядело все просто - dial-in сервис из пакета Microsoft PLUS (со своими классическми граблями
- хоть он и сервер, но адрес клиенту не отдает, да и проверяет почему-то только пароль, но не
имя пользователя) и WinGate в качестве прокси. С задачей своей (отвечать на звонки и давать мне
интернет) эта штука более-менее справлялась. При условии, что ее было кому "пнуть" ресетом,
когда у wingate или у MS plus отъезжала крыша. Поскольку крыша отъезжала обычно невовремя,
был спаян "механический мужик", принудительно ребутивший всю эту конструкцию в 9 часов вечера.
Хоть оно в принципе и работало, рекомендовать такую конструкцию для массового повторения
не могу однозначно - слишком часто я обнаруживал с утречка винду в любимой позиции - синий экран
с надписью "мне плохо". Да и времена wingate, при всем его бурном прошлом, уже прошли -
для раздачи интернет по офису/домашней сетке
имеет смысл ставить либо WinRoute либо SyGate - оба умеют NAT,
что намного приятнее чем прокси, а использовать windows 9х как dial-in сервер... лучше уж
прикупить памяти и поставить NT. А еще лучше... но об этом потом.
Ни о каком вебе и страничках речи не было, лишь бы хотя бы это кое-как работало. А через полтора месяца
я удрал в трехмесячную командировку, оставив на "автопилоте" домашний фидошный узел,
работавший теперь через этот новый инетовский канал. Вернувшись я узрел... в-общем,
сетевыми решениями на базе 95 не занимаюсь теперь из принципа - винда уделала
себя до потрясающего состояния "мы грузимся, показываем десктоп и засыпаем с песочными часиками".
Винда была, естественно, переустановлена (намного лучше ей от этого,
впрочем, не стало), а я задумался о чем-то большом и светлом, о ka9q например, или о PCROUTE/DOS...
Не все помнят, но в те времена, когда 286 считался весьма крутым компьютером, интернет уже
вовсю существовал, и его уже было нужно чем-то роутить, диалапить и делать прочую серверную мишуру
- почту, скажем, релэить. Поскольку на Cisco Router'ы а равно и на Большие Машины С Юниксом
денег не всегда хватало, радиолюбителем Филом Карном был разработан (и огромной толпой
других любителей - доведен до приличного уровня) пакет ka9q (назван
по любительскому позывному
Карна). Пакет весьма забавный - решение основных "серверных" задач интернет,
таких как работа с PPP/SLIP/модемами, сетевыми карточками, роутинг (в том числе и динамический, вах!),
ARP Proxy, работа с почтой, ftpd, удаленный доступ телнетом, а главное - возможность
настройки всего и вся, и скрипты там, где они нужны. То есть, почти идеальный инструмент для небольшого
сервера, но при этом требующий всего-навсего XT-шку с 640к памяти!. Ну, с ХТ-шками
отдельные проблемы (короткие ISA-слоты, поэтому не все сетевухи нормально себя чувствуют),
но на 286 ka9q чувствует себя более чем комфортно.
ka9q я немного поизучал, оказалось весьма приятной программой из серии "собрал из помойки сервер, настроил,
пнул в угол и накрыл тряпочкой - пусть работает". Дополнительный плюс - влазит на дискетку
(да знаю я про PicoBSD, знаю:-)) и (если на дискетке поставить защиту от записи, а в самом ka9q
не включать логирование) - абсолютно корректно относится к нажатию reset на полном скаку.
Единственное, во что я уперся - ни nat, ни tcp proxy в комплекте не обнаружилось,
а самое плохое - и не предвиделось, ввиду некоторой "монолитности" проекта
(то есть, sources included, но что толку - сам я nat не напишу, поскольку просто
запутаюсь в десятках килобайт Сишного кода). Поэтому от ka9q пришлось с сожалением отказаться. Что впрочем,
не означает, что ka9q не найдет своего применения - как "бюджетный роутер" для домашней сетки
трудно придумать что-то лучше. Если еще учесть, что в цене "помоечной" 286 на первом месте
будет стоять корпус и сетевухи, если таковые есть... :-))
С меньшим энтузиазмом я изучал коммерческого конкурента ka9q - программу PCROUTE/DOS.
Она в принципе умела NAT, более того - это и было ее основным предназначением, но какое-то
ощущение корявости заставило меня посмотреть в сторону юниксообразных систем,
и приобрести по случаю с рук 486sx25/4Mb/540Mb за $60. Для сервера, чиста в натуре. Там разберемся -
ka9q, pcroute или еще чего.
Кстати, до этого момента не знал, что 486 бывают на 25(!) мегагерц. Век живи - век учись.
Вообще-то любопытная складывается ситуация. Несколько лет назад при слове "сервер" представлялось
что-то большое, белое и блестящее (или наоборот - компактное, черное и приятное на ощупь),
но неизменно за сумасшедшие деньги. "Клиентская" же машинка - недорогой терминал к "серверу",
или "писишка" - вешь тогда тоже недешевая, но с серверами по цене несравнимая.
Сейчас же сплошь и рядом ситуация обратна. Секретарше на стол фиг укупишь что-нибуть
мельче 400 целерона с 32 метрами памяти (а если и найдешь на рынке или с рук что-то помельче, то любимый офис с солитером и "скрепышом" заставит почувствовать боль за бесцельно проведенные в свопе годы:-)).
В то же время небольшой (подчеркну - небольшой. Не рамблер, не яндекс и не альтависта, а скажем, dibr)
сервер вполне нормально будет работать на 386/8Мб, а то и более древней технике. Парадокс, однако.
"Тонкий клиент" становится толще "мелкого сервера".
С некоторой робостью я решил все-таки сделать шаг вперед - и поставить юникс. Точнее - FreeBSD.
Про то, что я думаю о линуксе повторяться не буду, а среди фришных юниксообразных систем,
способных работать на не особо сильных духом тачках выбирать особо не из чего.
Кстати, я в курсе, что FreeBSD не ставится на 4Мб. Зато она там работает, а поскольку фрю
ставить надо раз в жизни (мне не повезло, но об этом позже), дальше она просто работает, установку можно сделать и на нормальной машине, потом просто передернув винт.
Ставилась FreeBSD 2.2.6 с компакт-диска, списанного у знакомого фришника. В полезности
самых-новых-версий я не уверен до сих пор (и на машинке, которую я хочу поставить дома в угол -
пусть роутит, почту качает да за пивом бегает - будет 2.2.6 или 2.2.8, если не поленюсь ее вытянуть, а не
3.х). Выскажу спорное мнение - но мне кажется, именно для небольшого сервера
идеальной является 2.2.8 - как наиболее вылизанная версия ветки 2.х. Ну и что, что многопроцессорности нет -
где вы видели dual 386 :-))
Слухи о "трудности установки юникс", чего я так опасался, оказались сильно преувеличены. Идеологически
он не сложнее, чем DOS, благо идеология закладывалась тогда, когда делать сложно было не принято.
...Представьте себе, что вы, вообще-то, разбираетесь в компьютерах, но в принципе
не знаете ничего про DOS. Ну, скажем, всю жизнь махали однокнопочной мышью в Макинтоше.
Тогда DOS должен казаться каким-то нагромождением сложностей - командная строка (полный кошмар -
на маке ничего подобного не было!!), какие-то файлы и расширения вместо документов и их типов,
даблклик и то неясно куда делать. К тому же глыбы config.sys, autoexec.bat с какими-то непонятными строками
вроде "devicehigh=c:\cdrom\vide-cdd.sys /d:cdrom0 /v", а то и похуже... Но мы-то
с вами знаем, что DOS - это очень просто :-)
С юниксом - то же самое. Основная идея не сложнее ДОСа - загрузчик грузит ядро,
ядро запускает init, init читает rc.conf, ttys... а дальше тот несчастный,
кто решил таки настроить юникс, читает маны, маны, маны... шучу :-) Маны читать обязательно,
но первая установка и настройка юникса ничуть не сложней первой (первой я сказал! а не десятой в этом месяце)
установки и настройки виндов или того же ДОСа. Разумеется, очень желательно иметь представления о
том, что требуется - не о том, "как устроена сеть во фре" - хорошо она там устроена - а о том, как
устроена сеть вообще.
При этом (чисто мое мнение, никому не навязываемое) ставить разнообразные "Иксы" и прочие
окошечные навороты смысла нет - если это сервер, то X там нафиг не нужен, а если это рабочая станция - то
зачем там юникс? Неплохо также рядышком иметь машинку с привычным окружением (у меня это NT + FAR manager),
которой можно будет после этапа начальной настройки подсоединиться по ftp и доводить конфигурацию
уже из привычного редактора FAR'а (что бы там не говорили - к идеологии vi привыкаешь только после второй бутылки).
Ставить надо необходимый минимум, а потом доставлять то что нужно, по мере необходимости.
Итак, пара дней разбирательств с инсталлятором, пересборки ядра, настройки mgetty, pppd, natd, прочей фигни
(кстати, был поражен, насколько просто по сравнению с виндами настраиваются основные сетевые вещи),
и "сервер" - тогда еще скромная 486sx25 c 4Mb(!) памяти водружена на свое законное место - на шкаф, подальше
от желающих посмотреть, что это там такое лампочками мигает. Отвечает на звонки, делает этот самый nat
(который лучше, чем прокси), дает зайти телнетом и по ftp, и даже не особенно тормозит.
Точную дату история не сохранила, но приблизительно это было в феврале 1999 года.
Установка и настройка natd, кстати, классно прошла "по бумажке" - в левой руке распечатанный ман по natd,
в правой - FreeBSD handbook, в средней - клавиатура. "Сделайте так-то" - делаю, "теперь так-то" - делаю,
"осторожно, здесь грабли" - хлоп граблями с размаху по лбу :-) Грабли простые - по инструкции нужно включить
ipfirewall в ядре (в моем случае - пересобрать ядро), после чего... срабатывает привычка
"я изменил ядро, нужно сразу перегрузиться", не дочитав при этом бумажку, в которой следующей строчкой написано,
что firewall, которому не прописали рулезы, встает в позицию "никому ничего нельзя", после чего остается только
втыкать в сервер монитор и клавиатуру и прояснять ситуацию локально - никаких телнетов уже нет, они остались за ненастроенным firewall'ом :-)
Настройка DNS (о ней, впрочем, потом)
заметно веселее - в man'е по named честно предупреждают, что "если вы не совсем уверены,
что хорошо себе представляете как настраивать первичную зону, и что может быть при неверной настройке..."
...И только в конце марта мне пришло в голову, что имея готовый интернет и готовый сервер грех не
сделать на этом веб-страничку. Да не хоумпейдж на геоситиз с фотками любимой собачки жучки,
а что-то типа cooler'а или dz - чем я хуже, в конце концов?
Поскольку подручный сервер тогда имел целых четыре мегабайта памяти, ставить апач я не рискнул - тяжеловат,
да и не особо нужен, и выбор пал на маленький (но вполне функциональный) веб-сервер thttpd
(раздают его на www.acme.com). Установка
"по бумажке" прошла гладко, небольшая доработка напильником (настройка hhtp-хидеров) тоже была несложной -
ввиду наличия исходников. После этого началось изучение html и методов автоматизации его создания
(я вовсе не фанат набивать все руками, равно как и не считаю нормальным при изменении двух букв в коде
последовательно открывать полсотни страниц в фронтпейдже и править там эту пару букв.
Выбор средства автоматизации остановился на макропроцессоре M4 (используется, например,
в большинстве юниксов для автоматической генерации конфига sendmail'а - sendmail.cf).
Теоретически :-) M4 есть только для юниксов, практически же Cygnus Solutions выпустила
совершенно замечательный набор GNUтого утиля, "портированного" (перенесенного, а не то что вы могли подумать)
под win32. Практически - M4 есть язык сам по себе, "компилятор текста в текст", с возможностью
определять свои макросы, ну, и все чем положено в языках. После этого я мог единожды создать
файл с описанием того, как чего должно выглядеть
(почти как "стилевой файл" в ТеХ'е), и после изменения дизайна просто "пересобирать"
все странички с новым файлом макросов - исходники выпуска не изменялись, а оформление автоматически генерилось
из макросов стилевого файла.
Сразу замечу - сейчас бы я так не сделал. Поскольку изначально выбранный веб-сервер
не умел практически ничего кроме plain http и CGI, пришлось изворачиваться, и компенсировать
одну кривизну другой кривизной. Сейчас бы я выбрал что-нибудь вроде PHP - тоже язык,
с похожими возможностями, но интерпретация ведется на сервере в момент выдачи странички, что
позволило бы избежать "пересборки" и перезаливки сайта на сервер целиком. Впрочем...
img height= и width= у меня сейчас подставляются автоматически довольно замухрежным
вызовом нескольких программ (alchemy+grep+cut), занимающим вполне заметное время на моем cel450A. Одно дело,
когда это делается раз в неделю дома, совсем другое - 100 раз в день при отдаче странички клиенту.
Не уверен, что на PHP я бы нашел достаточно элегантное решение. Хотя - люди же как-то делают.
Может, и руками.
То есть, если есть PHP - имеет смысл взвалить все что можно на него, если нет - можно искать что-то свое.
Так оно и жило. До июня (точную дату не помню, а смотреть лениво), когда dibr был замечен и
обозрен в cooler'е. Вот тогда я и понял (придя утром на работу, и убедившись, что
сервер практически лежит, непрерывно шурша диском), что 4 мегобайта - это хорошо, но не очень.
К 12 апреля сервер был экстренно проапгрейжен до 16 мегобайт памяти
(дефицитнейшая вещь оказалась - "короткие" 32-пиновые SIMMы по 4Мб штучка, пришлось покупать почти по цене антиквариата:))
С тех пор и до сегодня dibr.nnov.ru стоит на все той же 486sx25/16Mb, и весьма неплохо себя чувствует
(LA < 0.1 почти всегда). Ах да, когда-то тогда еще посыпался диск, в результате чего пришлось срочно искать
новый и спешно переставлять фрю. К ее чести, кстати, скажу, что она держалась до последнего
- когда я обнаружил, что не запускается mgetty и для профилактики ее перегрузил - выяснилось, что
mgetty не запускается по очень простой причине - не было больше mgetty, он попал (вместе с заметной частью
других системных файлов) на осыпавшуюся часть диска... Что диск медленно осыпается я, в-общем-то,
знал, но надеялся, что все обойдется.
Вообще-то FreeBSD не особо любит жить на битых дисках (хотя - кто это любит). Поэтому диск все-таки по возможности
должен быть БББ (Без Бэд Блоков), или хотя бы не сыпаться на ходу. Хотя даже на
осыпающемся диске установка с bad blocks handling (или как-то так) и регулярный bad144
позволит какое-то время прожить. До тех пор, пока бэдблоком не задавит что-нибудь важное, вроде ядра :-)
Все-таки одна из приятностей юникса, кроме нетребовательности к ресурсам, есть способность
полностью автономной работы - когда на этой неделе я устанавливал bind (и по старой виндовой привычке
ребутнулся - "проверить, что все встанет"), заметил, что uptime составляет 39 дней.
Цифра скромная по юниксовым меркам, и вызвана тем, что примерно месяц назад в лаборатории был ремонт,
в ходе которого серверу рубанули питание.
UPS, увы, не предусмотрен, потому без перезагрузки не обошлось :-) При этом уже несколько месяцев
сервер не знает, что такое "клавиатура" или "монитор" - только я ингода зайду телнетом -
запустить wget, или еще что-нибудь. Для виндов такая работа, увы, нетипична -
время от времени виндам нужна нянька, чтобы тыкнуть в какой-нибудь диалог типа "ну, повис модем, ну да,
пнуть его и дальше, и нечего меня спрашивать" или перегрузиться потому, что "винда устала и больше работать не хочет, и так уже больше суток на посту".
Уфф. А на этой неделе я наконец-то поставил bind (DNS под FreeBSD). Тут уже без поллитра
(и знакомого сисадмина) не разберешься (тем более, что мне был нужен primary NS, о настройке которого в мане
сказано примерно следующее: "мы бы вам не советовали настраивать primary zone server, если вы
не прочитали все соответствующие RFC (список прилагается), не поняли все, что там написано,
или не в курсе, к каким ужасным последствиям может привести..."). Впрочем,
primary NS нужен не так уж чтобы и часто. Но нужен. Например, чтобы поиметь домен не на да.ру,
потратившись при этом только на пиво знакомому админу, поставившему у себя secondary NS :-)
Вот, в общем, и все. Ах да. Планируются небольшие изменения с организацией "текущего"
выпуска (до сих пор текущий выкладывался как index.html (точнее, как today.html, с соответствующей заточкой httpd),
сейчас я хочу сделать redirect из index.html в соответствующий issueXXYYZZ.html).
Будем надеяться, что сие пройдет безболезненно :-)
| |
| |