вторник, 1 ноября 2011 г.

GNU/Linux на IBM p5

Решили попробовать GNU/Linux вместо AIX на сервере IBM eServer p5 550: 4 ядра, 8 Гб памяти, массив через оптику. Роль сервера - сервер СУБД Oracle. Дистрибутив должнен быть бесплатный.

Первое, что расстроило, это то, что количество дистрибутивов поддерживающих PowerPC сокращается. На сегодняшний день выбирать пришлось из OpenSuSE и Debian.

Debian 6 stable завис во время загрузки ядра. OpenSuSE 11.1 установился нормально. При работе с Oracle DB 10gR2 возникли проблемы:
ORA-27061: waiting for async I/Os failed,
если даже отключить асинхронный ввод-вывод, то ошибка:
ORA-ХХХХ: waiting for I/Os failed.
Это происходит при изменении размера файла данных в схеме или про добавлении нового файла.

Всевозможные пляски с настройкой работы Oracle c ФС результата не дали, как и разнообразыне параметры ядра Linux. В и-нете найти решение не удалось, все таки экзотическая конфигурация, сам IBM и Oracle гарантируют работу под коммерческие версии дистрибутивов SuSE и RedHat.

Появилась идея попробовать более новое ядро. Чтоб избежать долгой истории со сборкой был взят дистрибутив Debian testing "Wheezy" с ядром 3.0.0-1. В установке все шло хорошо до загрузчика yaboot, который отказался от установки.

Загрузить Debian удалось загрузчиком от OpenSuSE. Но добиться работы инсталлятора Oracle не удалось, нужны были библиотеки, которых вообще нет в Debian. Хотя экземпляр Oracle, установленный из под OpenSuSE запустился и работал нормально.

Тогда был сделан гибрид: ядро с модулями от Debian, все остальное от OpenSuSE. Oracle DB заработала нормально.

вторник, 6 сентября 2011 г.

И вот я в Eclipse IDE

Не я первый и не последний пишу заметку о том, как я открыл для себя Eclipse IDE. Так вот самое важное, что нужно сообщать первым об Eclipse: ребята, он имеет очень быстрый встроенный Java-компилятор! К слову, Netbeans имеет аналог под названием "compile on save".

Я то представлял себе унылую картину: нажимаю "Build", Eclipse вызывет системный javac...
Напомню, что редактирую я под слабым Windows PC, а проект лежит на более быстром сервере, где я и хочу компилировать.

Перелопатив довольно много в и-нете я так и не нашел подходящего "рецепта" как в таком стиле лучше вести разработку с Eclipse.

С одной стороны хочется, чтоб Eclipse взял на себя всю работу, стал эдаким центром интеграции работы над проектом, а с другой стороны хочется оставить разделние: редактируем на персоналке, копилируем и запускаем на сервере.

Кажется я нашел свой философский камень, формула следующая:
персоналка - Win, Eclipse, сервер - GNU/Linux, Tomcat, Maven, Samba.
Соответственно роли:
Eclipse(Win) - редактирование, компиляция. В качестве пути для сборки(Java Build Path) указываем папку на сервере.
Tomcat(GNU/Linux) - тестирование
Maven(GNU/Linux) - профилирование, сборка и развертывание
Samba(GNU/Linux) - файловый доступ по сети.

В Eclipse после jEdit-а радуют штучки типа autocomplite, подсказки по Java. Ну и, конечно, обозначение синтаксических ошибок при наборе кода и компиляция по сохранению файла. Очень нужен был Refactoring и оправдал возложенные надежды.

понедельник, 22 августа 2011 г.

Быстрый взгляд на Solaris Express 11

В мое распоряжение попал сервер Sun SunFire V210(2 CPU, 2 Gb Ram) с установленной ОС Solaris 9.
К сожалению он не имеет "железного" RAID-контроллера.

Немного погоняв на нем СУБД Оракла я поставил на него Debian Linux. Разбивка диска происходла весьма задумчиово, почему-то fdisk показывал лишние разделы.
Через некоторое время начались пробламы с диском, fsck ругался на неправильные параметы, может быть это из-за специфичного софт- или полу-софтверного RAID-а.

Вообщем, пришел к решеню поставить Solaris 11 Express, устанавливал через iLo, который оказался неудобным тем, что при сообщениях об ошибках ломался вывод интерфейса инсталлятора.

Приятно порадовал сетевой менеджер пакетов(pkg), загружающий и устанавливающий с pkg.oracle.com.

Легко завелся Apache Tomcat, Apache HTTP Server + PHP, MySQL.
С PostgreSQL как-то странно, система рапортует что все поставлено, а его там нет.
Пришлось загрузить бинарный пакет из которого он с легкостью запустился.

Вцелом, впечатления положительные.

Upd. Да, там реализация CIFS своя, что непривычно после Samba. Открыть доступ к разделу можно так: zfs set sharesmb=on rpool/export.




воскресенье, 24 июля 2011 г.

Из каменного века в Maven

Довльно долгое время практиковал для разработки своих скромных Java-Web проектов jEdit и компиляцию из командной строки на сервере. Редактирую с Windows-компьютера, сервер под GNU/Linux.

Все файлы проекта лежат прямо под Apache Tomcat, структура папок полностью соответствует правилам развертывания. Java-классы лежат по соседству с исходными файлами. Для создания пакета нужно очистить папки от исходных файлов и упаковать все в war. Имея под рукой UNIX-shell все это можно делать довольно быстро.

В таких условиях думалось: взять один из IDE - означает компилировать на рабочем компьютере, а этого не хотелось, так как сервер мощнее. Поэтому взять автоматизатор сборки и использовать его на сервере показалось разумным.

Есть еще проблемы: для того, чтоб делать тестовую и рабочую сборки нужно проделывать еще некоторые манипуляции, например, менять конфигурационные файлы.

Вообщем, пришла пора брать автоматический сборщик, на слуху два сборщика: ant и maven. Поначалу казалось, что ant более простой, устоявшейся и для небольших проектов лучше взять его. Но, в голове осталась фраза из интервью одного из Java-разработчиков: "maven, он более идеологически правильный".

После ознакомления с информацией по обоим продуктам, стало ясно, что по-большому делают они одно и то же - автоматизируют сборку, но Maven еще поддреживает жизненный цикл сборки.

Выбор пал на Maven, так как он умеет "больше", чем ant и, как показалось, более современный.

Установка под GNU/Linux из репозитория, создание структуры Web-проекта по архитипу:
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-webapp -DgroupId=k2 -DartifactId=my_project
весьма просто.

Дальше пришлось подстроиться по правила Maven: src/main/java содержит только java-файлы, файлы конфигурации нужно сложить, например, в "src/main/resources/conf".

Для профилирования сборок: тестовая, рабочая создаются разделы "profile" в pom.xml.
Задачи по копированию, удалению файлов делаются с помощью "maven-antrun-plugin".
Если не хотим, чтоб Maven искал и скачивал библитеку из репозиториев, то можно сделать
System Dependencies.

Для Tomcat есть "tomcat-maven-plugin", который автоматизирует развертывание.
Можно, используя "jetty-maven-plugin", запустить приложения прямо из Maven.

При разработке, после редактирования кода, вместо прямого вызова компилятора, стал вызывать:
mvn -Pdev compile
, где dev - имя профиля.
На "/target/classes" сделана символическая ссылка из под развернутого под Tomcat приложения, таким образом увидеть результаты изменений можно после компиляции и перезапуска приложения в Tomcat.ь Это занимает больше времени, чем прямая компиляция.

Итого: сборка проекта ускорилась, сам процесс разработки получил дополнительные задержки.

воскресенье, 16 января 2011 г.

GSM/VoIP/Skype шлюз - экономим на связи

Наконец-то Betamax стал предлагать звоники на мобильники в мою зону дешевле, чем мобильные операторы.

GSM-VoIP шлюз становится актуальным. Идея в следующем: берем две SIM-ки, между которыми безлимитная дешевая связь. Одну вставляем в телефон, другую в 3G-модем Huawei E1550. Модем вставляем в компьютер, где устанавливаем программную АТС Asterisk 1.6 с модулем chan_datacard. Asterisk регистриуем в какой-либо конторе Betamax.

Звоним на комп, он перекидывает на Betamax, набираем дальше номер и мы опять в своей зоне по цене ниже, чем предлагает местный мобильный оператор.

Как опцию можно зацепить FreeSwitch с модулем skypopen и дополнительно дозваниваться в Skype и принимать оттуда звонки.

Доков, как это сделать море, я привел только одни из них.

Приведу пример зацепа BetaMax 12voip.com в файле sip.conf:

register => myusername:mypassword@sip.12voip.com/my_mobile_number

[12voip]
host=sip.12voip.com
context=from-pstn
secret=mypassword
type=friend
insecure=very
username=myusername