Препосылки
Приложения из пакета Sun WTK 2.2, установленные из Коллекции портов FreeBSD, не работают должным образом. Так, например, при запуске любого тестового J2ME-приложения (из числа демонстрационных, входящих в комплект поставки Sun WTK) в KToolbar возможно одно из следующих сообщений об ошибке:
1) Ошибка обращения к нативной библиотеке libXpm;
2) Ошибка LIME номер такой-то;
3) Ошибка компиляции из-за неверной кодировки строк символов в исходниках.
С самого начала было ясно, что комплект разработчика Sun WTK портировался и тестировался для работы в Linux-окружении JDK версии 1.4.2 и выше. Странно, что ранее его удавалось завести под Diablo JDK 1.5, нативной версией Sun J2SE SDK 1.5. С недавних пор работа эмулятора Sun WTK вызывала серьёзные нарекания. Возможно, это как-то связано с существенными изменениями в ядре операционной системы и переходу на новую версию оконной системы Xorg 7.2, а затем и на Xorg 7.3. Кардинальные обновления Sun WTK 2.2 не наблюдались — по-прежнему использовался дистрибутив для Linux, зависимый по сборке от нативной Diablo JDK 1.5.
Пути решения
Путь решения оказался самым элементарным: очистить систему от установленных JDK, попробовать установить Sun WTK, заставив его запускаться в окружении Linux-версии Sun JDK из Коллекции портов. Далее накатить нативную версию Sun JDK для обеспечения эффективной работы остальных java-приложений в системе. Благо, FreeBSD позволяет работать нативным Linux-приложениям, используя режим трансляции API-вызовов через механизм ABI.
Сначала был установлен пакет linux-sun-jdk-1.4.2.13. В нём Sun WTK работал стабильно, но нагрузка на процессор была близка к 100% при подозрительно-большом числе (10-15 штук!) процессов java, которые не реагировали на команду killall java даже от имени root'а — очень странная и неоптимальная конфигурация для работы. От этого пришлось отказаться.
Снова очистка и перезагрузка системы.
Решение
Далее я описываю решение, которое найдено умозрительным путём.
1. Установить Linux Sun JDK 1.6:
% cd /usr/ports/java/linux-sun-jdk16
% make rmconfig clean install clean
В начале процесса установки появится просьба скачать необходимые файлы с сайта java.sun.com и скопировать их в каталог ports/distfiles, при этом ссылки на страницы загрузки будут даны.
2. Примонтировать файловую систему Linux ProcFS:
% mount -t linprocfs linprocfs /compat/linux/proc
Без этой команды пакет разработчика Sun WTK не соберётся.
Вообще же, строчку:
linprocfs /compat/linux/proc linprocfs rw 0 0
следует добавить в файл /etc/fstab, так как без этого эмулятор Sun WTK откажется запускаться и выбросит одну из вышеприведённых ошибок.
3. Собрать Sun WTK:
% cd /usr/ports/java/sun-wtk
% make rmconfig clean install clean
После этого надо обеспечить пакет Sun WTK конфигурацией для функционирования в окружении Linux JDK:
% mkdir /usr/local/sun-wtk/wtklib/Linux
% cp /usr/local/sun-wtk/wtklib/FreeBSD/* /usr/local/sun-wtk/wtklib/Linux/
4. Можно перезагрузить систему командой:
% shutdown -r now
5. Собрать и инсталлировать Diablo JDK 1.5 для сборки нативного Sun JDK 1.6:
% cd /usr/ports/java/diablo-jdk15
% make rmconfig clean install clean
В начале процесса установки появится просьба скачать необходимые файлы с соответствующих сайтов и скопировать их в каталог ports/distfiles, при этом ссылки на страницы загрузки будут даны. Впоследствии Diablo JDK 1.5 можно удалить, так как он нужен лишь на этапе сборки нативного Sun JDK 1.6 и офисного пакета OpenOffice.
6. Собрать и инсталлировать Sun JDK 1.6:
% cd /usr/ports/java/jdk16
% make rmconfig clean install
Опять же, в начале процесса установки появится просьба скачать необходимые файлы с соответствующих сайтов и скопировать их в каталог ports/distfiles, при этом ссылки на страницы загрузки будут даны. Здесь намеренно не используется команда make clean, так как при последующем удалении пакета Diablo JDK 1.5 последний уносит с собой в небытие некоторые нативные библиотеки, без которых невозможна работа сетевых Java-приложений и апплетов в Web-браузере, а значит необходимо будет либо собрать с нуля Sun JDK 1.6 (установленный Sun JDK 1.6 способен пересобрать сам себя), либо воспользоваться уже откомпилированным материалом.
7. Можно удалить пакет Diablo JDK 1.5, чтобы освободить место на диске:
% cd /usr/ports/java/diablo-jdk15
% make deinstall clean
и реинсталлировать Sun JDK 1.6:
% rehash
% cd /usr/ports/java/jdk16
% make deinstall install clean
9. Проверить версию рабочей JVM:
% java -version
Она должна быть:
java version "1.6.0_01-p1"
Java(TM) SE Runtime Environment (build 1.6.0_01-p1-root_11_oct_2007_02_04-b00)
Java HotSpot(TM) Client VM (build 1.6.0_01-p1-root_11_oct_2007_02_04-b00, mixed mode)
Итак, теперь в системе установлено две версии Sun JDK 1.6: одна для работы специфических Linux-приложений, нуждающихся в нативной поддержке Linux ABI; другая — нативный комплект разработчика для работы любых Java-приложений в окружении нативной JRE.
Собственно, на этом всё.
1 комментарий:
Блин.. Я с этим мучаюсь уже сутки! Спасибо!
Отправить комментарий