Commit c262f2b4 authored by Dmitry Shelepnev's avatar Dmitry Shelepnev
Browse files

Clean project for older files

parent 61f7de72
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
*.log
*.swp
py
db
fb2toepub/*
!fb2toepub/*.zip
fb2conv/*
!fb2conv/*.zip
!fb2conv/*.gz
!fb2conv/fb2epub
!fb2conv/fb2mobi
.htaccess
db.sqlite3
.idea/*

README-0.23.4-1.md

deleted100644 → 0
+0 −250
Original line number Diff line number Diff line
#### Simple OPDS Catalog - Простой OPDS Каталог  
#### Author: Dmitry V.Shelepnev  
#### Версия 0.23.4 

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

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

Для работы проекта необходимо установить следующие зависимости:  

     yum install mysql  
     yum install python3  
     yum install mysql-connector-python3  

1.2 Установка.  
Загрузить проект можно с сайта www.sopds.ru.  
Проект имеет следующую структуру:  

>opds			- каталог проекта (можно задать свое имя каталога)  
>    py			- каталог с программами на Python  
>    db			- каталог инициализационные скрипты для создания БД  
>    conf		- каталог с файлом конфигурации  
>    logs               - каталог для log-файлов
>    README.md		- файл README  

1.3 Конфигурационный файл.  
Перед началом работы необходимо внести необходимые настройки в файл конфигурации ./conf/sopds.conf  
В основном необходимо при помощи параметра root_lib указать путь к Вашей коллекции книг
остальные параметры можно оставить "по умолчанию"

1.4 Инициализация базы данных.  
Во первых для работы каталога необходимо создать базу данных "sopds" и пользователя с необходимыми правами,  
например следующим образом:  

     mysql -uroot -proot_pass mysql  
     mysql > create database if not exists sopds default charset=utf8;  
     mysql > grant all on sopds.* to 'sopds'@'localhost' identified by 'sopds';  
     mysql > commit;  
     mysql > ^C  

Далее в созданную базу данных необходимо загрузить структуру БД и заполненную таблицу жанров, например 
следующим образом:  

     mysql -usopds -psopds sopds < ./db/tables.sql  
     mysql -usopds -psopds sopds < ./db/genres.sql  

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

1.5 Использование OPDS-сервера.  
OPDS-Сервер запускается командой:  

     ./sopdsd.py start  

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

> Команда ./sopdsd.py stop    - приведет к остановке обеих процессов  
> Команда ./sopdsd.py status  - покажет информацию о состоянии процессов  

  Модуль sopdsd.py предоставляет все возможности пакета Simple OPDS и в большинстве случаев достаточно использовать только его.  

  Для пользователей, которые по каким-то причинам желают обновлять БД SOPDS вручную в пакете присутствует
  программа однократного сканирования коллекции книг: sopds-scan.py  

  Для доступа к коллекции книг, при желании можно использовать внешний HTTP-сервер, такой как Apache, или Nginx для этого в
  пакете программ присутсвуют скрипты:  
  - sopds.cgi для использования технологии CGI (смотри раздел Базовая настройка CGI в сервере Apache)
  - sopds.wsgi для использования технологии WSGI (см. раздел Базовая настройка WSGI в сервере Apache)

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

1.7 Возможные проблемы:  
На слабых компьютерах (в основном на NAS) может возникнуть проблема с работой MYSQL (MariaDB).
Один из запросов в хранимой процедуре sp_mark_dbl приводит к тому, что mysql создает достаточно объемный временный файл.
Если раздел, где создается временный файл (чаще всего /tmp) не очень большой, то раздел переполняется, что приводит к невозможности выполнения запроса и возникает ошибка:

>      mysql.connector.errors.DatabaseError: 3 (HY000): Error writing file '/tmp/MYdaGhaA' (Errcode: 28)


Пока могу предложить следующие решения:  
1. Отключить обработку дубликатов (DOUBLICATES_FIND=no)  
либо  
2. В файле конфигурации mysql указать новый путь к tmpdir, который имеет достаточный размер.
   (например в файл конфигурации для MySQL - my.cnf в раздел [msqld] записать строку tmpdir=/var/tmp  - /var/tmp конечно же должен существовать, ну и перегрузить после этого mysqld)  


#### 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 необходимо задать путь к этому конвертеру, а также путь к временной папке, 
  куда будут помещаться сконвертированные файлы, например таким образом:  

>     fb2toepub=../fb2toepub/unix_dist/fb2toepub
>     temp_dir=/tmp

- В результате OPDS-клиенту будут предоставлятся ссылки на FB2-книгу в формате epub  

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

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 проекта)  
- скопировать архив проекта в opds/fb2conv (Здесь уже подготовлены shell-скрипты для запуска конвертера) и разархивировать его  
- Для конвертации в MOBI нужно архив с утилитой KindleGen положить в каталог с конвертером и разархивировать  
- В конфигурационном файле sopds.conf задать пути к соответствующим скриптам:  

>     fb2toepub=../fb2conv/fb2epub  
>     fb2tomobi=../fb2conv/fb2mobi  
>     temp_dir=/tmp  


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

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

- Далее, необходимо разрешить запуск 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-каталогу можно получить по следующим адресам (opds и web формат):  

>      http://<Ваш Сервер>/opds/sopds.cgi
>      http://<Ваш Сервер>/web/sopds.cgi

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

         DirectoryIndex index.xml sopds.cgi  

  при использовании указанной директивы доступ к OPDS-каталогу можно получить по следующим адресам:  

>      http://<Ваш Сервер>/opds/
>      http://<Ваш Сервер>/web/


- для некоторых систем (например Ubuntu 12.04) возможно понадобится включить "CGI processing in Apache" командой:  

         sudo a2enmod cgi


#### 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 скрипта, т.е необходимо разрешить доступ к каталогу opds/py и
добавить в файл .htaccess, следующие строки:  

         Options ExecCGI  
         AddHandler wsgi-script .wsgi  

- при выполнении указанных выше процедур доступ к OPDS-каталогу можно получить по следующим адресам (opds и web формат):  

>      http://<Ваш Сервер>/opds/sopds.wsgi  
>      http://<Ваш Сервер>/web/sopds.wsgi

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

         DirectoryIndex index.xml sopds.wsgi  

  при использовании указанной директивы доступ к OPDS-каталогу можно получить по следующим адресам:  

>      http://<Ваш Сервер>/opds/  
>      http://<Ваш Сервер>/web/

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.  
  

my_notes.md

deleted100644 → 0
+0 −39
Original line number Diff line number Diff line
## Как делать syndication на Django
http://djbook.ru/rel1.4/ref/contrib/syndication.html#a-simple-example
https://docs.djangoproject.com/en/1.9/ref/contrib/syndication/
http://djbook.ru/ch11s05.html

manage.py makemessages -l ru
manage.py compilemessages

## О трансляции на другие языки
http://djbook.ru/rel1.5/topics/i18n/translation.html
http://job-blog.bullgare.ru/2011/02/%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-%D0%B8-%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-django

Для работы i18n в Windows необходимо будет скачать утилиты gettext. Я нашел их здесь:
http://mlocati.github.io/articles/gettext-iconv-windows.html

manage.py makemessages -l ru
manage.py compilemessages


## Тестировнаие в DJANGO
 - https://docs.djangoproject.com/en/dev/topics/testing/#assertions
 - https://habrahabr.ru/post/122156/
 - http://djbook.ru/rel1.7/topics/testing/overview.html

## Возможные ошибки при работе с Zip Файлами
File /mnt/SATA1TB-1/КНИГИ/BOOKS/Художественная литература/LIB.RUS.EC/516006-517007.zip corrupt
**opds_catalog.zipf.BadZipFile: Bad magic number for file header**


## Регулярные выражения re-module
https://docs.python.org/2/library/re.html

## test django superuser
mitshel:madlenka

## Basic Authorizaton Django
- http://www.idiotinside.com/2015/09/21/basic-auth-in-django-flask/
- https://djangosnippets.org/snippets/2468/

requirements-p33.txt

deleted100644 → 0
+0 −3
Original line number Diff line number Diff line
Django>=1.8
Pillow>=2.9.0
apscheduler>=3.3.0
 No newline at end of file

sopds-scanner.pid

deleted100644 → 0
+0 −1
Original line number Diff line number Diff line
7960
 No newline at end of file
Loading