Клиент обновлений¶
Обзор¶
Клиент обновления состоит из двух бинарных файлов и нескольких скриптов:
- 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 (чтобы не пришлось ждать целый час).
Алгоритм работы¶
Алгоритм работы скрипта обновления имеет такой вид:
- Запускается uconf-client, который подписывается на мультикаст
- Если в течение 10 секунд клиент не получает пакетов с анонсами обновлений (не важно какой версии прошивки):
- Клиент завершается
- Запускается sleep 3600
- После завершения sleep переходим в шагу 1.
- Если клиент получил пакеты по прослушивемому мультикасту, он дожидается анонса для его версии, после чего запускается update.sh, выполняющий следующие шаги:
- Очистка раздела для временного хранения прошивки
- Скачивание прошивки с помощью uget-client
- Проверка подписи сервера и расшифровка обновлений с помощью decrypt.sh
- Распаковка обновлений
- Выполнение завершающего скрипта /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