Manual

do

Maker

.

com

Como criar instalador para seu programa em Qt

Como criar instalador para seu programa em Qt

Para quem programa em Windows, é fácil criar instalador para programas feitos em qualquer linguagem.

Existem diversos programas para criar instaladores, dentre eles, o que já utilizei duas vezes, o Inno Setup, que pode ser pego nesse link. Porém não é sobre ele que vou discorrer nesse artigo, porque o intuito é criar um instalador para programas feitos em Qt e não faz sentido que o instalador não seja multiplataforma também. Só que o procedimento é um pouquinho mais trabalhoso, mas com certeza é válido.

Como criar instalador com Qt

O procedimento não é autoral. Na verdade, está na documentação do próprio Qt, como você pode conferir aqui (em inglês). Os passos são poucos, porém elaborados:

1 - Criar um diretório de empacotamento que conterá todos os arquivos de configuração e instaláveis.

2 - Criar um arquivo de configuração que contenha a informação sobre como construir o instalador binário e repositórios online.

3 - Criar um arquivo de informação do pacote que contenha toda a informação sobre os componentes instaláveis.

4 - Criar o conteúdo do instalador e copiá-lo para o diretório do pacote.

5 - Usar o binarycreator para criar o instalador. Vejamos então.

Criando um diretório de empacotamento

Crie uma estrutura de diretório que reflita a arquitetura de componentes do programa e permita que o instalador seja estendido no futuro. O diretório deve conter os diretórios chamados configpackages.

mkdir -p SimpleSerial/{config,packages}

Criando um arquivo de configuração

Dentro do diretório config, devemos criar um arquivo chamado config.xml com o seguinte conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<Installer>
    <Name>Simple Serial</Name>
    <Version>1.0.0</Version>
    <Title>Simple Serial Installer</Title>
    <Publisher>By: Manual do Maker</Publisher>
    <ProductUrl>https://www.manualdomaker.com</ProductUrl>
    <Logo>logo.png</Logo>
    <StartMenuDir>Simple Serial</StartMenuDir>
    <TargetDir>@HomeDir@/SimpleSerial</TargetDir>
</Installer>

Criando um arquivo de informação de pacote

Crie um arquivo chamado package.xml com o seguinte conteúdo e coloque-o no diretório meta:

<?xml version="1.0" encoding="UTF-8"?>
<Package>
    <DisplayName>Simple Serial</DisplayName>
    <Description>Instala o Simple Serial.</Description>
    <Version>0.1.0-1</Version>
    <ReleaseDate>2019-04-29</ReleaseDate>
    <Licenses>
        <License name="Aceitação de licença" file="license.txt" />
    </Licenses>
    <Default>true</Default>
    <Script>installscript.qs</Script>
</Package>

O parâmetro Display Name mostra o título desejado. Em seguida, Description exibe a mensagem sobre o que será feito.

O parâmetro Version é para updates do instalador nesse caso.

O arquivo de licença é especificado em Licenses, que inclui uma mensagem informativa como título do item.

O parâmetro Default pode ser true para marcar o item por padrão ou script, para definir o comportamento por script.

Criando o conteúdo do instalador

O conteúdo a ser instalado deve ser armazenado no diretório data. Como há somente um componente, coloque os dados no diretório packages/com.vendor.product/data.

Instalando o Qt Installer Framework

Baixe e instale o Qt Installer Framework no diretório do Qt. Ele será utililzado para a criação do instalador. Vá até o site oficial para baixá-lo.

Estrutura completa do instalador

Para esse exemplo, incluí apenas o binário, já que suas dependências estão devidamente dispostas no meu sistema. Porém, para que seja possível rodá-lo em sistemas que não contemplem todas as dependências, podemos usar um macete, mas devo explicar previamente a estrutura do programa no sistema operacional - no caso, o Linux.

Estrutura completa do instalador básico (apenas o binário)

Essa é a estrutura básica criada:

struct-qt.webp

Para simplificar a criação da estrutura (em Linux), esse comando dará "aquela" força:

mkdir -p SeuPrograma/{packages/com.vendor.product/{meta,data},config}

Já garantimos que não faltará diretório. Agora vamos criar os arquivos do diretório meta:

for i in installscript.qs package.xml license.txt; do touch SeuPrograma/packages/com.vendor.product/meta/$i;done

E agora os arquivos do diretório data:

touch SeuPrograma/packages/com.vendor.product/data/installcontent.txt

Não se esqueça de colocar o binário no diretório data e popular os arquivos com os respectivos conteúdos.

Estrutura do programa criado

No Linux, temos algumas maneiras diferentes de instalar um programa.

Path do sistema

Existem os caminhos padrão de sistema. Em /lib estão as bibliotecas do sistema. em /usr/lib estão bibliotecas de programas do usuário e existem diversos outros diretórios de libs conforme o padrão POSIX. O mesmo acontece para os binários. Os caminhos padrão do sistema para binários pode ser visto com o comando:

echo $PATH

Os diretórios pertencentes às bibliotecas que estão dispostas no sistema podem ser vistos nos arquivos contidos em /etc/ld.so.conf.d.

Se desejar utilizar os caminhos padrão de sistema, devemos criar a estrutura de diretórios fiel à estrutura do sistema operacional. Como deveremos também recolher as dependências do nosso programa para redistribuição, uma opção seria:

cd SeuPrograma/packages/com.vendor.product/data/

ldd SeuPrograma |awk '{print $3}'|egrep -v '^$|libc6'|while read line; do cp --parents $line .;done

Isso criará a estrutura de diretórios com todas as dependências necessárias. Nesse caso, não deixe o binário do seu programa "solto" no diretório data. Crie o diretório (se não existir) usr/bin/ e coloque-o dentro do diretório bin.

No path de instalação especificado em seu instalador, coloque /, para instalar na raiz do sistema. Quando for executar o instalador, será necessário fazer com privilégio de root, usando sudo su ou su ./SeuInstalador.

Instalando no home do usuário

Se optar por instalar no home do usuário, será necessário apontar as dependências, criando os apontamentos das bibliotecas em um arquivo em /etc/ld.so.conf. Depois, será necessário carregar as bibliotecas. Para isso:

sudo ldconfig

Ou ainda, deixe todas as dependências no mesmo nível de diretório. Esse é o primeiro nível em que o binário do programa procura por suas dependências, buscando-as posteriormente nos diretórios de sistema conhecidos, caso não seja encontrado localmente.

Criando o instalador binário

Hora de criar o instalador. Para tal, chamamos o programa binarycreator.exe no Windows, ou binarycreator no Linux, passando o arquivo de configuração e o nome para o instalador.

binarycreator.exe -c config\config.xml -p packages YourInstaller.exe

E em Linux (considere que estou utilizando o meu diretório home, adeque-o):

/home/djames/QtNewest/QtIFW-1.4.0/bin/binarycreator -c config/config.xml -p packages SimpleSerial

No caso do Linux, o diretório do binarycreator fica dentro do diretório do Qt, em /Tools/QtInstallerFramework/3.0/bin/binarycreator.

A primeira tela da execução é a da imagem de destaque. As próximas telas são:

Pasta de instalação

O caminho pode ser mudado pelo usuário, caso não queira deixar o padrão especificado pelo seu instalador.

instalationFolder-300x234.webp

Seleção de componentes

No caso, só temos um nesse tutorial. Se houvesse mais, poderíamos fazer a seleção desejada.

components-300x234.webp

Licença e aceitação

Na próxima tela, exibimos a licença de software e aceitação.

licence-qt-300x213.webp

Pronto para instalar

E a tela final antes da instalação.

readyToInstall-300x213.webp

Instalação completa

Essa tela é apenas informativa, a instalação já estará concluída ao chegar nesse ponto.

setupDone-300x213.webp

Como citado anteriormente, tenho todas as dependências, portanto não as recolhi para o diretório do instalador.  repare que criei o diretório SimpleSerialProgram, que resultou nesses arquivos após a instalação:

filesAfterInstall.webp

Agora você já está apto a redistribuir seus programas em Qt de forma elegante!

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.