Sim, você pode fazer isso. É mais trabalho do que depender de um gerenciador de pacotes - a principal atração de instalações “portáteis” no Windows é não ter que lutar contra a falta de um gerenciador de pacotes decente.
Você precisará organizar os programas para encontrar suas dependências: arquivos de dados, bibliotecas, etc. Muitos programas suportam variáveis de ambiente para isso. Alguns verificam o diretório em que o binário está localizado ou os diretórios relativos, como ../lib
, para arquivos complementares
Instale o software em algum diretório raiz. Crie os diretórios de categoria usuais sob essa raiz: bin
, lib
, man
, etc. Para gerenciar todo o software, instale cada um deles de forma independente e use um programa como Stow crie uma floresta de links simbólicos para vinculá-los aos diretórios de categoria. Consulte Como acompanhar os programas para obter uma introdução ao Stow. Você terá links simbólicos como
bin/foo -> ../stow/foo-1.42/bin/foo
bin/foobar -> ../stow/foo-1.42/bin/foobar
man/man1/foo.1 -> ../../stow/foo-1.42/man/man1/foo.1
…
Você desejará um script para configurar variáveis de ambiente. Coloque-o na raiz da sua instalação e use $0
para localizar o script. Como um script não pode influenciar seu pai, a abordagem usual é fazer com que o script produza uma saída que possa ser avaliada pelo shell de chamada. Vamos chamar esse script setup.sh
.
#!/bin/sh
set -e
root=$(dirname -- "$0")
cd -- "$root"
printf "PORTABLE_ROOT='%s'\n" "${PWD}" | sed "s/'/'\\''/g"
prepend () {
eval "set -- \"\\" \"\\" \"${$1}\""
case :$3: in
*:$PORTABLE_ROOT/$2:*) :;; # already there (at any location)
:: echo '$1=$PORTABLE_ROOT/$2; export $1';; # the path was empty
*) echo '$1=$PORTABLE_ROOT/$2:$3; export $1';; # prepend
esac
}
prepend PATH bin
prepend MANPATH man
prepend LD_LIBRARY_PATH lib
prepend PERL5LIB lib/perl
prepend PYTHONPATH lib/python
…
(Aviso: código não testado)
Para usar a instalação portátil a partir de um shell, execute eval "'/path/to/setup.sh'"
.