null

Создаем собственный Cross-Reference на OpenGrok в GlassFish

Cross-Reference (сокращенно xref) - это экземпляр документа, в котором установлены ссылки между синонимичными понятиями (вольный перевод определения в англоязычной википедии). В контексте программирования это позволяет представить различные единицы трансляции (c-файлы, заголовочные файлы) в виде набора HTML-документов с гиперссылками на различные лексемы языка - например вызов функции является гиперссылкой на ее тело, а использование литерала на его значение. Это крайне удобно при анализе кода  и поиске багов. Более сложные утилиты, такие как Source Insight позволяют строить графы зависимостей между классами и объектами.


Совсем недавно норвежский xref по linux-ядру (http://lxr.linux.no/) упал в даун и я решил запустить собственный - на OpenSolaris и OpenGrok (последний используется на src.opensolaris.org), к тому же OpenGrok удобнее благодаря подсветке синтаксиса и наличию опций фильтеринга в поиске.
Итак, поехали. Все нижесказанное касается Solaris 11 Express, хотя на OpenSolaris у меня дома все также прекрасно работает в зоне.

Итак, сначала скачаем необходимые нам дистрибутивы. Нам потребуется Application-сервер (я выбрал Glassfish 2.1, также поддерживается инсталляция в Tomcat, официальная документация Tomcat'у и посвящена http://hub.opensolaris.org/bin/view/Project+opengrok/installdescription ), Exuberant Ctags - утилиту для тегирования исходных кодов и сам OpenGrok:

# wget http://download.java.net/javaee5/v2.1.1_branch/promoted/SunOS_X86/glassfish-installer-v2.1.1-b31g-sunos_x86.jar
# wget http://prdownloads.sourceforge.net/ctags/ctags-5.8.tar.gz
# wget http://hub.opensolaris.org/bin/download/Project+opengrok/files/opengrok%2D0.10.tar.gz

Также необходимо установить, если еще не установлены jdk (для Glassfish) и gcc (для сборки Ctags)
# pkg install pkg:/developer/java/jdk@0.5.11-0.151.0.1
# pkg install pkg:/developer/gcc-3@3.4.3-0.151.0.1

Собираем Ctags, он при этом устанавливается в /usr/local:
# ./configure
# make
# make install

Распаковываем OpenGrok в opt и создаем директорию для данных OpenGrok:
# mkdir /var/opengrok
# cd /opt
# tar xzvf /root/opengrok-0.10.tar.gz
# mv opengrok-0.10 opengrok

Устанавливаем GlassFish согласно инструкции http://download.oracle.com/docs/cd/E19879-01/820-4330/gengd/index.html

Теперь создаем и запускаем домен Glassfish, в рамках которого будет развернут Opengrok
# /opt/glassfish/bin/asadmin create-domain --adminport 4848 --domaindir /var/opengrok --user admin opengrok
# /opt/glassfish/bin/asadmin start-domain --domain-dir /var/opengrok

Также можно создать SMF-сервис, чтобы домен стартовал автоматически

Теперь собственно инсталляция OpenGrok

Необходимо прописать соответствующие переменные окружения для утилиты OpenGrok:
 OPENGROK_GLASSFISH_BASE=/opt/glassfish/
OPENGROK_INSTANCE_BASE=/var/opengrok/
OPENGROK_APP_SERVER=Glassfish
OPENGROK_WAR_TARGET_GLASSFISH=/var/opengrok/opengrok/autodeploy/

И запустить deploy:
# /opt/opengrok/bin/OpenGrok deploy    
Проверим работоспособность OpenGrok http://<hostname>:8080/source/ Теперь собственно создание дерева исходных кодов Linux:
# mkdir /var/linux-tree
# cd /var/linux-tree
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.3.tar.bz2
# tar xjvf linux-2.6.38.3.tar.bz2

И индексирование дерева исходных кодов:
# export EXUBERANT_CTAGS=/usr/local/bin/ctags
# /opt/opengrok/bin/OpenGrok index /var/linux-tree/

На моем ноутбуке процесс индексирования занял порядка получаса.
Ну и напоследок, заменим логотип в OpenGrok. После развертывания Glassfish помещает OpenGrok в директорию /var/opengrok/opengrok/applications/j2ee-modules/source/, там же расположены три стиля: offwhite, polished и default. Заменим логотип и иконку:
# cp /tmp/linux-logo.png /var/opengrok/opengrok/applications/j2ee-modules/source/default/img/Logo.png
# cp /tmp/linux-logo-small.png /var/opengrok/opengrok/applications/j2ee-modules/source/default/img/icon.png

И подредактируем стили #header, #whole_header и #MastheadLogo соответственно размеру картинки. OpenGrok готов:

К списку статей

 

Интересуюсь по большей части системным анализом программного обеспечения: поиском багов и анализом неисправностей, а также системным программированием (и не оставляю надежд запилить свою операционку, хотя нехватка времени сказывается :) ). Программированием увлекаюсь с 12 лет, но так уж получилось, что стал я инженером.

Основная сфера моей деятельности связана с поддержкой Solaris и оборудования Sun/Oracle, хотя в последнее время к ним прибавились технологии виртуализации (линейка Citrix Xen) и всякое разное от IBM - от xSeries до Power. Учусь на кафедре Вычислительной Техники НИУ ИТМО.

See you...out there!

http://www.facebook.com/profile.php?id=100001947776045
https://twitter.com/AnnoyingBugs