Eu tenho que executar um software C ++ em um computador onde eu só tenho acesso de usuário. Existem várias dependências que preciso instalar antes de poder executar o programa em que estou interessado:
TodosusamoGNUAutotoolseeutenhoquepassaralgumasopçõesespecíficaspara./configure
.Ocompiladortambémnãoépadrão(elecompilacruzadoparaBlueGene/Q).Parateralgumareprodutibilidade,escreviumscriptBashquebuscaafonte,compilaeinstalaem$HOME/local
:
base_flags="-O2 -finline-limit=50000 -Wall -Wpedantic $color_flags"
if ! [[ -d gmp-6.1.1 ]]; then
wget https://gmplib.org/download/gmp/gmp-6.1.1.tar.xz
tar -xf gmp-6.1.1.tar.xz
fi
pushd gmp-6.1.1
cflags="$base_flags"
cxxflags="$base_flags"
if ! [[ -f Makefile ]]; then
./configure $base_configure CFLAGS="$cflags"
fi
if ! [[ -f build-succeeded ]]; then
nice make $make_smp_flags
make install
touch build-succeeded
pushd $prefix/lib
rm -f *.so *.so.* # Force static linkage.
popd
fi
# Similar stanzas for the other projects.
No meu computador pessoal em que tenho acesso de root, eu construo pacotes RPM para todos os softwares que eu quero instalar, deixo os RPMs construírem o Open Build Service hospedado pelo projeto openSUSE e os instalo com o Ansible. Trabalhar no computador remoto parece com o Linux from Scratch ou algo assim, não posso atualizar ou desinstalar algo e tenho que lembrar das versões e sinalizadores usados.
Tudo o que posso imaginar é tentar emular pacotes RPM definindo DESTDIR
e --prefix
de tal forma que eu possa TAR os produtos de compilação e, em seguida, não TAR que em $HOME/local
. Então eu iria escrever algum desinstalador / atualizador que lista o conteúdo do arquivo e remove esses arquivos de $HOME/local
.
Existe alguma maneira melhor de fazer isso?