Skip to content

run binaries from Archlinux (and AUR) in any distribuition

License

Notifications You must be signed in to change notification settings

vmath3us/ArchPath

Repository files navigation

ArchPath

Graças ao Distrobox de 89luca89, se tornou fácil rodar programas de uma distribuição em outra. Via distrobox-export, e dos hooks do pacman, Archpath se propoẽ a, caso um comando não seja encontrado no seu path, guiar o usuário a instalá-lo num container do Archlinux, e ao fim, exportá-lo para o path do host, tornando-o instantaneamente acessível. Programas gráficos e serviços não estão no escopo desse projeto, mas deve ser facilmente estendível também para esse propósito, como pode ser visto na documentação do distrobox-export.

Do host, é exigido:

  • A possibilidade de rodar containers rootless, via podman (docker é suportado pelo distrobox, mas neste projeto o podman será configurado por padrão). Para execução do Podman Rootless, setup.sh tentará executar o comando "sudo touch /etc/subuid /etc/subgid && sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER && podman system migrate". Caso isso não funcione, procure a documentação da sua distribuição para o podman, e edite setup.sh, alterando o comando
  • Curl

Setup.sh irá criar as pastas $HOME/.local/bin, $HOME/.local/bin/archpath, $HOME/.cache/pacmancache, e $HOME/.config/distrobox. Dentro dessa última, distrobox.conf, configurando a imagem padrão para o Archlinux, e o gerenciador de container como podman. Após, via curl, o distrobox será instalado em $HOME/.local/bin.

curl -s https://raw.githubusercontent.com/89luca89/distrobox/main/install | sh -s -- --prefix ~/.local

Já via distrobox, um container será gerado, montando $HOME/.cache/pacmancache em /var/cache/pacman/pkg do container. O processo pode demorar dependendo da sua conexão, e da performance da sua máquina, especialmente na primeira vez, onde ainda não há cache do pacman. Distrobox-enter será executado imediatamente, o que implica em mais instalação de pacotes, para integração do container com o host, como pode ser visto aqui. Uma vez isso terminado, serão executados, já dentro do container, os comandos de setup-in-container.sh

Se valendo do distrobox-export, um hook pós-transacional do pacman será habilitado. Esse hook ira gerar uma lista de todos os caminhos modificados pela instalação dos pacotes. Essa lista será tratada para conter somente /usr/bin/$FILE. O usuário será instruído a rodar distrobox-import, que executará o neovim sobre a lista restante. Deve então deletar as exportações não desejas (dependências do pacote alvo por exemplo, estarão ainda todas listadas aí). Ao fim da edição, feche salvando, e será executado diretamente no container ArchPath o comando distrobox-export, passando como parâmetro todas as linhas da lista já tratada, tendo como destino $HOME/.local/bin/archpath, para que os comandos instalados fiquem visíveis no host. O yay será exportado pelo setup-in-container.sh, portanto será acessível diretamente pelo host, assim que o usuário acionar o conteúdo de setup.shell no seu .SHELLrc (bash,zsh...), e executar:

exec $SHELL

O conteúdo de setup.shell será responsável por usar $HOME/.local/bin e $HOME/.local/bin/archpath no seu $PATH, e também por rodar yay -F no comando que não for encontrado no $PATH. Tenha em mente que -F só procura por comandos nos repositórios do Archlinux, e não no AUR, por isso yay -Ss é oferecido. Além disso, por ser um container rootless, não espere poder instalar por exemplo módulos de kernel, cli de sistema de arquivos (compsize, btrfs-progs), enfim, programas que exijam acesso profundo ao sistema. Outro detalhe é editores de texto não irão conseguir editar arquivos de configuração do root do host, e sim de dentro do container. Programas tais como gerenciadores de download cli (aria2c), navegadores cli (lynx, w3m), ou mesmo players de vídeo (mvp, cvlc) deverão funcionar normalmente.

A ideia é que o seguinte ocorra: ao tentar executar um comando que não exista no host, e nem em $HOME/.local/bin/archpath, a função de shell irá executar automaticamente yay -F "comando" e (opcionalmente) yay -Ss "comando". Em qualquer caso, o usuário deve instalar manualmente um pacote que oferte o comando desejado. O hook do pacman irá gerar e tratar a lista, e o usuário deve executar distrobox-import. O neovim será aberto, e o usuário deve remover as linhas não desejadas para exportação, e sair salvando o arquivo. Distrobox-export será executado sobre todas as linhas restantes do arquivo, e ao fim desse processo o(s) programa(s) em questão estará(ão) disponível(is) na linha de comando. Manter o container atualizado, resolver conflito de dependências, remover os arquivos obsoletos de $HOME/.local/bin/archpath e demais problemas e manutenções é responsabilidade do usuário.

Conhecer a cli do pacman é fortemente encorajado. Por exemplo, yay -Qqem listará somente os pacotes instalados via AUR; -Qqen, somente os NÃO instalados via AUR, mas que foram instalados explicitamente (e não como dependência). A saída pode ser redirecionada para arquivos, e esses arquivos usados para reprovisionar um novo container. A Archwiki é sua melhor amiga,e para funções específicas do yay para uso do AUR, consulte esta documentação.

Confira Stateless Arch

About

run binaries from Archlinux (and AUR) in any distribuition

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages