Commit 6319c6b6 authored by mitshel's avatar mitshel
Browse files

Внесены исправления и добавления в файл README.md

Принято решени еубрать функцию предварительного сканирования обложек
parent e854a718
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -14,3 +14,4 @@ fb2conv/*
!fb2conv/fb2mobi
testinfo/*
speed
.htaccess
+168 −79
Original line number Diff line number Diff line
Simple OPDS Catalog
Простой OPDS Каталог
Author: Dmitry V.Shelepnev
Версия 0.17
Версия 0.19

Установка Simple OPDS в Fedora:
1. Установка Simple OPDS в Fedora, RedHat, CentOS:
--------------------------------------------------------------------------------------------------------------

1. Зависимости.
1.1 Зависимости.
Требуется Mysql не ниже версии 5 (необходима поддержка хранимых процедур)
Требуется Python не ниже версии 3.3 (используется атрибут zlib.Decompressor.eof, введенный в версии 3.3)

@@ -15,7 +16,7 @@ yum install mysql
yum install python3
yum install mysql-connector-python3

2. Установка.
1.2 Установка.
Загрузить проект можно с сайта www.sopds.ru. 
Проект имеет следующую структуру:
opds				- каталог проекта (можно задать свое имя каталога)
@@ -24,20 +25,10 @@ opds - каталог проекта (можно задать свое имя
	conf			- каталог с файлом конфигурации
	README.md		- файл README

Для работы CGI-скрипта необходимо разрешить доступ к каталогу opds, например при помощи следующих директив конфигурационного файла web-сервера Apache httpd.conf:

<Directory "/home/www/opds">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
</Directory>
Alias   /opds           "/home/www/opds"

3. Конфигурационный файл.
1.3 Конфигурационный файл.
Перед началом работы необходимо внести необходимые настройки в файл конфигурации ./conf/sopds.conf

4. Инициализация базы данных.
1.4 Инициализация базы данных.
Во первых для работы каталога необходимо создать базу данных "sopds" и пользователя с необходимыми правами, например
следующим образом:
  mysql -uroot -proot_pass mysql
@@ -53,69 +44,65 @@ Alias /opds "/home/www/opds"

Все указанные выше процедуры могут быть выполнены при помощи скрипта ./db/db_create.sh суперпользователем root (для Fedora)

5. Сканирование каталога с книгами.
Для однократого сканирования каталога с электронными книгами можно запустить скрипт sopds-scan.py
Для запуска периодического сканирования согласно настроек секции [daemon] конфигурационого файла необходимо запустить сканнер книг
в режиме демона командой ./sopdsd.py start
1.5 Использование OPDS-сервера.
   OPDS-Сервер запускается командой:
   ./sopdsd.py start

6. Доступ к OPDS каталогу через WWW.
   Указанная команда запустит два процесса в режиме демона Linux:
      - Демон сканирования, который будет производить периодическое сканирование Вашей коллекции книг на основании настроек в
        секции [scand] конфигурационного файла
      - Демон http-opds-сервера, который предоставит доступ к коллекции книг OPDS-клиентам (по умолчанию прослушивается порт 8081)
        на основании настроек в секции [httpd] конфигурационного файла. 
        Доступ к OPDS-каталогу в этом случае можно получить по адресу http://<Ваш Сервер>:8081/ 

6.1 Использование CGI
Для сервера Apache необходимо разрешить запуск cgi-скрипта ./py/sopds.cgi
при помощи директивы, помещенной в .htacess:
  Options ExecCGI
или
  Options +ExecCGI
   Команда ./sopdsd.py stop    - приведет к остановке обеих процессов
   Команда ./sopdsd.py status  - покажет информацию о состоянии процессов

6.2 Использование WSGI
Для начала необходимо установить mod_wsgi в Apache
Далее необходимо разрешить запуск wsgi-скрипта ./py/sopds.wsgi
при помощи директив, помещенной в .htacess:
  AddHandler wsgi-script .wsgi
  Options ExecCGI
или
  AddHandler wsgi-script .wsgi
  Options +ExecCGI

Описания по нектороым проблемам, которые могут возникнуть с mod_wsgi: https://code.google.com/p/modwsgi/wiki/IssuesWithExpatLibrary
   Кроме того в пакете присутсвует программа однократного сканирования коллекции книг: sopds-scan.py

7. Использование OPDS каталога с устройств поддерживающих OPDS.
Ввести OPDS каталог и следующий URL: your_domain_name/opds/py/sopds.cgi
Либо, если Вы используете WSGI     : your_domain_name/opds/py/sopds.wsgi
   Для доступа к коллекции книг, можно использовать внешний HTTP-сервер, такой как Apache, для этого в
   пакете программ присутсвуют скрипты:
      -  sopds.cgi для использования технологии CGI (смотри раздел Базовая настройка CGI в сервере Apache)
      -  sopds.wsgi для использования технологии WSGI (см. раздел Базовая настройка WSGI в сервере Apache)

8. Обновление версий
1.6 Обновление версий
- Поскольку при переходе от версии к версии возможно изменение структуры БД необходимо пересоздать ее следующей командой
  ./db/db_create.sh либо выполнить рекомендации в п.4
- После пересоздания БД и, как следствие уничтожении сыллок из БД на извлеченные обложки стоит удалить со всем содержимым
  папку covers
  rm -rf covers

9. Настройка конвертации fb2 в EPUB или MOBI (возможно кому-нибудь нужно)
   9.1 - Конвертер fb2-to-epub http://code.google.com/p/fb2-to-epub-converter/


2. Настройка конвертации fb2 в EPUB или MOBI (опционально, можно не настраивать)
--------------------------------------------------------------------------------------------------------------------------

2.1 Конвертер fb2-to-epub http://code.google.com/p/fb2-to-epub-converter/
    - во первых необходимо скачать последнюю версию конвертера fb2toepub по ссылке выше (текущая уже находится в проекте)
       к сожалению конвертер не совершенный и не все книги может конвертирвать, но большинство все-таки конвертируется
    - далее, необходимо скопировать архив в папку opds/fb2toepub и разархивировать
    - далее, компилируем проект командой make, в результате в папке  unix_dist появится исполняемый файл fb2toepub
   - в конфигурационном файле sopds.conf необходимо задать путь к этому конвертеру, а также путь к временной папке, куда будут помещаться сконвертированные файлы,
     например таким образом:
    - в конфигурационном файле sopds.conf необходимо задать путь к этому конвертеру, а также путь к временной папке, 
      куда будут помещаться сконвертированные файлы, например таким образом:
      fb2toepub=../fb2toepub/unix_dist/fb2toepub
      temp_dir=/tmp
    - В результате OPDS-клиенту будут предоставлятся ссылки на FB2-книгу в формате epub

   9.2 - Конвертер fb2epub http://code.google.com/p/epub-tools/ (конвертер написан на Java, так что в вашей системе должнен быть установлен как минимум JDK 1.5)
2.2 Конвертер fb2epub http://code.google.com/p/epub-tools/ (конвертер написан на Java, так что в вашей системе должнен быть установлен как минимум JDK 1.5)
    - также сначала скачать последнюю версию по ссылке выше (текущая уже находится в проекте)
    - скопировать jar-файл например в каталог opds/fb2epub (Здесь уже лежит shell-скрипт для запуска jar-файла)
    - Соответственно прописать пути в файле конфигурации sopds.conf к shell-скрипту fb2epub
      fb2toepub=../fb2epub/fb2epub
      temp_dir=/tmp

   9.3 - Конвертер fb2conv (конвертация в epub и mobi) http://www.the-ebook.org/forum/viewtopic.php?t=28447
2.3 Конвертер fb2conv (конвертация в epub и mobi) http://www.the-ebook.org/forum/viewtopic.php?t=28447
    - Необходимо установить python 2.7 и пакеты lxml, cssutils:
      yum install python
      yum install python-lxml
      yum install python-cssutils
    - скачать последнюю версию конвертера по ссылке выше (текущая уже находится в каталоге fb2conv проекта)
   - скачать утилиту KindleGen с сайта Amazon http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000234621 (текущая версия утилиты уже находится в каталоге fb2conv проекта)
    - скачать утилиту KindleGen с сайта Amazon http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000234621 
      (текущая версия утилиты уже находится в каталоге fb2conv проекта)
    - скопировать архив проекта в opds/fb2conv (Здесь уже подготовлены shell-скрипты для запуска конвертера) и разархивировать его
    - Для конвертации в MOBI нужно архив с утилитой KindleGen положить в каталог с конвертером и разархивировать
    - В конфигурационном файле sopds.conf задать пути к соответствующим скриптам:
@@ -123,3 +110,105 @@ Alias /opds "/home/www/opds"
      fb2tomobi=../fb2conv/fb2mobi
      temp_dir=/tmp


3. Базовая настройка CGI в сервере Apache
-----------------------------------------------------------------------------------------------------------------------------------------------
- Для работы CGI-скрипта необходимо разрешить доступ к каталогу opds, например при помощи следующих директив конфигурационного 
  файла web-сервера Apache httpd.conf:

     <Directory "/home/www/opds">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
     </Directory>
     Alias   /opds           "/home/www/opds"

- Далее, необходимо разрешить запуск cgi-скрипта ./py/sopds.cgi
  при помощи директив, помещенных в файл .htaccess, который необходимо создать в корне пакета SOPDS
  (например: /home/www/opds/.htaccess)

     Options ExecCGI
     AddHandler cgi-script .cgi

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

     htpasswd -c /home/www/opds/.htpasswd user

  и добавьте в .htaccess следующие строки:

     AuthType Basic 
     AuthName "SOPDS Library"
     AuthUserFile /home/www/opds/.htpasswd
     require valid-user
  
- при выполнении указанных выше процедур доступ к OPDS-каталогу можно получить по следующему адресу:
     http://<Ваш Сервер>/opds/py/sopds.cgi

- для сокращения URL доступа добавьте следующую директиву в файл .htaccess:

     DirectoryIndex index.xml py/sopds.cgi

  при использовании указанной директивы доступ к OPDS-каталогу можно получить по следующему адресу:
     http://<Ваш Сервер>/opds/


4. Базовая настройка WSGI в сервере Apache
-----------------------------------------------------------------------------------------------------------------------------------------------
     WSGI - Web Server Gateway Interface - более эффективный стандарт взаимодействия Python программ с Веб сервером, чем CGI
WSGI в отличие от CGI позволяет не загружать интерпертатор Python со скриптом каждый раз, когда происходит обращение к
CGI-скрипту. Вместо этого Python-программа загружается однократно и выполняется при помощи постоянно загруженного модуля
mod_wsgi.

4.1 Установка mod_wsgi
    - Для работы WSGI скрипта необходимо загрузить, скомпилировать и установить модуль mod_wsgi для Apache. Ньюанс тут только в том, 
      что нужный нам mod_wsgi должен быть скомпилирован для python3. Таких, уже готовых модулей я для своей системы не нашел, поэтому
      пришлось выполнить несложные шаги для компиляции нужного нам модуля:
      
      yum install hg                                     # Устанавливаем клинета для Mercurial на которой ведется разработка mod_wsgi
      hg clone https://code.google.com/p/modwsgi/        # Скачиваем исходники mod_wsgi
      cd ./modwsgi/mod_wsgi
      ./configure --with-python=/usr/bin/python3.3       # Конфигурим под наш Python3
      make                                               # Компилируем
      make install                                       # Устанавливаем

   - Прописываем в конфигурационный файл нашего сервера Apache следующую строку (Возможно она уже там есть)

      LoadModule wsgi_module modules/mod_wsgi.so

4.2 Настройка разрешений на запуск wsgi-скрипта делается аналогично настройке для CGI скрипта, т.е необходимо добавить в
    файл .htaccess, следующие строки:

     Options ExecCGI
     AddHandler wsgi-script .wsgi

     - при выполнении указанных выше процедур доступ к OPDS-каталогу можно получить по следующему адресу:
       http://<Ваш Сервер>/opds/py/sopds.wsgi

     - для сокращения URL доступа добавьте следующую директиву в файл .htaccess:

       DirectoryIndex index.xml py/sopds.wsgi

       при использовании указанной директивы доступ к OPDS-каталогу можно получить по следующему адресу:
       http://<Ваш Сервер>/opds/

4.3 Возможные проблемы.
    Одна из выявленных мной проблем совместимости скрипта sopds.wsgi с веб-сервером Apache состоит в том, что и SOPDS и Apache 
    используют библиотеку "libexpat". И если версия libexpat, загруженная сервером Apache сильно отличается от той, которую 
    нужна Питону, то происходит crash приложения sopds.wsgi.
    
    Подробное описание этой проблемы и возможных путей решений находится здесь:
              https://code.google.com/p/modwsgi/wiki/IssuesWithExpatLibrary

    Что в итоге сделал я:
    Удалил сиволические ссылки на старую библиотеку libexpat из каталога модулей сервера Apache:

           unlink /usr/local/apache2/lib/libexpat.so
           unlink /usr/local/apache2/lib/libexpat.so.0

    А затем создал новые на ту библиотеку, которая используется Питоном:
           
           ln -s /usr/lib/libexpat.so.1.6.0 /usr/local/apache2/lib/libexpat.so
           ln -s /usr/lib/libexpat.so.1.6.0 /usr/local/apache2/lib/libexpat.so.0

    Ну и перезагрузуил Apache
+2 −2
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ fb2parse = yes
# если cover _show = 1 или 3
# Установка этой опции в yes значительно замедляет сканирование каталога (НА ПОРЯДОК!!!) 
# Правда зарание извлеченные обложки в OPDS-клиенте будут загружаться практически мгновенно
cover_extract = no
cover_extract = yes

# cover_show - способ показа обложек:
# 0 - не показывать, 
@@ -50,7 +50,7 @@ cover_extract = no
# 2 - извлекать обложки на лету и показывать 
# 3 - показать ранее извлеченную обложку, если обложка не извлекалась, то извелечь на лету и показать
# 
cover_show = 2 
cover_show = 1

# Предположительно столько байт от начала файла fb2 необходимо считать, чтобы получить необходимую метаинформацию (только description), если 0 то парсится весь файл
# при использование числа отличного от 0 возможны ошибки (например description очень длинный и занимает более, чем указанное число байт)
+1 −1
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ create table dbver(
ver varchar(5));
commit;

insert into dbver(ver) values("0.18");
insert into dbver(ver) values("0.19");
commit;
insert into authors(author_id,last_name,first_name) values(1,"Неизвестный Автор","");
commit;
Loading