Пакет плагина: формат, установка, удаление¶
Черновик пилота; ссылки сверены после исправлений. Каждое фактическое предложение ссылается на claim id из базы. Факты уровня
forumпомечены «по сообщениям пользователей»; гипотезы (inference) и ослабленные верификатором утверждения (disputed) вынесены в раздел «Не проверено». Где факт наблюдался только в одной прошивке, это сказано.
Источники главы: официальный SDK (doc-sdk-plugins, версия прошивки в документе не указана),
строки libduneshell.so Android-прошивки tv188b 260827_0003_r24, три плагина dune-club
(globaltv, Screenshoter, widget_ext) и две темы форумов. Наблюдения на устройстве tv188b 261021_0117_r25
(уровень device, логи collect4–collect6 с тестовыми плагинами) отмечены «r25, device» и относятся только к этой
прошивке.
1. Что такое пакет плагина¶
Установщик плагина — ZIP-архив, в корне которого лежит dune_plugin.xml, а рядом — прочие
файлы плагина (SDK)1. dune_plugin.xml — единственный файл, обязательный для
загрузки плагина; остальные файлы перечисляются в манифесте и могут называться как угодно
(SDK)2. По SDK PHP-плагин дополнительно обязан содержать PHP-программу с функцией
hd_create_plugin(), путь к которой задаётся в dune_plugin.xml (SDK)3. На tv188b r25 тестовые плагины
test_plugin5 и test_plugin10 работали без hd_create_plugin(): их main.php объявляет класс-наследник DunePluginFw, и
handle_user_input выполнялся (устройство r25)4. Обе стороны — в §7.
Имя плагина (dune_plugin->name) — непустой идентификатор из алфавитно-цифровых символов и
-, ., _, длиной не более 64 (SDK)5; caption — подпись, которую видно в
«Setup / Misc / Plugins» (SDK)6. Подробнее о манифесте — в теме
plugin-manifest (глава ещё не написана).
Для примеров SDK предлагает плагины dune_plugin_demo2 (IPTV/VOD на PHP), dune_plugin_simple_presenter (digital signage) и dune_plugin_linux_code_demo (демон + HTTP API + HTML) (SDK)7.
Типичное содержимое каталога¶
Ниже — каталоги и файлы, которые встречаются в документации и в разобранных пакетах. Это перечень наблюдений, а не обязательная структура.
| Путь в пакете | Назначение | Источник |
|---|---|---|
dune_plugin.xml |
манифест, обязателен | (SDK)2 |
| PHP-программа | точка входа PHP-плагина, путь — в манифесте; по SDK — с hd_create_plugin(), на tv188b r25 тестовые плагины работали без неё (§7) |
(устройство r25, SDK)8 |
translations/dune_language_<lang>.txt |
переводы плагина | (SDK)9 |
bin/ |
исполняемые файлы плагина | (SDK)10 |
www/ |
статические файлы, отдаваемые по HTTP | (SDK)11 |
www/cgi-bin/ |
CGI-скрипты плагина | (SDK)11 |
.platform.87xx/ |
платформенные файлы для SMP87xx | (SDK)12 |
dune_plugin.sign, dune_plugin_signer_id.txt |
подпись плагина | (SDK)13 |
Файлы переводов загружаются в глобальную таблицу переводов при старте устройства или смене
языка интерфейса (SDK)9. В плагине globaltv они лежат как
translations/dune_language_english.txt и dune_language_russian.txt в формате
«ключ = текст» (код)14. В прошивке r24 у оболочки есть шаблоны пути
%s/translations/dune_language_%s.txt и запасной …/dune_language_english.txt
(код r24)15.
К ресурсам своего плагина обращаются по plugin_file://path, к ресурсам другого плагина — по
plugin_file://%plugin_name%/path (SDK)16. В прошивке r24 оболочка знает
схемы plugin_file:// и plugin_archive:// (код r24)17.
Исполняемые файлы и атрибуты¶
ZIP не хранит UNIX-атрибуты, поэтому файлы в bin/ и www/cgi-bin/ при установке делаются
исполняемыми (SDK)10. Пакеты могут нести собственные бинарники: встроенный
плагин shell_ext прошивки r24 содержит свои ELF curl и php-cgi в shell_ext/bin/
(код r24)18, Screenshoter — собственный ELF www/cgi-bin/php-cgi
(51724 байта) со ссылками на libphp5.so и /lib/ld-linux.so.3 (код)19,
а bin/curl.864x плагина widget_ext побайтно совпадает с shell_ext/bin/curl прошивки r24
(код)20. CGI-обёртки Screenshoter www/cgi-bin/do и index — shell-скрипты
(код)21.
Веб-часть плагина¶
Встроенный HTTP-сервер отдаёт $install_dir_path/www/* по адресу
http://<STB>/plugins/<plugin_name>/* и исполняет CGI из www/cgi-bin/* по адресу
http://<STB>/cgi-bin/plugins/<plugin_name>/* (SDK)11. Начиная с
120531_2200_beta эти файлы доступны не только локально, но и из локальной сети
(SDK)22. В прошивке r24 у libduneshell.so есть пути /tmp/www/plugins,
/tmp/www/cgi-bin/plugins, /firmware/bin/run_plugin_cgi, /tmp/www/cgi-bin/run_plugin_cgi
рядом с сообщениями [populate_plugins] (код r24)23. Там же
CGI-скрипт плагина запускается run_plugin_cgi как shell-скрипт (sh), поэтому PHP-обработчик
плагин должен вызвать сам (код r24)24. На tv188b r24 (device) загрузчик
создаёт для каждого файла <plugin>/www/cgi-bin одноимённую символическую ссылку в
/tmp/www/cgi-bin/plugins/<plugin>/ на run_plugin_cgi, а /tmp/www/plugins/<plugin> — ссылку на
каталог www плагина (устройство r24)25. Веб-интерфейс
Screenshoter ссылается на свои css и картинки по адресу /plugins/<plugin_name>/
(SDK)26.
На tv188b r25 (device):
www/index.txtотдаётся поhttp://<IP>/plugins/<p>/index.txtс HTTP 200 (устройство r25)27, аhttp://<IP>/cgi-bin/plugins/<p>/env.sh?kbp5=1исполняетwww/cgi-bin/env.shсQUERY_STRING(устройство r25)28; оба отвечают и клиенту из локальной сети (устройство r25)29;- CGI получает
PLUGIN_NAME=<p>, аPLUGIN_CGI_DIRиSCRIPT_FILENAME— реальные пути$FS_PREFIX/flashdata/plugins/<p>/www/cgi-bin…(устройство r25)30;$0— абсолютныйSCRIPT_FILENAME, cwd —PLUGIN_CGI_DIR(устройство r25)31; - CGI работает под uid 0 (root) с контекстом
u:r:shell:s0(устройство r25)32, сервер —busybox httpd/1.35.0(устройство r25)33; - URL каталога плагина без «/» в конце даёт 302, со «/» — 404 (устройство r25)34; «/» после имени
файла — 404 (устройство r25)35;
…/<скрипт>/extra?x=1вызывает скрипт сPATH_INFO=/extra(устройство r25)36.
Системные PHP-файлы¶
В каталоге php/ прошивки tv188b 260827_0003_r24 ни один файл не подключает
bootstrap.php, dune_api.php, dune_config.php или dune_plugin_fw.php
(require_once встречается только внутри dunelib); пути этих файлов и dune_plugin.php
вместе с шаблоном require ('%s'); присутствуют в строках php_server
(libxxx_php_server.so) (код r24)37.
В той же прошивке DuneSystem::$properties используется в dune_config.php и
dunelib/utils.php (ключи few_buttons_remote_type, plugin_name), но класс DuneSystem
в каталоге php/ не определён; шаблон class DuneSystem { public static $properties = array(
есть в строках php_server (код r24)38.
Неустановленный порядок загрузки рассмотрен в guide/unverified.md.
2. Платформенные варианты (.platform.*)¶
Возможности фреймворка PHP-плагинов и механизма плагинов (манифест, www/, www/cgi-bin) на
SMP87xx поддерживаются так же, как на SMP86xx (SDK)39, а на Android — так же,
как на SMP87xx (SDK)40.
Платформенные файлы для SMP87xx (ARM) кладутся в .platform.87xx/ в корне плагина, а основная
копия (bin/, www/cgi-bin/) предназначена для SMP86xx (MIPS) (SDK)12. При
установке на SMP86xx содержимое .platform.87xx удаляется, на SMP87xx — переносится в корень
каталога установки (SDK)41.
Для Android текст SDK буквально говорит обратное ожидаемому: содержимое .platform.android
удаляется, а содержимое .platform.87xx переносится в корень (SDK)42. См.
«Расхождения» ниже.
В прошивке r24 у установщика есть строки %s/.platform.android, %s/.platform.%s,
android-arm-api19, .platform. и [plugin_installer] applying %s
(код r24)43.
На устройстве tv188b 261021_0117_r25 (r25, device) штатный установщик ZIP сделал не то, что буквально
написано в SDK. Он применил к корню плагина сначала .platform.android, затем поверх — .platform.android-arm-api19
(устройство r25)44. .platform.87xx и .platform.foo он не применил и удалил все четыре каталога
.platform.* до копирования (устройство r25)45. Файл в bin/ после установки стал исполняемым,
а файлы в корне плагина — нет (устройство r25)46. Это наблюдение одной прошивки; для r24 и других
версий порядок остаётся невыясненным (см. «Расхождения»).
3. Установка¶
Из ZIP-файла¶
Плагин устанавливается запуском файла dune_plugin*.zip с любого носителя (например,
USB-флешки) и ставится во флеш-память устройства (SDK)47; PHP-плагины хранятся
во флеш-памяти и исполняются на устройстве (SDK)48. Для ручной установки обычно
нужно активированное «Flash memory storage» или «System storage»; если не активно ни то ни
другое, устройство предложит активировать Flash memory storage (SDK)49.
По сообщениям пользователей, Screenshoter распространяется как dune_plugin_Screenshoter.zip и
ставится выбором ZIP в файловом браузере с флешки, а архив 7z не подходит (форум)50.
Если плагин с тем же именем уже установлен вручную, система предлагает перезаписать его или отменить установку; встроенные в прошивку плагины, по SDK, перезаписать нельзя (SDK)51 (см. «Расхождения»).
Как это выглядит в прошивке r24¶
В libduneshell.so прошивки tv188b 260827_0003_r24 есть строки установщика:
временный каталог /tmp/plugin_tmp, файл %s/__plugin__.zip, команда
cd %s%s && ls -la __plugin__.zip && unzip __plugin__.zip && rm -f __plugin__.zip,
сообщения «md5 does not match» и «suitable storage not found; cancelled»
(код r24)52. Установщик сверяет name в манифесте с
ожидаемым: есть сообщение «declared plugin name is '%s', real is '%s'»
(код r24)53. Есть и сообщения о запретах: «install not
allowed for unsigned plugin», «replace hard-coded plugin '%s' not allowed», «replace not
allowed for plugin '%s' because of signer_id mismatch», «signature verification failed» и др.
(код r24)54. Есть сообщения об отсутствующем и
неразбираемом манифесте (%s/dune_plugin.xml) (код r24)55.
Связную картину установки (скачивание, распаковка, копирование) из этих строк восстановить можно только как гипотезу — см. «Не проверено».
Как это выглядит на устройстве r25¶
Наблюдения на tv188b r25 (device, одна прошивка):
- ZIP, запущенный в файловом браузере плеера из
/sdcard/DuneHD, установлен в/data/data/com.dunehd.app/flashdata/plugins/<p>; рядом появились…/flashdata/plugins_archive/<p>,…/flashdata/plugins_data/<p>и/tmp/plugins/<p>(устройство r25)56. - Перед распаковкой установщик выполняет
rm -rf '/tmp/plugin_tmp'иmkdir, распаковывает архивunzipв$FS_PREFIX/tmp/plugin_tmpи копирует каталог в/flashdata/plugins/<p>, удалив прежний (устройство r25)57. - После установки оболочка пишет «reloading plugin», регистрирует плагин и «Done.» в том же процессе приложения, без его перезапуска (устройство r25)58.
- Если
nameвdune_plugin.xmlне равен имени каталога, вshell.logпишется «invalid plugin manifest …: name '' is not equal to directory name '<каталог>'» (устройство r25)59, и плагин не регистрируется ни под одним из имён (устройство r25)60. - Регистрируются плагины типов
php,plainиinternal.internal(устройство r25)61. Плагинplainбезparams/program(толькоdune_plugin.xmlиbin/) тоже регистрируется (устройство r25)62. - Точки входа без
icon_urlв разделе «Приложения» не появились (устройство r25)63. Безicon_urlу всех точек входаlaunch_capableвinstalled_plugins.xmlбыл 0; сicon_url— 1 иcategory applications(устройство r25)64. В SDKicon_urlописан среди параметров отображения точки входа — см. «Не проверено».
Оболочка r24 экспортирует функции разбора URL установщика, деинсталлятора и запуска плагина
(playlist_is_plugin_installer_url, playlist_parse_plugin_uninstaller_url и др.)
(код r24)65. Плагин globaltv удаляет другие плагины
действием launch_media_url с URL plugin_uninstaller://<имя> (код)66.
Подключение без установки: dune_plugins¶
Плагины можно подключить без установки через папку dune_plugins в корне «main»-накопителя:
каждая подпапка — данные одного плагина (SDK)67. «Main» — накопитель, который
единственный подключён сейчас или был единственным при включении плеера
(SDK)68. Механизм предназначен в основном для разработки; чтобы применить
изменения, нужно дважды нажать POWER (standby и включение) (SDK)69. На Android
пользовательские накопители монтируются с noexec, что мешает механизму dune_plugins
(SDK)70. Что SDK пишет о развёртывании на Android через adb push в /flashdata/plugins,
верификатор ослабил — см. «Не проверено».
Без установщика: adb push (наблюдение r25)¶
На tv188b r25 (device) плагин разворачивается без установщика. Каталог копируется adb push (под adb root) в
/data/data/com.dunehd.app/flashdata/plugins/, затем chown -R system:system и chmod -R +x для bin и
www/cgi-bin; после am force-stop com.dunehd.app оболочка регистрирует плагин (устройство r25)71.
SELinux-метка такого каталога совпала с меткой соседнего плагина, chcon не понадобился
(устройство r25)72. Каталога /flashdata в корне ФС нет, хотя оболочка в shell.log называет
каталог плагинов /flashdata/plugins (устройство r25)73.
Чего ждать после adb push на r25:
- перечитывание по IP Control (
cmd=main_screen, затемcmd=ir_code&ir_code=B24DBF00) новый плагин не подхватило, а послеam force-stopон зарегистрировался (устройство r25)74; послеam force-stopприложение поднимается само за 1–2 с (устройство r25)75; - удалённые
rm -rfплагины в одном прогоне остались вinstalled_plugins.xmlдоam force-stop(устройство r25)76, в другом — исчезли после перечитывания (устройство r25)77; логи расходятся, claims связаныconflicts_with; bootтакой плагин получает при ближайшем старте приложения, а не при загрузке системы (устройство r25)78;installне выполняется (устройство r25)79, аupdateне выполняется и при сменеversion_indexна месте (устройство r25)80.
Действия плагина при установке¶
SDK позволяет плагину выполнять действия на системные события (global_actions): boot,
install, update и uninstall (SDK)81; событие boot_end доступно с
прошивки 130917_b9 (SDK)82, gui_start — с 130914_b8
(SDK)83. Глобальным действием может быть любое стандартное GUI-действие плагина
или plugin_system, запускающее исполняемый файл из состава плагина (SDK)84;
для boot поддерживается только plugin_system (SDK)85. Примеры из пакетов: в globaltv глобальные
действия install и update оба ведут на plugin_handle_user_input с entry_id=install
(код)86, обработчик при этом запускает через system() скрипт
<install_dir_path>/bin/install.sh (код)87, а тот чистит кэш и создаёт
флаг обновления EPF (код)88. В widget_ext global_actions/uninstall вызывает
bin/uninstall.sh синхронно, без «&» (код)89.
На tv188b r25 (device):
- при одном старте приложения действия выполнились в порядке
boot,boot_end,gui_start(устройство r25)90; bootиboot_endпри следующих стартах приложения не повторяются («boot action already executed») (устройство r25)91; факт выполнения отмечают файлы/tmp/run/<плагин>_plugin_boot_action_executed.flagи…_boot_end_action_executed.flag(устройство r25)92;gui_startвыполняется при каждом старте приложения (устройство r25)93;plugin_systemс относительным путёмbin/ga.sh bootоболочка запускает какsh <абсолютный путь каталога плагина>/bin/ga.sh boot(устройство r25)94; скрипт работает под uid 1000 (system), cwd/, сFS_PREFIX=/data/data/com.dunehd.app(устройство r25)95.
4. Где лежат плагины на устройстве¶
В libduneshell.so прошивки r24 подряд идут строки каталогов плагинов: /flashdata/plugins,
/tmp/mnt/D/dune_plugins, /fconfig/plugins, /firmware/plugins, /firmware_ext/plugins
(код r24)96. Порядок обхода и приоритет из строк r24 не
следуют (см. «Не проверено»). На tv188b r25 (device) при каждой из пяти загрузок плагинов в shell.log —
«Loading plugins from '/flashdata/plugins'», затем «… '/firmware_ext/plugins'», других каталогов в этих строках
нет (устройство r25)97. Там же плагины загружались повторно без перезапуска процесса приложения
(устройство r25)98.
На r25 (device) каталоги данных плагинов — /data/data/com.dunehd.app/flashdata/plugins_data/<p>, в том числе
у встроенных; в …/config/plugins_data есть только bluray (устройство r25)99. После регистрации
появляются ссылка /tmp/www/plugins/<p> на каталог www плагина (устройство r25)100 и каталог
/tmp/www/cgi-bin/plugins/<p> со ссылками на run_plugin_cgi для каждого файла www/cgi-bin
(устройство r25)101.
В образе этой прошивки 13 встроенных плагинов лежат в /system/dunehd/firmware_ext/plugins/
(код r24)102, а на устройстве они ожидаются по пути
/data/data/com.dunehd.app/firmware_ext/plugins/ (код r24)103. По
сообщениям пользователей, в Dune 301 (150721_0136_B9) предустановленные плагины лежат в
firmware_ext и удаляются только модификацией прошивки (форум)104.
Список установленных плагинов оболочка r24 ведёт в /tmp/run/installed_plugins.xml
(код r24)105. Шаблон записи содержит поля name, caption, path,
version_index, version_id, patch_index, version, launch_capable, delete_capable,
category, logo_url и др. (код r24)106. Этот файл
читают и сами плагины: встроенные PHP-плагины r24 (shell_ext, android_apps, dunestore)
(код r24)107, а globaltv берёт из него имена
установленных плагинов (код)108. На r25 (device) запись плагина из flashdata содержит name,
caption, path (полный, с $FS_PREFIX), version_index, version и launch_capable; полей version_id,
patch_index и delete_capable в записях тестовых плагинов нет (устройство r25)109.
5. Подпись¶
Встроенные в розничную прошивку и распространяемые через Dune Store плагины подписаны Dune HD;
подписанный плагин содержит dune_plugin.sign и dune_plugin_signer_id.txt
(SDK)13. Допустимые signer ID — com.dune-hd и customer ID кастомной прошивки
(с 150326_r10) (SDK)110. Для подписанного плагина система проверяет подпись и
отказывается его использовать при несовпадении подписи или недопустимом signer ID
(SDK)111. Кастомные (операторские) прошивки могут разрешать только подписанные
плагины (SDK)112. Собственная подпись (с 150326_r10) делается DSA-ключами
2048 и утилитой plugin_sign.x86, а публичный ключ кладётся в прошивку как
/firmware/config/plugin_key.pem (SDK)113.
В прошивке r24 у libduneshell.so есть строки [plugin_signer]: dune_plugin.sign,
dune_plugin_signer_id.txt, signer_id com.dune-hd, ключ /firmware/config/plugin_key.pem
или /config/plugin_key.pem, DSA-проверка (код r24)114; назначение файлов
dune_plugin.sign (подпись) и dune_plugin_signer_id.txt (signer ID) — как в SDK
(SDK r24)115.
Подписаны 6 из 13 встроенных плагинов r24 (код r24)116.
Плагин globaltv содержит dune_plugin.sign (48 байт) и dune_plugin_signer_id.txt со
значением com.dune-hd (код)117.
Политику установки в r24 задаёт файл plugin_config.xml (/config/ или /firmware/config/)
с именами allow_install, signed, allow_delete, allow_replace, same_signer_id,
default_embedded, default_external (код r24)118.
Какие из запретов установщика действуют по умолчанию, из строк не следует (см. «Не проверено»).
6. Удаление¶
Все установленные плагины перечислены в «Setup / Misc / Plugins», где вручную установленные
можно удалить (ENTER → Delete) (SDK)119. Программно плагин удаляется URL
plugin_uninstaller://<имя> (пример — globaltv) (код)66. Встроенные плагины
прошивки 301, по сообщениям пользователей, убираются только модификацией прошивки
(форум)104.
7. Расхождения¶
hd_create_plugin() в PHP-программе¶
| Сторона | Утверждение |
|---|---|
| SDK | PHP-плагин обязан содержать программу с hd_create_plugin(), путь к ней — в dune_plugin.xml (SDK)3 |
Устройство tv188b r25 (device) |
тестовые плагины test_plugin5 и test_plugin10 без hd_create_plugin(), с классом-наследником DunePluginFw, работали: handle_user_input выполнялся (устройство r25)4 |
Стороны связаны conflicts_with. Наблюдение относится к одной прошивке; как устроена PHP-программа без этой функции —
в guide/quick-start.md.
.platform.* на Android¶
| Сторона | Утверждение |
|---|---|
| SDK, буквально | на Android .platform.android удаляется, .platform.87xx переносится в корень (SDK)42 |
Устройство tv188b r25 (device) |
установщик применил к корню .platform.android, затем .platform.android-arm-api19 (устройство r25)44; .platform.87xx не применил и удалил все .platform.* (устройство r25)45 |
Стороны связаны conflicts_with. Наблюдение относится к одной прошивке: libduneshell.so r24 и r25 — разные
файлы, поэтому для r24 и других версий порядок по-прежнему не установлен. Гипотеза аналитика о том же поведении —
в «Не проверено».
Замена встроенного плагина¶
| Сторона | Утверждение |
|---|---|
| SDK | встроенные в прошивку плагины перезаписать нельзя (SDK)51 |
| Строки r24 | у установщика есть сообщение «replace hard-coded plugin '%s' not allowed» (код r24)54 |
Устройство tv188b r25 (device) |
при двух копиях dunemdb_supplier_youtube в логе — «prefer_new_builtin (41 vs 34)» и сразу «dup …: replacing»; version_index копии в firmware_ext/plugins — 41, в flashdata/plugins — 34 (устройство r25)120 |
SDK говорит об установщике, а строки r24 и лог r25 — о загрузчике (populate_plugins). Гипотезы по строкам r24
(загрузчик может заменить встроенный плагин; предпочтение по числам или тегу; «конфликт») связаны с SDK
conflicts_with и собраны в «Не проверено». Ветка, в которой встроенный плагин заменяется внешним, на r25 не
наблюдалась: в логе есть только случай выше (устройство r25)120.
Допустимые signer ID¶
Расхождение снято. SDK допускает com.dune-hd и customer ID кастомной прошивки
(SDK)110. Прежняя гипотеза о «единственном signer_id com.dune-hd» отозвана; новая гипотеза по
строкам r24 согласуется с SDK и приведена в «Не проверено».
Перечитывание плагинов и icon_url¶
Утверждения SDK о перечитывании плагинов по IP Control и о параметрах точки входа верификатор ослабил, а лог r25
им противоречит (новый плагин не подхвачен без перезапуска приложения (устройство r25)121; точка
входа без icon_url не видна (устройство r25)63). Пары — в «Не проверено».
8. Не проверено¶
Здесь три вида утверждений. Большинство — гипотезы (inference, в том числе подтверждённые верификатором как
рассуждение). Два утверждения SDK уровня doc верификатор ослабил до disputed ((SDK)122). Одно утверждение SDK уровня doc ((SDK)123) осталось unverified: верификатор
трижды вынес вердикт weakened, потому что его буквальный путь на tv188b r25 не работает. Опираться на эти утверждения нельзя
без проверки; подробности — в verification каждого claim и в столбце «Что мешает».
| Claim | Суть | Что мешает |
|---|---|---|
| (вывод r24)124 | пакет скачивается по URL во временный каталог как __plugin__.zip, распаковывается unzip, может сверяться по md5, затем копируется или переименовывается в <хранилище>/plugins/<name> |
вывод из строк; верификатор признал его обоснованным (verified), на устройстве не проверен |
| (вывод r24)125 | установщик может отказать в установке неподписанного плагина, в замене плагина с другим signer_id и «hard-coded» плагина; что действует по умолчанию — неизвестно | вывод из строк; верификатор подтвердил (verified), SDK: запрет неподписанных — настройка кастомных прошивок |
| (вывод r24)126 | загрузчик r24 обходит пять каталогов плагинов | disputed: что обходятся все пять и что /tmp/mnt/D — «main»-накопитель, из строк не доказать; на r25 в логе только /flashdata/plugins и /firmware_ext/plugins (устройство r25)97 |
| (вывод r24)127 | установщик применяет подходящий .platform.<платформа> и удаляет остальные |
только строки r24; на r25 так и было (устройство r25)128, но бинарник оболочки другой |
| (вывод)129 | задумано по аналогии с SMP87xx: на Android .platform.android переносится в корень, .platform.87xx удаляется |
inference; на r25 подтверждено наблюдением (устройство r25)44, для r24 и других прошивок — нет |
| (SDK)123 | на Android плагины во флеш-памяти лежат в /flashdata/plugins/<plugin_name>, их можно развернуть adb push и chmod -R +x |
doc, unverified: на r25 буквальный путь не работает — /flashdata в корне ФС нет (устройство r25)73, плагины лежат в $FS_PREFIX/flashdata/plugins (устройство r25)71; связаны conflicts_with |
| (SDK)130 | перечитать плагины без перезапуска оболочки: ANGLE/ROTATE, Refresh или IP Control cmd=main_screen + cmd=ir_code&ir_code=B24DBF00 |
disputed: на r25 новый плагин после такого перечитывания не появился (устройство r25)121; связаны conflicts_with |
| (SDK)131 | параметры отображения точки входа: icon_url, icon_margins, icon_fit_scale_factor и др. |
disputed: на r25 точка входа без icon_url в «Приложениях» не видна (устройство r25)63; связаны related |
| (вывод r24)132 | boot и boot_end выполняются один раз за время работы системы, флаг в /tmp/run |
disputed для r24; на r25 повтора при перезапуске приложения нет (устройство r25)91, флаги — (устройство r25)92 |
| (вывод r24)133 | name сравнивается с именем каталога; отказ ли это, не установлено |
на r25 — отказ в регистрации (устройство r25)134; для r24 не проверено |
| (вывод r24)135 | загрузчик при двух плагинах с одним name может заменить встроенный плагин другим, а встроенный скрыть |
inference, disputed; связан conflicts_with с SDK (SDK)51; на r25 эта ветка не наблюдалась |
| (вывод r24)136 | при дубликате загрузчик может предпочесть встроенный (prefer_new_builtin) по числам (вероятно, version_index) или по тегу; есть принудительная замена |
inference, disputed: на r25 «41 vs 34» совпадает с version_index копий (устройство r25)120, ветки по тегу и force override не выполнялись |
| (вывод r24)137 | при «конфликте» остаётся ранее загруженный плагин | условие конфликта не установлено |
| (вывод r24)138 | нерабочие бинарники плагина (bin/php-cgi и др.) заменяются ссылками на /firmware/bin |
в r24 /firmware/bin/php-cgi отсутствует |
| (вывод r24)139 | после копирования установщик снимает флаг скрытия и перезагружает плагин | порядок выведен из соседства строк (исправлением понижено с code до inference) |
| (вывод r24)140 | подпись считается по DSA по обычным файлам каталога плагина, нерегулярные пропускаются | порядок файлов и исключение dune_plugin.sign не установлены |
| (вывод r24)141 | ключ проверки подписи ищется в /firmware/config/plugin_key.pem и /config/plugin_key.pem |
роль /config/plugin_key.pem и приоритет не установлены; в образе r24 ключа нет |
| (вывод r24)142 | signer_id сравнивается с требуемым и может быть отклонён как не разрешённый | условие «unsupported signer_id» не установлено |
| (вывод r24)143 | www плагина публикуется в /tmp/www/plugins/<плагин>, для файлов www/cgi-bin создаются «cgi links» |
что ссылки указывают на run_plugin_cgi, из строк r24 не следует; на r25 указывают (устройство r25)101 |
| (вывод)144 | php-cgi Screenshoter — сборка PHP 5 под ARM с системной libphp5.so |
e_machine не извлечён (верификатор подтвердил вывод) |
| (вывод)145 | HTTP-сервер отдаёт файлы www/ и по симлинкам (галерея снимков Screenshoter) |
для Screenshoter не проверено; на r25 httpd отдал файл через симлинк из www тестового плагина на каталог SMB (устройство r25)146 |
Пробелы¶
Чего не хватает для связного раздела:
- Нет фактов о размере пакета, ограничениях на число файлов и о поведении при нехватке места (кроме строки «suitable storage not found»).
- Нет прямого описания
update: что происходит с данными плагина (data_dir_path) при переустановке и удалении. - Нет данных по Sigma-прошивкам (SMP86xx/87xx): все строки установщика — из одной Android-прошивки r24.
- Порядок поиска каталогов плагинов и приоритет между ними для r24 не установлен; для r25 есть только лог (§4).
-
doc-sdk-plugins.c016 · doc · any-documented; прошивка — · Установщик плагина — ZIP-архив с файлом dune_plugin.xml на верхнем уровне и прочими файлами плагина ↩
-
doc-sdk-plugins.c025 · doc · any-documented; прошивка — · dune_plugin.xml — единственный файл, обязательный для загрузки плагина; остальные файлы указываются в манифесте и могут называться как угодно ↩↩
-
doc-sdk-plugins.c026 · doc · any-documented; прошивка — · PHP-плагин обязан содержать PHP-программу с функцией hd_create_plugin(); путь к ней задаётся в dune_plugin.xml ↩↩
-
fw-tv188b-261021-0117-r25.c372 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 тестовые PHP-плагины test_plugin5 и test_plugin10 работали без hd_create_plugin(): их main.php объявляет класс, унаследованный от DunePluginFw, и handle_user_input выполнялся. ↩↩
-
doc-sdk-plugins.c028 · doc · any-documented; прошивка — · dune_plugin->name — идентификатор плагина: непустой, только алфавитно-цифровые символы и '-', '.', '_', длина не более 64 ↩
-
doc-sdk-plugins.c029 · doc · any-documented; прошивка — · dune_plugin->caption — подпись плагина, показываемая в Setup / Misc / Plugins ↩
-
doc-sdk-plugins.c011 · doc · any-documented; прошивка — · SDK предлагает примеры плагинов: dune_plugin_demo2 (IPTV/VOD на PHP, в т.ч. с рекламой), dune_plugin_simple_presenter (digital signage), dune_plugin_linux_code_demo (демон + HTTP API + HTML) ↩
-
- doc-sdk-plugins.c026 · doc · any-documented; прошивка — · PHP-плагин обязан содержать PHP-программу с функцией hd_create_plugin(); путь к ней задаётся в dune_plugin.xml
- fw-tv188b-261021-0117-r25.c372 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 тестовые PHP-плагины test_plugin5 и test_plugin10 работали без hd_create_plugin(): их main.php объявляет класс, унаследованный от DunePluginFw, и handle_user_input выполнялся.
-
doc-sdk-plugins.c027 · doc · any-documented; прошивка — · Файлы translations/dune_language_
.txt плагина загружаются в глобальную таблицу переводов при старте устройства или смене языка интерфейса ↩↩ -
doc-sdk-plugins.c092 · doc · any-documented; прошивка — · Файлы в bin/ и www/cgi-bin/ плагина при установке становятся исполняемыми (ZIP не хранит UNIX-атрибуты) ↩↩
-
doc-sdk-plugins.c095 · doc · any-documented; прошивка — · Встроенный HTTP-сервер отдаёт $install_dir_path/www/* по http://
/plugins/ /* и исполняет CGI из www/cgi-bin/* по http:// /cgi-bin/plugins/ /* ↩↩↩ -
doc-sdk-plugins.c132 · doc · sigma-smp86xx, sigma-smp87xx; прошивка — · Платформенные файлы для SMP87xx (ARM) кладутся в .platform.87xx/ в корне плагина; основная копия (bin/, www/cgi-bin/) — для SMP86xx (MIPS) ↩↩
-
doc-sdk-plugins.c115 · doc · any-documented; прошивка — · Встроенные в розничную прошивку и распространяемые через Dune Store плагины подписаны Dune HD; подписанный плагин содержит dune_plugin.sign и dune_plugin_signer_id.txt ↩↩
-
plg-dc-globaltv.c118 · code · unknown; прошивка — · Переводы плагина лежат в translations/dune_language_english.txt и dune_language_russian.txt в формате «ключ = текст». ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c060 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · external_plugin.c: libduneshell.so содержит шаблоны переводов плагина %s/translations/dune_language_%s.txt и запасной %s/translations/dune_language_english.txt ↩
-
doc-sdk-plugins.c083 · doc · any-documented; прошивка — · plugin_file://path обращается к ресурсам текущего плагина, plugin_file://%plugin_name%/path — к ресурсам указанного плагина ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c061 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит URL-схемы plugin_file:// (вида plugin_file://%shell_ext%/icons/…) и plugin_archive://, с сообщениями об ошибке «plugin not found», «plugin is hard-coded» ↩
-
fw-tv188b-260827-0003-r24.c035 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Встроенный плагин shell_ext несёт собственные ELF curl и php-cgi в shell_ext/bin/ ↩
-
plg-dc-screenshoter.c057 · code · unknown; прошивка — · Пакет несёт собственный ELF www/cgi-bin/php-cgi (51724 байта); в его строках есть libphp5.so, /lib/ld-linux.so.3 и секции .ARM.exidx ↩
-
plg-dc-widget-ext.c068 · code · unknown; прошивка — · bin/curl.864x плагина побайтно совпадает (sha256 917d95cf…611a, 85377 байт) с shell_ext/bin/curl встроенного плагина прошивки tv188b 260827_0003_r24 ↩
-
plg-dc-screenshoter.c051 · code · unknown; прошивка — · CGI-обёртки www/cgi-bin/do и index — shell-скрипты с шапкой «@author: Andrii Kopyniak», ctime 17.09.2012 ↩
-
doc-sdk-plugins.c096 · doc · any-documented; прошивка — · Файлы www/ и CGI из www/cgi-bin/ плагина доступны по HTTP не только локально, но и из локальной сети ↩
-
fw-tv188b-260827-0003-r24--http-api.c015 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит пути /tmp/www/plugins, /tmp/www/cgi-bin/plugins, /firmware/bin/run_plugin_cgi, /tmp/www/cgi-bin/run_plugin_cgi, %s/www и %s/www/cgi-bin рядом с сообщениями [populate_plugins] ↩
-
fw-tv188b-260827-0003-r24--http-api.c008 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · CGI-скрипт плагина запускается run_plugin_cgi как shell-скрипт (sh), а не напрямую: PHP-обработчик плагин должен вызвать сам ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c037 · device · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Для каждого файла в
/www/cgi-bin загрузчик создаёт в /tmp/www/cgi-bin/plugins/ / одноимённую символическую ссылку на run_plugin_cgi, а /tmp/www/plugins/ — ссылку на каталог www плагина. ↩ -
plg-dc-screenshoter.c087 · doc · unknown; прошивка — · Каталог www/ установленного плагина отдаётся HTTP-сервером устройства по адресу /plugins/
/; веб-интерфейс плагина ссылается на свои css и картинки по этому адресу ↩ -
fw-tv188b-261021-0117-r25.c154 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 файл www/index.txt плагина отдаётся по http://
/plugins/ /index.txt: HTTP 200, Content-type: text/plain, Accept-Ranges: bytes, тело — содержимое файла. ↩
-
fw-tv188b-261021-0117-r25.c155 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запрос http://
/cgi-bin/plugins/test_plugin5/env.sh?kbp5=1 выполнил скрипт www/cgi-bin/env.sh плагина: его вывод вернулся с HTTP 200, QUERY_STRING=kbp5=1 и REQUEST_URI переданы скрипту. ↩ -
fw-tv188b-261021-0117-r25.c156 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 статика www и CGI плагина отвечают на запросы с другого хоста локальной сети: CGI видит REMOTE_ADDR=[::ffff:<адрес в LAN>] при HTTP_HOST=<адрес в LAN> (IP плеера), файл www/index.txt отдаётся тому же клиенту с HTTP 200. ↩
-
fw-tv188b-261021-0117-r25.c149 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI-скрипт плагина, вызванный через http://
/cgi-bin/plugins/ /<файл>, получает PLUGIN_NAME=
, а PLUGIN_CGI_DIR и SCRIPT_FILENAME — реальные пути $FS_PREFIX/flashdata/plugins/
/www/cgi-bin и …/www/cgi-bin/<файл>, а не /tmp/www/plugins/
/… ↩
-
fw-tv188b-261021-0117-r25.c150 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI-скрипт плагина запускается с $0, равным абсолютному SCRIPT_FILENAME ($FS_PREFIX/flashdata/plugins/
/www/cgi-bin/<файл>), и текущим каталогом PLUGIN_CGI_DIR ($FS_PREFIX/flashdata/plugins/
/www/cgi-bin). ↩
-
fw-tv188b-261021-0117-r25.c152 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI плагина, запущенный httpd через run_plugin_cgi, работает под uid=0(root) gid=0(root) с SELinux-контекстом u:r:shell:s0. ↩
-
fw-tv188b-261021-0117-r25.c153 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в окружении CGI плагина SERVER_SOFTWARE=busybox httpd/1.35.0 и GATEWAY_INTERFACE=CGI/1.1. ↩
-
fw-tv188b-261021-0117-r25.c160 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 httpd на URL каталога плагина без «/» в конце (/plugins/
, /cgi-bin/plugins/
) отвечает 302 с Location на тот же путь со «/», а на URL со «/» (/plugins/
/, /cgi-bin/plugins/
/) — 404 Not Found. ↩
-
fw-tv188b-261021-0117-r25.c161 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 «/» после имени файла плагина даёт 404 Not Found и для CGI (/cgi-bin/plugins/
/ping.sh/), и для статики (/plugins/
/index.txt/), хотя без «/» оба отвечают 200. ↩
-
fw-tv188b-261021-0117-r25.c162 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 CGI плагина по URL /cgi-bin/plugins/
/<скрипт>/extra?x=1 вызывается (HTTP 200) с SCRIPT_NAME=/cgi-bin/plugins/
/<скрипт>, PATH_INFO=/extra и QUERY_STRING=x=1; SCRIPT_FILENAME — путь самого скрипта …/www/cgi-bin/<скрипт>. ↩
-
fw-tv188b-260827-0003-r24--php-framework.c006 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Ни один файл каталога php/ не подключает bootstrap.php, dune_api.php, dune_config.php или dune_plugin_fw.php (require_once есть только внутри dunelib); пути этих файлов (и dune_plugin.php) вместе с шаблоном «require ('%s');» есть в строках php_server (libxxx_php_server.so) ↩
-
fw-tv188b-260827-0003-r24--php-framework.c031 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Класс DuneSystem со статическим массивом $properties используется в dune_config.php и dunelib/utils.php (ключи few_buttons_remote_type, plugin_name), но ни в одном файле каталога php/ не определён; шаблон его определения «class DuneSystem { public static $properties = array(» есть в строках php_server (libxxx_php_server.so) ↩
-
doc-sdk-plugins.c128 · doc · sigma-smp86xx, sigma-smp87xx; прошивка — · Все возможности фреймворка PHP-плагинов и механизма плагинов (манифест, www/, www/cgi-bin) поддерживаются на SMP87xx так же, как на SMP86xx ↩
-
doc-sdk-plugins.c134 · doc · sigma-smp87xx, android; прошивка — · Все возможности фреймворка PHP-плагинов и механизма плагинов поддерживаются на Android так же, как на Sigma (SMP87xx) ↩
-
doc-sdk-plugins.c133 · doc · sigma-smp86xx, sigma-smp87xx; прошивка — · При установке на SMP86xx содержимое .platform.87xx удаляется, на SMP87xx — переносится в корень каталога установки плагина ↩
-
doc-sdk-plugins.c137 · doc · android; прошивка — · Текст документа буквально говорит: при установке на Android содержимое .platform.android удаляется, а содержимое .platform.87xx переносится в корень ↩↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c045 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит строки установщика «%s/.platform.android», «%s/.platform.%s», «android-arm-api19», «.platform.» и «[plugin_installer] applying %s» ↩
-
fw-tv188b-261021-0117-r25.c214 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP применил к корню плагина сначала .platform.android (скопировал only_android.txt и bin/marker.txt в корень), затем поверх — .platform.android-arm-api19 (bin/marker.txt перезаписан); в установленном плагине bin/marker.txt = «.platform.android-arm-api19» и есть only_android.txt. В shell.log — «[plugin_installer] applying /tmp/plugin_tmp/.platform.
». ↩↩↩ -
fw-tv188b-261021-0117-r25.c215 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP не применил .platform.87xx и .platform.foo и удалил все четыре каталога .platform.* (android-arm-api19, 87xx, android, foo: «[plugin_installer] removing /tmp/plugin_tmp/.platform.
») до копирования; в установленном плагине нет ни каталогов .platform.*, ни only_87xx.txt. ↩↩ -
fw-tv188b-261021-0117-r25.c216 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после штатной установки ZIP файл bin/marker.txt, который в ZIP имел права -rw-r--r--, получил -rwxr-xr-x, а dune_plugin.xml и only_android.txt в корне плагина остались -rw-r--r--. ↩
-
doc-sdk-plugins.c017 · doc · any-documented; прошивка — · Плагин устанавливается запуском файла dune_plugin*.zip с любого носителя (например, USB-флешки) и ставится во флеш-память устройства ↩
-
doc-sdk-plugins.c014 · doc · any-documented; прошивка — · PHP-плагины хранятся во флеш-памяти устройства и исполняются на устройстве ↩
-
doc-sdk-plugins.c019 · doc · any-documented; прошивка — · Для ручной установки плагинов обычно требуется активированное «Flash memory storage» или «System storage»; если ни то ни другое не активно, устройство предложит активировать Flash memory storage ↩
-
thr-hdtv-19055.c023 · forum · Dune HD TV-175L SmartBox 4K, unknown; прошивка — · Плагин Screenshoter распространяется как ZIP-файл dune_plugin_Screenshoter.zip и ставится выбором ZIP в файловом браузере Dune с флешки (архив 7z не подходит) ↩
-
doc-sdk-plugins.c018 · doc · any-documented; прошивка — · При установке плагина с тем же именем, что у уже установленного вручную, предлагается перезаписать или отменить; встроенные в прошивку плагины перезаписать нельзя ↩↩↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c043 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит строки установщика: /tmp/plugin_tmp, %s/plugin.zip, команду «cd %s%s && ls -la plugin.zip && unzip plugin.zip && rm -f plugin.zip», «md5 does not match», «suitable storage not found; cancelled» ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c041 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Установщик сверяет name в манифесте с ожидаемым: есть сообщение «declared plugin name is '%s', real is '%s'» и ключ plugin_installer_error_name_changed__1 ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c040 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит сообщения установщика плагинов о запретах: «install not allowed for plugin», «install not allowed for unsigned plugin», «replace hard-coded plugin '%s' not allowed», «replace not allowed for plugin '%s' because of signer_id mismatch», «unsigned plugins not allowed», «signer_id '%s' not allowed by firmware», «signature verification failed» ↩↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c007 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит путь-шаблон «%s/dune_plugin.xml» и сообщения об отсутствующем и неразбираемом манифесте (ключи plugin_installer_error_missing_manifest, plugin_installer_error_invalid_manifest) ↩
-
fw-tv188b-261021-0117-r25.c219 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 dune_plugin_test_plugin5_plat.zip, запущенный в файловом браузере плеера из /sdcard/DuneHD, установлен в /data/data/com.dunehd.app/flashdata/plugins/test_plugin5_plat; после установки есть также каталоги /data/data/com.dunehd.app/flashdata/plugins_archive/test_plugin5_plat, …/flashdata/plugins_data/test_plugin5_plat и /tmp/plugins/test_plugin5_plat. ↩
-
fw-tv188b-261021-0117-r25.c217 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP перед распаковкой выполняет rm -rf '/tmp/plugin_tmp' и mkdir, затем распаковывает архив командой «unzip '
' -d /data/data/com.dunehd.app/tmp/plugin_tmp» и копирует оттуда каталог в /flashdata/plugins/ , предварительно удаляя прежний (FS_remove_recursively_if_exists). ↩
-
fw-tv188b-261021-0117-r25.c218 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после штатной установки ZIP оболочка пишет «[plugin_installer] reloading plugin», регистрирует плагин («Plugin 'test_plugin5_plat' of type 'plain' is registered») и «[plugin_installer] Done.» в том же процессе приложения (pid 19586), без перезапуска приложения. ↩
-
fw-tv188b-261021-0117-r25.c209 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25, если name в dune_plugin.xml не равен имени каталога плагина, оболочка при загрузке пишет в shell.log «[populate_plugins] invalid plugin manifest from '<путь>/dune_plugin.xml': name '
' is not equal to directory name '<каталог>'». ↩ -
fw-tv188b-261021-0117-r25.c210 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 плагин, у которого name в dune_plugin.xml (test_plugin5_other) не равен имени каталога (test_plugin5_badname), не регистрируется: строки «Plugin … is registered» для него нет, в /tmp/run/installed_plugins.xml и /tmp/www/plugins его нет ни под тем, ни под другим именем. ↩
-
fw-tv188b-261021-0117-r25.c220 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 оболочка регистрирует плагины типов php, plain и internal.internal (dune_internal): «Plugin '
' of type '<тип>' is registered». ↩
-
fw-tv188b-261021-0117-r25.c221 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 плагин с type plain без params/program (тестовые плагины-поставщики test_plugin5_sup и test_plugin6_sup: в каталоге только dune_plugin.xml и bin/) регистрируется; его запись в /tmp/run/installed_plugins.xml — launch_capable 0 и movie_suppliers со значением params/movie_suppliers. ↩
-
fw-tv188b-261021-0117-r25.c213 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 точки входа плагина test_plugin5 (root://applications), заданные без icon_url, в разделе «Приложения» не появлялись. ↩↩↩
-
fw-tv188b-261021-0117-r25.c212 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 у плагина test_plugin5, все 6 точек входа которого (parent_media_url root://applications) были без icon_url, в /tmp/run/installed_plugins.xml launch_capable 0 и нет category; после добавления в каждую точку входа icon_url gui_skin://large_icons/apps.aai и перезапуска приложения — launch_capable 1 и category applications. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c049 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит экспортируемые имена playlist_is_plugin_installer_url, playlist_is_plugin_uninstaller_url, playlist_is_plugin_launcher_url, playlist_parse_installer_url, playlist_parse_plugin_launcher_url, playlist_parse_plugin_uninstaller_url и is_valid_plugin_name_seg ↩
-
plg-dc-globaltv.c029 · code · unknown; прошивка — · При установке в стране CN плагин, если установлен tv_app_supplier_globaltv, удаляет его (и сам globaltv) действиями launch_media_url с URL plugin_uninstaller://<имя>. ↩↩
-
doc-sdk-plugins.c021 · doc · any-documented; прошивка — · Плагины можно подключить без установки через папку dune_plugins в корне «main»-накопителя: каждая подпапка — данные одного плагина (dune_plugin.xml и др.) ↩
-
doc-sdk-plugins.c022 · doc · any-documented; прошивка — · Накопитель считается «main», если он единственный подключён сейчас или был единственным при включении плеера ↩
-
doc-sdk-plugins.c023 · doc · any-documented; прошивка — · Механизм dune_plugins предназначен в основном для разработки; чтобы применить изменения в папке, нужно дважды нажать POWER (уход в standby и включение) ↩
-
doc-sdk-plugins.c136 · doc · android; прошивка — · На Android пользовательские накопители монтируются с noexec, что мешает механизму dune_plugins ↩
-
fw-tv188b-261021-0117-r25.c206 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 плагин разворачивается без установщика: каталог копируется adb push (под adb root) в /data/data/com.dunehd.app/flashdata/plugins/, затем chown -R system:system и chmod -R +x для bin и www/cgi-bin; после перезапуска приложения (am force-stop com.dunehd.app) оболочка регистрирует такой плагин («Plugin '
-
fw-tv188b-261021-0117-r25.c208 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 каталоги плагинов, положенные adb push под adb root в /data/data/com.dunehd.app/flashdata/plugins и переданные chown system:system, имеют SELinux-метку u:object_r:system_app_data_file:s0 — такую же, как у каталога соседнего плагина (Bazinga3); chcon не понадобился. ↩
-
fw-tv188b-261021-0117-r25.c207 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в корне ФС каталога /flashdata нет, а оболочка в shell.log называет каталог плагинов /flashdata/plugins («Loading plugins from '/flashdata/plugins'», «invalid plugin manifest from '/flashdata/plugins/test_plugin5_badname/dune_plugin.xml'», «copying recursively '/tmp/plugin_tmp' to '/flashdata/plugins/test_plugin5_plat'»); файлы этих плагинов лежат в /data/data/com.dunehd.app/flashdata/plugins. ↩↩
-
- fw-tv188b-261021-0117-r25.c203 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 каталоги плагинов, положенные adb push в /data/data/com.dunehd.app/flashdata/plugins, не подхватились перечитыванием по IP Control (cmd=main_screen, затем cmd=ir_code&ir_code=B24DBF00; обе команды ответили command_status ok): в shell.log после них нет ни строк test_plugin5, ни «Loading plugins from», ни populate_plugins, а test_plugin5 нет в /tmp/run/installed_plugins.xml. test_plugin5 и test_plugin5_sup зарегистрировались после am force-stop com.dunehd.app.
- fw-tv188b-261021-0117-r25.c233 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после am force-stop com.dunehd.app новый процесс приложения заново регистрирует плагины: в shell.log 35 строк «Plugin '
' of type '
' is registered», в том числе для test_plugin6 и test_plugin6_sup, положенных adb push перед этим.
-
fw-tv188b-261021-0117-r25.c084 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после am force-stop com.dunehd.app приложение Dune поднимается само (новый pid) за 1–2 с, без am start. ↩
-
fw-tv188b-261021-0117-r25.c204 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 (collect6) плагины, удалённые rm -rf из /data/data/com.dunehd.app/flashdata/plugins, после перечитывания по IP Control (cmd=main_screen + cmd=ir_code&ir_code=B24DBF00) остались в /tmp/run/installed_plugins.xml (grep -c test_plugin6 = 4) и в меню «Приложения»; исчезли они только после am force-stop com.dunehd.app. ↩
-
fw-tv188b-261021-0117-r25.c205 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 (collect5) после rm -rf каталогов тестовых плагинов test_plugin5* из /data/data/com.dunehd.app/flashdata/plugins и перечитывания по IP Control (cmd=main_screen + cmd=ir_code&ir_code=B24DBF00) в /tmp/run/installed_plugins.xml не было ни одной строки с test_plugin5 (grep -c = 0). ↩
-
fw-tv188b-261021-0117-r25.c076 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 плагин, положенный через adb push без перезагрузки, получил boot при ближайшем старте приложения Dune (после am force-stop), а не при загрузке системы; флага test_plugin5_plugin_boot_action_executed.flag до этого не было. ↩
-
fw-tv188b-261021-0117-r25.c082 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 global_action install не выполняется, если плагин положен в $FS_PREFIX/flashdata/plugins через adb push и приложение перезапущено: маркеров install от test_plugin5 и test_plugin6_sup нет, тогда как boot, boot_end и gui_start test_plugin5 выполнились. ↩
-
fw-tv188b-261021-0117-r25.c083 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 global_action update не выполняется, если version_index в dune_plugin.xml изменён на месте (1 → 2) и приложение перезапущено через am force-stop, хотя оболочка регистрирует плагин с version_index 2 и заново запускает movie_suppliers_update.sh. ↩
-
doc-sdk-plugins.c143 · doc · any-documented; прошивка — · Global plugin actions поддерживают системные события boot, install, update и uninstall ↩
-
doc-sdk-plugins.c144 · doc · any-documented; прошивка — · Событие boot_end (в самом конце холодной загрузки) доступно с прошивки 130917_b9 ↩
-
doc-sdk-plugins.c145 · doc · any-documented; прошивка — · Событие gui_start (при старте родного GUI Dune) доступно с прошивки 130914_b8 ↩
-
doc-sdk-plugins.c147 · doc · any-documented; прошивка — · Глобальным действием может быть любое стандартное GUI-действие плагина или plugin_system, запускающее исполняемый файл из состава плагина (в примере — через run_string) ↩
-
doc-sdk-plugins.c146 · doc · any-documented; прошивка — · Для события boot поддерживается только действие plugin_system ↩
-
plg-dc-globaltv.c011 · code · unknown; прошивка — · Глобальные действия install и update в манифесте оба ведут на plugin_handle_user_input с entry_id=install. ↩
-
plg-dc-globaltv.c028 · code · unknown; прошивка — · При entry_id=install обработчик запускает через system() скрипт
/bin/install.sh, где install_dir_path берётся из DuneSystem::$properties. ↩ -
plg-dc-globaltv.c027 · code · unknown; прошивка — · Скрипт bin/install.sh удаляет tv_cache_*.json из $FS_PREFIX/flashdata/plugins_data/globaltv, файлы tv_timestamp и fav_timestamp из $FS_PREFIX/flashdata/plugins_epfs/globaltv и создаёт флаг $FS_PREFIX/tmp/plugins/globaltv/update_epfs_if_needed_flag. ↩
-
plg-dc-widget-ext.c006 · code · unknown; прошивка — · global_actions/uninstall вызывает bin/uninstall.sh без «&», в отличие от остальных global_actions ↩
-
fw-tv188b-261021-0117-r25.c078 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при одном старте приложения global_actions плагина test_plugin5 выполнились по порядку boot (10:24:27.28), boot_end (10:24:27.62), gui_start (10:24:29.49; время shell.log). ↩
-
fw-tv188b-261021-0117-r25.c077 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при следующих стартах приложения (после am force-stop и после restart_gui) boot и boot_end плагина test_plugin5 не выполнялись повторно — в shell.log «[plugin] test_plugin5: boot action already executed» и «[plugin] test_plugin5: GUI boot action already executed». ↩↩
-
fw-tv188b-261021-0117-r25.c073 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после первого выполнения boot и boot_end плагина test_plugin5 в /tmp/run появились файлы test_plugin5_plugin_boot_action_executed.flag и test_plugin5_plugin_boot_end_action_executed.flag размером 1 байт (владелец system). ↩↩
-
fw-tv188b-261021-0117-r25.c079 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 gui_start плагина test_plugin5 выполнялся при каждом старте приложения Dune в прогоне — 13:24:29, 13:35:32, 13:40:55 (после am force-stop) и 13:45:18 (после restart_gui); строки «already executed» для него нет. ↩
-
fw-tv188b-261021-0117-r25.c080 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 global_action plugin_system с run_string «bin/ga.sh boot» (путь относительно каталога плагина) оболочка исполняет как «Running system(sh /data/data/com.dunehd.app/flashdata/plugins/test_plugin5/bin/ga.sh boot)» — с префиксом sh и абсолютным путём каталога плагина. ↩
-
fw-tv188b-261021-0117-r25.c081 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 скрипт global_action plugin_system (boot, boot_end, gui_start) работает под uid 1000(system) с SELinux-контекстом u:r:system_app:s0, текущим каталогом / и переменной окружения FS_PREFIX=/data/data/com.dunehd.app; $0 — абсолютный путь скрипта. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c003 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В libduneshell.so подряд идут строки каталогов плагинов: /flashdata/plugins, /tmp/mnt/D/dune_plugins, /fconfig/plugins, /firmware/plugins, /firmware_ext/plugins ↩
-
fw-tv188b-261021-0117-r25.c225 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при каждой из пяти загрузок плагинов в снимке shell.log оболочка пишет «=====> Loading plugins from '/flashdata/plugins'», а затем «… '/firmware_ext/plugins'»; других каталогов в строках «Loading plugins from» нет. ↩↩
-
fw-tv188b-261021-0117-r25.c226 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 в одном процессе приложения (pid 1630) «Loading plugins from '/flashdata/plugins'» выводилось трижды — 2026-10-20 22:42:42, 2026-10-22 22:50:36 и 22:55:47 (время shell.log), то есть плагины загружались повторно без перезапуска процесса. ↩
-
fw-tv188b-261021-0117-r25.c231 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 каталоги данных плагинов лежат в /data/data/com.dunehd.app/flashdata/plugins_data/
, в том числе для встроенных из firmware_ext (widget, radiotime, s928x_dvfel и др.) и dune_internal; в /data/data/com.dunehd.app/config/plugins_data есть только bluray. Других каталогов plugins_data поиск по ФС не нашёл, кроме тех же путей через /data/user/0 и /data_mirror. ↩
-
fw-tv188b-261021-0117-r25.c142 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 после регистрации плагина из $FS_PREFIX/flashdata/plugins появляется /tmp/www/plugins/
— символическая ссылка (владелец system) на каталог www плагина, например test_plugin5 -> /data/data/com.dunehd.app/flashdata/plugins/test_plugin5/www. ↩
-
fw-tv188b-261021-0117-r25.c143 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 /tmp/www/cgi-bin/plugins/
— обычный каталог (владелец system), в котором для каждого файла www/cgi-bin плагина лежит одноимённая символическая ссылка на /data/data/com.dunehd.app/firmware/bin/run_plugin_cgi (test_plugin5: env.sh, run.php; test_plugin6: cm, cm.php, php.ini, ping.sh, rt, rt.php; так же у встроенного shell_ext). ↩↩
-
fw-tv188b-260827-0003-r24.c029 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · В прошивке 13 встроенных плагинов в /system/dunehd/firmware_ext/plugins/ (у каждого dune_plugin.xml): android_apps, bluray, bt_setup, dunemdb_supplier_generic, dunemdb_supplier_rutube, dunemdb_supplier_youtube, dunestore, ext_epg, kartina_tv_launcher, ktv_start, radiotime, shell_ext, widget ↩
-
fw-tv188b-260827-0003-r24.c034 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Встроенные плагины на устройстве ожидаются по пути /data/data/com.dunehd.app/firmware_ext/plugins/ (пример: путь run_widget.sh плагина widget) ↩
-
thr-mydune-108.c011 · forum · hdtv_301, unknown; прошивка 150721_0136_B9 · В прошивке Dune 301 предустановленные плагины лежат в firmware_ext, и их можно удалить, модифицировав прошивку ↩↩
-
fw-tv188b-260827-0003-r24.c032 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит путь /tmp/run/installed_plugins.xml и имя функции parse_installed_plugins_xml() ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c028 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит шаблон записи installed_plugins.xml:
/ с полями name, caption, path, version_index, version_id, patch_index, version, launch_capable, delete_capable (литерал 0), tv_epf_capable (1), movie_supplier_disable_capable (1), category, logo_url ↩ -
fw-tv188b-260827-0003-r24--plugin-loader.c077 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Встроенные PHP-плагины прошивки (shell_ext, android_apps, dunestore) читают /tmp/run/installed_plugins.xml как перечень установленных плагинов ↩
-
plg-dc-globaltv.c030 · code · unknown; прошивка — · Список установленных плагинов плагин читает из XML-файла /tmp/run/installed_plugins.xml (элементы name дочерних узлов). ↩
-
fw-tv188b-261021-0117-r25.c211 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 запись /tmp/run/installed_plugins.xml для плагина из $FS_PREFIX/flashdata/plugins (от
до ) содержит name, caption, path, version_index, version и launch_capable; path — полный путь с $FS_PREFIX (/data/data/com.dunehd.app/flashdata/plugins/ ). Полей version_id, patch_index и delete_capable в записях тестовых плагинов нет. ↩
-
doc-sdk-plugins.c116 · doc · any-documented; прошивка — · Допустимые signer ID: «com.dune-hd» (только Dune HD) и customer ID кастомной прошивки (с 150326_r10) ↩↩
-
doc-sdk-plugins.c117 · doc · any-documented; прошивка — · Для подписанного плагина система проверяет подпись и отказывается его использовать при несовпадении подписи или недопустимом signer ID ↩
-
doc-sdk-plugins.c118 · doc · any-documented; прошивка — · Кастомные (операторские) прошивки могут быть настроены разрешать только подписанные плагины ↩
-
doc-sdk-plugins.c119 · doc · any-documented; прошивка — · Собственная подпись (150326_r10+): DSA-ключи 2048 через openssl, подпись утилитой plugin_sign.x86
, публичный ключ кладётся в прошивку как /firmware/config/plugin_key.pem ↩ -
fw-tv188b-260827-0003-r24--plugin-loader.c050 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит строки [plugin_signer]: файлы dune_plugin.sign и dune_plugin_signer_id.txt, signer_id com.dune-hd, ключ /firmware/config/plugin_key.pem или /config/plugin_key.pem, DSA-проверку ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c085 · doc · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Подпись плагина хранится в файле dune_plugin.sign, signer ID — в dune_plugin_signer_id.txt; оба имени есть в strings r24 ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c052 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Во встроенных плагинах прошивки 6 из 13 (android_apps, dunemdb_supplier_generic, dunestore, ktv_start, shell_ext, widget) имеют dune_plugin.sign и dune_plugin_signer_id.txt ↩
-
plg-dc-globaltv.c026 · code · unknown; прошивка — · Пакет содержит файл подписи dune_plugin.sign (бинарный, 48 байт) и dune_plugin_signer_id.txt со значением com.dune-hd. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c021 · code · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит пути /config/plugin_config.xml и /firmware/config/plugin_config.xml, функцию parse_plugin_config() и имена allow_install, signed, allow_delete, allow_replace, same_signer_id, default_embedded, default_external ↩
-
doc-sdk-plugins.c020 · doc · any-documented; прошивка — · Все установленные плагины перечислены в меню «Setup / Misc / Plugins», где вручную установленные можно удалить (ENTER → Delete) ↩
-
fw-tv188b-261021-0117-r25.c224 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 при загрузке плагинов shell.log содержит «plugin D: (dunemdb_supplier_youtube) prefer_new_builtin (41 vs 34)» и сразу за ним «[populate_plugins] dup dunemdb_supplier_youtube: replacing»; version_index копии в $FS_PREFIX/firmware_ext/plugins — 41, в $FS_PREFIX/flashdata/plugins — 34. ↩↩↩
-
fw-tv188b-261021-0117-r25.c203 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 каталоги плагинов, положенные adb push в /data/data/com.dunehd.app/flashdata/plugins, не подхватились перечитыванием по IP Control (cmd=main_screen, затем cmd=ir_code&ir_code=B24DBF00; обе команды ответили command_status ok): в shell.log после них нет ни строк test_plugin5, ни «Loading plugins from», ни populate_plugins, а test_plugin5 нет в /tmp/run/installed_plugins.xml. test_plugin5 и test_plugin5_sup зарегистрировались после am force-stop com.dunehd.app. ↩↩
-
- doc-sdk-plugins.c142 · doc, disputed · any-documented; прошивка — · Перечитать плагины без перезапуска оболочки: в верхнем меню нажать ANGLE/ROTATE (или Refresh в POP UP MENU) либо по IP Control: cmd=main_screen, затем cmd=ir_code&ir_code=B24DBF00
- doc-sdk-plugins.c035 · doc, disputed · any-documented; прошивка — · Параметры отображения точки входа: icon_url, icon_margins и icon_fit_scale_factor (120606+), badge_icon_url (120901+), override_default_badge (141005_b9+) — аналоги свойств ViewItemParams
-
doc-sdk-plugins.c140 · doc · android; прошивка — · В SDK для Android приведены команды развёртывания плагина: adb push в /flashdata/plugins/ и chmod -R +x для bin и www/cgi-bin внутри каталога плагина. ↩↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c044 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Пакет плагина для установщика — ZIP-архив: он скачивается по URL во временный каталог как plugin.zip, распаковывается unzip, может сверяться по md5; затем каталог копируется или переименовывается в <хранилище>/plugins/
↩ -
fw-tv188b-260827-0003-r24--plugin-loader.c042 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Установщик может отказать в установке неподписанного плагина, в замене плагина с другим signer_id и в замене «hard-coded» плагина; что из этого действует по умолчанию (без plugin_config.xml), из строк не следует ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c004 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Загрузчик (populate_plugins) сканирует каталоги /flashdata/plugins, /tmp/mnt/D/dune_plugins, /fconfig/plugins, /firmware/plugins, /firmware_ext/plugins; порядок обхода и приоритет между ними из строк не следуют ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c046 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Пакет плагина может содержать платформенные варианты в подкаталогах .platform.<платформа> (например .platform.android, .platform.android-arm-api19); установщик применяет вариант(ы) к корню и удаляет остальные; какие именно варианты и в каком порядке — по строкам r24 не установлено. ↩
-
- fw-tv188b-261021-0117-r25.c214 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP применил к корню плагина сначала .platform.android (скопировал only_android.txt и bin/marker.txt в корень), затем поверх — .platform.android-arm-api19 (bin/marker.txt перезаписан); в установленном плагине bin/marker.txt = «.platform.android-arm-api19» и есть only_android.txt. В shell.log — «[plugin_installer] applying /tmp/plugin_tmp/.platform.
». - fw-tv188b-261021-0117-r25.c215 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP не применил .platform.87xx и .platform.foo и удалил все четыре каталога .platform.* (android-arm-api19, 87xx, android, foo: «[plugin_installer] removing /tmp/plugin_tmp/.platform.
») до копирования; в установленном плагине нет ни каталогов .platform.*, ни only_87xx.txt.
- fw-tv188b-261021-0117-r25.c214 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 штатный установщик ZIP применил к корню плагина сначала .platform.android (скопировал only_android.txt и bin/marker.txt в корень), затем поверх — .platform.android-arm-api19 (bin/marker.txt перезаписан); в установленном плагине bin/marker.txt = «.platform.android-arm-api19» и есть only_android.txt. В shell.log — «[plugin_installer] applying /tmp/plugin_tmp/.platform.
-
doc-sdk-plugins.c138 · inference · android; прошивка — · Вероятно, задумано по аналогии с SMP87xx: на Android содержимое .platform.android переносится в корень, а .platform.87xx удаляется ↩
-
doc-sdk-plugins.c142 · doc, disputed · any-documented; прошивка — · Перечитать плагины без перезапуска оболочки: в верхнем меню нажать ANGLE/ROTATE (или Refresh в POP UP MENU) либо по IP Control: cmd=main_screen, затем cmd=ir_code&ir_code=B24DBF00 ↩
-
doc-sdk-plugins.c035 · doc, disputed · any-documented; прошивка — · Параметры отображения точки входа: icon_url, icon_margins и icon_fit_scale_factor (120606+), badge_icon_url (120901+), override_default_badge (141005_b9+) — аналоги свойств ViewItemParams ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c055 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Действия плагина на загрузку (boot и boot_end/GUI boot) выполняются один раз, пока в /tmp/run существует флаг выполнения; флаг ставится при выполнении. Момент первого выполнения для нового плагина (загрузка системы или ближайший старт оболочки) и очистка флага при перезагрузке не установлены. ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c068 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · При разборе манифеста name сравнивается с именем каталога плагина; вероятный этап отказа — populate_plugins (строка 10497 «invalid plugin manifest from …»); отказ установщика не установлен. ↩
-
- fw-tv188b-261021-0117-r25.c209 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25, если name в dune_plugin.xml не равен имени каталога плагина, оболочка при загрузке пишет в shell.log «[populate_plugins] invalid plugin manifest from '<путь>/dune_plugin.xml': name '
' is not equal to directory name '<каталог>'». - fw-tv188b-261021-0117-r25.c210 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 плагин, у которого name в dune_plugin.xml (test_plugin5_other) не равен имени каталога (test_plugin5_badname), не регистрируется: строки «Plugin … is registered» для него нет, в /tmp/run/installed_plugins.xml и /tmp/www/plugins его нет ни под тем, ни под другим именем.
- fw-tv188b-261021-0117-r25.c209 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25, если name в dune_plugin.xml не равен имени каталога плагина, оболочка при загрузке пишет в shell.log «[populate_plugins] invalid plugin manifest from '<путь>/dune_plugin.xml': name '
-
fw-tv188b-260827-0003-r24--plugin-loader.c072 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · При двух плагинах с одним name загрузчик (populate_plugins) может заменить встроенный плагин другим, а встроенный скрыть ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c073 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · При дубликате загрузчик может предпочесть встроенный плагин (prefer_new_builtin) по сравнению двух чисел (вероятно, version_index) или по тегу; есть и принудительная замена встроенного (force override builtin) ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c074 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Если загрузчик определяет дубликат как конфликт, остаётся ранее загруженный плагин; условие конфликта не установлено ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c047 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · libduneshell.so содержит строки установщика %s/bin/php-cgi, %s/www/cgi-bin/php-cgi, /firmware/bin/%s и сообщения «non-working binary detected», «created symlink(%s -> %s)»; вероятно, нерабочий бинарник плагина заменяется ссылкой на /firmware/bin/<имя>; связь %s/bin/php-cgi с этой заменой не установлена, а /firmware/bin/php-cgi в этой прошивке нет ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c048 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Установщик, вероятно, в конце установки снимает флаг скрытия с плагина и перезагружает его: сообщения «removing hidden flag from plugin», «reloading plugin», «Done.» есть в libduneshell.so; порядок действий выведен из порядка строк ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c084 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Подпись плагина считается по DSA по обычным файлам каталога плагина; нерегулярные файлы пропускаются ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c086 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Загрузчик r24 ищет открытый ключ проверки подписи в /firmware/config/plugin_key.pem и /config/plugin_key.pem; путь /firmware/config совпадает с SDK для кастомного signer ID, роль /config/plugin_key.pem и приоритет не установлены ↩
-
fw-tv188b-260827-0003-r24--plugin-loader.c087 · inference · tv188b, android-dune-fw; прошивка 260827_0003_r24 · Проверка signer_id в r24 сравнивает требуемый signer_id с фактическим и может отклонить signer_id как не разрешённый; это согласуется с SDK (допустимы «com.dune-hd» и customer ID кастомной прошивки); при каком условии выдаётся «unsupported signer_id», не установлено ↩
-
fw-tv188b-260827-0003-r24--http-api.c016 · inference, disputed · tv188b, android-dune-fw; прошивка 260827_0003_r24 · При заполнении плагинов оболочка, вероятно, делает симлинк /tmp/www/cgi-bin/run_plugin_cgi → /firmware/bin/run_plugin_cgi, публикует <плагин>/www в /tmp/www/plugins/<плагин> и создаёт «cgi links» для файлов www/cgi-bin в /tmp/www/cgi-bin/plugins/; что они указывают на run_plugin_cgi, из строк не следует ↩
-
plg-dc-screenshoter.c058 · inference · unknown; прошивка — · php-cgi пакета — сборка PHP 5 под ARM, использующая системную libphp5.so (в пакете её нет) ↩
-
plg-dc-screenshoter.c088 · inference · unknown; прошивка — · HTTP-сервер устройства, вероятно, отдаёт файлы и по симлинкам www/dss и www/sdss, которые плагин создаёт на каталоги снимков: на этом строится галерея ↩
-
fw-tv188b-261021-0117-r25.c163 · device · tv188b, android-dune-fw; прошивка 261021_0117_r25 · На tv188b r25 httpd отдаёт файлы через символическую ссылку из www плагина на каталог вне плагина: ссылка www/media -> /tmp/mnt/smb/5/surround sound test (каталог SMB-ресурса), GET /plugins/test_plugin6/media/<файл>.mkv с Range вернул 206, HEAD — 200 с Content-Length файла. ↩