Introdução

O utilitário toolbox-shortcuts mapeia quaisquer executáveis de um container toolbox para o host e outros containers, usando apenas links simbólicos. Isso ajuda a manter a compatibilidade com aplicações do host com executáveis em um contêiner.

Mais informações sobre o toolbox neste link.

Casos de uso

  • Criei uma ação no meu gerenciador de arquivos que usa scripts do ImageMagick, o qual está instalado em um contêiner. Com o toolbox-shortcuts, consigo criar um link simbólico para o executável convert e toda a integração com o gerenciador irá funcionar normalmente.

  • A IDE - que está instalada no host - precisa de um executável javac (compilador java) no $PATH do meu host. Da mesma forma, posso criar um link simbólico com toolbox-shortcuts para fornecer um executável javac no meu sistema host.

Instalação

Clone o repositório para uma nova pasta em ~/.local/opt:

1
$ git clone https://github.com/RuanKlein/toolbox-shortcuts.git ~/.local/opt/toolbox-shortcuts

Supondo que a pasta ~/.local/bin esteja em seu $PATH, crie um link simbólico para o utilitário cli:

1
$ ln -s ~/.local/opt/toolbox-shortcuts/toolbox-shortcuts ~/.local/bin

Como usar

Imagine o seguinte cenário:

  • executável code no container1
  • executável node no container2
  • executável yarn no container2
  • executável java no container3

Para integrar todos esses executável ao host:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$ toolbox-shortcuts create ~/.local/bin/code container1
Shortcut created: code [ ⬢ container1 ]

$ toolbox-shortcuts create ~/.local/bin/node container2
Shortcut created: node [ ⬢ container2 ]

$ toolbox-shortcuts create ~/.local/bin/yarn container2
Shortcut created: yarn [ ⬢ container2 ]

$ toolbox-shortcuts create ~/.local/bin/java container3
Shortcut created: java [ ⬢ container3 ]

Agora você pode executar o code, o node, o yarn e o java do host ou do container1, container2 ou container3.

Gerenciadores de pacotes

Gerenciadores de pacotes como dnf, yum, apt, apt-get, pacman, zypper, também funcionam normalmente com links simbólicos.

Por exemplo, para instalar o php-cli do host usando o dnf:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ toolbox-shortcuts create ~/.local/bin/dnf containername
Shortcut created: dnf [ ⬢ containername ]

$ dnf update
...

$ dnf install php-cli
...

$ toolbox-shortcuts create ~/.local/bin/php containername
Shortcut created: php [ ⬢ containername ]

$ php -v
...

Como funciona

Considerando o cenário anterior, os links simbólicos foram criados em ~/.local/bin:

1
2
3
4
5
$ ls -l ~/.local/bin/{code,node,yarn,java}
~/.local/bin/code -> ~/.local/opt/toolbox-shortcuts/containers/container1
~/.local/bin/node -> ~/.local/opt/toolbox-shortcuts/containers/container2
~/.local/bin/yarn -> ~/.local/opt/toolbox-shortcuts/containers/container2
~/.local/bin/java -> ~/.local/opt/toolbox-shortcuts/containers/container3

Todos os arquivos de contêineres também são links simbólicos:

1
2
3
4
5
$ ls -l ~/.local/opt/toolbox-shortcuts/containers
~/.local/opt/toolbox-shortcuts/containers/container1 -> ~/.local/opt/toolbox-shortcuts/toolbox-shortcuts-handler
~/.local/opt/toolbox-shortcuts/containers/container2 -> ~/.local/opt/toolbox-shortcuts/toolbox-shortcuts-handler
~/.local/opt/toolbox-shortcuts/containers/container2 -> ~/.local/opt/toolbox-shortcuts/toolbox-shortcuts-handler
~/.local/opt/toolbox-shortcuts/containers/container3 -> ~/.local/opt/toolbox-shortcuts/toolbox-shortcuts-handler

A mágica é feita pelo script toolbox-shortcut-handler, que pode identificar se a execução está sendo feita no host ou em um container.

Limitações

sudo

Executando a partir do host, não funciona com nenhum link simbólico criado pelo toolbox-shortcuts. No entanto, os gerenciadores de pacotes podem ser executados sem sudo.

O script toolbox-shortcut-handler tem um identificador especial para lidar com os gerenciadores de pacotes.

Diretório de instalação

Só pode ser instalado na pasta do usuário, devido ao funcionamento do toolbox, que compartilha apenas a pasta pessoal e não a raíz do sistema.