Construindo seu primeiro Flatpak

Leandro Ramos
5 min readNov 20, 2019

--

Logo do Flatpak

Se quiserem me doar um café pelo PagSeguro do UOL: https://pag.ae/7Vu8Tt-pn

Depois de uma semana testando o Fedora Silverblue em duas máquinas, passei a usar vários pacotes Flatpak, pois precisava conhecer melhor seu funcionamento. Eu sou meio “das antigas” e prefiro usar os pacotes do repositório da distribuição Linux que estiver usando (no Fedora temos um repositório de flatpaks também, ainda pequeno). No entanto, não posso negar que existem vantagens no uso dos Flatpaks — as quais não vou abordar aqui para não sair do foco do artigo.

O tutorial a seguir é praticamente uma tradução da documentação presente no link http://docs.flatpak.org/en/latest/first-build.html

Ferramentas necessárias

Precisamos do flatpak e do flatpak-builder. No meu sistema (Fedora 31 Workstation), eles já vem instalados. Veja como instalar no seu sistema — provavelmente os dois pacotes estão nos repositórios da maioria das distribuições Linux, ou você pode instalar o flatpak-builder como qualquer flatpak

flatpak install flathub org.flatpak.Builder

Instalando o SDK necessário

Para construirmos nosso programa flatpak, vamos precisar do SDK apropriado para isso. Aqui temos um ponto bastante discutido na comunidade, o tamanho dos SDKs e Runtimes, mas isso será debatido em outras mídias (offtopic).

flatpak install flathub org.freedesktop.Platform//18.08 org.freedesktop.Sdk//18.08
Instalação do SDK necessário para fazermos o build do programa

Criando o programa

Sugiro que você organize seus arquivos em algum diretório, para que não fiquem misturados com outras coisas.

Meu projeto em ~/projetos/flatpaks/org.leandroramos.Infoscript

Dentro do diretório que escolhemos, vamos escrever o script, será um script em shell Bash para homenagear meu querido professor Blau Araújo, com quem faço um curso — https://debxp-linux.blogspot.com/

Vamos criar o arquivo infoscript.sh e colocar o seguinte conteúdo:

#!/usr/bin/env bash
clear
echo “”
echo “Informações super importantes!”
echo “ — — — — — — — — — — — — — — — — — — -”
echo -n “Usuário : “
whoami
echo -n “Hostname: “
hostname
echo -n “Uptime : “
uptime -p
echo -n “Kernel : “
uname -rms
echo “ — — — — — — — — — — — — — — — — — — -”
echo “”
Script no editor de textos

Criando o “manifesto”

Todo pacote flatpak é construído usando um arquivo manifest que possui informações básicas sobre o programa e instruções para que ele seja construído (ou, no novo verbo, “buildado”). Vamos criar o arquivo org.leandroramos.Infoscript.json (OK, não precisam usar o meu nome aqui) no mesmo diretório onde colocamos o infoscript.sh, e adicionar o seguinte conteúdo (adapte para o seu uso aí):

{
"app-id": "org.leandroramos.Infoscript",
"runtime": "org.freedesktop.Platform",
"runtime-version": "18.08",
"sdk": "org.freedesktop.Sdk",
"command": "infoscript.sh",
"modules": [
{
"name": "infoscript",
"buildsystem": "simple",
"build-commands": [
"install -D infoscript.sh /app/bin/infoscript.sh"
],
"sources": [
{
"type": "file",
"path": "infoscript.sh"
}
]
}
]
}
Manifesto json no editor de textos

Construindo o programa (build)

Agora que o nosso programa tem um manifesto, o flatpak-builder pode construir o pacote. Ao especificar o build-dir (que pode ter outro nome), teremos um diretório com o build do programa.

flatpak-builder build-dir org.leandroramos.Infoscript.json
Build concluído
Conteúdo do build-dir

Testando o build do programa

Me perdoem por misturar as palavras construção e build, mas acho que não devo mais traduzir assim.

Para testar o programa, vamos usar o flatpak-builder. Usando o parâmetro run, o programa terá quase as mesmas permissões de um programa final, exceto as permissões de acesso ao sistema de arquivos.

flatpak-builder --run build-dir org.leandroramos.Infoscript.json infoscript.sh
Primeiro programa Flatpak funcionando

Colocando o pacote num repositório

Antes de podermos instalar e rodar o programa, ele precisa estar em um repositório. Vamos criar um repositório local para o nosso primeiro programa, e devo lembrar que você pode colocar o nome que quiser no repositório, pois estamos trabalhando localmente.

flatpak-builder --repo=leandroramos --force-clean build-dir org.leandroramos.Infoscript.json

O comando acima vai fazer o build novamente e exportar o resultado para um diretório chamado leandroramos — que é o meu repositório local. O segundo parâmetro (force-clean) vai esvaziar o diretório build-dir criado anteriormente.

Colocando o programa no repositório
Conteúdo do repositório leandroramos

Instalando o programa

Antes de instalarmos o programa, como todo flatpak, precisamos adicionar o repositório à nossa lista de remotos (você pode consultar a página Using Flatpak para entender melhor).

flatpak --user remote-add --no-gpg-verify leandroramos leandroramos

Depois podemos listar os remotos para conferir se o novo repositório foi adicionado

flatpak remotes

E, depois, podemos instalar o programa

flatpak --user install leandroramos org.leandroramos.Infoscript
Instalando o programa Infoscript a partir do repositório leandroramos

Note que passamos o parâmetro --no-gpg-verifyquando adicionamos o repositório leandroramos à lista de remotos do flatpak. Faça isso somente em testes locais. Para publicar programas em repositórios oficiais você deve assinar os pacotes com chave privada GPG.

Finalmente, rodando o programa

O nosso programa não possui lançadores nem integração alguma com o sistema, e nem precisaria no momento. Então, vamos executá-lo a partir do terminal (a partir de qualquer lugar do sistema, não precisamos mais estar no diretório de criação do pacote).

flatpak run org.leandroramos.Infoscript
Comando para rodar o programa Infoscript
Execução do programa Infoscript

Por enquanto é só, pessoal. Abraços!

--

--

Leandro Ramos

Desenvolvedor Web, Ciclista Urbano, Fã de GNU/Linux e Software Livre