Navigation Menu

Skip to content

larin/librusec

Repository files navigation

howto по установке Либрусека (v0.31)

Либрусек разрабатывается как модуль друпала. Можно прикрутить и к другой cms, но это потребует определённых усилий.
Должно быть не слишком сложно. Но бессмысленно.
По объему кода представляет из себя 20% друпала 6.0 - 6000 строк 300 килобайт php.

Всё тестировалось исключительно с Apache/MySQL5 под линуксом, должно работать и с другими серверами, не проверял. Видимо, потребует напильника. (однако, Apache-специфичных вещей вроде бы не используется, поэтому достаточно любого веб сервера, хоть на fastcgi.)

Под винду точно потребует, причём большого. Используются хардлинки, семафоры и прочая unix-специфичная мелочь. (забудьте про винду =))
Используется PHP5, т.к. на четвертом проблема с кодировками XML.
Крайне желательно иметь APC или еще какой пых-кэш (однако, работает и без кешей и прочего. Если посещаемость реально большая да, это поможет. Но не критично). Необходимые утилиты: unzip, rar, ncftp, wget (только при установке)

Все диалоги и прочие тексты по-русски, желающие перевести на английский and submit the module to the drupal.org - welcome.
На клиенте необходима поддержка utf8 и крайне желателен javascript достаточный для jquery (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)

Может быть использован в качестве движка для библиотечного сайта или для создания клона/зеркала, по вкусу.
В случае создания зеркала придётся отключать все возможности редактирования и заниматься этим на базовом сайте, БД и файлы миррорить оттуда.

Общее описание:
1. Храним книги в формате fb2. Пользователю предлагается ряд форматов на выбор, всё конвертируется из fb2.
Помимо того могут храниться книги в любом другом формате, но без поддержки конверторов и прочих удобств.
2. Все изменения - авторов, жанров, названий и т.п. происходят в БД и могут быть откачены. Файли книжек не меняются.
3. Всё, кроме хранимых собственно книжек - в utf8, включая html, полученный из fb2.
4. Роли пользователей:
  3я - библиотекари (больший доступ к управлению)
  4я - враги (запрет на редактирование книг)

Собственно howto:
1. Установить друпал (http://drupal.org / http://drupal.ru) (Ниасиляторы этого пункта могут не беспокоиться поднятием зеркала. Вся достаточная информация по нему есть на указанных сайтах. Друпал ставить в корень сайта.)

2. Прикрутить к нему все необходимые модули (по вкусу). Тысячи их. Либрусек не зависит ни от чего, можно ставить на голый друпал. (Нужно поставить темой оформления BlueBreese, т.к. некоторые вещи завязаны на нее. Чинится, но это отдельная тема.)

3. Установка библиотеки.

3.1 распаковать следующие модули:
- модуль движка Либрусека в modules/librusec/ (последнюю версию брать отсюда: http://github.com/larin/librusec/tree/master)
- модуль bwlist в modules/bwlist/ (брать с http://lib.rus.ec/sql/bwlist.zip)
- код конверторов и всё для них необходимое в /modules/conv/  (не обязательно, можно не делать)
- модуль memcache (брать с http://drupal.org/project/memcache). Если его поставить не удаётся, то создать таблицу librusec для кэша:
CREATE TABLE IF NOT EXISTS `librusec` (
  `cid` varchar(255) NOT NULL default '',
  `data` varchar(21000) character set utf8 collate utf8_bin default NULL,
  `expire` int(11) NOT NULL default '0',
  `created` int(11) NOT NULL default '0',
  `headers` varchar(255) default NULL,
  `serialized` smallint(6) NOT NULL default '0',
  PRIMARY KEY  (`cid`),
  KEY `expire` (`expire`)
) DEFAULT CHARSET=utf8;

3.2 из корня вебсервера: ln -s modules/librusec/AJAX.php (файл AJAX.php должен быть доступен по GET /AJAX.php. Тут функции, вынесенные из друпала для ускорения)

3.3 Создать следующие каталоги и дать на них права апачу (в public_html AKA wwwroot) (туда, где ставили друпал)

b - книги в формате fb2 (распакованные) (Выкачать торрентом из http://lib.rus.ec/allbooks)
Если файлы были выкачаны ранее, то удостовериться что в архивах имена файлов в виде «номер.fb2», в ином случае переименовать/перекачать. (вообще, это весьма неудачный механизм хранения, т.к. в одном каталоге получается больше сотни тысяч файлов, что весьма негативно влияет на скорость работы. Лучше было бы использовать некоторую систему подкаталогов-хэшей. Однако пока пусть будет так)
b.html, b.fb2, b.rtf, b.txt, ... - кэш нагенерённого из fb2 (в зипах). Если диска мало, а процессора много - можно периодически чистить.
b.tmp - временные файлы пользователей. Массовая выкачка, закачка архивов. Нужно периодически чистить. (эти каталоги надо просто создать, не забыв дать на них такие права, чтобы скрипты веб сервера могли бы создавать в них файлы.)
b.usr - книги закаченные пользователями в других форматах (Качать также как и fb2, ссылка выше. Тут имена файлов не менялись.)
books.что угодно - для спецразделов по желанию (сейчас используются books.man, books.sci, books.dsp) (Можно не создавать)
cache - кэш тяжелых страниц (новости, списки по жанрам)
i - картинки для html
ocr - для закачки новых книг. К этой папке даём доступ по ftp (Для зеркала не актуально)
img - иконки (s1.gif, s2.gif, zamok.gif, znak.gif, znak1.gif, znak5.gif) (взять с либрусека, см. выше)
subook - буклиб (для желающих). На сегодня 30G и быстро растёт. (Не нужно)

команды для создания каталогов:
mkdir i cache b b.usr b.fb2 b.tmp b.htm b.html b.txt
chmod 777 i cache b b.usr b.fb2 b.tmp b.htm b.html b.txt
useradd ocr; ln -s /home/ocr /www/ocr; chmod 777 /home/ocr (Для зеркала эта команда не нужна)

3.4 Качалка-апдейтер файлов:

#!/bin/sh

cd <временный каталог>

wget -q -N http://lib.rus.ec/all/daily/index.html

mkdir tmp 2>/dev/null

for i in `cat index.html |grep .zip|sed -e "s/^.*>\([0-9]\+-[0-9]\+\\.zip\)<.*$/\1/"` ; do
  if [ ! -r $i ] ; then
    cd tmp
    wget -q -c http://lib.rus.ec/all/daily/$i && mv $i ../$i
    cd ..
    7z x -o<каталог /b зеркала> $i
  fi
done


Особенность качалки: во временном каталоге лежат файлы дневных обновлений. Скрипт автоматом выкачивает с либрусека те обновления, которых нет. Если какое-либо обновление выкачивать не хочется, то надо создать файл нулевого размера на его месте. При первоначальной настройке можно выполнить команду «for i in `wget -q -O - http://lib.rus.ec/all/daily/index.html |grep .zip|sed -e "s/^.*>\([0-9]\+-[0-9]\+\\.zip\)<.*$/\1/"` ; do touch $i ; done», это создаст пустые файлы вместо всех текущих обновлений.)

4. Создать базу данных, запустив librusec.sql (файл лежит вместе со скриптами, в нем не все таблицы прописаны, а также не все правильны, но при апдейте баз недостающее будет [пере]создано как надо). (всё что можно - в utf8 (mysql dbname < tables.sql)
Прогнать скрипт-обновление баз, запустив update.sh в папке /update/ либо см. п. 4.6

Используемые таблицы:
4.1 Должны быть заполнены обязательно до начала работы:
libgenrelist - список жанров. Содержит все стандартные жанры FB2 и несколько нестандартных.

4.2 Должны быть взяты с Либрусека если делается клон, или могут быть при желании использованы - если контент собирается самостоятельно
libavtorname - список авторов
libavtoraliase - список дублей авторов
libseqname - список сериалов
libfilename - имена файлов не-fb2 (fb2 именуются BookId.fb2)

4.3 Должны быть взяты с Либрусека если делается клон, или пустые - если контент собирается самостоятельно
libbook - список книг
libavtor - классификатор книга/автор
libtranslator - классификатор книга/переводчик
libgenre - классификатор книга/жанр
libseq - классификатор книга/сериал
libsrclang - src-lang (есть в fb2, зачем нужен пока не придумал)

4.4 Создаются пустыми - заполняются при работе библиотеке
liblog - лог выкачанных анонимами книг. Не учитываются повторы с одного ip, массовая и групповая выкачка
libreaded - лог выкачанных зарегистрированными пользователями книг. Не учитываются повторы, массовая и групповая выкачка
libactions - лог изменений вносимых пользователями в описания книг, а так же добавлений/удалений
libpolka - отложенные на полку книги и впечатления пользователей
libcache - кэш аннотаций и оглавлений, чтоб каждый раз fb2 не парсить
libcache1 - кэш советов (читавшие это также читали то...)
libuseropt - поюзерное состояние чекбоксиков
librusec - общий кэш либрусека. Используется при отсутствии memcached. Лучше до этого не доводить.
librate - оценки книг
libquality - качество файлов
libblocked - книги, изменение которых заблокировано библиотекарями
libanode, libbnode - ноды, являюшиеся описанием авторов/книг

4.5 Для специальных целей, можно вообще не создавать
libdonations - полученные пожертвования
booklib - список книг буклиба, для покнижной выкачки (http://lib.rus.ec/booklib)

4.6 Качалка-апдейтер баз:

#!/bin/sh

cd <временный каталог>
TABLES="lib.libavtoraliase.sql.gz lib.libavtorname.sql.gz lib.libavtor.sql.gz \
lib.libbook.sql.gz lib.libfilename.sql.gz lib.libgenrelist.sql.gz \
lib.libgenre.sql.gz lib.libjoinedbooks.sql.gz lib.libseqname.sql.gz \
lib.libseq.sql.gz lib.libsrclang.sql.gz lib.libtranslator.sql.gz"
for i in $TABLES ; do
  wget -q -N http://lib.rus.ec/sql/$i && ( zcat $i | mysql -u <юзер базы> <имя базы> -p<пароль к базе> )
done;


Что ОЧЕНЬ бы хотелось от либрусека: доступа к этим файлам по rsync, чтобы не перекачивать базы каждый раз заново, ибо это крайне нерационально. Но пока нету. Вообще могу порекомендовать брать их отсюда, для этого заменить «http://lib.rus.ec/sql/$i» на «http://lib.ololo.cc/libdb/$i», и тут rsync сделать можно, если будет такая потребность.



5. Настройка друпала (для зеркала не актуально)
В админке друпала настроить меню, блоки и другие параметры (/admin/build/menu-customize/navigation, /admin/build/block, /admin/settings/librusec)
Создать публикации с необходимыми текстами (обращение к читателям, писателям, чаво и проч.). Расставить ссылки по вкусу. (читать документацию к друпалу)
В админке друпала (admin/user/access) проставить права пользователей. 
- имеет смысл создать отдельную роль для админа (admin/user/roles). Пользователь с uid 1 имеет все права (вообще все, так что надо аккуратней: чем меньше действий совершается черз этот аккаунт, тем лучше), остальное настраивается через админку. Изменить можно в функции SuperUser() в librusec.inc
- библиотекарь - дополнительные права - просмотр деятельности пользователей, откат изменений, блокирование вандалов.

NB. кое-что делается только напрямую через БД, так что phpMyadmin или аналог - обязателен.


6. Заполнение книгами (если у вас зеркало, то всё уже должно быть сделано)
6.1 По одной - на странице любого автора есть кнопочка добавить книгу.
6.2 Массово - /upload/ftp
6.3 Клонирование Либрусека. В настройках поставить галочку Зеркало - это отключит добавление и редактирование книг.
Весь накопленный объем литературы делится на две части.
6.3.1 50G FB2. http://lib.rus.ec/allbooks + ежедневные обновления http://lib.rus.ec/all/daily, распаковать в b/
6.3.2 Закаченное пользователями в других форматах. 40 гиг, распаковать в b.usr. Там же.

7. Подгонка (В качестве домашнего задания читателю предоставляется выполнить этот пункт самостоятельно)
7.1 В файле librusec.inc функция LA() должна быть подогнана под количество серверов и процессоров. Если она возвращает >1, то не пересчитываются кэши, если >2, то отключаются дорогие операции. Для подсчёта используется файл /www/la.sql, должен быть создан в корневой папке.
7.2 Там же функция IsNewUser(). Определяет можно ли пользователю добавлять и менять книги. Можно отключить или изменить задержку.
7.3 В файлах stat.inc и donate.inc поправить всё.

contributors:
- larin
- Grundik
- soshial
- buriy

About

librusec module of the library

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published