Содержание

Система управления библиографической информацией ИБ Коми НЦ УрО РАН на основе программного продукта «Zotero». Руководство администратора

Установка Zotero Data Server на Debian Linux

Авторы: Altynbek Isabekov, Eric Fernandez (20.06.2013)

Перевод (с дополнениями) Иван Чадин (11.10.2014)

Реферат

Данное руководство посвящено процессу установки сервера данных Zotero на ЭВМ, работающей под управлением Debian Wheezy (7.0RC1)

Установка Zotero Data Server

Получение исходных кодов

Создайте каталог для установки Zotero Data Server и перейдите в него

 $ mkdir /srv/http
 $ cd /srv/http/

Загрузите исходный код Zotero Data Server из репозитория github:

 $ sudo git clone —recursive https://github.com/Panzerkampfwagen/dataserver.git

Переименуйте каталог (важно! наименование каталога используется в исходном коде)

 $ sudo mv dataserver ZoteroDataServer

Загрузите php-фреймворк Zend

 $ sudo wget -vc "http://framework.zend.com/releases/ZendFramework -1.12.3/ZendFramework-1.12.3.tar.gz"

Распакуйте часть архива php-фреймворка Zend (ZendFramework-1.12.2/library/Zend) в каталог «include» (/srv/http/ZoteroDataServer/include/Zend):

 $ sudo tar -xvf ZendFramework-1.12.3.tar.gz --strip=3 -C "/srv/http/ZoteroDataServer/include/Zend" "ZendFramework-1.12.3/library/Zend"

Настройка веб-сервера Apache и PHP

Установите сервер Apache и PHP

 $ sudo aptitude install apache2 php5

Создайте виртуальный хост для сервера данных Zotero. Для этого добавьте следующие строки в конфигурационный файл /etc/apache2/sites-available/default. Каталогом для сервера данных служит /srv/http/ZoteroDataServer/.

 NameVirtualHost *:85
 <VirtualHost *:85>
 ServerName *:85
     DocumentRoot "/srv/http/ZoteroDataServer/htdocs"
     ErrorLog "${APACHE_LOG_DIR}/Zotero-Data-Server-Error.log"
     CustomLog "${APACHE_LOG_DIR}/Zotero-Data-Server-Access.log" common
     <Directory "/srv/http/ZoteroDataServer/htdocs">
         Options FollowSymLinks MultiViews
         AllowOverride All
         Order allow,deny
         Allow from all
     </Directory>
     AllowEncodedSlashes On
 </VirtualHost>

Сделайте доступными следующие модули:

 $ sudo a2enmod rewrite
 $ sudo a2enmod vhost_alias

Включите в Apache прослушивание порта 85, который указывает на виртуальный хост Zotero, путем добавления слующих строк в файл /etc/apache2/ports.conf:

 NameVirtualHost *:85
 Listen 85

Запустите Apache и убедитесь, что он успешно запускается:

 $ sudo service apache2 start
Настройка MySQL

Установите MySQL:

 $ sudo aptitude install php5-mysql mysql-server

Сервер данных Zotero настроен на использование пароля 'SecurePassword' в качестве пароля пользователя root. Для того, чтобы установить этот пароль остановите демон MySQL, если он запущен:

 $ sudo service mysql stop

Перезапустите MySQL с пропуском системы атентификации:

 $ sudo mysqld_safe --skip-grant-tables &

Запустите консольный клиент mysql

$ sudo mysql -u root mysql

Поменяйте root пароль:

 mysql> UPDATE mysql.user SET Password=PASSWORD('SecurePassword') WHERE User='root';
 mysql> FLUSH PRIVILEGES;
 mysql> EXIT

Скрипты, которые создают базу данных Zotero нуждаются информации о логине и пароле. Скрипт получает эту информацию из файла /etc/mysql/my.cnf. Внесите следующие изменения в этот файл:

 [client]
 user=root
 password=SecurePassword

Измените часовой пояс MySQL на UTC путем внесения измений файл /etc/mysql/my.cnf:

 [mysqld]
 ...
 default-time-zone = '+0:00'

Установите phpMyAdmin, удобный инструмент для администрирования MySQL с использованием веб-интерфейса:

 $ sudo aptitude install phpmyadmin

Перезапустите Apache:

 $ sudo service apache2 restart

Настройка Zotero Data Server

Основные настройки хранятся в файле: ZoteroDataServer/include/config/config.inc.php

  ...
 public static $SYNC_DOMAIN = '127.0.0.1:85';
 ...
 public static $CLI_PHP_PATH = '/usr/bin/php';
 public static $CLI_DOCUMENT_ROOT = "/srv/http/ZoteroDataServer/";
 ...

Адрес сервера Zotero предустановлен локальный (127.0.0.1:85), таким образом он не принимает соединения с других IP адресов. Но на этом этапе нашей задачей является добиться работоспособности сервера на локальном хосте. Позднее, когда сервер начнет работать корректно, необходимо будет поменять локальный IP адрес на IP адрес ЭВМ вашей локальной сети, чтобы сделать сервер Zotero доступным для синхронизации с любой ЭВМ, подключенной к вашей локальной сети.

Если вы решите изменить корневой каталог сервера данных, изменив значение переменной $CLI_DOCUMENT_ROOT не забудьте добавить завершающий слэш «/» в конце пути к каталогу.

Взаимодейстие с MySQL сервер производит используя сведения о root пароле, который хранится в файле ZoteroDataServer/include/config/config.inc.php. Вы можете изменить пароль по умолчанию («SecurePassword»), редактируя этот файл.

Запуск Zotero Data Server

Запустите MySQL. Запустите Apache. Убедитесь, что оба сервера запустились без ошибок.

 $ sudo service mysql start
 $ sudo service apche2 start

Установите систему кэширования памяти «memcached», которая позволит повысить быстродействие и отказоустойчивость веб-сервисов, запущенных на ЭВМ:

 $ sudo aptitude install memcached

Перейдите в каталог /srv/http/ZoteroDataServer/misc

 $ cd /srv/http/ZoteroDataServer/misc

Запустите скрипт test_reset, который удалит все сущеествующие базы данных Zotero data server и создаст новые базы данных с нуля.

 $ sudo ./test_reset
 Deleting databases
 Creating databases
 Deleting users
 Creating users
 Updating user privileges
 Filling databases with default fields
 Reset is successfull. Now run ./test_setup

Вы должны увидеть сообщение «Reset is successfull. Now run ./test_setup». Сейчас вы можете запустить скрипт test_setup, который добавит некоторые записи в базу данных zoterotest1:

 $ sudo ./test_setup

Если вы увидете сообщение «Test setup is successfull.», то это означает что необходимые записи были добавлены в базу данных.

Измените права доступа к каталогу tmp Zotero data server:

 $ sudo chmod 777 /srv/http/ZoteroDataServer/tmp

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

В первом терминале:

 $ cd /srv/http/ZoteroDataServer/processor/upload/
 $ php daemon.php

Во втором терминале:

 $ cd /srv/http/ZoteroDataServer/processor/download/
 $ php daemon.php

В третьем терминале:

 $ cd /srv/http/ZoteroDataServer/processor/error/
 $ php daemon.php

Проверьте, что каждый из демонов запустился успешно (в данном случае, демон «download»):

 2013-06-20 11:16:48.5637 Starting download processor daemon
 2013-06-20 11:16:48.5754 0 processors, 0 queued processes

В случае возникновения ошибки, демоны остановятся и Zotero data server будет недоступен для синхронизции до тех пор, пока демоны не будут перезапущенны вручную. В частности, демоны закрузки и скачивания аварийно завершат работу если период ожидания доступа к базам данных MySQL превысит лимит 8 часов, установленный по умолчанию настройках MySQL. Чтобы предотвратить это, можно изменить параметр wait_timeout в файле /etc/mysql/my.cnf на максимальное значение — 1 год (31536000 seconds):

 [mysqld]
 ...
 wait_timeout = 31536000

Альтернативным (и более надежным) решением является установка пакета «daemontools»:

 $ sudo aptitude install daemontools

Затем в каждом из каталогов запустите утилиту supervise:

В первом терминале:

 $ cd /srv/http/ZoteroDataServer/processor/upload/
 $ sudo supervise .

В втором терминале:

 $ cd /srv/http/ZoteroDataServer/processor/download/
 $ sudo supervise .

В третьем терминале:

 $ cd /srv/http/ZoteroDataServer/processor/error/
 $ sudo supervise .

Программа supervise будет автоматически запускать файл ./run в каждой из директорий и перезапускать его в случае аварийного завершения.

Тестирование Zotero Data Server

Установите утилиту curl:

 $ sudo aptitude install curl

Для проверки аутентификации на сервере, отправьте на него следующий запрос:

 $ curl -X POST -d "version=9&username=testuser&password=testuser" http://127.0.0.1:85/login

Этот запрос должен вернуть ответ, похожий на этот:

 <?xml version="1.0"?>
 <response version="9" timestamp="1341134959">
     <sessionID>
         da802280ce0bfc2e90cb1ad0747ff642
     </sessionID>
 </response>

Теперь, используя идентификатор сессии «sessionID» вы можете отправить запрос «updated»:

 $ curl -X POST -d "version=9&sessionid=da802280ce0bfc2e90cb1ad0747ff642&lastsync=1" http://127.0.0.1:85/updated

ответ будет примерно таким:

 <?xml version="1.0"?>
 <response version="9" timestamp="1341135305" userID="1"
     defaultLibraryID="1" updateKey="43d4eaa497ab8cbfc8f4d201d955fd70"
         earliest="1341131740">
 <updated/>
 </response>
 $ cadaver http://127.0.0.1/zotero
 Authentication required for WebDAV on server `127.0.0.1':
 Username: testuser
 Password:
 dav:/zotero/> ls
 Listing collection `/zotero/': succeeded.
     3QBQSD38.prop    117         Aug 12 13:21
     3QBQSD38.zip    465149     Aug 12 13:21
     5BA5I3IP.prop    117         Aug 12 13:21
     5BA5I3IP.zip    809         Aug 12 13:21
     8IF963XB.prop    117         Aug 12 13:21
     8IF963XB.zip    860702     Aug 12 13:21
     lastsync            1    Aug 12 13:21
 dav:/zotero/>

Установка Zotero Attachment Server

Для того, чтобы получить возможность загружать на сервер и скачивать оттуда файлы, приложенные пользователями к библиографическим описаниям необходимо обеспечить клиент Zotero доступом к серверу WebDAV. Для того, чтобы запустить свой WebDAV сервер сделайте доступными серверу Apache следующие модули:

 $ sudo a2enmod auth_digest
 $ sudo a2enmod dav
 $ sudo a2enmod dav_fs
 $ sudo a2enmod dav_lock

Теперь создайте WebDAV lock каталог и файл:

 $ sudo mkdir /srv/http/DAVLock
 $ sudo chmod -R 777 /srv/http/DAVLock
 $ sudo chown -R www-data:www-data /srv/http/DAVLock

Создайте каталог для хранения файлов-приложений Zotero:

 $ sudo mkdir /srv/http/zotero
 $ sudo chown -R www-data:www-data /srv/http/zotero
 $ sudo chmod -R 777 /srv/http/zotero

Добавьте следующую строку в конфигурационный файл: /etc/apache2/sites-available/default:

 DavLockDB /srv/http/DAVLock/DAVLockDB

Поместите следущие строки в файл /etc/apache2/sites-available/default ниже раздела <VirtualHost *:80>

 DocumentRoot /srv/http
 <Directory "/srv/http/zotero">
     Dav On
     Order Allow,Deny
     Allow from all
     AllowOverride None
     AuthType Digest
     AuthName "WebDAV"
     AuthUserFile "/var/www/.DAVlogin"
     AuthDigestProvider file
     Require user "testuser"
 </Directory>

Теперь необходимо создать MD5 хэш для пользователя «testuser», выбрав какой либо пароль, и сохранить его в файле /etc/httpd/conf/extra/AuthWebDAV.passwd :

 $ sudo htdigest -c /etc/httpd/conf/extra/AuthWebDAV.passwd WebDAV testuser
 Adding password for testuser in realm WebDAV.
 New password:
 Re-type new password:

Перезапустите сервер Apache:

 $ sudo service apache2 restart

Для того, чтобы протестировать ваш WebDAV сервер установите пакет «cadaver»:

 $ sudo aptitude install cadaver

Теперь подключитесь к вашему WebDAV серверу:

 $ cadaver http://127.0.0.1/zotero
 Authentication required for WebDAV on server `127.0.0.1':
 Username: testuser
 Password:
 dav:/zotero/> mkcol SomeCollection
 Creating `SomeCollection': succeeded.
 dav:/zotero/>

Установка клиента Zotero

В каталоге ZoteroDataServer/misc/ находится несколько версий клиента Zotero (только в форме дополенений к браузеру Firefox), с «заплатками», позволяющими указать произвольный адрес сервера Zotero Data Server. «Пропатчить» свежую версию клиента Zotero можно с помощью утилиты patch и файла patch_4.0.20.2.txt:

unzip zotero-4.0.20.2.xpi -d ./zotero-4.0.20.2-patched
cd zotero-4.0.20.2-patched
patch -p1 < ../patch_4.0.20.2.txt
zip -rq ../zotero-4.0.20.2-patched.xpi *

Рекомендуется установить версию браузера Firefox», не требующую инсталляции в системе — Firefox Portable (http://portableapps.com/apps/internet/firefox_portable) и уже в нем установите «проопатченную» версию дополнения Zotero. Введите на странице «Синхронизация» адрес вашего сервера и порта (например: http://172.19.1.1:85), имя пользователя и пароль (по умолчанию: testuser/testuser).