В продолжение цикла статей о Raspberry Pi хочу рассказать, как можно использовать «малину» для организации на ее базе удобной и доступной по сети домашней библиотеки электронных книг.
Этот проект будет полезен всем, но особенно он придется по душе любителям все упорядочивать и раскладывать по полочкам :).
В ходе его реализации мы перенесем на Raspberry Pi хранящиеся на домашних компьютерах и ноутбуках электронные книги, каталогизируем их, а также настроим сетевой доступ к ним через web-интерфейс и собственный OPDS-каталог.
Для тех, кто не знает, что такое OPDS-каталог: это разновидность XML-фида, предназначенная для общения программ-читалок с серверами электронных книжных библиотек. Свои OPDS-каталоги есть у каждой крупной библиотеки, как пиратской Флибусты, так и полностью легального ЛитРеса. Если ввести в настройках книжной читалки адрес OPDS-фида, то можно просматривать содержимое электронной библиотеки прямо из читалки и закачивать понравившиеся книги напрямую в читалку нажатием одной кнопки, тем самым избавляя себя от кучи промежуточных действий.
Для реализации проекта будет использована программа Calibre, веб-сервер Apache и OPDS-сервер COPS.
Содержание
Что нам понадобится
Для осуществления описываемых в этой статье действий понадобится:
- Raspberry Pi 3 Model B
- Внешний жесткий диск
Подразумевается, что на Raspberry Pi уже установлена и настроена OS Raspbian (как это сделать — я писал в этой статье).
Также необходимо уметь правильно монтировать подключаемые по USB накопители, на моем блоге опубликована отдельная статья на эту тему.
Установка Calibre
Первым шагом нужно установить Calibre.
Calibre — программа для управления электронной библиотекой. Описание всех ее возможностей и правил работы с ней по объему потянет на отдельную статью (и эта статья рано или поздно будет написана и опубликована на этом блоге), но если в двух словах: Calibre позволяет каталогизировать электронные книги во всех распространенных форматах, создавая из них единую библиотеку с возможностью гибкого поиска, сортировки по тегам, просмотра аннотаций и обложек.
Также в Calibre есть встроенный веб-сервер, позволяющий поднять OPDS-каталог с веб-интерфейсом буквально в два щелчка мышью.
Но веб-интерфейс встроенного каталога получается громоздким и неудобным, поэтому вместо него мы будем использовать надстройку от стороннего разработчика под названием COPS — Calibre OPDS (and HTML) Server.
Итак, устанавливаем Calibre:
sudo apt-get update sudo apt-get install calibre
Настройка Calibre
После установки Calibre можно запустить через ярлык, который в Raspbian будет находиться в каталоге «Офис» главного меню.
При первом запуске Calibre предложит указать расположение будущей библиотеки. Средняя книга в форматах ePub или FB2 весит 1-2 мегабайта (хотя может и больше, в зависимости от количества иллюстраций), а вот книга в формате PDF может весить вплоть до сотни с небольшим мегабайт. Поэтому объем домашней библиотеки со временем может спокойно перевалить за пару-тройку гигабайт, а если в библиотеке помимо книг будут еще и журналы — занимаемый ею объем пойдет на гигабайты обязательно.
Так что я рекомендую размещать библиотеку не на microSD-карточке, а на подключенном к Raspberry Pi USB-накопителе.
Как правильно монтировать USB-накопители в Raspbian я писал в отдельной статье.
В моем случае я разместил библиотеку по пути /mnt/usbstorage/Ebooks. То есть, файлы будут находиться в папке /Ebooks, которая лежит на внешнем жестком диске, подключенном к «малине» по USB и смонтированном как /usbstorage.
Теперь осталось добавить в библиотеку пару-тройку книг, чтобы было с чем работать в дальнейшем. Calibre понимает все распространенные книжные форматы, так что с этим проблем не будет.
Установка веб-сервера Apache и PHP5
Следующим шагом необходимо установить на Raspberry Pi веб-сервер.
Существует два популярных веб-сервера для *nix-систем: Nginx и Apache. Для наших целей можно использовать любой из них, а в этой статье я буду описывать процесс поднятия OPDS-сервера на Apache.
У Nginx будет немного отличаться процесс настройки, поэтому для слабо разбирающихся в Linux рекомендую использовать Apache и просто повторять описываемые мной действия по шагам.
Итак, устанавливаем Apache:
sudo apt-get install apache2
Теперь нужно установить интерпретатор PHP5:
sudo apt-get install php5-gd php5-sqlite php5-json php5-intl sudo apt-get install php5-common php5 libapache2-mod-php5 php5-cli php5-cgi php5-mysql
Если все сделано верно, то можно ввести в браузере IP-адрес своей «малины» и посмотреть на приветственное сообщение Apache:
Если вы не знаете IP-адрес своей «малины», то его можно узнать консольной командой:
hostname -I
Или просто посмотреть в графическом интерфейсе Raspbian PIXEL, наведя курсор на значок сетевого подключения.
Установка COPS
Заключительный шаг — установка и настройка COPS — той самой надстройки, которая будет работать с базой данных Calibre и обеспечивать доступ к книгам через OPDS-каталог или веб-интерфейс.
Кроме того, в COPS встроена книжная читалка, позволяющая читать книги прямо в браузере без скачивания на устройство. К сожалению, эта встроенная читалка понимает только формат ePub, так что книги в форматах FB2 или MOBI через нее в браузере не полистать. Ну да поддержка ePub — это уже неплохо.
Для установки COPS необходимо ввести 5 консольных команд:
cd /var/www/html sudo mkdir ebooks cd ebooks sudo wget https://github.com/seblucas/cops/releases/download/1.0.1/cops-1.0.1.zip sudo unzip cops-1.0.1.zip
Думаю, понятно, что делают эти команды. Переходим в /var/www/html, создаем там папку /ebooks, в нее скачиваем и затем распаковываем архив с актуальной версией COPS.
Кстати, COPS время от времени обновляется, так что перед установкой лучше посмотреть ссылку на блоге разработчика. Если приведенная мною выше ссылка не работает, то вероятнее всего уже вышла новая версия и нужно качать уже ее.
После распаковки нужно отредактировать файл настроек:
sudo cp config_local.php.example config_local.php sudo nano config_local.php
В нем нас интересуют 2 строчки:
$config['calibre_directory'] = './';
$config['cops_title_default'] = "COPS";
В первой строке должен быть прописан путь к папке библиотеки Calibre.
Во второй строке можно отредактировать, под которым у нас будет отображаться веб-интерфейс библиотеки. Т.е. вместо малоинформативного «COPS» написать, например, «Моя библиотека».
В моем случае путь к библиотеке Calibre прописывается так:
$config['calibre_directory'] = '/mnt/usbstorage/Ebooks/';
Связываем COPS и Apache
Настройка COPS почти завершена. Осталось подружить его с веб-сервером. Это делается через создание нового конфигурационного файла:
cd /etc/apache2/sites-available sudo nano cops.server.conf
В созданном файле прописываем следующее:
<VirtualHost *:80> #Имя хоста ServerName cops.server #Корневая папка хоста DocumentRoot /var/www/html/ebooks <Directory /var/www/html/ebooks> #Разрешение на перезапись всех директив при помощи .htaccess AllowOverride All </Directory> </VirtualHost>
Этот файл объясняет Apache, что у него в директории /var/www/html/ebooks лежит отдельный веб-сайт.
Запуск COPS
Если при установке не было совершено ошибок, то теперь можно открыть веб-интерфейс COPS, введя в браузере http://ip-адрес-raspberry-pi/ebooks/:
Пользоваться в нем поиском:
Просматривать обложки книг:
И аннотации к ним:
А также читать книги в формате ePub прямо в браузере:
А сам OPDS-каталог будет доступен по адресу http://ip-адрес-raspberry-pi/ebooks/feed.php, его можно указать в настройках OPDS программ для чтения на всех своих электронных устройствах.
Возможные проблемы
В целом, в установке и настройке COPS нет ничего сложного.
Тем не менее, в процессе могут возникнуть некоторые проблемы.
Ниже я попытался собрать самые распространенные из возможных проблем вместе со способами их решения.
Ошибка 403
Самая распространенная проблема, которая может возникнуть при установке и настройке COPS — это ошибка 403 Forbidden, выдаваемая браузером при попытке обращения к COPS.
Причина заключается в том, что где-то там на пути к папке с распакованным COPS веб-серверу не хватает прав доступа. Дело в том, что сервер работает от имени отдельного пользователя www-data, в то время как права доступа на файлы и папки принадлежат либо пользователю pi, либо пользователю root.
Решение проблемы — поменять права доступа:
sudo chown -R www-data:www-data /var/www sudo find /var/www -type f -exec chmod 644 {} \; sudo find /var/www -type d -exec chmod 755 {} \;
Скорее всего, это поможет. Но если нет — остается только гуглить по запросу «apache 403 forbidden» и пробовать другие варианты решения.
Проблема настройки прав доступа для Apache и Nginx очень распространена. И лично я побороть Nginx так и не смог, в результате просто установил вместо него Apache. С ним все как-то полегче пошло.
Не работает PHP-интерпретатор
Если при открытии веб-интерфейса COPS в браузере отображается содержание файла index.php в текстовой форме, то по какой-то причине в Apache не запустился интерпретатор PHP5.
Для решения проблемы нужно убедиться, что установлены все нужные пакеты:
sudo apt-get install php5-gd php5-sqlite php5-json php5-intl sudo apt-get install php5-common php5 libapache2-mod-php5 php5-cli php5-cgi php5-mysql
Затем вручную включить интерпретатор:
sudo a2enmod php5
И, наконец, перезагрузить Apache:
sudo /etc/init.d/apache2 restart
Проблемы при установке Calibre
Может случиться так, что установка Calibre не доходит до конца, ругаясь на отсутствие каких-то файлов.
Это может произойти из-за того, что перед началом установки не был обновлен индекс пакетов.
Для решения проблемы нужно обновить индекс пакетов:
sudo apt-get update
И запустить установку Calibre повторно с ключом —fix-missing:
sudo apt-get install calibre --fix-missing
COPS не видит базу данных
Такая проблема возникает у владельцев некоторых NAS Synology, на Raspberry Pi ее быть не должно.
Решение проблемы — сделать так, чтобы весь путь до папки с базой данных был прописан в нижнем регистре и не содержал заглавных букв.
То есть, если рассматривать пример указанных мною настроек, то вместо пути:
/mnt/usbstorage/Ebooks/
Нужно указать путь:
/mnt/usbstorage/ebooks/
И, естественно, переименовать при этом саму папку. Регистр в названии файла имеет значение, «Ebooks» и «ebooks» в вышеприведенном примере — совершенно разные пути с точки зрения Linux-системы.
COPS выдает битые ссылки на скачивание книг
Веб-интерфейс COPS открывается, аннотации к книгам показываются, но ссылки на скачивание книг не работают.
Причина — включена опция Url Rewriting в настройках COPS. По умолчанию, кстати, она выключена.
Решение проблемы — выключить Url Rewriting. Для этого нужно открыть для редактирования файл настроек:
sudo nano config_local.php
И исправить строку
$config['cops_use_url_rewriting'] = "1";
На
$config['cops_use_url_rewriting'] = "0";
Заключение
Многие обладатели Raspberry Pi ограничиваются использованием этого микрокомпьютера в качестве ТВ-приставки, используя его для каталогизации и просмотра медиаконтента.
Но «малина» способна гораздо на большее, и шаг за шагом можно превратить ее в настоящий центр своей домашней сети. Один из таких шагов — перенос на нее коллекции электронных книг с последующей каталогизацией и организацией сетевого доступа.
О дальнейшем расширении возможностей использования Raspberry Pi я напишу в следующих статьях этого цикла.
Raspberry Pi 3B (английская сборка)в интернет-магазине GearBest Raspberry Pi 3B (китайская сборка)в интернет-магазине GearBest
Если поставить COPS и затем Nextcloud, то COPS начинает ругаться «Check if Sqlite is properly installed and loaded. Please install the php5-sqlite extension and make sure it’s enabled». Как-то можно их подружить?
Да, нужно поставить пакет php7.0-sqlite
По умолчанию же устанавливается и используется интерпретатор PHP5, а если ставить Nextcloud по моей инструкции, то переключаемся на PHP7. Соответственно, все доп.пакеты, которые использовались с PHP5, нужно ставить заново уже в их версии для PHP7. Называются они так же, только нужно подставлять в названия «7.0» вместо «5»
Упс, разобрался. Надо поставить php7.0-sqlite
Снова здравствуйте! С PLEX-ом разобрался, установил благодаря Вашему посту, хотя и нашёл ему облегчённую альтернативу — minidlna. Plex тормозит.
А с этой библиотекой всё никак. Шаг за шагом делал всё как написано, кроме PHP7, адреса электронной библиотеки и шага с созданием /var/www/ebooks : Ebooks и ebooks заменено на book по всему тексту. Ошибка такова: захожу на адрес http://10.0.0.26/book и выдаёт:
Not Found
The requested URL /book was not found on this server.
Apache/2.4.25 (Raspbian) Server at 10.0.0.26 Port 80
Каждый шаг записываю в блокнот. Что не так?
Установка calibre
sudo apt-get install calibre
в настройках путь:
/mnt/wd/book
Установка веб-сервера Apache и PHP7
sudo apt-get install apache2
sudo apt-get install php7.0-gd php7.0-sqlite php7.0-json php7.0-intl
sudo apt-get install php7.0-common php7.0 libapache2-mod-php7.0 php7.0-cli php7.0-cgi php7.0-mysql
проверяем приветствие apache:
IP RPI в браузере(10.0.0.26) работает.
Установка COPS
cd /var/www
sudo mkdir book
cd book
sudo wget https://github.com/seblucas/cops/releases/download/1.0.1/cops-1.0.1.zip
sudo unzip cops-1.0.1.zip
sudo cp config_local.php.example config_local.php
sudo nano config_local.php
$config[‘calibre_directory’] = ‘./’;
меняем на
$config[‘calibre_directory’] = ‘/mnt/wd/book’;
и
$config[‘cops_title_default’] = «COPS»;
меняем на
$config[‘cops_title_default’] = «RPI-lib»;
cd /etc/apache2/sites-available
sudo nano cops.server.conf
вставляем:
#Имя хоста
ServerName cops.server
#Корневая папка хоста
DocumentRoot /var/www/book
#Разрешение на перезапись всех директив при помощи .htaccess
AllowOverride All
возможное решение (не помогло):
sudo chown -R www-data:www-data /var/www
sudo find /var/www -type f -exec chmod 644 {} \;
sudo find /var/www -type d -exec chmod 755 {} \;
Очень прошу Вашей помощи. С RPi и средой linux знакомлюсь исключительно по Вашим заметкам.
Запоздало, но все же отвечу.
Пересмотрел сейчас еще раз, оказалось, что небольшая ошибка в инструкции: распаковывать архив надо не в /var/www, а в /var/www/html. Тогда все открывается.
Поправил этот момент в тексте.
Спасибо за информацию, очень полезно. У меня два вопроса:
1. У меня raspbian lite, нет GUI и экрана. Можно calibre настроить в терминале?
2. Как перевести DocumentRoot на внешний USB Disk? А то карточка всего 8 GB
Спасибо.
Простите за орфографию, русский у меня иностраний :-)
1. Calibre можно управлять из консоли, мануал по командам можно найти на официальном сайте, но на мой взгляд это очень неудобно. Более простой способ — поставить Calibre на какой-нибудь компьютер (хоть на Windows, хоть на Linux), а в качестве места для хранения библиотеки указать SMB-шару на Raspberry Pi. Или, если вдруг возникают проблемы (у Calibre есть трудности с чтением-записью по SMB-протоколу, а разработчик исправлять не хочет из принципа), то шару нужно примонтировать в качестве сетевого диска. В любом случае, это намного удобнее, чем работать с консольным интерфейсом данной программы.
2. Я сам не пробовал, но вот инструкция на английском языке:
https://www.digitalocean.com/community/tutorials/how-to-move-an-apache-web-root-to-a-new-location-on-ubuntu-16-04
Всем здравствуйте. Помогите решить данную проблему:
sudo apt-get install php5-gd php5-sqlite php5-json php5-intl
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Пакет php5-gd недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list
Пакет php5-sqlite недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list
Пакет php5-json недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list
Пакет php5-intl недоступен, но упомянут в списке зависимостей другого пакета.
Это может означать, что пакет отсутствует, устарел, или доступен из источников, не упомянутых в sources.list
E: Для пакета «php5-gd» не найден кандидат на установку
E: Для пакета «php5-sqlite» не найден кандидат на установку
E: Для пакета «php5-json» не найден кандидат на установку
E: Для пакета «php5-intl» не найден кандидат на установку
Содержимое sources.list:
deb http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
# Uncomment line below then ‘apt-get update’ to enable ‘apt-get source’
#deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
PHP 5 в официальном репозитории обновился до PHP 7, теперь нужно устанавливать его.
Кстати, преобразовал в Калибри fb2 в Epub. В Калибри открывается в этом формате без проблем, через браузер показывает пустую страницу. В чём может быть проблема? А так идея с книжным сервером замечательная.
Благодарю за подсказку. Использовал sudo aptitude
Потянет библиотеку либрусека? Там порядка 350000 книг. Сортировать нет возможно, конечно. Как вариант что-то предварительно подготовить на Большом Брате (РС) и подсунуть малинке.
Ну саму библиотеку придется прогонять через Calibre (чтобы сформировался файл БД) на PC, а все остальное малина должна потянуть.
Спасибо, очень интересно, а возможно ли таким образом настроить малинку читать пдф из домашней сети, ну типа плекса только для книг.
Можно, но не совсем. Calibre поддерживает книги и документы в формате PDF, а COPS работает с базой данных от Calibre, следовательно тоже поддерживает эти файлы. Но онлайн-просмотрщик в COPS работает только с форматом ePub. Для документов в других форматах (Mobi, FB2, PDF) из веб-интерфейса COPS можно посмотреть метаданные и скачать файл на устройство.
почитал форум COPS, посоветовали для моих целей Ubooquity, который ставится на малинку, подерживает Pdf и Djvu, короче буду пробовать
Здравствуйте! Спасибо за статью. У меня возник вопрос следующего характера: можно ли не только скачивать файлы на машину, но и удалённо добавлять их в библиотеку?
Если да, то можно ли прикрутить эту возможность , что бы, например, с того же смартфона зайти на страницу сервера и по кнопке добрать — указать нужный файл для добавления в библиотеку. Так же, из-за временного отсутствия знаний и понимания в области работы сетей — возник следующий вопрос: данный ип адрес, к которому мы будем обращаться — статический ? Т.е сервер будет поддерживать обработку запроса из другой сети — не только локальной? Это возможно организовать?
Здравствуйте.
1. Книги добавлять можно удаленно, но делается это через Calibre, не из браузера. Официальные клиенты Calibre есть только под Windows, macOS м Linux. Для Android и iOS есть приложение Calibre Companion от сторонних разработчиков, вроде бы можно добавлять книги в библиотеку через него — но это не точно (я сам не проверял).
2. Можно организовать. Статический или динамический IP-адрес у вас — это зависит от провайдера и условий заключенного с ним договора. Обычно статический IP является дополнительной платной опцией и у большинства клиентов его нет. Но даже при динамическом IP можно задействовать один из многочисленных Dynamic DNS сервисов, затем пробросить порт в настройках роутера — и можно пользоваться.
Каким образом можно коллекцию Флибусты экспортировать в MySQL?
Есть желание к имеющему сайту база на MySQL приделать раздел книги и в него влить коллекцию Флибусты, ну конечно же с удобной навигацией и структурой. Чтобы удобно найти быстро скачать или читать в онлайне. Может кто то помочь?