Comandos básicos para gerenciar pacotes Flatpak no Linux

Estava eu aqui fazendo os meus estudos dominicais sobre Linux, e achei que seria bacana compartilhar um guia com os comandos flatpak que são mais úteis para os usuários gerenciarem seus programas neste formato.

Todos os comandos flatpak

A forma de gerenciar os flatpaks nas distros atuais depende muito da forma com que os sistema lida com eles, mas na maioria, existem interfaces gráficas, GNOME Software, KDE Discover, Pamac, Pop!_Shop, Gerenciador de Pacotes (Linux Mint), e assim por diante, além do Flatseal, para gerenciar permissões avançadas em modo gráfico.

Aqui vamos falar de comandos no terminal em particular.

Como visualizar todos os comandos.

Você pode rodar comandos como:

flatpak --help

e

man flatpak

Para ter acesso a uma lista completa de comandos.

Muitos deles são especialmente úteis para desenvolvedores, que vão criar uma aplicação, e querem usar flatpaks para disponibilizar o seu software para todas as distros, empacotando uma vez só.

Muitos deles também pode ser úteis para quem está desenvolvendo tais softwares e quer debugar as aplicações, ou ainda, quem está criando um repositório flatpak privado para usar aplicações na sua empresa ou algo assim.

Uma referência válida para quem quiser estudar é a própria documentação do flatpak.

Comandos flatpaks úteis para usuários “comuns”

Como instalar um app em flatpak?

Considerando que você já tenha repositórios instalados, como o flathub, a instalação funcionará da seguinte forma (usaremos o Spotify como exemplo):

flatpak install flathub com.spotify.Client

Repare que usamos o comando “flatpak”, depois os parâmetros “install” para instalação, o repositório que você está buscando o programa, neste caso o “flathub” e depois o nome do aplicativo dentro do repositório, que assim como o Android, geralmente tem o formato de uma uma URL ao contrário, neste caso "com.spotify.Client".

Caso você tenha somente um repositório adicionado por padrão (que é o caso da maior parte das distros inclusive, sendo ele o flathub), não é necessário especificar o repositório, o próprio flatpak faz a busca do pacote nos repositórios disponíveis e vai exibir para você.

Caso você tenha mais de um repositório instalado, como neste caso da imagem abaixo, onde também tenho o flathub-beta, o programa te pede de qual repositório você quer puxar a aplicação:

Caso queira saber como funciona o Flathub Beta, confira este outro artigo do Diolinux Plus.

Como remover um app Flatpak

Intuitivamente, o processo reverso de instalar é:

flatpak remove com.spotify.Client

Como listar os repositórios flatpak ativos?

Para saber quais repositórios flatpak estão disponíveis no seu computador, use o comando:

flatpak remotes

Como obter informações de um pacote flatpak?

Para obter informações sobre um pacote flatpak em particular, você pode rodar o seguinte comando:

flatpak remote-info flathub com.spotify.Client

Repare que neste caso é importante informar de qual repositório você quer listar as informações, neste exemplo, o flathub. Na imagem acima você pode ter uma noção dos detalhes deste pacote, incluindo a licença, arquitetura, o ramo (estável, dev, etc.), e também o tamanho para ser baixado e após instalado.

Como listar os aplicativos e runtimes flatpak que você tem instalado?

Para ver todos os flatpaks que você tem no seu sistema, basta rodar o comando:

flatpak list

Com esse comando, você consegue, não somente uma lista com todos os flatpaks instalados, mas também informações do nome do pacote, de seu repositório, etc.

Como rodar um app Flatpak pelo terminal?

Para rodar algum dos aplicativos da lista de flatpaks instalados, basta usar o comando assim:

flatpak run com.spotify.Client

Observe o parâmetro “run” entre o comando flatpak e o nome do app.

Como atualizar os pacotes flatpak?

Para atualizar todos os seus pacotes flatpak, basta rodar o comando:

flatpak update

Caso queira atualizar somente um pacote em particular, basta especificar qual é ele:

flatpak update com.spotify.Client

Como pesquisar por um pacote flatpak dentro dos repositórios que você já tem instalado no sistema?

Para pesquisar por um pacote flatpak, basta usar o parâmetro “search”:

flatpak search spotify

Repare que você pode usar um nome genérico, como “spotify”, para fazer a busca, o flatpak vai listar as opções que mencionam esse programa no nome ou em sua descrição, com informações importantes, como o ID de aplicativo (repare na seta), que será útil para você instalar a aplicação.

Como remover runtimes e flatpaks não utilizados?

Ao contrário do que se pensa, aplicativos flatpak pode ser bem pequenos em tamanho, o Spotify mesmo tem apenas 2,6 MB para ser baixado, e ocupa pouco mais de 6MB depois de instalado.

O que acontece é que, para funcionar corretamente, o ecossistema de flatpaks depende de runtimes, que são pacotes extras que provém o enviroment da aplicação, como por exemplo as provindas do freedesktop, como Drivers, FFMPEG, codecs, e coisas assim, ou as que fazem parte do ambiente de uma determinada aplicação, como a plataforma GNOME e KDE para aplicativos como o Celluloid e o Kdenlive.

Caso você instale um programa do KDE dentro de um sistema que nunca tenha instalado outro programa do projeto KDE, o flatpak, além do Kdenlive (para usar um exemplo), possivelmente vá puxar também complementos para que a aplicação funcione corretamente, como o FFMPEG, KDE Application Platform, e assim por diante. O que pode deixar o download maior na primeira vez.

Quando você precisar baixar outro aplicativo KDE que dependa das mesmas coisas, o download não ocorrerá novamente. Quando houverem atualizações, você baixa somente as partes que foram atualizadas, e não todo o ecossistema. É claro, eventualmente as próprias runtimes tem updates.

E o que acontece se você remover o Kdenlive?

Se você remover o Kdenlive, essas runtimes não serão removidas, isso permite que caso você volte a instalar o mesmo programa, ou instale outro aplicativo KDE que precise das mesmas coisas, o download seja mais rápido, pois você já tem toda a infraestrutura.

Apesar disso, você pode querer limpar as runtimes não utilizadas, isso pode liberar alguns megabytes de espaço do seu disco. Faça isso sabendo que você terá que baixar elas novamente caso instale um programa que as necessite:

flatpak uninstall --unused

Não é realmente o tipo de coisa que você precisa se preocupar muito, talvez se você esteja sem espaço em disco este seja um fator, e neste caso, é bom limpar os caches dos gestores de pacotes tradicionais também, e/ou usar um software para verificar o que está realmente consumindo espaço, como o baobab ou o ncdu.

Para quem for mais “avançadinho” e estiver confortável com o Systemd, dá para fazer uma Unit que limpa as runtimes flatpak não usadas.

Um parênteses no assunto (a resolução das runtimes)

Teoricamente a solução para isso seriam as distros incluírem por padrão as runtimes mais utilizadas já diretamente na ISO para que você não precise baixá-las, mas isso tem algumas implicações a se considerar também:

  • O tamanho das ISOs seria maior;
  • Você poderia estar atualizando runtimes de flatpak mesmo sem ter nenhum flatpak instalando (desperdiçando recursos do PC ou Internet);
  • Se um flatpak depender de algo diferente das runtimes comuns, você teria de baixar elas da mesma forma;

A inclusão de certas runtimes por padrão só fará realmente sentido quando as distros começarem a enviar todo (ou grande parte) do seu ecossistema em flatpak, pois neste caso, as runtimes estarão lá para suprir as próprias aplicações do sistema, como os apps do GNOME Desktop Enviroment, por exemplo.

Podemos até especular qual seria a melhor solução, mas realmente não é como se estivesse nas nossas mãos.

Como verificar se há algum app flatpak rodando no sistema?

Para saber se temos algum flatpak em atividade no momento, além de usar o próprio monitor do sistema (já que são apps como qualquer outros), podemos olhar diretamente pelo comando flatpak com:

flatpak ps

O parâmetro “ps” (process status), acaba passando várias informações úteis também, como o PID do processo e a instância dele também, além da runtime que ele usa e o nome do App:

Como matar um processo flatpak?

Usando a informação que colhemos antes com o comando flatpak ps, agora podemos finalizar o processo usando a sua instância, pelo comando:

flatpak kill número_da_instância

neste caso

flatpak kill 2550631417

Tenha em mente que o número da instância e do PID mudam a cada execução.

Como gerenciar repositórios flatpak?

Eu não vou me extender muito neste tópico, pois atualmente não realmente existe muitos repositórios, e o único que realmente importa (no momento) é o flathub, mas você tem essas opções:

remotes Lista todos os remotos configurados
remote-add Adiciona um novo repositório remoto (via URL)
remote-modify Modifica as propriedades de um remoto configurado
remote-delete Exclui um remoto configurado
remote-ls Lista o conteúdo de um remoto configurado
remote-info Mostra informações sobre um aplicativo ou runtime de remoto

Como reparar a instalação de um pacote flatpak?

Para reparar a instalação de um pacote ou de todos, use:

sudo flatpak repair OPTIONS

Onde “OPTIONS” pode ser muitas coisas, deste reparos para um usuário em particular, até para aplicações. Observe também que este comando precisa rodar como root. Para conhecer as opções do “repair” confira este material da documentação do Flatpak.

Como verificar que versão do flatpak estou rodando?

Para saber qual versão do flatpak estamos rodando, usamos o comando:

flatpak --version

É isso pessoal, o flatpak ainda tem muito mais comandos e opções, mas essas são as que qualquer usuário comum pode tirar proveito facilmente.

Valeu! :vulcan_salute:

19 curtidas

Dicas extras:

Acessando pastas de fora da sandbox

Adicione um furo na sandbox temporariamente, útil para acessar um diretório que o app não tem permissão:

flatpak  --filesystem="/caminho/para/a/pasta" run [app]

Deixe o furo permanente:

flatpak override [app] --filesystem="/caminho/para/a/pasta"

Se a webcam funciona fora da sandbox mas não dentro dela:

Teste com:

flatpak --device=all run [app] 

Se funcionar:

flatpak override --device=all run [app] 

Execute comandos dentro da sandbox

flatpak run [app] --command=comando argumentos

Por exemplo o bash:

flatpak run [app] --command=bash

Liste as permissões de um app:

flatpak permission-show [app]

Restaure as permissões de um app:

flatpak permission-reset [app]

Instale flatpaks em outras pastas e/ou partições

  1. Crie a poasta de configurações:
sudo mkdir -p /etc/flatpak/installations.d
  1. Crie o arquivo de configuração, sem espaços ou caracteres especiais (ex: instalacao_extra.conf) contendo a estrutura:
[Installation "nome"]
Path=/caminho/para/a/pasta
DisplayName=Descrição da instalação
StorageType=harddisk
  • Substitua /caminho/para/a/pasta pelo caminho completo até a pasta
  • Substitua nome pelo nome que você quer dar, não coloque espaços ou caracteres especiais
  • Substitua Descrição da instalação pela descrição, aqui pode usar espaços

Agora configure:

flatpak --installation=nome remote-add flathub https://flathub.org/repo/flathub.flatpakrepo

Lembre-se de trocar nome pelo nome que você deu no arquivo de configuração e não o nome do arquivo

Instale, execute e remova com:

flatpak --installation=nome [ação] [id]
  • Troque [ação} por install, run e removarespectivamente

Exemplo:

  1. Arquivo de configuração steam.conf
[Installation "jogos"]
Path=/media/flakboy/HD_Steam
DisplayName=HD de jogos
StorageType=harddisk
  1. Configuração e instalação da Steam:
flatpak --installation=jogos remote-add flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak --installation=jogos install com.valvesoftware.Steam
  1. Fazendo a Steam aparecer no menu de apps:

Basta colocar:

export XDG_DATA_DIRS="${XDG_DATA_DIRS}:/media/flakboy/HD_Steam/exports/share"

No final do arquivo .profilena sua pasta pessoal (crie se não existir)

8 curtidas

Boa obrigado pelo complemento, você foi além do básico que era a proposta, mas agora as pessoas tem bem mais conhecimento. Adicionei também uma sessão sobre o flatpak repair, que tinha esquecido quando escrevi.

Valeu brother! :slight_smile: