Продолжаем «полировать» Alfresco…

Статистика посещений моего блога показывает, что наиболее читаемыми являются мои записки про Alfresco. По этому, продолжаю описывать свою эпопею по установке и настройке этой EMS. Собственно, установив Alfresco и запуская его, я продолжал читать файл протокола alfresco.log. И нашел в своем вот такие строки:

11:27:21,879 ERROR [org.alfresco.util.exec.RuntimeExecBootstrapBean] Bootstrap command failed:
Execution result:
   os:         Linux
   command:    "soffice" "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" "-env:UserInstallation=file://oouser" -nologo -headless -nofirststartwizard -nocrashrep -norestore
   succeeded:  false
   exit code:  2
   out:

   err:        Cannot run program ""soffice"": java.io.IOException: error=2, No such file or directory

То бишь, хоть и старался я, и угадывал, какой же путь к Open Office указать при установке, все это, увы, оказалось безрезультатно! Как видно из приведенного фрагмента лога — «Файл не найден» — утверждает программа! Чтож, будем искать! Первым направлением «поисков» было традиционное слово — «пути». Дело происходило отнюдь не вчера, и некоторые детали я уже и не помню. Но, по моему, все таки именно я, следуя совету уж не помню из какого форума, создал в «стандартной» папке /usr/bin т.н. «жесткую ссылку» на программу soffice. А может быть и не я, а сама процедура установки Open Office. Одним словом, не помешает проверить ее наличие, и если там ссылки нет, то создать ее командой:

ln -s /opt/openoffice.org3/program/soffice /usr/bin/soffice

После этого проблем с запуском Open Office (в том числе и из консоли) нет — где бы ни был, кто бы не запускал — Open Office стартует на ура. Перезапускаю Alfresco, смотрю в лог — сообщение об ошибке осталось — «программа не найдена». Ну что за беда! Смущали меня лишь кавычки вокруг имени программы (soffice) — их почему-то было аж по паре с каждой из сторон. Поиск по форуму Alfresco подтвердил — мои сомнения были не напрасны. Как оказалось, это баг в файле, запускающем Open Office из Alfresco. Итак, идем в папку /opt/Alfresco/tomcat/shared/classes/alfresco/extension/bootstrap, находим в ней файл openoffice-startup-context.xml и смотрим его содержимое. Точнее, ту его часть, которая определяет значение «openOfficeStartupCommand». Вот так она выглядит в «родном» виде из архива:


   <bean id="openOfficeStartupCommand" class="org.alfresco.util.exec.RuntimeExec">
<property name="commandMap">
<map>
<entry key=".*">
<value><![CDATA["soffice" "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" "-env:UserInstallation=file://oouser" -nologo -headless -nofirststartwizard -nocrashrep -norestore]]></value>
</entry>
</map>
</property>

Сама команда, запускающая Open Office, приведена в строке, начинающейся с «<value><![CDATA[…» (и т.д.). И именно в ней присутствуют эти самые кавычки. Я их в приведенном выше фрагменте файла для наглядности выделил красным. Вот именно эти кавычки и нужно убрать! ВНИМАНИЕ! Строка длинная, поэтому, просмотрите ее всю — в ней нужно убрать ТРИ ПАРЫ кавычек! Удаляем их все раз и навсегда! И, сохранивши файл openoffice-startup-context.xml, перезапускаем Alfresco. И вот, после выполнения данных изменений фрагмент моего лога стал выглядеть таким образом:


18:47:15,115 WARN  [org.alfresco.util.OpenOfficeConnectionTester] An initial OpenOffice connection could not be established.
18:47:15,636 INFO  . . .
18:47:15,637 WARN  . . .
18:47:15,651 INFO  . . .
18:47:17,312 WARN  . . .
18:48:32,384 INFO  [org.alfresco.util.OpenOfficeConnectionTester] The OpenOffice connection was re-established.

Как мы видим в последней строке цитаты, «соединение с Open Office восстановлено». То еть, все ОК!…

«Полируем» Alfresco дальше…

В корневом каталоге своей установки Alfresco в процессе своей работы создает файлы протоколов (логи). Изначально создаваемый файл носит имя alfresco.log. Впоследствии, при создании нового протокола, старый файл не удаляется, а к его имени просто добавляется дата, и выглядит это примерно так — alfresco.log.2009-01-26. Таким образом, лог с датой в имени — это старый лог. А саммый «свежий» лог — это всегда файл alfresco.log. А на кой он нам нужен? Так для ловли блох, однако! Ну или, проще говоря, — для поиска ошибок. Вот, взял я и почитал лог своей Alfresco. Не зря, т.к. нашел в нем следующие строки:

11:27:12,572 ERROR [org.alfresco.repo.content.transform.swf.PDFToSWFContentTransformer] Failed to start SWF2PDF transformer:
Execution result:
   os:         Linux
   command:    pdf2swf -V
   succeeded:  false
   exit code:  1
   out:
   err:        Cannot run program "pdf2swf": java.io.IOException: error=2, No such file or directory

Что это значит? Да ничего особенного, просто Alfresco не смогла запустить программу pdf2swf. И причину указала — «нет такого файла или каталога». «Не нашла», «не запустила» — не порядок, однако! Чтож, будем наводить красоту, будем искать!..

Пару минут общения со «всемирным» поисковиком, показали, что во-первых, pdf2swf является частью пакета swftools. А во-вторых, что сайт, на котором можно скачать пакет, следующий — http://www.swftools.org/. Быстрый взгляд в «родной» набор пакетов моей Mandriva, показал, что там такого не числится. Чтож, качаем tar.gz-архив с указанного сайта, распаковываем и устанавливаем. Все стандартно,  Сначала команда:

./configure

(Естаственно, от имени root-а). Просмотр вывода ее результатов (да, иногда и такое бывает полезно) показал такие строки:

checking for missing libraries...  ungif gif_lib.h
***************************************************
* The following headers/libraries are missing:  ungif gif_lib.h
* Disabling gif2swf tool...
***************************************************

Хорошо-ли, плохо-ли, но ведь снова «не порядок»! Идем искать дальше. Сообщение об отсутствующей библиотеке пропало лишь после того, как я командой

urpmi libungif4-devel

установил пакет libungif4-devel-4.1.4-3mdv2008.0.i586.rpm. Чтож, возвращаемся к установке swftools. Повторяем комманду «./configure«, затем — «make» и напоследок — «make install«. Установили! Перезапускаем Alfresco, смотрим в лог — ура, нет больше такого сообщения об ошибке! Хорошо! Но, «пришла беда откуда не ждали». Точнее, данное сообщение об ошибке вновь появилось в логе после очередной перезаггрузки компьютера. Проблема была в путях. Исправилась созданием символьной ссылки командой:

ln -s /usr/local/bin/pdf2swf /usr/bin/pdf2swf

После этогго данная ошибка пропала навсегда…

Как я устанавливал Alfresco

Решил я установить на свой «сервер» программу Alfresco. Почитать «что такое Alfresco и с чем его едят» на русском языке можно, например, в Википедии. Также, можно почитать про Alfresco, например тут

Далее. На сайте компании-разработчика — http://www.alfresco.com/ присутствуют как коммерческая так и бесплатная версия программы. Коммерческую версию можно бесплатно использовать (пробовать) 30 дней. Бесплатная (или же т. н. Community) версия программы отличается в первую очередь отсутствием поддержки и не рекомендуется для использования «в ответственных случаях». В моем случае — я сам себе «ответственный», «энтерпрайз» мой невелик, и денег на поддержку мне жалко. Короче говоря, скачал я себе бесплатную Community-версию. На всякий случай, копию инсталятора сложил и к себе на ftp. Скачать ее с моего ftp-сервера можно по вот этой ссылке (учтите лишь, что размер файла Alfresco-Labs-3b-Linux-x86-Install составляет примерно 120 Мб, а скорость скачивания с моего сервенра неважненькая).

Ну чтож, скачал. Запустил консоль, переключился в режим администратора (ввел команду su и затем пароль root-а). Перешел в папку, в которую скачал инсталятор. Запустил команду:

chmod +x Alfresco-Labs-3b-Linux-x86-Install

(это я сделал для того, чтобы файл инсталятора стал исполняемым). Затем запустил сам инсталятор. Запустилась утилита установки. Графическая!!! Первым делом спросила меня про язык. В списке для выбора был в том числе и русский. Его и выбрал. Но, как показали итоги установки, данный факт самому интерфейсу уже установленной программы русского языка не прибавил, но вот вся моя дальнейшая установка проходила в режиме «угадай, что это за «бНОПНЯ!» (как я понимаю, сообщения в том инсталяторе под ср1251 писаны). Посему, мой совет — выбирайте «родной английский» и устанавливайте программу, а уж русифицируем мы ее позже…

Первый мой «затык» в установке был связан с отсутствием установленного на моем «сервере» пакета Java DK. То есть, JRE (Java Runtime Environment) был, а вот JDK (Java Development Kit) — не было. Чтож, прервал установку, пошел в Центр управления устанавливать пакеты. Для моей Mandriva 2008.0 это оказался пакет java-1.6.0-sun-devel (после всех обновлений — стала версия 1.6.0.06-2mdv2008.0). Его и установил. Тем кто не пользуется репозиториями дистрибутива, следует искать Java на сервере Sun. Впоследствии, при установке Alfresco, нужно будет указать путь к Java DK. Решил я посмотреть, где же он живет. Оказалось — в папке /usr/lib/jvm. Посмотрел я на ее содержимое:

~java
~java-1.6.0
~java-1.6.0-sun
/java-1.6.0-sun-1.6.0.02
/java-1.6.0-sun-1.6.0.04
/java-1.6.0-sun-1.6.0.06
~java-sun
~jre
~jre-1.6.0
~jre-1.6.0-sun
~jre-sun

И увидел три реальные папки и кучу симлинков. В двух папках (/java-1.6.0-sun-1.6.0.02 и /java-1.6.0-sun-1.6.0.04) было уже пусто — как видно, обновлялось. А в папке /java-1.6.0-sun-1.6.0.06 была как раз Java DK последней версии. Проверка же симлинков показала, что все они так или иначе приводят меня именно в эту папку. Зачем я так подробно? Затем, что впоследствии при настройке Alfresco нам потребуется указать путь к Java DK…

Чтож, с JDK разобрался. Опять запустил установку Alfresco. Про Java вопросов больше не возникло. Программа установки поинтересовалась, куда устанавливать Alfresco. Выбрал путь, предложенный по умолчанию — /opt/Alfresco. Потом инсталятор поинтересовался, где у меня живет Openoffice. Я кинулся указывать ему путь непосредственно к самому исполняемому файлу — /opt/openoffice.org2.4/program/soffice.bin. «Программа не найдена!» — сказал инсталятор!!! Ладно, указал просто путь к папке — /opt/openoffice.org2.4/program/. Ответ инсталятора был тот же — «Программа не найдена!» Где-то в интернете прочел, что мол, «…инсталятор 3-й версии ищет файл soffice.exe а не soffice.bin«… Чтобы «ублажить» инсталятор, там же рекомендовалось скопировать файл soffice.bin в файл soffice.exe. Скопировал (командой cp soffice.bin soffice.exe). Указал инсталятору на результат. «Программа не найдена!» — сказал инсталятор!!! В конечном итоге, методом «проб и ошибок» ответ был найден — инсталятору нужно было всего-лишь указать на каталог (папку) /opt/openoffice.org2.4/. И всё… Инсталятор остается доволен таким ответом. Но, как показал в дальнейшем анализ логов, для реального запуска Openoffice этого недостаточно. Подробнее читаем тут.

После того, как установка завершена, нужно запустить Alfresco. Переходим в папку, которую мы ранее выбрали для установки программы (/opt/Alfresco). В ней присутствуют два исполняемых файла — ./alf_start.sh и ./alf_stop.sh — предназначенных для запуска и остановки Alfresco соответственно. Просмотр их содержимого показал, что на самом деле они всего лишь запускают выполнение другого файла — ./alfresco.sh — но с различными ключами (start и stop, соответственно). В итоге, консольная команда запуска Alfresco выглядит так:

./alfresco.sh start

А команда остановки — вот так:

./alfresco.sh stop

Перед запуском я бы порекомендовал открыть файл ./alfresco.sh в редакторе и проверить, а в случае необходимости и подкорректировать значение переменной JAVA_HOME. В файле должно быть указано, где расположены файлы JDK (Java Development Kit). Указывает этот параметр строка:

export JAVA_HOME="/usr/lib/jvm/java"

(Увы, я уже не помню, что там было прописано изначально. В приведенном выше примере прописано уже откорректированное мной значение). Есть простой способ проверить, что значение переменной JAVA_HOME указано корректно. Для этого в консоли нужно запустить команду:

./alfresco.sh stop

Если путь к Java-машине указано неверно, Вы тут же получите сообщение о том, что «нет такого файла или каталога». В противном случае — получите целую кучу сообщений от самой Java-машины, которую мы пытаемся заставить остановить не запущенный процесс…

Если путь к Java-машине прописан верно, самое время запустить Alfresco . Вводим команду:

./alfresco.sh start

Потом запускаем свой любимый браузер (любой) и в поле адреса вводим:

http://localhost:8080/alfresco/

Итог выглядит примерно так:

Alfresco - first looks
Alfresco — first looks
  • Первое и самое важное — в адресе использован «нестандартный» номер порта — 8080. Следовательно, чтобы иметь доступ к программе извне (с других компьютеров) нужно «открыть» соответствующий порт в файерволе.
  • Как видим, на данном этапе приложение стартует с английским языком интерфейса…
  • Если что-то «пошло не так», то Вы получите сообщение «Error 400» (приложение не найдено) от Tomcat. Чаще всего эта ошибка означает, что не запустилась Java-машина. Тогда возвращаетесь к редактированию файла ./alfresco.sh на предмет правильного указания значения переменной JAVA_HOME…

Заметил, что попадают на мою эту заметку и люди с вопросом про пароль. Уж не помню, где я это брал. Но тем не менее

The default administrator user of the Alfresco application is:
LOGIN: admin
PASSWORD: admin

Естественное, пароль затем рекомендуется сменить на свой.

Есть в такой работе Alfresco еще одно «непрофессиональное» обстоятельство — при работе приложения используется «встроенная» база данных (Derby). Правда, кругом пишут о том, что по умолчанию используется HSQL, но в моем случае оказалось, что приложение настроено на использование именно базы Derby. Отчего такое не соответствие, я не знаю. Возможно, это отличие дистрибутива 3-й версии от более ранней 2-й (описаний которой в интернете как раз подавляющее большинство). Решил я воспользоваться инструкциями по настройке использования в качестве базы данных MySQL, коих в интернете превеликое множество. Но, настроить «с пол-пинка» лично у меня не вышло, и поэтому отложил я этот вопрос «до лучших времен». И дело даже не в моей привычке откладывать на потом то, что не вышло сделать за пять минут. Просто мне не терпелось русифицировать интерфейс…

Ох уж эта мне локализация интерфейсов! В принципе, согласно информации, найденной в интернете, данный вопрос не должен был вызвать у меня никаких проблем. «Все просто!», «Все очень просто!», написано, например, в Wiki-Alfresco. Достаточно всего лишь найти файл (путь указан с учетом моей установки) /opt/Alfresco/tomcat/shared/classes/alfresco/extension/web-client-config-custom.xml, а в нем — раздел Languages, выглядящий следующим образом:

  <!--
<config evaluator="string-compare" condition="Languages">
<languages>
<language locale="fr_FR">French</language>
<language locale="de_DE">German</language>
<language locale="ja_JP">Japanese</language>
</languages>
</config>
  -->

И затем в разделе этом нужно лишь убрать строки с «лишними» языками интерфейса, а оставить с «нужными» (в моем случае — с русским). И будет Вам счастье! Но не тут то было… По мере моей возни с данной программой я все больше укреплялся во мнении, что 2-й Alfresco, описанный везде и кругом, и 3-й Alfresco, с которым возился лично я, как говорят в Одессе, «две большие разницы».

Например, в указанном разделе указанного файла НЕ БЫЛО строки про русский язык интерфейса! Пришлось её дописывать руками:

<language locale="ru_RU">Russian</language>

И что это мне дало? Да ничего! Перезапустил Alfresco, а у интерфейса как был только английский язык и отсутствовала возможность выбрать русский, так всё и осталось!

На первую подсказку меня натолкнул … встроенный текстовый редактор менеджера Midnight Commander. Точнее — его (редактора) автоматическое расцвечивание синтаксиса. А еще точнее — его (расцвечивания) отсутствие в случае именно тех строк, которые должны были управлять выбором языка интерфейса. Проверка закравшегося сомнения много времени не заняла. Первый же найденный справочник по синтаксису языка подтвердил мои опасения. О чем я? Согласно справочнику, текст между тегами <!- — и — -> является КОММЕНТАРИЕМ!!! Да, да! В приведенной выше цитате из файла web-client-config-custom.xml ВЕСЬ модуль инструкций по выбору языка является ИМЕННО комментарием!!! А чтобы он стал директивой, метки коментария (теги <!- — в начале , и — -> в конце) НЕОБХОДИМО УБРАТЬ!!!

Убрал. Сохранил. Перезапустил Alfresco. В меню появилась возможость выбора (пункт «Russian»). Но!.. Но не сам русский язык интерфейса…

А дело оставалось за малым. Я-то «прикрутил» возможность выбора сообщений (интерфейса) на русском языке. Но, как оказалось, не было в инсталяторе Alfresco 3-й версии самих этих сообщений-то. То есть, в папке (путь указан с учетом моей установки) /opt/Alfresco/tomcat/shared/classes/alfresco/messages/ должны были находиться файлы, в имени которых присутствует ru_RU. Вот в них как раз и находятся те самые сообщения на русском языке. Но файлов этих там, увы, не было… На одном из форумов прочел, что 3-й Alfresco еще не переведен. Там же давался совет «скопировать файлы английского интерфейса, давши им новые имена с ru_RU внутри, а потом в этих файлах самостоятельно перевести все сообщения на русский». Хороший совет, но не для таких лентяев как я. Чтоб не переводить 3-й Alfresco «руками», погуглив самую малость, нашел я страницу проекта по русификации интерфейса Alfresco. На странице этой можно взять архив уже готовых переведенных файлов сообщений. (Кстати, копия этого архива (на всякий случай) лежит у меня тут).
И пусть не смущает номер версии (архива). У меня пристегнулось на ура! Распаковал содержимое архива в папку /opt/Alfresco/tomcat/shared/classes/alfresco/messages/. Перезапустил Alfresco. Вуаля! Есть русский язык! Результат видно на картинке:

Alfresco - русский интерфейс
Alfresco — русский интерфейс

ЗЫ. Кто знает, может и не было бы всей этой эквилибристики, если бы я скачал и установил Alfresco 2-й версии. Но так уж вышло…

Еще об Alfresco