Настройка репозитория приложений F-Droid

F-Droid.org является репозиторием пакетов по умолчанию в клиенте F-Droid, но это не единственная возможность. Любой может создать свой собственный репозиторий, а пользователи могут контролировать, какие репозитории использует их клиент, включая даже отключение репозитория f-droid.org по умолчанию. Эта модель в некоторой степени похожа на дистрибутив Debian GNU/Linux. Как и в Debian и Ubuntu, вы также можете создать свои собственные репозитории для использования всеми желающими. Пользовательские репозитории даже не обязательно должны собирать APK, они могут быть просто “простыми бинарными репозиториями” любых APK.

Обзор

Если вы хотите поддерживать простой двоичный репозиторий APK и пакетов, полученных в другом месте, процесс довольно прост:

  1. Установка серверных инструментов
  2. Создайте каталог под названием fdroid, затем запустите fdroid init в этом каталоге для создания ключа подписи, который однозначно идентифицирует ваш репозиторий.
  3. По желанию отредактируйте файл config.yml по своему вкусу, подробные примеры находятся в examples/config.yml
  4. В fdroid создайте каталог под названием repo и поместите в него файлы APK.
  5. Запустите fdroid update.
  6. Если программа сообщает, что какие-либо файлы метаданных отсутствуют, вы можете создать их в каталоге metadata и запустить программу снова.
  7. Чтобы облегчить создание файлов метаданных, запустите fdroid update с опцией -c. Это создаст “скелетные” файлы метаданных, которые отсутствуют, и вы сможете просто отредактировать их и заполнить деталями.
  8. Затем, если вы что-то изменили, снова запустите fdroid update.
  9. Выполнение fdroid update добавляет каталог icons в каталог репозитория, а также создает индексные файлы репозитория (index.xml, index.jar и т.д.) ПРИМЕЧАНИЕ: Чтобы сделать этот процесс безопасным, прочитайте Real World Setup ниже!
  10. Опубликуйте полученное содержимое каталога repo на вашем веб-сервере (или установите serverwebroot в config.yml, а затем используйте fdroid deploy)

В результате выполнения вышеописанных действий вы получите каталог repo, который нужно просто поместить на любой HTTP (а лучше HTTPS) сервер, чтобы сделать его доступным.

Хотя некоторая информация о приложениях (и их версиях) извлекается непосредственно из файлов APK, большая часть поступает из соответствующего файла в каталоге metadata/. Файл метаданных, охватывающий ВСЕ версии конкретного приложения, называется package.id.yml, где package.id - уникальный идентификатор этого пакета. Все поля метаданных сборки актуальны для бинарных APK, за исключением записей Builds:, которые следует опустить.

Локальная демонстрационная копия HOWTO

Это полное HOWTO по созданию собственного репозитория, где бы вы ни хотели его разместить. Оно немного техническое, вы будете использовать терминал, но вам не нужно быть экспертом по терминалу, чтобы следовать ему. Сначала в этом HOWTO мы рассмотрим настройку тестового репозитория, который не очень безопасен. Затем будет рассказано о настройке репозитория для реального использования, с ключом подписи на отдельной машине от публичного веб-сервера. Прежде чем начать, вам необходимо получить инструменты fdroidserver и веб-сервер. Для веб-сервера в этом HOWTO будет использоваться nginx, поскольку он легкий, но подойдет любой, если у вас уже запущен.

sudo apt-get install nginx

В данном HOWTO мы создадим “простой бинарный репозиторий” для размещения коллекции APK. Репозиторий будет создан в рекомендуемом подкаталоге fdroid/. Это даст инструменту fdroid свой собственный каталог для работы и сделает URL репозитория четко обозначенным как репозиторий F-Droid. Кроме того, клиент F-Droid будет автоматически искать репозиторий по пути /fdroid/repo, если пользователь введет только сервер (например, “https://f-droid.org”). Давайте дадим нашему обычному пользователю контроль над этим подкаталогом в корне web, чтобы нам не нужно было запускать инструменты F-Droid от имени root (в nginx корнем web является /usr/share/nginx/www, для других web-серверов он отличается):

sudo mkdir /usr/share/nginx/www/fdroid
sudo chown -R $USER /usr/share/nginx/www/fdroid
cd /usr/share/nginx/www/fdroid
fdroid init

Теперь поместите файлы APK в /usr/share/nginx/www/fdroid/repo и вы готовы выполнить команды для сборки репозитория (если fdroid init не может найти ваш Android SDK в /opt/android-sdk или $ANDROID_HOME, он предложит вам указать путь):

cd /usr/share/nginx/www/fdroid
cp /path/to/\*.apk /usr/share/nginx/www/fdroid/repo/
fdroid update --create-metadata

Вуаля! Теперь у вас есть рабочий репозиторий F-Droid! Помните, что это только тестовая установка, не забудьте перейти к Real World Setup после этого! Добавьте ваш новый репозиторий в клиент F-Droid на вашем устройстве Android, чтобы протестировать его. Это делается на экране Manage Repos, доступном из меню. URL вашего репозитория будет именем хоста или IP-адресом вашего компьютера с добавлением /fdroid/repo/ в конце, т.е. https://mysecureserver.com/fdroid/repo/ или http://192.168.2.53/fdroid/repo/. Вы можете временно снять флажок с официальных репозиториев, чтобы легко увидеть, что F-Droid нашел в вашем новом репозитории.

Хотя вы можете предоставлять репозиторий по произвольному URL, обычно он доступен по URL, заканчивающемуся на /fdroid/repo/. Хорошей причиной для этого является то, что клиент F-Droid устанавливает фильтр намерений и регистрирует себя для таких URL. В результате пользователь, у которого установлено приложение F-Droid и который откроет такой правильно сформированный URL, получит на своем устройстве F-Droid и направит его непосредственно к добавлению репозитория.

Персонализация

Вы также можете настроить свой репозиторий, отредактировав файл конфигурации. Обязательно используйте текстовый редактор для программирования, например editor /usr/share/nginx/www/fdroid/config.yml. В конфигурационном файле вы можете задать имя репозитория, описание, иконку, пути к определенным версиям инструментов сборки, ссылки на связанную вики, а также вести ли статистику. Вот основной блок описания репозитория:

repo_url = "http://guardianproject.info/fdroid/repo"
repo_name = "Мой локальный репозиторий"
repo_icon = "GP_Logo_hires.png"
repo_description = """
A local test repository of Hans-Christoph Steiner <hans@guardianproject.info>.
It is a repository of Guardian Project apps. """

Чтобы поместить иконку в репозиторий, выберите изображение PNG для помещения в репозиторий. PNG помещается в /usr/share/nginx/www/fdroid/, файл можно назвать как угодно (по умолчанию это fdroid-icon.png). Если вы измените имя по умолчанию, не забудьте обновить repo_icon и archive_icon в /usr/share/nginx/www/fdroid/config.yml.

Последнее замечание о безопасности: эта установка не подходит для настоящего публичного репозитория, вместо этого это быстрый и простой способ протестировать F-Droid. По крайней мере, при создании репозитория на месте убедитесь, что config.yml недоступен через веб, поскольку он содержит пароли. Если права доступа к файлу правильные (например, chmod 0600 config.yml), то config.yml не будет доступен для чтения веб-сервером.

Метаданные приложения

Вы можете контролировать многие аспекты того, как приложение представлено в вашем репозитории, редактируя метаданные приложения. Выполнение fdroid update --create-metadata создаст файлы-заглушки для того, чтобы у вас был рабочий репозиторий. Затем вы можете отредактировать эти файлы, чтобы добавить описание, ссылки на пожертвования, баг-трекер, лицензию, домашнюю страницу и т.д. Смотрите Build Metadata Reference для получения дополнительной информации о всех опциях.

CurrentVersionCode предоставляет удобный способ развертывания бета-релизов в том же потоке, что и полные релизы. Вы можете установить CurrentVersionCode на текущий стабильный релиз, а затем добавить APK в репозиторий. Пользователи будут автоматически обновляться только до указанного вами кода версии. Любые APK для данного приложения в вашем репозитории, которые имеют более новый код версии, не будут автоматически установлены. Вместо этого пользователь может увидеть их в клиенте в представлении деталей приложения и установить их вручную.

Настройка в реальном мире

Теперь, когда у вас есть рабочий репозиторий, можно приступать к созданию реальной установки. Создать репозиторий на месте, как мы делали это выше, очень просто, именно поэтому это HOWTO началось с этого, но это не так безопасно, как должно быть, если ваше репозиторий будет основной точкой распространения. Например, ключи подписи репозитория никогда не должны находиться на публичном сервере.

To improve this situation, generate the repo on a non-public machine like your laptop, keeping config.yml and the keystore only on that machine (remember to make backups!). Then use fdroid deploy to publish the changes to your repo on a separate server via ssh. So start a new repo from scratch on your non-public machine:

mkdir ~/fdroid
cd ~/fdroid
fdroid init
cp /path/to/\*.apk ~/fdroid/repo/
fdroid update --create-metadata
emacs config.yml # добавляем serverwebroot и т. д.
fdroid deploy -v

Now edit config.yml to set serverwebroot, it is in the form of a standard SCP file destination. Then fdroid deploy will do the publishing via rsync over ssh. So both computers will have to have ssh and rsync installed and setup. You can also use your own existing signing key rather than the one generated by fdroid init, just edit repo_keyalias, keystore, keystorepass, keypass, and keydname in ~/fdroid/config.yml.