Commit 61f7de72 authored by Dmitry Shelepnev's avatar Dmitry Shelepnev
Browse files

Update README.md

parent e67d7b88
Loading
Loading
Loading
Loading
+99 −25
Original line number Diff line number Diff line
#### Simple OPDS Catalog - Простой OPDS Каталог  
#### Author: Dmitry V.Shelepnev  
#### Версия 0.32
#### Версия 0.33

#### 1. Простая установка Simple OPDS (используем простую БД sqlite3)

## Зависимости проекта
1.1 Зависимости.
- Требуется Python не ниже версии 3.3 (используется атрибут zlib.Decompressor.eof, введенный в версии 3.3)  
- Django 1.8
- Pillow 2.9.0
- apscheduler 

## Установка проекта
1.2 Установка проекта (Fedora, RedHat, CentOS)
    yum install python3
	pip install -r requirements.txt

## Инициализация базы данных MySQL.
1.3 Настраиваем ./sopds/settings.py (настройки в конце файла)

	SOPDS_ROOT_LIB = < Путь к каталогу с книгами >
	SOPDS_AUTH = < False | True >
	SOPDS_SCAN_SHED_MIN  = '0,12'
	SOPDS_SCAN_SHED_HOUR = '0'
    
1.4 Производим инициализацию базы данных и заполнение начальными данными (жанры)

	python3 manage.py migrate
	python3 manage.py sopds_util --clear
	
1.5 Cоздаем суперпользователя

	python3 python manage.py createsuperuser
	
1.6 Вручную запускаем разовое сканирование коллекции книг (Выполняется очень долго)

	python3 manage.py sopds_scanner scan

1.7 Запускаем HTTP/OPDS сервер

	python3 manage.py sopds_server start --daemon
	
1.8 Запускаем SCANNER сервер

	python3 manage.py sopds_scanner start --daemon
	
	
#### 2. Настройка базы данных MySQL (опционально, но очень желательно для увеличения производительности).
2.1 Если Вы уже запустили HTTP/OPDS сервер и SCANNER сервер, то потребуется сначала остановить их:

	python3 manage.py sopds_server stop
	python3 manage.py sopds_scanner stop

2.2 Для работы с большим количеством книг, очень желательно не использовать sqlite, а настроить для работы БД MySQL
Во первых для работы каталога необходимо создать базу данных "sopds" и пользователя с необходимыми правами,
например следующим образом:

@@ -21,26 +59,62 @@
	mysql > commit;  
	mysql > ^C  
	
## Настраиваем ./sopds/settings.py (настройки в конце файла)
2.3 Далее в конфигурационном файде нужно закомментировать строки подключения к БД sqlite и соответсвенно раскомментировать
строки подключения к БД Mysql:

	SOPDS_ROOT_LIB = < Путь к каталогу с книгами >
	SOPDS_AUTH = < False | True >
	SOPDS_SCAN_SHED_MIN  = '0,12'
	SOPDS_SCAN_SHED_HOUR = '0'
    DATABASES = {    
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'sopds',
            'HOST': 'localhost',
            'USER': 'sopds',
            'PASSWORD' : 'sopds'
        }             
    }

    # DATABASES = {
    #    'default': {
    #        'ENGINE': 'django.db.backends.sqlite3',
    #        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    #    }         
    #}  

2.4 Далее необходимо для инициализации и заполнения вновь созданной БД звнво выполнить пункты 1.4 - 1.8 данной инструкции

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

3.1 Конвертер fb2-to-epub http://code.google.com/p/fb2-to-epub-converter/
- во первых необходимо скачать последнюю версию конвертера fb2toepub по ссылке выше (текущая уже находится в проекте)
  к сожалению конвертер не совершенный и не все книги может конвертировать, но большинство все-таки конвертируется 
- далее, необходимо скопировать архив в папку **./convert/fb2toepub** и разархивировать 
- далее, компилируем проект командой make, в результате в папке  unix_dist появится исполняемый файл fb2toepub 
- в конфигурационном файле ./sopds/settings.py необходимо задать путь к этому конвертеру, например таким образом:  

>     SOPDS_FB2TOEPUB = os.path.join(BASE_DIR,'convert/fb2toepub/unix_dist/fb2toepub')

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

3.2 Конвертер fb2epub http://code.google.com/p/epub-tools/ (конвертер написан на Java, так что в вашей системе должнен быть установлен как минимум JDK 1.5)  
- также сначала скачать последнюю версию по ссылке выше (текущая уже находится в проекте)  
- скопировать jar-файл например в каталог **./convert/fb2epub** (Здесь уже лежит shell-скрипт для запуска jar-файла)  
- Соответственно прописать пути в файле конфигурации **./sopds/settings.py** к shell-скрипту fb2epub (данный конвертер работает также и в Windows) 

## Производим инициализацию базы данных и заполнение начальными данными (жанры)
	python manage.py migrate
	python manage.py sopds_util --clear
>     SOPDS_FB2TOEPUB = os.path.join(BASE_DIR, 'convert\\fb2epub\\fb2epub.cmd' if sys.platform =='win32' else 'convert/fb2epub/fb2epub' )

## Cоздаем суперпользователя
	python manage.py createsuperuser
3.3 Конвертер fb2conv (конвертация в epub и mobi) http://www.the-ebook.org/forum/viewtopic.php?t=28447  
- Необходимо установить python 2.7 и пакеты lxml, cssutils:   
  
## Вручную запускаем разовое сканирование коллекции книг
	manage.py sopds_scanner scan
         yum install python  
         yum install python-lxml  
         yum install python-cssutils  
  
## Запускаем HTTP/OPDS сервер
	manage.py sopds_server start --daemon
- скачать последнюю версию конвертера по ссылке выше (текущая уже находится в каталоге fb2conv проекта)  
- скачать утилиту KindleGen с сайта Amazon http://www.amazon.com/gp/feature.html?ie=UTF8&docId=1000234621 
  (текущая версия утилиты уже находится в каталоге fb2conv проекта)  
- скопировать архив проекта в **./convert/fb2conv** (Здесь уже подготовлены shell-скрипты для запуска конвертера) и разархивировать его  
- Для конвертации в MOBI нужно архив с утилитой KindleGen положить в каталог с конвертером и разархивировать  
- В конфигурационном файле **./sopds/settings.py** задать пути к соответствующим скриптам:  
   
## Запускаем SCANNER сервер
	manage.py sopds_scanner start --daemon
>     SOPDS_FB2TOEPUB = os.path.join(BASE_DIR,'convert/fb2conv/fb2epub')
>     SOPDS_FB2TOMOBI = os.path.join(BASE_DIR,'convert/fb2conv/fb2mobi')
+2 −2
Original line number Diff line number Diff line
@@ -11,7 +11,7 @@ from django.conf import settings

from opds_catalog.models import Counter
from opds_catalog.sopdscan import opdsScanner
from opds_catalog.settings import SCANNER_LOG, SCAN_SHED_DAY, SCAN_SHED_DOW, SCAN_SHED_HOUR, SCAN_SHED_MIN, LOGLEVEL
from opds_catalog.settings import SCANNER_LOG, SCAN_SHED_DAY, SCAN_SHED_DOW, SCAN_SHED_HOUR, SCAN_SHED_MIN, LOGLEVEL, SCANNER_PID

class Command(BaseCommand):
    help = 'Scan Books Collection.'
@@ -22,7 +22,7 @@ class Command(BaseCommand):
        parser.add_argument('--daemon',action='store_true', dest='daemonize', default=False, help='Daemonize server')
        
    def handle(self, *args, **options): 
        self.pidfile = os.path.join(settings.BASE_DIR, "sopds-scanner.pid")
        self.pidfile = os.path.join(settings.BASE_DIR, SCANNER_PID)
        action = options['command']            
        self.logger = logging.getLogger('')
        self.logger.setLevel(logging.DEBUG)
+2 −2
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ from django.conf import settings
from django.core.management.base import BaseCommand
from django.core.management import call_command

from opds_catalog.settings import SERVER_LOG
from opds_catalog.settings import SERVER_LOG, SERVER_PID

class Command(BaseCommand):
    help = 'HTTP/OPDS built-in server'
@@ -19,7 +19,7 @@ class Command(BaseCommand):


    def handle(self, *args, **options):
        self.pidfile = os.path.join(settings.BASE_DIR, "sopds-server.pid")
        self.pidfile = os.path.join(settings.BASE_DIR, SERVER_PID)
        action = options['command']
        self.addr = options['host']
        self.port = int(options['port'])
+2 −1
Original line number Diff line number Diff line
@@ -28,11 +28,12 @@ TEMP_DIR = getattr(settings, "SOPDS_TEMP_DIR", os.path.join(settings.BASE_DIR,'t
SINGLE_COMMIT = getattr(settings, "SOPDS_SINGLE_COMMIT", True)
TITLE_AS_FILENAME = getattr(settings, "SOPDS_TITLE_AS_FILENAME", True)
ALPHABET_MENU = getattr(settings, "SOPDS_ALPHABET_MENU", True)
#BOOK_SHELF = getattr(settings, "SOPDS_BOOK_SHELF", True)
NOCOVER_PATH = getattr(settings, "SOPDS_NOCOVER_PATH", os.path.join(settings.BASE_DIR,'static/images/nocover.jpg'))
AUTH = getattr(settings, "SOPDS_AUTH", False)
SERVER_LOG = getattr(settings, "SOPDS_SERVER_LOG", os.path.join(settings.BASE_DIR,'log/sopds_server.log'))
SCANNER_LOG = getattr(settings, "SOPDS_SCANNER_LOG", os.path.join(settings.BASE_DIR,'log/sopds_scanner.log'))
SERVER_PID = getattr(settings, "SOPDS_SERVER_PID", os.path.join(settings.BASE_DIR,'tmp/sopds_server.pid'))
SCANNER_PID = getattr(settings, "SOPDS_SCANNER_PID", os.path.join(settings.BASE_DIR,'tmp/sopds_scanner.pid'))
SCAN_SHED_MIN = getattr(settings, "SOPDS_SCAN_SHED_MIN", '0')
SCAN_SHED_HOUR = getattr(settings, "SOPDS_SCAN_SHED_HOUR", '0')
SCAN_SHED_DAY = getattr(settings, "SOPDS_SCAN_SHED_DAY", '*')
Loading