Оновлення портів Ubuntu Touch 20.04

Ubuntu Touch 20.04 додає багато прихованих змін, відповідно до яких потрібно виконати зміни розробниками. Цей документ повинен допомогти зрозуміти, як змусити Ваш порт працювати на Ubuntu Touch 20.04. Хоча кожен порт має свої особливості та вимагає дещо більшого, ніж тут описано. Ми залишаємося доступними у групі Telegram UBports porting та спробуємо відповісти на усі запитання, які можуть виникнути у цьому процесі.

Для портів, основаних на GitLab CI: перехід до загального скрипту компіляції та конфігурація GitLab CI

Через зміни у rootfs, які відбулися в Ubuntu Touch 20.04, нам потрібно змінити спосіб створення пакунків для пристроїв. Замість скрипту з вибірковими змінами (cherry-picking) з інших репозиторіїв порту ми радимо переносити зміни до спільного скрипту компіляції. Використовуючи спільний скрипт Ваш порт отримає останні зміни для побудови пакета для пристрою доти, доки підтримуватиметься rootfs (напр. 22.04 чи новіше). Для переходу до спільного сценарію, видаліть увесь каталог build/ та замініть вміст build.sh на:

#!/bin/bash
set -xe

[ -d build ] || git clone https://gitlab.com/ubports/community-ports/halium-generic-adaptation-build-tools build
./build/build.sh "$@"

Можливо Вам потрібно додати build/ до свого .gitignore.

З того самого приводу, ми радимо користуватися спільною конфігурацією GitLab CI, тож якщо у спільному скрипті є необхідні зміни, Ваш порт не зламається. Використовуючи спільну конфігурацію, цього можна досягти через заміну вмісту .gitlab-ci.yml на:

include:
    - https://gitlab.com/ubports/porting/community-ports/halium-generic-adaptation-build-tools/-/raw/main/gsi-port-ci.yml

variables:
    BUILD_DEVEL_FLASHABLE_FOCAL: "1"

Розділ variables дає змогу створити образ розділу прошивки з Focal rootfs, який можна не використовувати для початкового портування.

Примітка

Скрипт наразі не обробляє єдиний репозиторій, який використовується для компіляції для різних пристроїв. Якщо Вашому порту потрібна така можливість, підтримайте це.

Якщо Ви маєте якість власні зміни/внески до компіляційного скрипту чи конфігурації GitLab CI, Вам можливо потрібно ретельно перевірити ці зміни, щоб Ваш порт працював. Зауважте, що Ви можете додавати нові кроки до конфігурації GitLab CI та розміщати їх після кроків компіляції збірки для пристрою, або ж переписати деякі кроки (але це не рекомендовано).

Для портів, основаних на GitLab CI: перевірте зміни на розділах Android

Багато портів для своєї роботи переписують файли на розділах Android. Це часто досягається через перезапис завдання Upstart mount-android.conf чи то через вміст самого коду, чи через виклик іншого скрипту. Починаючи з Ubuntu Touch 20.04 Upstart більше не використовується (див. нижче) і код не виконається. Якщо Ваш порт має зміни для /opt/halium-overlay чи /usr/share/halium-overlay, нова система накладання (overlay system) про це потурбується автоматично, окрім випадків, щоправда, коли додається новий файл, і тоді знадобитися .halium-overlay-dir (див. Overlay file method).

Крім того, можете розглянути можливість повного переміщення порту для використання системи overlaystore. Однак така міграція не є простою і це зробить Ваш порт несумісним із 16.04 (якщо у Вас немає іншої гілки). Щоб дізнатися більше, зв’яжіться з @peat-psuwit у групі портування UBports.

Для портів Halium 7 чи старіших: оновіть скрипт bluetooth-touch

Те, як раніше працював скрипт bluetooth-touch, пов’язано з Upstart. В Ubuntu Touch 20.04 bluetooth-touch потрапив для використання Systemd. Отже, замість переписування завдання bluetooth-touch-android.conf для Upstart Вам слід переписати /usr/share/bluetooth-touch/android.sh. Зауважте, що цей скрипт виконуватиметься /bin/sh, тож уникайте тут Bash-измів.

Для портів Halium 9 це необхідно, оскільки Bluebinder для створення інтерфейсу замінює bluetooth-touch безпосередньо спілкуючись зі службою HIDL.

Для усіх: налаштуйте usb-moded

usb-moded замінює скрипт setupusb для налаштування та керування режимами USB. Для цього ми створили окрему сторінку. Див. Configuring usb-moded.

Для усіх: перевірте користувацькі завдання Upstart

Деякі порти для виконання на етапі завантаження певних команд мають користувацькі завдання Upstart. Ці завдання для сумісності з Ubuntu Touch 20.04 конвертуються у модулі Systemd. Комусь буде корисним ознайомитися з настановами Ubuntu щодо цього <https://wiki.ubuntu.com/SystemdForUpstartUsers#Job_vs._unit_keywords>.

Крім того, замість написання власних модулів Systemd, користуйтеся скриптом devicehack, який запускається з кожним завантаженням після запуску контейнера Android. Шлях до нього /usr/libexec/lxc-android-config/device-hacks, і він запускається з /bin/sh.