Среде установки Qt не удалось загрузить удаленное дерево

Обновлено: 04.07.2024

В этих примерах показано, как использовать сценарии компонентов для настройки программы установки.

< /th>
ПримерОписание
Пример изменения пользовательского интерфейса установщикаИспользуйте скрипты компонентов для изменения установщика Пользовательский интерфейс
Пример ошибки компонентаЕсли компонент не может быть установлен, используйте сценарий компонента, чтобы остановить установку
Пример решения зависимостейИспользуйте файл package.xml компонента для определения зависимостей и автоматических зависимостей между компонентами
Пример динамической установки страницыИспользовать скрипты компонентов и динамические страницы для создания установщика
Изменить Пример извлечения установщикаИспользуйте хук извлечения архива в скрипте компонента, чтобы изменить целевой путь
Пример онлайн-установщикаИспользовать репоген инструмент и файл конфигурации для настройки онлайн-установщика
Открыть пример ReadMeИспользуйте скрипты компонентов, чтобы добавить флажок для открытия файла readme на последней странице установщика
Пример выхода из установщикаИспользуйте скрипт компонента для выхода из программы установки
Пример расширения файла регистрации Используйте скрипты компонентов для регистрации расширений файлов в Windows
Пример ярлыка меню «Пуск»Используйте скрипты компонентов для добавления записей в меню «Пуск» Windows
Пример системной информацииИспользование API systemInfo в скриптах компонентов для проверки версии и разрядности операционной системы
Пример переводаИспользовать перевод для локализации страниц программы установки и лицензий

В следующем разделе содержится подробная информация о Qt Installer Framework:

упаковка такая

Я переместил все свои файлы в пакет и запустил

когда я запускаю сгенерированный установщик, я получаю сообщение об ошибке "Не удается получить удаленное дерево".

Что мне нужно сделать? Пожалуйста, посоветуйте,

С уважением,
Стивенсон Ли

Привет и добро пожаловать на форум devenet

Вы пробовали сделать установщик с исходным примером?
Это работает?

Кажется, вы управляете всем прямо из командной строки. Когда вы все равно используете Qt Creator, вы можете просто открыть файл .pro и использовать его с помощью «запустить qmake». Это немного неудобно, но обычно это работает.

@koahnig
большое спасибо за ответ.

Я попробовал этот пример
https://github.com/qtproject/installer-framework/tree/master/examples/tutorial
Я в основном скопировал каталог и добавил свои файлы в каталог пакета и попытался запустить создателя двоичных файлов, чтобы увидеть, создает ли он установщик. Он создает установщик, но запуск установщика и нажатие кнопки «Далее» приводит к ошибке «Не удается получить удаленное дерево»

Я попытался скопировать само руководство и снова запустить binarycreator. это действительно сработало.

Разница в том, что я удалил структуру пакета внутри каталога пакета. У меня было только 2 папки config и package, и я явно указал package.xml.

В учебнике у него была структура папок для пакета, которая представляет собой пакет \meta, метапакет должен иметь package.xml.
тогда пакет \data содержит файлы, которые будут установлены.

Итак, я попробовал ту же структуру папок. Я скопировал содержимое метапапки, но отредактировал package.xml и использовал этот package.xml:

После этого я снова запустил средство создания двоичных файлов:

Это фактически решило мою проблему и позволило мне создать правильный установщик.

Однако я все еще сбит с толку ошибкой, которую я получил ранее.
Еще раз спасибо.

С уважением,
Стивенсон Ли

Рад видеть, что вы решили свою проблему.

К сожалению, это пользовательский форум с очень небольшим количеством отзывов по вопросам IFW.

Возможно, вы захотите задать свои вопросы в списке адресов электронной почты разработчика "development@qt-project.org". Обычно там околачиваются разработчики с более глубоким пониманием.


Ошибка "Не удается получить удаленное дерево":

Просто выберите «Настройки системного прокси»/или настройте прокси-сервер вручную [Личные настройки] на вкладке «Сеть» в настройках установщика

Qt Installer Framework — это совершенно новый фреймворк, который в настоящее время все еще находится в разработке. Текущая версия содержит набор инструментов и утилит для создания инсталляторов. Самой важной особенностью является то, что сам фреймворк является мультиплатформенным, он поддерживает Windows, Mac OS X и Linux.

Замечательная особенность QT Installer Framework заключается в том, что он может загружать необходимые файлы с сервера. Это означает, что не требуется предоставлять файлы с установщиком. Он работает с так называемыми «репозиториями». Благодаря этому он также может обновлять файлы без повторной загрузки установщика, поскольку он создает инструмент обслуживания, который может обновлять или удалять файлы. Однако документация не идеальна, в ней отсутствует много деталей.

Среда представляет собой проект с открытым исходным кодом. Он построен поверх Qt (для этого требуется статическая сборка Qt).

Среда очень проста в использовании. Основные функции, которые пользователь должен знать для работы с XML, это все. Для расширенных функций требуется знание javascript (QtScript) (для наиболее сложных функций может потребоваться C++).

Использование

Весь процесс создания установщика начинается с создания необходимой структуры папок.

Есть две основные папки. Конфигурация и папка пакетов.

Конфигурация

Папка config содержит файл конфигурации установщика (config.xml) и изображения, используемые в установщике. Можно настроить различные параметры — Поддерживаемые параметры конфигурации. Вот пример того, как может выглядеть файл конфигурации:

Пакеты

Вторая папка — это папка пакета. Он содержит все компоненты, которые будут установлены установщиком. Каждый компонент состоит из двух папок: данных и метапапки.

Папка данных содержит все файлы, которые будут установлены на целевой машине. Установщик архивирует все данные в формате 7z и извлекает их при установке.

Папка meta содержит файл конфигурации (package.xml) для компонента и сценарий установки, который будет вызываться при загрузке компонента.

Это пример файла конфигурации компонента

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

Разработка – не единственная часть выпуска продукта. Развертывание и обслуживание – одинаково важные части жизненного цикла продукта. Вот почему Qt помогает нам, предоставляя Installer Framework. Это набор инструментов, который позволяет не только создавать красивые и функциональные установщики, но и обновлять приложение, предоставлять инструменты для его обслуживания и многое другое. В этом руководстве вы изучите основы Qt Installer Framework и узнаете, как создать свой первый автономный установщик для Windows. Поехали!

Как получить Qt Installer Framework?

Инфраструктуру Qt Installer можно легко установить с помощью инструмента обслуживания Qt или загрузить из репозитория Qt. При использовании инструмента обслуживания его можно найти в разделе Инструменты разработчика и дизайнера:

После загрузки он должен храниться в [QtDirectory]/Tools/QtInstallerFramework

Как сгенерировать установщик с помощью Qt Installer Framework?

1. Создайте папку развертывания

Перед созданием установщика необходимо подготовить приложение к развертыванию. Первый шаг — создать папку развертывания, в которой будут храниться все файлы, необходимые для выполнения приложения и создания установщика. Внутри него вы должны создать две директории: «config» и «packages».

Как следует из названия, первый каталог будет содержать файлы конфигурации для вашего установщика — в данном случае один XML-файл. Что должен содержать этот файл?

2. Создайте файл конфигурации

Файл конфигурации содержит некоторую общую информацию о приложении: каталог установки, имя установщика и т. д. Вы можете сделать некоторые интересные вещи, изменив этот файл — например, добавить флажок «запустить после установки», изменить установщик Пользовательский интерфейс или даже добавить удаленные репозитории для получения обновлений приложений. Вы можете узнать обо всех доступных тегах в документации установщика Qt.

Давайте создадим такой файл. Основной должен выглядеть так:

Несмотря на минимализм, пока этого будет достаточно.

3. Создать пакет

Прежде чем идти дальше, вы должны узнать, что на самом деле представляет собой пакет. Пакет — это модуль, который содержит определенную версию или некоторые части приложения. Если вы включаете много пакетов, установку можно настроить — пользователи могут выбрать, что они хотят установить. Сам Qt является отличным примером такого подхода. Давайте взглянем на древовидную структуру программы установки Qt:


Как видите, платформа разделена на несколько пакетов, содержащих комплекты для разных платформ и модули с дополнительными функциями, такими как веб-движок.

С этими знаниями вы теперь можете приступить к созданию первых пакетов для нашего приложения. Чтобы все было ясно и просто, пока мы будем использовать только два пакета: 64-разрядную версию приложения и 32-разрядную версию.

Начните с создания правильных каталогов для пакетов. Мы будем придерживаться шаблона именования «com.developername.shortpackagename»:

Что насчет содержимого пакетов? Давайте начнем их заполнять!

4. Добавить метаданные

Каждый пакет должен содержать внутри два основных каталога: «данные» и «мета». Первый будет содержать исполняемые файлы, библиотеки и другие файлы, необходимые для запуска приложения, а второй — информацию о пакете. В этом случае папка «Мета» будет содержать только два файла, поэтому начните с нее.

Метаданные должны состоять из файлов «license.txt» и «package.xml». Текстовый файл очевиден — он предоставляет установщику лицензионное содержимое. Он не имеет обязательного формата, но HTML-теги поддерживаются, если вам нужен стиль.

Теперь давайте поговорим о «package.xml» — это более интересно. Этот файл содержит информацию о пакете, которая будет представлена ​​в окне установщика. Добавляя дополнительные теги, вы можете добавлять пользовательские страницы установщика, переводы, зависимости между другими пакетами и многое другое. Мы еще поговорим об этом файле, в другой части туториала, которая будет опубликована в будущем. На данный момент содержимое «package.xml» должно выглядеть так:

Большинство тегов говорят сами за себя. Если вы хотите узнать больше о других тегах, см. документацию.

5. Заполнить каталог данных

Когда вы добавляете необходимые файлы в каталог «meta», переместите один из них в папку «data». Этот каталог содержит все файлы приложения, которые содержит пакет. При установке пакета его содержимое будет распаковано в целевой каталог. Чтобы сохранить папку установки чистой, мы предлагаем создать дополнительную подпапку в каталоге данных.

Поскольку уже существует большое количество папок, о которых мы говорили, мы назовем эту «каталог файлов пакетов». С этим отслеживать было бы проще.

Теперь начинается важная часть подготовки к развертыванию. В каталог файлов пакета вам нужно добавить значительное количество файлов, необходимых для запуска приложения вне IDE Qt Creator: все исполняемые файлы, Qt и внешние библиотеки, файлы dll и т. д. К счастью, Qt Framework поможет нам в этом. путем предоставления набора инструментов для развертывания.

Теперь добавьте исполняемый файл в каталог файлов пакета. Просто скопируйте его из папки сборки. Теперь откройте терминал командной строки в каталоге файлов пакета. Это необходимо для запуска «windeployqt.exe» — инструмента, созданного для автоматической загрузки всех dll-файлов Qt, необходимых для запуска приложения. Чтобы запустить этот инструмент, используйте эту команду:

Эта команда добавляет (почти) все необходимые двоичные файлы и файлы, необходимые для запуска приложения на основе QML. Флаг -qmldir используется для сканирования кода QML и добавления всех необходимых библиотек времени выполнения из модуля Qt Quick. После этого флага поставьте каталог вашего проекта — не беспокойтесь, он будет рекурсивно сканироваться. Если ваше приложение не основано на QML, вы можете пропустить этот флажок.

В учебном случае полная команда должна выглядеть так:

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

< бр />

В настоящее время инструмент windeployqt имеет тенденцию отправлять сюда много ненужных файлов, но даже сейчас нет всех необходимых файлов. Еще нет…

6. Добавьте файлы для компилятора

Raspberry Pi с Qt.

Итак, мы выбрали Raspberry Pi 3B+. Это отличный одноплатный компьютер размером с банковскую карту. Имеет 4 порта USB, модуль WiFi, 1 ГБ оперативной памяти, процессор BCM2835 с четырьмя ядрами Cortex-M53, каждое с частотой до 1,4 ГГц. Мы решили не использовать HDMI или композитный выход, потому что чем меньше проводов, тем лучше. Майнеры не заметят и оторвут провода или оторвут и не заметят. Шахтеры довольно суровые люди.

Raspberry Pi 3 B+.

Отображает

В дополнение к RPi мы получили резистивные сенсорные дисплеи Adafruit PiTFT. Мне понравился дисплей в тот момент, когда я увидел его. Все просто, лаконично, без излишеств. Достаточно просто плотно прижать его к плате, чтобы он заработал.

Ну и вещи, о которых обычно забывают: питание и флешка для операционной системы (ОС).

 Сенсорный дисплей Raspberry Pi». ширина=

Мощность

Сначала я запитывал RPi от ноутбука, но что-то пошло не так, и RPi отключился. Увидел моргающие светодиоды (повторялась одна и та же короткая последовательность) и предложил повторно перезагрузить. Быстро выпросил у коллеги зарядку для телефона и запитал одноплатник током 2,5А. Стало ясно, что RPi нужен мощный блок питания.

Флешка

Флешка нужна для того, чтобы на нее записать образ ОС. Четыре года назад я работал над сайд-проектом на Raspberry Pi 2 b и по глупости взял десяток некачественных флешек. Флешки нормально работали на смартфоне и ноутбуке, но не на Raspberry Pi. Однако со снятыми через два дня флешками AData RPi заработал без проблем.

Устройство почти готово

Программное обеспечение

В качестве основы для приложения мы решили использовать Qt.

Итак, для реализации проекта в программном плане были предприняты следующие шаги:

  1. Установка и первоначальная настройка ОС на RPi.
  2. Включите экран
  3. Сборка и установка Qt
  4. Установка Curl
  5. Настройка среды разработки
  6. Эмммм… Напиши бигуди
  7. Настройка ОС таким образом, чтобы Curler запускался при запуске ОС и перезапускался в случае сбоя

При всем при этом нужно было иметь в виду, что нужно будет изготовить почти пять десятков комплектов РП, а это требует быстрого дублирования флешки.

Asus ROG GL753VD с ОС Kubuntu 18.04 использовался в качестве ПК для разработки

Этап 1 — Установка и первоначальная настройка ОС

Здесь все просто. Загрузите архив образа Raspbian с официального сайта и распакуйте его. Скопируйте образ с помощью утилиты dd на USB-накопитель. Вот и все. Образ готов к запуску на RPi. Вставьте флешку и включите RPi. Устройство победно мигает светодиодами.

Что дальше? Устройство не знает наших учетных данных WiFi, мы не знаем его IP-адреса, и оно не позволит нам получить к нему доступ по ssh даже при кабельном соединении. Просто по умолчанию так.

Вновь вставляем флешку в компьютер. Он будет смонтирован как два раздела: загрузочный и системный. Загрузка небольшая и имеет раздел с файловой системой FAT32 и системный раздел с файловой системой ext4.

Чтобы одноплатный плеер разрешил доступ через ssh , мы создаем файл с именем ssh в загрузочном разделе. Увидев этот файл, RPi разрешит нам авторизоваться по ssh , но только до следующей перезагрузки. После каждой загрузки этот файл удаляется.

Вам нужно немного другое колдовство, чтобы заставить RPi использовать ваш Wi-Fi. Заходим в системный раздел в директорию /etc/wpa_supplicant. Откройте файл wpa_supplicant.conf. В нем описаны настройки подключения к беспроводным сетям. Там уже описана одна сеть. В новый раздел network добавляем описание нашей сети Wi-Fi с учетными данными для доступа (первый можно использовать в качестве примера). Убедитесь, что в конце файла нет пустой строки (когда-то RPi не смог загрузиться именно из-за этого).

Чтобы узнать IP-адрес нашего RPi, мы можем использовать утилиту nmap следующим образом:

Конечно, вам нужно будет подставить в этой команде свою сеть вместо моей.

Мы увидим список всех хостов в сети, и если RPi подключился к WiFi, мы найдем в списке что-то вроде этого:

Ну, теперь мы можем подключиться к RPi через ssh :

Он запросит пароль. По умолчанию в качестве пароля используется raspberry. Настоятельно рекомендуется изменить его немедленно.

Далее, чтобы закончить настройку, вам необходимо включить доступ ssh на постоянной основе и расширить файловую систему на всю флешку с помощью утилиты raspi-config . Qt занимает много места и просто не помещается в разделы файловой системы по умолчанию.

Выполнить команду

Появится простое приложение. С помощью стрелок на клавиатуре выберите «Interfacing Options», подпункт «Ssh». Мы выбираем утвердительное действие в диалоге. Итак, у нас есть ssh.

Далее переходим в пункт «Дополнительные параметры», подпункт «Расширить файловую систему», также отвечаем утвердительно в появившемся диалоге. Мы должны немного подождать. Перезагрузите RPi:

Также имеет смысл обновить весь софт на малине. Для этого есть пара команд:

Дожидаемся завершения этих команд и малинка готова к использованию.

Этап 2. Включите экран

Экран просто помещается на RPi. Но плотно, тем не менее, электроника - это наука о контактах.

На самом деле шаги по включению экрана в программном обеспечении описаны здесь, но имеет смысл привести их здесь вкратце.

Выполните следующие команды:

Запускается скрипт и предлагает нам выбрать настройки драйвера экрана.

Первый диалог дает нам выбор между типами экрана. У меня 2,8-дюймовый резистивный сенсорный экран.

Во втором диалоговом окне вам будет предложено выбрать поворот экрана. Впервые вы можете выбрать что-то одно. А потом уже выбирать нужный поворот.

В третьем диалоговом окне я заметил, что мне не нужен HDMI.

Далее скрипт что-то скачивает, устанавливает, о чем-то думает и просит перезагрузку. Обратите внимание, что вы можете снова запустить скрипт adafruit-pitft.sh в любое время, это просто вызовет реконфигурацию экрана.

В целом очень порадовал тот факт, что экран завелся с полпинка и хорошо работает даже без всякой калибровки.

После перезагрузки мы видим, что на экране нам показывается консоль, а затем графическая она

Этап 3. Сборка Qt

Ну а теперь приступим к самой сути процесса. Зачем вообще Qt? Причины:

<р>1. Позволяет создавать очень достойные пользовательские интерфейсы (GUI);
2. Его можно использовать с широким спектром операционных систем и компьютерных архитектур;
3. Разработку можно легко выполнить на C++.

Сборка Qt состоит из четырех частей: подготовка среды, настройка, сборка и установка.

Подготовка окружения лично для меня состоит из создания каталогов с исходным кодом Qt, кросс-компилятора, копии системного раздела raspberry и связывания всего этого в скриптах, облегчающих жизнь.

Я поместил пути, используемые для сборки процесса, в отдельный скрипт с переменными среды.

Загрузите архив *.tar.xz с исходниками Qt отсюда. Распакуйте его куда-нибудь.

Загрузите компилятор gcc для ABI arm-linux-generic-elf-32bit . Я использую проверенный в бою gcc-linaro-5.4.1–2017.05-x86_64_arm-linux-gnueabihf, но вы можете попробовать любой, подходящий под требования Qt.

Теперь нам нужен клон рабочей флешки от raspberry. Вы можете сделать это с помощью команды dd. Втыкаем флешку в комп и запускаем

Получаем дерево блочных устройств, находим имя флешки. Ну, мы пишем что-то вроде

Путь в из параметра вы можете использовать самостоятельно. Это вопрос личного удобства.

Я предпочитаю иметь полный клон файловой системы для одноплатной разработки для каждого значительного шага конфигурации. Неглобальную синхронизацию можно выполнить с помощью утилиты rsync.

Итак, у нас есть изображение. Вам нужно смонтировать его в какой-то каталог. Для этого есть такой скрипт:

Магическое число 98304 было получено утилитой fdisk. Это смещение системного раздела, указанное в блоках файловой системы в образе флешки, которую мы удалили.

Итак, среда для сборки Qt готова.

Настройка сводится к вызову скрипта configure в каталоге с исходниками Qt с нужными нам параметрами. Параметры выбираются в зависимости от требований к разрабатываемому ПО и путей к различным нужным штукам на конкретной машине разработчика. Это необходимо в первую очередь для того, чтобы выявить недостающие библиотеки для сборки модулей Qt.

Для настройки Qt я использую вот такой скрипт:

Возможно, имеет смысл присвоить другое значение переменной BUILDPATH. Он указывает каталог для теневых сборок.

А это наши переменные build_variables.sh:

Нас интересуют только четыре переменные:

PATH_TO_CC — путь к компилятору

RPI_ROOT — путь к каталогу с смонтированной файловой системой raspberry

PATH_TO_QT_SOURCES — каталог с исходниками Qt

PATH_TO_QT_RPI — путь, по которому Qt будет установлен на малине.

Мы устанавливаем их, запускаем скрипт и…

И я абсолютно уверен, что Qt не будет настроен. Конфигурация завершится ошибкой из-за отсутствия библиотек, даже если они есть. Что делать?

После беглого просмотра библиотек я понял, что:

  1. Символических ссылок просто нет.
  2. Библиотеки есть, но они совсем по другим путям
  3. Некоторые библиотеки не видны из-за того, что имя библиотеки представляет собой имя символической ссылки с абсолютным путем. Путь существует в корневой файловой системе RPi, но не в корне нашей файловой системы.

В первом случае все просто: просматриваем логи конфигурации, находим несуществующие библиотеки.Если в файловой системе raspberry есть нужные с более-менее подробным указанием версии, то достаточно просто символьной ссылки, поэтому ее надо создать вручную командой ln.

Второй случай сложнее. В параметрах конфигурации есть следующее: -device linux-rasp-pi3-g +. Он указывает параметры сборки для конкретного типа компьютера. Вы можете создавать свои собственные настройки для нестандартного оборудования. Эти файлы расположены в исходном каталоге Qt, в подкаталоге qtbase/mkspec/devices. В каталоге qtbase/mkspecs есть много интересного. Находим файл с таким названием, изучаем и редактируем по необходимости.

А вот с последним случаем все сложно. Переделывать все ссылки вручную крайне неразумно, поэтому пара хороших людей написали скрипты для этого хитрого дела и поделились ими с сообществом.

Первый скрипт здесь. На него легко наткнуться и легко сломать. Он не работает должным образом уже около трех лет.

Второй скрипт здесь. Это работает как шарм.

Мы должны запустить его с корневым каталогом RPi в качестве параметра (конечно, с sudo). Это просто сработало. Конфигуратор выкатывает все функции Qt, которые будут в сборке. Если нас все устраивает, то приступаем к сборке.

Для сборки перейдите в каталог BUILDPATH и введите команду:

Число 4 зависит от количества ядер процессора вашего компьютера. Но какой-то процессор нужно оставить себе, для порядка. Давай, сделай кофе или чай. Выпей это. Перекусить. Поговорите с кем-нибудь, чтобы успокоить душу. Вернись. Если мы столкнемся с ошибками компиляции, имеет смысл запустить сборку еще раз. Иногда это помогает.

Если ошибки продолжают возникать в тех же местах, то проблема может быть в чем угодно, от компилятора до отсутствующих или старых заголовков на малине. подход здесь строго индивидуальный к каждой ошибке сборки.

Если у нас все готово, мы можем приступить к установке.

Установка производится из той же директории BUILDPATH с помощью команды:

Ждем завершения команды. Он копирует встроенные библиотеки и создает на них символические ссылки.

После завершения установки образ готов к использованию. Синхронизируем его содержимое с флешкой либо утилитами dd, либо rsync.

Если после rsync вы вдруг не можете получить доступ к RPi через ssh с ошибкой «Неверный пользователь или пароль», то, скорее всего, что-то случилось с файлом /etc/shadow. Необходимо скопировать его с раздела флешки, смонтированного на компьютере, на саму флешку.

В этой статье мы рассмотрим распространенные ошибки при проектировании электронных устройств и пути их решения. Мы увидим, как рассчитать стоимость отката партии устройств, ознакомимся с основным циклом прототипирования.

Читайте также: