Новинка: Дистанційне оновлення на Raspberry Pi Connect

  • 20 березня 2026 
  • PhilE

Raspberry Pi Connect — це безпечний і зручний спосіб віддаленого доступу до вашого Raspberry Pi з будь-якої точки світу. Мені це подобається, тому що воно працює за брандмауерами і не плутається, коли пристрою присвоюється інша IP-адреса — це звичайна справа тут, у Pi Towers. Функціональність віддаленого робочого столу чудова, але такий прихильник командного рядка, як я, таємно віддає перевагу новітній функції віддаленої оболонки; вона набагато швидша і не займає багато місця на екрані вашого хост-комп’ютера. І найкраще те, що для обох типів підключення клієнтським програмним забезпеченням може бути будь-який браузер, який у вас є.

Настав час зробити наступний крок у розвитку Raspberry Pi Connect. Останні шість місяців ми наполегливо працювали над абсолютно новою функцією: віддаленим оновленням. Мета досить проста — зробити оновлення програмного забезпечення на ваших пристроях максимально простим і зручним.

Новини про оновлення (апдейт про апдейти :))

Користувачі Connect вже можуть оновлювати свої пристрої так само, як і будь-який Raspberry Pi: або за допомогою піктограми «Оновлення програмного забезпечення» на панелі інструментів, або запустивши одну з команд оновлення (apt upgrade тощо). Тепер, завдяки віддаленим оновленням «по повітрю», користувачі можуть запускати оновлення програмного забезпечення, не відкриваючи сеансу Connect. А оскільки оновленням керують сервери Connect, пристрій навіть не потрібно вмикати в цей момент — Connect завантажить оновлення, коли пристрій знову з’явиться в мережі.

Перш ніж продовжувати, ознайомимося з деякими термінами, які ми використовуємо, коли говоримо про процес віддаленого оновлення:

  • Артефакт/Artefact: пакет, що містить оновлення програмного забезпечення або інструкцію щодо його встановлення (у деяких варіантах англійської мови — «artifact»);
  • Розгортання/Deployment:  інструкція щодо встановлення артефакту; один і той самий артефакт можна встановлювати кілька разів, але кожне встановлення вважатиметься окремим розгортанням.

Крок за кроком

Виконайте наведені нижче дії, щоб здійснити віддалене оновлення за допомогою Raspberry Pi Connect (необхідно, щоб на вашому пристрої була встановлена версія програмного забезпечення Raspberry Pi OS від Trixie):

1. Встановіть найновіший пакет rpi-connect та новий пакет rpi-connect-ota:

$ sudo apt update
$ sudo apt install rpi-connect rpi-connect-ota

Або, якщо ви використовуєте rpi-connect-lite:

$ sudo apt update
$ sudo apt install rpi-connect-lite rpi-connect-ota

2. Увімкніть експериментальні віддалені оновлення за допомогою командного рядка rpi-connect, ввівши пароль після відповідного запиту:

$ rpi-connect ota on

3. Створіть артефакт (або знайдіть такий, створений кимось, кому ви довіряєте).

4. Розмістіть артефакт у місці, доступному для пристрою (пристроїв), який встановить його за URL-адресою (доступ до серверів Connect не потрібен). У випадку з публічним артефактом кроки 3 і 4 вже виконано за вас.

5. Зареєструйте артефакт на веб-сайті Connect разом із його контрольною сумою SHA-256, щоб переконатися, що він не пошкоджений і не підроблений.

6. Натисніть кнопку «Розгорнути», щоб надіслати розгортання на ваші пристрої; цей артефакт можна використовувати багаторазово та для декількох пристроїв.

На цьому етапі стан розгортання буде показувати «Очікування»/‘Pending’. Якщо пристрій підключений до мережі, стан одразу зміниться на «У процесі»/‘In progress’, а наприкінці, за потреби, відбудеться перезавантаження. Після завершення розгортання стан має змінитися на «Успішно»/‘Succeeded’ (може знадобитися оновлення сторінки). У разі виникнення проблем статус буде «Не вдалося»/‘Failed’, і при натисканні на нього з’явиться відповідне повідомлення про помилку. Розгортання, що очікують на виконання, можна скасувати вручну або автоматично, коли в чергу додається інше розгортання.

З пункту A до Б

Деякі віддалені пристрої розташовані ще далі, ніж інші — на горищі, на дереві або в будинку родичів — і останнє, чого ви хочете, — це щоб вони не змогли знову підключитися до мережі після оновлення. Це особливо актуально для побутової техніки та інших пристроїв з мінімальним інтерфейсом користувача, жоден з яких не призначений для виконання функцій комп’ютера. Такі сценарії вимагають наявності можливості спробувати оновлення, а також способу автоматичного повернення до безпечного стану, якщо це не вдасться.

Єдиний надійний спосіб зробити це — забезпечити на кожному пристрої місце для двох версій програмного забезпечення: активної версії та місця (або слота), куди буде розміщена інша. Це зазвичай називають схемою A/B, за якою під час кожного оновлення ролі двох слотів міняються місцями — слот A переходить з активного стану в інший (або навпаки), а слот B — у зворотному напрямку. Розумна частина цієї системи, яка захищає від шкідливих оновлень, полягає в здатності пристрою перезавантажуватися в інший слот без постійного перемикання. Якщо завантаження проходить успішно, пристрій може активувати новий слот. Якщо ж програмне забезпечення виходить з ладу або самовільно перезавантажується, це можна виявити і відмовитися від перемикання.

Схема оновлення A/B базується на деяких простих апаратних можливостях, зокрема на невеликому обсязі даних про стан системи, що зберігаються після перезавантаження (але не після повного вимкнення та увімкнення живлення), а також на сторожовому таймері, який може ініціювати перезавантаження, якщо програмне забезпечення не реагує на його сигнали. Усі пристрої Raspberry Pi мають ці можливості. На жаль, образи операційної системи також потрібно створювати з цими слотами та додатковими розділами для даних, які мають зберігатися під час оновлень. Наскільки нам відомо, це не стосується жодної випущеної на сьогодні операційної системи (хоча Дейв Джонс із Canonical обговорював свої плани щодо майбутніх випусків Ubuntu).

Для розробників, які створюють свої продукти на базі апаратного забезпечення Raspberry Pi, наш інструмент rpi-image-gentool значно спрощує створення образів із такою структурою A/B. У цій публікації на форумі написаній нашим веб-гуру Полом Мукуром, описано сам процес та те, як використовувати отриманий результат для розгортання віддалених оновлень через бездротовий канал у Raspberry Pi Connect.

Просто зробіть це!

До цього моменту артефакти та розгортання описувалися з точки зору оновлень програмного забезпечення, але вони також можуть містити довільні завдання, які потрібно виконати на ваших пристроях. Артефакт може містити один або кілька скриптів для виконання, а також файли даних, які ці скрипти можуть використовувати. Ці скрипти запускаються з правами суперкористувача, щоб мати доступ до всіх файлових систем. Я вже згадував про запуск apt upgrade, але для нестандартних оновлень програмного забезпечення ви можете створити артефакт, що містить файл .zip та скрипт для розпакування його вмісту. Як варіант, він може просто виконувати щось просте, наприклад, запускати відтворення музики або вмикати світлодіод.

Щоб продемонструвати, наскільки просто можна створювати власні артефакти, ось покроковий опис цього процесу:

1. Ось як може виглядати артефакт оновлення apt upgrade:

#!/bin/sh
export DEBIAN_FRONTEND=noninteractive
apt update
if apt -y -o DPKG::Options::="--force-confnew" upgrade > output.txt; then
    if [ -r /var/run/reboot-required ]; then
        echo Rebooting to finish the upgrade
        exit 2 # EXIT_REBOOT
    fi
else
    echo Upgrade failed:
    echo
    cat output.txt
    exit 1 # EXIT_FAILURE
fi
echo Upgrade complete
exit 0 # EXIT_SUCCESS

Щоб запустити головну команду оновлення в неінтерактивному режимі, потрібно виконати певні дії. Запишіть її у файл із назвою aptupgradescript.

2. Створіть файл налаштувань YAML під назвою aptupgrade.yaml:

# Run apt upgrade on a remote device
artefact:
  name: aptupgrade
  version: 1.0
  device_type: rpi

payloads:
- name: aptupgradescript
  type: script

3. Запустіть утиліту otamaker, щоб перетворити цей файл на артефакт, стиснутий за алгоритмом Zstandard:

$ otamaker aptupgrade.yaml
Contents:
  _contents_.yaml
  aptupgradescript

Artefact: aptupgrade.tar.zst
SHA256:   861dc9c0a04d458a918de89cef1ddfa60dad4c30fa7f4…

4. Знайдіть IP-адресу головного комп’ютера у вашій локальній мережі:

$ hostname -I

5. Запустіть HTTP-сервер на вашому хості — зазвичай це не той пристрій, на який призначено оновлення, але це спрацює, якщо у вас є лише один Raspberry Pi:

$ python3 -m http.server 8000 --directory .

6. Натисніть кнопку «Створити та розгорнути»/‘Create and deploy’ , щоб створити новий артефакт на сервері Connect, використовуючи власну IP-адресу та значення SHA-256:

7. Новий артефакт буде автоматично встановлено на ваш пристрій. Зачекайте деякий час, поки він запуститься — можливо, після завершення знадобиться перезавантаження.

Тільки факти, мем! :)

Утиліта otamaker  буде поширюватися як частина пакетаrpi-connect-ota. Однак для тих, хто створює артефакти на платформі, відмінній від Raspberry Pi, її також можна завантажити з нашого репозиторію "utils" на GitHub. Там ви також знайдете попередню документацію щодо синтаксису та функцій файлів опису артефактів і скриптів.

І нарешті...!

Сподіваюся, це допомогло вам зрозуміти, на що здатна функція віддаленого оновлення Raspberry Pi Connect. Вона все ще перебуває на стадії бета-тестування, і має низку очевидних обмежень, головним з яких є відсутність простого способу отримати результати виконання запущених скриптів. Тимчасовим обхідним рішенням є вхід у систему за допомогою віддаленої оболонки, а потім:

$ journalctl -t rpi-ota-connector

… щоб прочитати вихідні дані скрипта.

Серед ідей на майбутнє — створення та організація спільних публічних оновлень, таких як офіційне оновлення apt upgrade. Також буде реалізовано ретельну інтеграцію з Connect for Organisations, включаючи його можливості фільтрування пристроїв; можливість оновлювати цілу групу пристроїв лише кількома кліками — це саме та суперсила, яка мені потрібна.