English: README_EN.md
OPDS-сервер для локального каталога книг, разложенного по внешним ZIP-томам и индексу INPX (как в типичных «библиотечных» раздачах). Клиенты (например, читалки с поддержкой OPDS) получают навигацию, поиск и ссылки на выдачу файлов.
Программа изначально ориентирована на разметку и комплект файлов архива сайта Флибуста (каталог .inpx, строки .inp, тома .zip с FB2 и др.). Другие коллекции с тем же форматом тоже могут подойти, но сценарий и проверки делались вокруг этого варианта. Это не официальный проект Флибусты и не аффилирован с сайтом.
Требуется Go из go.mod (см. версию в файле).
make # бинарник в bin/archiveopds
./bin/archiveopds serve --archive /path/to/library/root --base-url http://127.0.0.1:8080Установка в систему (нужны права root): sudo make install, затем sudo systemd-sysusers, скопируйте environment.example в /etc/archiveopds/environment, systemctl enable --now archiveopds. Переменные: PREFIX, DESTDIR (см. make help).
Arch Linux: deploy/archlinux/PKGBUILD качает архив исходников тега с Forgejo ($url/archive/v$pkgver.tar.gz, как в Gitea). В PKGBUILD выставьте pkgver под существующий тег v$pkgver, затем updpkgsums и makepkg -si из deploy/archlinux. При необходимости замените url на свой инстанс.
Список флагов и переменных окружения:
./archiveopds configПодробнее про память, поиск, лимиты выдачи книг и завершение процесса — в docs/runtime.md.
systemd: unit deploy/systemd/archiveopds.service читает переменные из /etc/archiveopds/environment (префикс ARCHIVEOPDS_*, как у archiveopds config); образец — deploy/systemd/archiveopds.env.example. Пользователь archiveopds можно завести через deploy/sysusers.d/archiveopds.conf и systemd-sysusers. Бинарник в unit задан как /usr/local/bin/archiveopds — при необходимости поправьте путь или используйте systemctl edit.
- GitHub Actions:
.github/workflows/— на push/PR вmainилиmasterзапускаются golangci-lint v2.11.4 (.golangci.yml),go testиgo build; при push тега видаv*(напримерv1.0.0) — сборка артефактов через GoReleaser и публикация GitHub Release (бинарники linux/windows/darwin, amd64/arm64, архивы +checksums.txt). - Линтер локально:
make lint— официальныйgolangci-lint(не ниже v2.11.4 или эквивалент), собранный с той же или более новой minor-версией Go, чем в go.mod (бинарник, собранный со старой Go, с таким go.mod не запустится). - Forgejo / Gitea Actions: дубликаты workflow в
.forgejo/workflows/.
На Forgejo GoReleaser определяет хост по origin и создаёт релиз через API инстанса; в job передаётся GITHUB_TOKEN — так называется встроенный токен в совместимом слое Actions (достаточно прав contents: write для репозитория).
Локальная проверка упаковки без публикации:
go run github.com/goreleaser/goreleaser/v2@v2.4.8 release --snapshot --cleanПроект распространяется на условиях GNU General Public License v3.0. Полный текст — в файле LICENSE.