Project

General

Profile

Клиент обновлений

Обзор

Клиент обновления состоит из двух бинарных файлов и нескольких скриптов:

  • uconf-client - слушает анонсы сервера обновления (uconf-server) на предмет наличия обновлений
  • uget-client - скачивает файл обновления, транслируемый сервером (uget-server)
  • uconf-client.sh - скрипт запуска клиента обновления
  • update.sh - скрипт скачивания и обработки обновления.
  • decrypt.sh - проверка подписи и расшифровка обновления
  • retry-update.sh - скрипт выполнения незавершенных обновлений, выполняется при загрузке.

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

Клиент используется следующие файлы при запуске:

  • /opt/etc/config_addr.txt - ip-адрес мультикаста, по которому вещаются анонсы обновлений
  • /opt/etc/config_port.txt - порт анонсов обновлений
  • /opt/version.txt - текущая версия прошивки

Первые два файла заполняются клиентом dhcp и могут меняться в процессе работы приставки. Версия изменяется только при перепрошивке или обновлении приставки.

Эти файлы перечитываются скриптом только при перезапуке uconf-client, поэтому при их ручном изменении рекомендуется завершить процесс uconf-client, если он запущен, и затем sleep (чтобы не пришлось ждать целый час).

Алгоритм работы

Алгоритм работы скрипта обновления имеет такой вид:

  1. Запускается uconf-client, который подписывается на мультикаст
  2. Если в течение 10 секунд клиент не получает пакетов с анонсами обновлений (не важно какой версии прошивки):
    • Клиент завершается
    • Запускается sleep 3600
    • После завершения sleep переходим в шагу 1.
  3. Если клиент получил пакеты по прослушивемому мультикасту, он дожидается анонса для его версии, после чего запускается update.sh, выполняющий следующие шаги:
    1. Очистка раздела для временного хранения прошивки
    2. Скачивание прошивки с помощью uget-client
    3. Проверка подписи сервера и расшифровка обновлений с помощью decrypt.sh
    4. Распаковка обновлений
    5. Выполнение завершающего скрипта /opt/scripts/update_script.sh, если он был внутри архива обновлений

Начиная с версии 1.0075u, uconf-client следит не только за текущей версий прошивки, но и за версией на которую происходит обновление. Это сделано для предотвращения циклической записи прошивки, применение которой возможно только после перезагрузки.

Завершающий скрипт зависит от старой и новой версий прошивки и может содержать такие команды как:
  • смена прав доступа к файлам
  • запись ядра
  • ожидание перехода в спящий режим для перезагрузки приставки

Запуск обновления вручную

Автоматически обновления проверяются каждый час, задержка сделана использвованием команды sleep, для отмены задержки и немеленного запуска обновления достаточно набрать в консоли

killall sleep

Запуск обновления вручную с отладкой

Для этого сначала завершаем автоматический перезапуск клиента обновлений:

killall uconf-client.sh sleep

и запускаем его с определением параметров из конфигурационных файлов из консоли

/opt/scripts/uconf-client.sh

Возможно так же напрямую запустить uconf-client, передав ему соответствующие параметры:

uconf-client -l АДРЕС -p ПОРТ -t 10 -v ТЕКУЩИЙ_НОМЕР_ВЕРСИИ -r ПРОПУСКАТЬ_ВЕРСИЮ -u /opt/scripts/update.sh