Коллекция приложений и файлов F-Droid работает на серверах, управляемых
основными участниками F-Droid. Первоначально основной репозиторий размещался
только на f-droid.org, но по мере роста F-Droid один
f-droid.org уже не справлялся со всей
нагрузкой. Теперь F-Droid поддерживает “зеркальные” серверы, которые
копируют полную копию репозиториев. Размещение зеркала подразумевает запуск
веб-сервера HTTPS, на котором находится полная копия репозитория,
синхронизированная с помощью rsync
.
Требования
Существует два официальных раздела репозитория F-Droid, “repo” (репозиторий) и “archive” (архив). Наиболее важно зеркалировать “репозиторий”, поскольку он используется гораздо чаще, чем “архив”.
Основными ресурсами, требуемыми зеркалу, являются дисковое пространство и пропускная способность канала загрузки. Требования к пропускной способности снижаются с каждым новым зеркалом, но требования к дисковому пространству растут с разумной скоростью. На момент написания статьи (март 2019 года) основное хранилище требует чуть более 60 ГБ дискового пространства в 24 тыс. файлов, а архив требует 300 ГБ дискового пространства в 52 тыс. файлов. Объем требуемого дискового пространства растет с каждым новым выпуском приложения.
Существует много серверов-зеркал, которые предлагают соединение rsync, убедитесь, что выбрали зеркало, ближайшее к вашему серверу-зеркалу:
Материковый Китай | rsync -axv mirrors.tuna.tsinghua.edu.cn::fdroid |
Германия | rsync -axv ftp.agdsn.de::fdroid |
Германия | rsync -axv ftp.fau.de::fdroid |
Индиана, США | rsync -axv plug-mirror.rcac.purdue.edu::fdroid |
Швеция | rsync -axv ftp.lysator.liu.se::fdroid |
Тайвань | rsync -axv mirror.ossplanet.net::fdroid |
Украина | rsync -axv fdroid.astra.in.ua::fdroid |
Вы можете найти актуальную информацию о требованиях к дисковому пространству, выполнив в терминале следующее:
$ rsync --dry-run --recursive --stats --human-readable ftp.fau.de::fdroid .
Настройка
Это руководство предполагает использование Nginx с deb-дистрибутивом и зеркалирование основного хранилища, + архив. Если вы используете альтернативные варианты или не планируете зеркалировать архив, пожалуйста, внесите соответствующие изменения. Также замените пути и домены в примерах на свои собственные.
Для получения помощи в этом процессе не стесняйтесь связаться с нами.
- Создайте соответствующие каталоги
$ sudo mkdir -p /var/www/fdroid/fdroid/repo
$ sudo mkdir -p /var/www/fdroid/fdroid/archive
$ sudo chown -R www-data.www-data /var/www/fdroid
- Синхронизируйте репозитории. Эти команды лучше всего выполнять в
терминальном мультиплексоре (
screen
,tmux
и т. д.), поскольку их выполнение займёт некоторое время. С помощью--info=progress2
вы можете увидеть прогресс.
$ sudo -u www-data -E /usr/bin/rsync -aHS --delete --delete-delay --info=progress2 ftp.fau.de::fdroid/repo/ /var/www/fdroid/fdroid/repo/
$ sudo -u www-data -E /usr/bin/rsync -aHS --delete --delete-delay --info=progress2 ftp.fau.de::fdroid/archive/ /var/www/fdroid/fdroid/archive/
- Создайте cronjob для поддержания репозиториев в актуальном состоянии
Создайте файл cronjob в /etc/cron.d
$ vi /etc/cron.d/fdroid
Fill the file with entries to update the repositories. These commands will run at minute 35 past every 6th hour, you can change it to fit your needs.
35 */6 * * * www-data /usr/bin/rsync -aHS --delete --delete-delay ftp.fau.de::fdroid/repo/ /var/www/fdroid/fdroid/repo/
35 */6 * * * www-data /usr/bin/rsync -aHS --delete --delete-delay ftp.fau.de::fdroid/archive/ /var/www/fdroid/fdroid/archive/
- Настройте свой веб-сервер
Это пример серверного блока для nginx. Если он используется, его следует
скопировать в /etc/nginx/sites-available/ и симлинковать в
/etc/nginx/sites-enabled. Обратите внимание, что важно, чтобы ваш URI был
/fdroid/repo
, чтобы приложение могло автоматически добавить ваше зеркало.
сервер {
listen [::]:80 ipv6only=off;
server_name fdroidmirror.example;
rewrite ^ https://fdroidmirror.example$request_uri permanent;
}
server {
listen [::]:443 ssl http2 ipv6only=off;
server_name fdroidmirror.example;
root /var/www/fdroid/;
# TODO: https://gitlab.com/snippets/1834032
расположение /health {
proxy_pass http://127.0.0.1:8000/;
}
ssl_certificate /etc/letsencrypt/live/fdroidmirror.example/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/fdroidmirror.example/privkey.pem;
# Вставьте сюда TLS-конфиг из генератора SSL-конфигов Mozilla https://mozilla.github.io/server-side-tls/ssl-config-generator/
}
- Отправьте свое зеркало для включения
- Форк mirror monitor repo, добавьте ваше зеркало в список в README и откройте запрос на слияние.
- Откройте проблему на admin repo, включив всю необходимую информацию, с просьбой включить ваше зеркало.
- Как только команда основных авторов сочтет ваше зеркало заслуживающим доверия и надежным, оно будет включено в официальный список.
Кроме того, было бы неплохо включить политику конфиденциальности, чтобы пользователи могли понять, что происходит с их метаданными при использовании зеркала. Purdue PLUG https://plug-mirror.rcac.purdue.edu/info.html и FAU https://ftp.fau.de/datenschutz - два примера.
Другие соображения
- Создайте политику конфиденциальности, которая описывает, что происходит с метаданными (например, FAU, PLUG, Lysator).
- Пересылайте электронные письма о сбоях в работе cronjob, чтобы вы знали, если синхронизация не удалась
- Настройте мониторинг на зеркале, чтобы знать, если оно упадет (в идеале ключевое слово на /srv/mymirror.org/htdocs/fdroid/repo/index-v1.jar)
- Усильте конфигурацию вашего SSH-сервера (отключите аутентификацию пароля, установите fail2ban)
- Включите автоматическое обновление безопасности (в Debian, просто
apt-get install unattended-upgrades
)
Запуск основного зеркала (получение синхронизации через push)
Предпочтительной настройкой является передача обновлений F-Droid на основное
зеркало через rsync по ssh с аутентификацией SSH Key. Это аналогично
Debian, ключевое
отличие в том, что в настоящее время не используется скрипт для
command=""
, но вместо этого есть жестко закодированная команда rsync.
Это действительно хорошо ограничивает взаимодействие безопасности только
тем, что должно происходить (Наименьшие полномочия!).
command="rsync --server -logDtpre.iLsfx --log-format=X --delete --delay-updates . /srv/fdroid-mirror.at.or.at/htdocs/fdroid/"
Единственный элемент этой команды, который можно настроить, - это конечный
путь. Это может быть любой путь, но он должен указывать на каталог
/fdroid/
и должен содержать косую черту. Если любой из параметров rsync
будет изменен, это нарушит настройку синхронизации.
В качестве дополнительной меры предосторожности следует создать учетную
запись пользователя (например, fdroid
), предназначенную для получения
rsync/ssh соединения. Она должна иметь как можно меньше доступа. Он
определенно не должен иметь доступ на запись к файлу authorized_keys,
поскольку это позволит злоумышленнику, получившему доступ на запись,
добавить отдельную строку конфигурации ключа, которая обойдет все
перечисленные там ограничения. Это можно сделать простым способом:
$ sudo chown root.root /home/fdroid/.ssh /home/fdroid/.ssh/authorized_keys
$ sudo chmod 0755 /home/fdroid/.ssh
$ sudo chmod 0644 /home/fdroid/.ssh/authorized_keys