вторник, 30 августа 2011 г.

Установка и настройка ejabberd на ubuntu-server 11.04

     И вот наступил этот страшный момент - осознание того, что нужно избавляться от тяжкого наследия прошлых времен :) Ну, если конкретно, то на нашем заводе довольно давно уже воткнули программулину такую - спикерфон, чтобы пользователи могли в реальном времени общаться между собой почти так же, как в привычной и понятной аське, но не могли при этом отвлекаться на внешние разговоры. ICQ на предприятии, понятное дело, запрещена всем, кроме небольшой группы избранных. Претензий к спикерфону было всего две, но существенные. Первая - бесплатная версия программы позволяет пользователю как угодно записывать свой никнейм, и тут уж у нас постарались все, кто во что горазд. В результате - никого невозможно найти по его настоящему имени и номеру отдела или цеха, где он работает. Бардак, одним словом, Гуляй-Поле и махновщина. Платную же покупать не хотелось, да и тестирование ее выявило кучу проблем с настройками и интерфейсом. И вторая проблема, еще более неприятная - бесплатная версия пользуется широковещательными рассылками, которые шлет туда-сюда практически постоянно. Сам-то спикерфон, хоть и нагружает таким образом сеть, но не слишком чрезмерно, хотя и этой полосы пропускания жалко в принципе, уж лучше пусть полезные программы ее отъедают в сети. Беда в том, что есть и куча другого самописного и проприетарного софта, в равной степени криворуко написанного, независимо от платности или бесплатности, а также не очень исправного оборудования, которое к тому же имеет тенденцию и далее иногда ломаться. Что очень забивает сеть всяким мусором. И вот чтобы от этого мусора страдать поменьше и чтобы легче было локализовывать проблемы, буде они появятся, очень захотелось мне сегментировать сеть. Ну то есть ничего нового я не придумал - обычное классическое решение, всем известное. И поскольку в узлах у меня стоят далеко не циски, то есть всяких сетевых хелперов для проброски избранных пакетов мне не сделать, понятно, что как только я сеть сегментирую, спикерфон тут же сдохнет - ну то есть не совсем сдохнет, но общее пространство развалится на несколько сегментов, пользователи в которых болтать друг с другом не смогут. Да и вообще - глючная виндовская муть этот спикерфон.
     Надо сказать, что раньше я его никогда не ставил - ну вот не довелось, и все. Везде, где работал, не юзали его, вот и получился пробел в знаниях. Ну да не беда, я уже привык ставить и настраивать все, что угодно, даже незнакомое - великий и ужасный Гугль всегда под рукой, найдем все, что угодно и сделаем. Ну да так оно и оказалось, за исключение двух мелких граблей - одни совсем смешные, маленькие такие детские грабельки, а другие - не то, чтобы страшные, но пришлось поискать в инете, да и самому головой покумекать.
Классически под рутом или под sudo делаем
 apt-get install ejabberd
 - в результате сервер уже встал, но еще не настроен.
Открываем конфигурационный файл /etc/ejabberd/ejabberd.cfg и вносим в него небольшие изменения.
override_local.
{acl, admin, {user, "admin", "server_name"}}.
{hosts, ["server-name"].
     Эти строки обычно уже есть всегда, нужно их только раскомментировать и изменить данные администратора и имя сервера на собственные. Ну а дальше уж меняем настройки, кто во что горазд. Собственно, тут даже и man не особенно нужен, и Google тоже - в конфиге все комментарии есть, просто выбираем и меняем то, что нам нужно.
     Обычно юзерам позволяют самостоятельно регистрироваться, расскомментируя и меняя строку в правилах
{access, register, [{allow, all}]}.
     Как бы не так - это как раз то, чего мне даром не надо, оставляю закомментированной. Теперь юзеров могу добавлять только я, и соответственно, только я же могу править ростер, назначать никнеймы и все такое прочее. Только так можно гарантировать порядок.
     Назначаю язык по умолчанию:
{language, "ru"}
     Теперь регистрирую себя
ejabbderdctl register admin server_name password
     Перезапускаю сервер, все - в принципе по минимуму все работает.
     Все, да не все. На предприятии пользователю незачем самому заполнять ростер - мне нужно, чтобы у каждого сразу появлялся список всех пользователей предприятия. Значит, ростер нужно сделать общим. Снова в конфиг - раскомментируем строку:
{mod_shared_roster, []}.
     Сохраняем конфиг и снова перезапускаем сервис командой
/etc/init.d/ejabberd restart
     У меня все пользователи в одной группе, так что захожу в админку по адресу http://server_name:5280/admin и делаю группу общих контактов одну на всех - в поле члены для этого нужно прописать @all@, а в поле видимые группы пишу саму же эту группу.
     Позже я обнаружил, что если создавать еще группы и прописать юзера в другую группу, то из предыдущей он исчезает, даже если это группа @all@ - это в ejabberd недоработочка получилась нехорошая такая. Дело в том, что мне нужны групповые рассылки, и куда хардварнее тыкнуть при рассылке в одну группу, чем в несколько, когда нужно отправить сообщение всем. Для меня это неактуально - группа-то одна, но кому-то это может помешать. Так что я не стал искать в Google как это поправить, а просто плюнул и забыл.
     Ну конечно, я много чего еще поправил в конфиге под свои специфические нужды, но это уже не принципиально и никому не интересно - каждый может сделать это сам.
     Вот тут-то мне и попались первые детские грабельки. В ростере вместо никнейма отображался у всех jid (ну то есть, попросту, логин). Я вначале долго гуглил, изучал, как это поправить, нашел кучу рецептов, и только хотел было их начать пробовать, как мне пришла в голову счастливая мысль - что-то рецепты эти все попадаются довольно старые - несколько лет выдержки, а потом как будто отрезало, никто их не рерайтит, никто не комментирует... А не исправили ли уже все это. И точно. Стоило просто заполнить никнейм в vCard пользователя, как он тут же ( ну не совсем тут же, а после реконнекта клиента к серверу) высветился в ростере.
     Тут встал вопрос, который мой начальник ставит мне регулярно при запуске каждого сервера - а не интегрируешь ли ты его, дорогой, в Active Directory? Чтоб не париться потом, а заводить юзеров а домене и все будет сразу появляться. Отговорил - понимаю, что не так красиво смотрится. Но - домен иногда, хоть и крайне редко, но все же падает, пусть бы джаббер работал независимо от него. Во-вторых, не так давно я провел миграцию на уровень домена 2008 и обнаружил, что все рецепты интеграции ldap с  AD, которые прекрасно работали с Windows Server 2003 на 2008 почему-то благополучно сдохли. И забил на это, не стал пока допиливать проблему. Пусть это остается на совести мелкомягких - поменять детали протоколов, это их обычный способ мешать работать *nix серверам. Да и в AD хоть и поправил слегка бардак, оставшийся с прошлых времен, но все же не все данные вполне консистенты. Так что завел я пользователей и больше проблем не имею.
     Но тут настало время вторых грабель - посерьезнее. Безопасники, да и начальство, да и я сам, в общем, все - очень хотим иметь возможность читать логи сервера. Почему по умолчанию  этого модуля не включено - не понятно, казалось бы, нормальная вещь, всегда должна быть. Ан нет. Нужно ставить модуль mod_logxml. Здесь есть прекрасная инструкция, сработавшая почти без проблем, так что я отсылаю желающих к ней - Инструкция по установке модуля mod_logxml . Что я имел ввиду, когда сказал "почти" - при попытке установки вылетает ошибка, о которой я так ничего и не нашел в интернете по ее описанию, и кстати, забыл как она выглядела  в точности, а история команд к настоящему времени у меня уже затерлась черезчур далеко. Но подумав немного, я вспомнил, что ejabberd написан на erlang, и потому встроить новый модуль без пакета erlang не получится, хотя сам ejabberd без полного пакета прекрасно работает, видимо, ему достаточно только какого-то минимального интерпретатора, или что-то в этом роде. Так что я кликнул apt-get install erlang, поставив весь пакет, чтоб не думать слишком долго - и о чудо! - после чего build модуля сработал и логи послушно пошли ложиться в заданную папку. Но модули, однако, все xml, так что читать их не очень удобно. Тут я понял, что сам я парсер не напишу - не такой умный однако, потому нашел в инете прекрасную ссылку Парсер логов ejabberd от konsul и слезно попросил выслать мне файлик, на что любезный разработчик немедленно откликнулся. После чего я просто воткнул на сервер ejabberd еще и apache и поставил парсер - теперь логи можно видеть в браузере, не слишком упорядоченно, но раздражающие взгляд теги удалены, однако - все легче и удобнее, да и начальнику и безопасникам такой доступ уже можно давать. Понятно, что автора парсера я пока не спрашивал разрешения на его свободное распространение, потому, как честный человек, выложить его не могу. Но желающие могут сами его получить тем же способом, что и я - попросив в комментариях на том же сайте. И автору парсера будет приятно :)
     Ну вот, в общем-то и все. Ничего сложного нет, работает отлично, без сбоев. Тем более, что я поставил все на маленький такой выделенный сервачок на виртуальной машине Citrix XenServer и запасся резервными копиями. При минимальном опыте работы с серверами *nix работы немного и по установке, и по поддержанию. Если кто-то успешно интегрировал ejabberd с Windows Server 2008  и 2008 R2, прошу вас откликнуться в комментариях и выйти на связь - мне это очень любопытно.

вторник, 9 августа 2011 г.

Платформа, HDD и блок питания - три тормоза в развитии компьютеров

Все мы трепетно наблюдаем развитие новых технологий и ждем, когда наконец они начнут пробиваться на рынок. Уже начали, но увы, недостаточно быстро и очень в большой диспропорции между истинными потребностями пользователей и возможностями этих технологий. Конечно, вряд ли мое сообщение что-нибудь изменит в политике ведущих производителей - "голос единицы тоньше писка", как говаривал поэт Маяковский. Но все же - вдруг каким-то чудом какой-нибудь новый (или прежний :) ) Шаттлворт заглянет на эту страничку и вдохновится тем, что я скажу. А скажу я следующее.
Успехи в процессорной гонке и разработке новых спецификаций оперативной памяти, конечно же, впечатляющи. Но вот уже долгое время практически на всех компьютерах, на которых мне приходилось работать, как на рабочих станциях, так и на серверах, я наблюдаю одно и то же - неравномерную загрузку, а точнее, недогрузку практически всех компонентов компьютера, кроме какого-нибудь одного. Либо процессор взлетает под 100% (хотя это все реже и реже наблюдается, даже на высоконагруженных приложениях), либо оперативная память загружается под завязку (что происходит чаще, например, при работе с базами данных). Только не надо мне напоминать про оптимизацию, утечки и ошибки программного обеспечения - я имею ввиду, что именно в нормальных режимах происходит такое. Ну с процом и оперативкой все просто - если все, что можно, оптимизировано, то можно провести апгрейд. Это не самая сложная проблема. Сложнее, когда платформа сильно отстает по возможностям от процессора и оперативной памяти, а точнее - пропускная способность компонентов материнских плат оставляет желать лучшего, плетясь в хвосте у главных компонентов. Жесткий диск вообще упоминать даже не хочется - скорости чтения-записи так убоги, что хоть плачь. Даже у лучших самых скоростных. На предприятии все понятно - RAID с высокой избыточностью, и все летает. Но ведь это в разы удорожает всю систему! А что делать дома? Я ведь и дома хочу работать с личным сервером для хостинга моих же сайтов и прочее такое. SSD диски пока еще дороги и далеки от идеала. Конечно, они подешевеют года через два-три и все устаканится. Но и процессоры за это время уйдут вперед, и уже новую технологию придется искать для СХД! Возникшую некогда на заре развития компьютеров диспропорцию в пропускной способности компонентов компьютера так просто не исправить - нужен хороший рывок, направленный, сознательно нужно вбросить силы корпораций именно в этом направлении!
Ну мне, как потребителю, понятно, зачем это нужно - а зачем это самим корпорациям? Ну да все затем же, зачем они вообще существуют - для получения прибылей и сверхприбылей! Удешевление и улучшение компонентов с учетом устранения диспропорций позволит лучше работать компьютеру, полнее использовать другие недогружаемые сейчас компоненты, а значит - запускать более креативные игры, видео с лучшим качеством, новые сервисы и услуги и так далее, причем за ту же цену для потребителя. Помимо того, что в целом комп станет дешевле, доступнее для самых небогатых слоев покупателей, еще и число и качество сервисов вырастет на радость потребителю, а сервисы и ПО приносят прибыли, я предполагаю, гораздо больше, чем само железо! История показывает, что в лидеры продаж всегда выходят те, кто делает больше, лучше и дешевле, а не те, кто делает много, плохо и дорого! Не за счет заоблачных цен, а за счет заоблачных скоростей оборота средств всегда рождались и богатели лучшие финансовые империи!
Из тех миллиардов долларов, что тратятся на разработку железа, почему не выделить нужные суммы, чтобы:
1) резко удешевить и улушить SSD диски;
2) улучшить пропускную способность шин материнских плат на всех уровнях архитектуры;
3) договориться, наконец, ввести новый промышленный стандарт, и все же убрать из производства архаичные формы BIOS и все, с ними связанное, что тормозит скорость загрузки и ограничивает количество и виды разделов HDD;
4) разработать и удешевить наконец-то блоки питания компьютеров, сделав их полностью полупроводниковыми, бесшумными и нетепловыделяющими до такой степени - технологии для это существуют уже лет 30, только нужно сделать их дешевеле.
Господа производители!!! Сделайте все это и я гарантирую, что ваши продажи компьютеров взлетят до небес несмотря ни на какие финансовые кризисы! Не нужно сосредоточиваться только лишь на презентабельных красивостях новых потребительских устройств, безусловно, красивых и иногда даже удобных для простого юзера. Сделайте миру хорошо, и мир ответит вам тем же! :)