Manual
do
Maker
.
com
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.
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.
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}
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>
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.
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.
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.
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.
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.
No Linux, temos algumas maneiras diferentes de instalar um programa.
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.
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.
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:
O caminho pode ser mudado pelo usuário, caso não queira deixar o padrão especificado pelo seu instalador.
No caso, só temos um nesse tutorial. Se houvesse mais, poderíamos fazer a seleção desejada.
Na próxima tela, exibimos a licença de software e aceitação.
E a tela final antes da instalação.
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!
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.