Instala programas do userspace no servidor sem acesso root

2

Eu gostaria de instalar alguns programas no meu servidor de desenvolvimento de trabalho porque faltam alguns programas que eu preciso para o meu trabalho do dia a dia. Eu não tenho acesso root.

O que eu fiz até agora é compilar o software que eu preciso com a opção --prefix=/path/to/local/root . Eu criei um script que se parece com isso:

#!/bin/sh
export LOCAL_PATH="/path/to/local/root"
export LD_LIBRARY_PATH="$LOCAL_PATH/lib:$LOCAL_PATH/lib64:$LOCAL_PATH/lib64:$LD_LIBRARY_PATH"

binary=$(basename $0)
$LOCAL_PATH/bin/$binary "$@"

Então, se eu criar um link simbólico para este programa com o nome certo, ele irá rodar a versão local. No entanto, tenho alguns problemas:

  • A pasta de instalação pode se mover de tempos em tempos. Eu aconteceu recentemente e tive que reinstalar tudo
  • Alguns programas usam libtool , que ignora o LD_LIBRARY_PATH quando encontra uma biblioteca em /usr/lib (que no meu caso estava desatualizada)
  • Os programas são difíceis de manter ou atualizar

Para os dois primeiros problemas, parece que criar um chroot resolveria o problema. O fakechroot ajudaria nesse caso? O meu roteiro ainda funcionará?

Além disso, o último problema me faz pensar em mudar para um gerenciador de pacotes. Eu estava pensando em portage (do Gentoo, que eu uso em casa), mas talvez existam alguns mais adequados às minhas necessidades. Alguma sugestão? Talvez uma distribuição leve do Linux?

Por fim, preciso fazer o symlink /local/lib e /local/lib64 juntos?

    
por Nicop 21.08.2015 / 01:23

1 resposta

0

Não sei ao certo se isso se aplica ao seu caso, mas uso enxerto .

Basicamente, me permite ter uma árvore de pacotes instalados em qualquer lugar que eu queira (por exemplo, $HOME/packages ) e instalar links simbólicos em seus arquivos na hierarquia desejada (por exemplo, em $HOME/local ou /usr/local se eu tiver raiz Acesso). Na verdade, ele ajuda a manter vários pacotes compilados personalizados (compilados exatamente como você fez, mas com --prefix= /path/to/packages/foo-1.2.3 para que eles acabem em um lugar comum) - e você pode até ter várias versões do mesmo pacote. Você não cria a bagunça habitual, porque pode escolher qual versão ativar a qualquer momento:

$ cd $HOME/packages
$ ls 
mpv-git
texinfo-4.13
texinfo-git

$ graft -i texinfo-4.13
$ # symlinks now installed in my $HOME/local/bin, $HOME/local/lib, etc
$ # and since $HOME/local/bin is in my PATH, I now have texinfo-4.13
$
$ graft -d texinfo-4.13
$ # removed texinfo 4.13 symlinks - let's install bleeding edge version
$
$ graft -i texinfo-git

Isso também pode ser usado para manter a bagunça que acontecerá com o seu /usr/local mesmo se você for root.

A ideia de usar links simbólicos para o gerenciamento de pacotes foi modernizada novamente em algumas distribuições Linux - mas acho que graft pode acomodar a maioria dos casos de uso. É uma pena que apenas algumas pessoas saibam sobre isso ...

    
por 27.08.2015 / 15:45