YaCy - это такой распределенный поисковик на Java. Что-то вроде "Сам себе гугл". С появлением разного рода цензуры стал довольно актуальным. Мне была интересно чисто техническая часть вопроса, ну и желание занять купленную плату хоть чем-то.
В моём распоряжении была плата Raspberry Pi 2 и карта формата microSD Class 10 на 32 гигабайта.
Раздел подкачки в 128 мегабайт я вынес в zram-диск, под систему оставил раздел на 16 гигабайт, остальное место поделили между собой загрузочный раздел (128 мегабайт) и раздел под данные. Последний я как раз и решил задействовать по данные поисковика.
Для начала надо добавить в систему JDK от Oracle. Для этого надо скачать с этой страницы архив с актуальной версией JDK8. Строка с ней называется "Linux ARM v6/v7 Hard Float ABI". Архив я распаковал в каталог "/opt" и для простоты переименовал в "jdk".
Для установки самого поисковика ничего сложного делать не надо, всё уже придумано и описано здесь. В инструкции по ссылки упоминается установка OpenJDK из репозиториев Debian. Эти пункты можно смело пропускать, потому что пакет "openjdk-7-jre-headless" при проверке зависимостей всё равно будет установлен.
При установке самого пакета "yacy" будет запущен мастер первичный настройки. Среди прочих он попросит задать начальный и максимальный размер оперативной памяти, который займет java-машина. Для первого значения будет вполне достаточно 128-160 мегабайт. Экспериментальным путем я выяснил, что OOM killer не убивает процесс поисковика при задании второго значения в размере 384МБ или меньше. Оба параметра в любое время можно будет поменять в конфиге программы.
Итак, поисковик установился и возможно даже запустился, но использовать в таком виде его не будем. Сначала надо его остановить такой командой:
sudo service yacy stop
Теперь можно приступать к "оптимизациям".
Сначала я отформатировал упомянутый в начала раздел под данные в файловую систему f2fs, которая по заверениям должна максимально щадяще относиться к SD-карте:
sudo mkfs.f2fs /dev/mmcblk0p3
Если вместо форматирования появляется ругань, что команда не найдена, то надо установить пакет "f2fs-tools".
Поддержка файловой системы f2fs реализована в виде модуля, который надо до монтирования раздела загрузить и прописать в "/etc/modules":
sudo modprobe f2fs
Теперь раздел можно примонтировать в "/mnt":
sudo mount -t f2fs /dev/mmcblk0p3 /mnt
На смонтированный раздел надо перенести содержимое каталога "/var/lib/yacy". Сам каталог при этом удалять не надо, он еще пригодится.
Далее надо позаботиться о хранение логов, которые YaCy генерирует в огромном объеме. В изначальной конфигурации создается не более 20 файлов объемом 1 мегабайт, при этом самые последние записи находятся в файле с именем "yacy00.log". Логи будут храниться на zram-диске в оперативной памяти.
Сначала надо изменить параметры загрузки модуля в "/etc/modules" на такие:
zram num_devices=2
Потом изменить правила udev для zram-дисков в файле "/etc/udev/rules.d/10-zram.rules":
KERNEL=="zram0", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="128M", RUN="/sbin/mkswap $env{DEVNAME}" KERNEL=="zram1", SUBSYSTEM=="block", DRIVER=="", ACTION=="add", ATTR{disksize}=="0", ATTR{disksize}="42M", RUN="/sbin/mkfs.ext2 $env{DEVNAME}"
Первая строка отвечает за swap-диск, вторая за диск для логов. Размер взять с запасом, но памяти больше из-за этого потребляться не будет.
Теперь надо правильно прописать монтирование разделов при загрузке в файле "/etc/fstab":
/dev/zram0 none swap discard 0 0 /dev/mmcblk0p3 /var/lib/yacy f2fs defaults 0 3 /dev/zram1 /var/lib/yacy/LOG ext2 discard,defaults 0 0
Первой строкой подключается подкачка, второй монтируется раздел с данными YaCa, и третьей строкой монтируется диск для логов.
Наконец надо немного подправить стартовый скрипт "/etc/init.d/yacy", чтобы вместо системной Java-машины использовалась та, которую скачали, и чтобы правильно выставлялись права на каталог с логами.
Первое делается установкой переменной JAVA примерно на 43 строке:
JAVA=/opt/jdk/bin/java
Второе же реализуется примерно таким кодом на 117 строке после команды "echo -n "Starting $DESC: "":
chown yacy -R $DATA_HOME/LOG/ rm -rf $DATA_HOME/LOG/*
Осталось для верности включить запуска YaCy при загрузке:
sudo update-rc.d yacy enable sudo update-rc.d yacy defaults
Еще надо поправить права на каталоги, иначе запуск закончится неудачно. Сначала надо смонтировать раздел с данными, потом изменить владельца:
sudo mount /var/lib/yacy sudo chown yacy -R /usr/share/yacy sudo chown yacy -R /var/lib/yacy
После этого можно отправить плату на перезагрузку и проверить, что всё нормально смонтировалось и запустилось.
Для zram-дисков в системном журнале должны присуствовать примерно такие записи
[ 8.789057] zram: Created 2 device(s) [ 8.789754] zram0: detected capacity change from 0 to 134217728 [ 8.794195] zram1: detected capacity change from 0 to 44040192 [ 10.726350] Adding 131068k swap on /dev/zram0. Priority:-1 extents:1 across:131068k SSDscFS [ 12.619215] EXT4-fs (zram1): mounting ext2 file system using the ext4 subsystem [ 12.630871] EXT4-fs (zram1): mounted filesystem without journal. Opts: discard
Так же надо проверить вывод команды "mount".
Web-интерфейс поиска должен открываться по адресу http://raspberry_pi_ip:8090