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.
Table of Contents
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 config e packages.
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: Do bit Ao Byte</Publisher> <ProductUrl>https://www.dobitaobyte.com.br</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:
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.
Seleção de componentes
No caso, só temos um nesse tutorial. Se houvesse mais, poderíamos fazer a seleção desejada.
Licença e aceitação
Na próxima tela, exibimos a licença de software e aceitação.
Pronto para instalar
E a tela final antes da instalação.
Instalação completa
Essa tela é apenas informativa, a instalação já estará concluída ao chegar nesse ponto.
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:
Agora você já está apto a redistribuir seus programas em Qt de forma elegante!
1 thought on “Como criar instalador para seu programa em Qt”
Comments are closed.