Обновления и подпись релизов
Новые версии публикуются на странице Releases на GitHub. Приложение само узнаёт о них и устанавливает обновление, только если релиз подписан ключом keqdroid.
Когда приложение проверяет
- при запуске;
- когда вы возвращаетесь в приложение, если с прошлой проверки прошло больше 6 часов;
- когда вы нажимаете «Проверить обновления» в настройках.
Черновики и предварительные версии не предлагаются. Когда VPN включён, запрос к GitHub идёт через сервер.
Окно о новой версии
В окне есть кнопки «Обновить», «Позже» и «Пропустить версию». Само окно появляется не чаще, чем указано в «Поведение» → «Сообщать о новой версии»: каждый день, раз в 3 дня (по умолчанию) или раз в неделю. О пропущенной версии окно больше не напоминает, но в настройках по-прежнему видно, что обновление есть.
Проверка подлинности
В каждом релизе есть файл SHA256SUMS с хешами всех файлов и SHA256SUMS.sig с его подписью Ed25519. Перед установкой приложение:
- скачивает
SHA256SUMSиSHA256SUMS.sig; - проверяет подпись ключом, встроенным в само приложение;
- сверяет хеш скачанного файла с тем, что записан в
SHA256SUMS.
Если подписи нет, она не сходится или хеш отличается, файл удаляется и не устанавливается. Ключей два: основной и запасной, который хранится не на GitHub. Запасной нужен на случай, если основной потеряется: тогда обновления не прекратятся навсегда.
Так же проверяется полная база стран на Android. «О приложении» → «Скачать полную базу» скачивает geoip.dat из последнего релиза и принимает его, только если хеш подписан.
Как ставится обновление
| Где | Что происходит |
|---|---|
| Android | APK открывается в системном установщике; нужно разрешение «Установка приложений» |
| Windows, установщик | новая версия ставится поверх старой без окон установщика, Windows может запросить права администратора; потом приложение перезапускается |
| Windows, портативная | файлы в папке приложения заменяются, и приложение перезапускается |
Linux, .deb | apt-get install через pkexec, система спросит пароль |
Linux, .rpm | rpm -U через pkexec, система спросит пароль |
| Linux, AppImage | файл заменяется на месте; если в его папку нельзя писать, новая версия сохраняется в «Загрузки» |
Linux, .tar.gz | файлы в папке приложения заменяются |
| Linux, Arch | открывается страница релиза, пакет обновляется через PKGBUILD |
| Linux, папка приложения без права записи | открывается страница релиза |
Приложение скачивает файл того же типа, каким оно установлено: AppImage обновляется через AppImage, .deb – через .deb. В Fedora Silverblue, Kinoite, Bazzite и других атомарных системах пакеты устанавливает rpm-ostree, поэтому .rpm просто сохраняется в «Загрузки».
Если VPN был включён, после обновления он включится снова: на Android – после установки APK, на компьютере – после перезапуска.
Проверить файл самому
Релизы после 0.35.0 собираются в GitHub Actions прямо из репозитория keqdroid. Проверить, что файл собран именно там, можно командой:
gh attestation verify <файл> --repo Lemonochka/keqdroidХеш файла можно сверить с SHA256SUMS, например так:
sha256sum -c SHA256SUMS --ignore-missingПодпись кода для Windows пока настраивается, поэтому сборки для Windows сейчас не подписаны.