29 июн. 2008 г.

Openfire + PostgreSQL HOW-TO. Установка и запуск.

Итак, сегодня мы установим и запустим open-source Jabber-сервер Openfire от разработчиков из Ignite Realtime. Что такое Jabber, с чем его идят и как подают к столу, в инете информации килолитры, поэтому сей вопрос оставим за рамки, тем более что человек, собравшийся развернуть на подконтрольном ему сервере openfire, думаю, в курсе, что это такое. =)
Со странички проекта нам потребуется сам дистрибутив. Выбираем и качаем. Так как jabber будет работать под управлением Debian 4.0 Etch, то я скачал .deb-пакет, однако представлены также сборки для rpm-based дистрибутивов, пакет для Solaris и, конечно же, тарбол с исходными кодами.
Для работы openfire необходима java-машина, 5 или 6 версии. О ее закачке и установке стоит озаботиться отдельно.
apt-get install sun-java6-jre
dpkg -i openfire_3.5.1_all.deb
Сервер установлен и готов принимать соединения. Вся работа с системой проводится исключительно через web-интерфейс софтины. В конфиги конечно можно попробовать залезть, но они для этого не предназначы абсюлютно (Там вообще страшно, если честно). Да и надобности имхо особой в этом нет. Да, также нам следует установить какую либо СУБД, дабы openfire мог вести свою базу. MySQL, PostgreSQL, MSSQL.... все что вашей душе угодно, со всем этим опенфайр может работать. Так как на сервере уже крутился постгрес версии 7.4, мой выбор был очевиден. Прежде чем создать базу и начать работу, следует убедиться, что в /etc/postgresql/7.4/main/postgresql.conf выставлен параметр tcpip_socket = true, иначе будете долго думать, почему все работает, но ничего не коннектится =). В восьмерке такого косяка не обнаружено, все работает сразу после инсталляции.
Создаем базу...
su - postgres #работаем от имени postgres
createuser -U postgres -dAP openfire_user #узер создает базы (-d), но не создает пользователей (-A), при создании запрашивается пароль (-P)
createdb -E UTF-8 openfiredb #создаем базу в кодировке (-E) UTF-8
su - postgres
psql openfiredb
openfiredb=# grant all privileges on database openfiredb to "openfire_user"; #даем нашему пользователю все привилегии в рамках openfiredb базы
База создана и ждет к ней подключения =). Открываем любимый браузер и топаем на http://localhost:9090. В случае, если сервер не имеет графического интерфейса, несложно пробросить порт с помоью ssh на свою рабочую машинку. У вас же *nix, не правда ли? ;)
ssh -L 19090:localhost:9090 user@server
Поясню работу этого проброса: все обращения на localhost:19090 перенаправляются через ssh на удаленный localhost:9090. Ответные пакеты, соотвественно, идут обратным путем. То бишь, введя у себя на машине http://localhost:19090, мы получим то же самое, если бы сидели на сервере и там ввели http://localhost:9090. Подробности - man ssh.
Первоначальная настройка openfire проста и интуитивно понятна. Нам требуется выбрать используемую базу данных. прописать ее параметры, выбрать способ обращения к ней, вбить мыло и пароль пользователя Admin... и по сути все. После нажатия последнего ОК севре перезапустится, и по адресу http://localhost:19090 мы уже увидим приглашение входа в Админку. Что можно сделать там, куда пойти и куда податься в первый заход, в следующий раз =) ( хотя все там просто и понятно, даром что не по-русски, так что можно потыкаться и самостоятельно - убить сервер все арвно не получится =) ) А так, сервер полностью готов к принятию соединений и обслуживанию пользователей, которых, правда, пока нет. Однако, по умолчанию, настройки openfire разрешают самостоятельную регистрацию пользователей с помощью их клиентов, это стоит иметь в виду.
А сейчас отметим возможные проблемы при пути до этого момента, до открытия входа в админку, а также пару интересных моментов...
Ну, во-первых, как я уже упомянул выше, когда мы разбирали работу с БД, если при корректно введенных данных (адрес, порт сервера, где крутится бд, имя базы, имя и пароль пользователя, который имеет полные права на эту базу, драйвер для работы с базой), выдаются ошибки соединения, стоит убедиться, что СУБД слушает внешние tcp-соединения - netstat - an вам в помощь.
Если при первом этапе графической настройки вместо подтвеждения всех ваших изменений и сообщения об успешности установки выдается лог ошибки браузера вида

INTERNAL_SERVER_ERROR
RequestURI=/setup/setup-finished.jsp
Caused by:
java.lang.NullPointerException
и куча всякого java-мусора, то следует обновить java-машину до более новой версии (у меня например, стояла пятая, пришлось обновиться до шестой. С ней проблема исчезла).

update jiveUser set plainPassword='123456', encryptedPassword = null where username ='admin';
И еще один интересный момент. Бывает, что пароль админа как-то сам по себе забыается ). В случае с openfire это не означает неизбежное убивание базы данных и пересоздание оной ( что влечет за собой, к тому же, переустановку самой софтины). Работа сервера с БД построена так, что введенный первоначально пароль админа (на этапе начального кофигурирования), да и пароли пользователей тоже, хранится в базе в PlainText-виде. Нужно лишь зайти любым удобным средством в БД и подсмотреть. если же вы сменили пароль, как и полагается после первого входа, то это автоматически шифрует его и впредь пароль хранися уже в поле Encrypted, в виде хеша. Соотвественно в таком случае, для получения доступа к админке следует сначала удалить все что есть в поле, где хранится хеш пароля, а потом что нить написать в Plaintext поле таблицы. Например, такЭто и будет паролем. Об этой особенности следует знать даже в случае отличной памяти. Ибо, очевидно, доступ к базе данных - автоматически дает нам неограниченный доступ к самому серверу. От версии к версии номера полей могут меняться, например раньше было password, теперь plainpassword, так что если команда не проходит, можно сориентироваться на месте, ибо имя таблицы - jiveUser не меняется.

12 июн. 2008 г.

Изменение имени сетевого интерфейса

Когда то давно, уе не помню и по каким причинам (то ли глюк системы был, толи интерфейсы переставлял..неважно), но случилась такая вещь - единственный вроде Ethernet интерфейс начал обзывать себя eth2. Да, работает, но как то не-Ъ. Как то я тогда вернул интерфейсу его кошерное eth0, вроде бы через пользование скрипта /etc/sysconfig/network/scripts/convert_persistent_name_rules и чтением каких то док в /usr/share/doc/. Щас в IRC появился человек с такой же проблемой. Сидел я, пытался вспомнить, как там оно это делается...так и не вышло. А помочь то надо ;). Нашелся другой, более пролетарский способ.
Берем любимый текстовый редактор и открываем файл /etc/udev/rules.d/70-persistent-net.rules, ищем в нем строчку вида
# PCI device 0x10de:0x03ef (forcedeth)
SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:1a:4d:9e:12:a0", NAME="eth2"
При наличии большого числа интефейсов подобных строк будет много, причем встречаются случаи, что самой сетевки уже давно и нет, а запись осталась. А если оно так, то втыкание другой сетевки выльется в появление нового сетевого интерфейса с увеличенным на единицу номером.
Так вот, каждая строка описания ифейса, как мы видим, содержит название ядерного модуля, поддерживающего железку (forcedeth в примере), физический адрес карты ( ATTR{address}), и имя сетевого интерфейса (NAME), ради которого все и затеялось. Меняем значение на нужное, eth0 или eth1000 ;), перезагружаем систему (вроде бы и рестарта только сетевой подсистемы должно быть достаточно, но у меня не прочухала ОС изменений, подняв снова eth2), и наслаждаемся Ъ-выводом ifconfig'a.
P.S.: Это я рассказывал про openSuSE, различия с Debian минимальны, в Etch'e файлик называется z25-persistent-net.rules, а все остальные телодвижения - аналогичны.

3 июн. 2008 г.

ID3tags convert HOW-TO

Сам я почти сколько увлекаюсь музыкой, всегда по большей части это был неотечественный саунд. Тем более к тому времени, когда я перелез на linux. Поэтому проблема кракозябр в AmaroK'е вместо кириллических тегов (которые в CP1251) передо мной особо не маячила. Да, было с пару десятков треков - но я их вручную за десять мин переписал, и был счастлив. Но проблема такая существует, и вот ее вполне элегантное решение. Цельнотянуто с Эр-Телекомовского форума, авторство принадлежит камраду ffsdmad'у, так что все плюшки его. На сей пост СС-лицензия сего блога не распространяется, ибо я знать не знаю, как лицензирован тот тред на форуме. Итак,

Наверняка, у многих имеется своя, [не]большая, коллекция музыки, звуков, аудио рассказов, с которой, при работе в Linux, появляются проблемы связанные с кодировкой id3tag mp3 файлов. Что происходит, первым делом, новичек качает Winamp подобную программу обычно это Xmms. Но как известно Xmms, уникальная программа так как «1210 дней без апдейта» (DeadLord[ect]), и она не понимает id3tag в кодировке CP1251 (собственно и не обязана, она поддерживать все кодировки). Сразу начинается возня со шрифтами и чаше человек забивает и пользуется тем что есть. Но при этом теряется возможность использовать такие классные программы как Rhitmbox, Amarok или например mpd + Gmpc. А ведь эти программы вносят новый взгляд на использование накопленных аудио материалов — идею коллекции. Пользователи Xmms, при всей его очевидности и простоте теряют такие возможности как: сортировки, выборки по тегам (автор, название, альбом, жанр, год, рейтинг), автозагрузка обложки CD диска трека, составление рейтингов на основе количества прослушиваний и ручным способом, выгрузка на внешние источники материалов составленных на основе заранее подготовленных плейлистов, поиск и покупки материалов подходящих по тематике и многое другое. В общем если пользователь с трепетом относится к своей коллекции то ему просто необходимо попробовать поменять своё представление о ней с помощью данных средств. К тому же в случае связки mpd + gmpc открываются дополнительные возможности: раздачи возможности управления аудио плеером в сети и экономии ресурсов за счёт необязательного запуска клиентской части.
В общем, всё, что нам мешает воспользоваться этими плодами цивилизации это, неправильная кодировка id3tag нашей коллекции. К счастью решение этой проблемы простое и приятное, как может не показаться на первый взгляд. Среди множества инструментов, мне больше всего понравился EasyTag. Установка проста и тривиальна:
Код
sudo apt-get install easytag
[конечно, пользователям не deb-based дистрибутивов сия команда не подойдет, однако уж ак поставить названную софтину easytag на Ваш дистрибутив, вы я уверен знаете]

После запуска программу необходимо настроить, указать кодировку тегов для чтения, записи и версии этих тегов.
Затем, предварительно скопировав каталог с музыкой, указать сканеру EasyTag путь для экспериментов, программа просканирует каталог и выделит красным цветом файлы с тегами требующими обработки, можно смело выделить все файлы и сохранить изменения.

Затем, например, у нас имеется файл :
02-Galitsky's song from the opera 'Prince Igor'.mp3
в тегах которого:
название: Песня Галицкого из оп. "Князь"
исполнитель: Фёдор Иванович Шаляпин
альбом: Записи с двухсторонних пластин
номер трека: 2
и нам необходимо получить файл с названием 2 - Фёдор Иванович Шаляпин - Песня Галицкого из оп. «Князь».mp3
Нет ничего проще, выделяем файлы с которыми мы хотим подобным образом поступить, запускаем сканер тегов, выбираем «переименовать файл и каталог» задём маску:
%n - %a - %t (% - символ переменной, n - number, a — autor, t — title) жмём сканировать и сохранить.
Обратным образом действует сканер «заполнить тег». С помощью него программа заполняет поля id3tag извлекая данные из имени файла и (по желании) имени папки. Например, чтобы из файла '2 - Фёдор Иванович Шаляпин - Песня Галицкого из оп. «Князь».mp3' извлечь данные тегов, составьте маску: %n - %a - %t (кстати, результат возможного сканирования отображается при вводе маски)
Таким образом можно любую файлопомойку ogg/mp3 привести к виду ухоженного детища заядлого коллекционера, и все продвинутые Linux аудиоплееры смогут нормально отображать meta данные из файлов и совершать привычный для них поиск и ранжирование.
Вот так вот, вмемориз. =)

Восстановление root пароля

Краткая памятка забывчивому люду, или просто испытывающим необходимость по ряду причин поменять пароль root на своей, или не своей =), linux-системе, не зная пароля текущего. Проверено на Debian 4.0-r0, загрузчик - GRUB. Итак, последовательность действий следующая:
1) при появлении приглашения GRUB'a со списком загружаемых ОС или вариантами загрузки перевести курсор на обычную загрузку и нажать е (edit);
2) в новом окне выбрать строку с параметрами загрузки (самая длинная будет) и снова нажать е;
3) дописать в конце строки init=/bin/bash;
4) нажать b (boot) - произойдет загрузка с этими параметрами;
5) если все правильно, появится приглашение вида root@...#, различное для разных дистрибутивов;
6) перемонтировать корень для записи mount -n -o remount,rw / (по умолчанию в однопользовательском режиме корень монтируется в режиме readonly (ro);
7) сменить пароль через passwd, синхронизировать изменения через sync (всякий пожарный), ребутнуть систему (причем жестким reset'ом, так как reboot будет недоступна).

CUPS'о-терминальные странности

интересная херня стоила мне вчера пары часов рабочего времени...
Оказывается, что при хождении терминальных пользователей (через freenx) на сервер, ессно тоже терминальный -), при условии ихавторизации по логину-паролю из /etc/passwd, то есть по локальным учеткам, а не по учеткам freenx'a (ну, которые добавляются через nxserver --adduser user).....так вот при всем при этом для системы этот пользователь почему то является guest'ом, со всеми вытекающими. Для меня например это вытекло в ошибку Quota Limit Reached, сгенеренную CUPS'ом в ответ на попытки хоть че нить распечатать на любом из 4 присоединенных к последнему принтеров. И это при условии что этот чертов guest добавлен в allow user в /etc/cups/printers.conf и все Quota...-строчки зияют нулями, то бишь квотирования быть не должно.
Первопричины сего от меня ускользают если честно, но порешать проблему удалось лишь созданием freenx-учеток пользователей. После этого они стали в терминальной сессии самими собой, и купса с радостью раздала всем принтеры и настало щастие.
В общем, на заметку...