Como instalar o programa localmente sem privilégios de sudo?

73

Suponha que eu tenha acesso ssh a algum servidor Ubuntu como usuário e que algumas ferramentas do sistema não sejam instaladas por conveniência (mc, rtorrent, mcedit). Não quero incomodar os administradores desses pequenos programas.

Existe uma maneira de instalá-los (fazê-los funcionar) sem usar algo parecido sudo apt-get install?

yura
fonte
Consulte também Onde deve ser colocado um executável local? para discussão relevante.
George M
Veja também Monitorando programas
Gilles
11
Consulte também Gerenciadores de pacotes não raiz
Gilles

Respostas:

33
  1. Compile e instale em ~/bin(e edite seu .bashrcpara definir o PATHpara incluí-lo). bibliotecas podem ser compiladas e instaladas da mesma forma ~/lib(configuradas LD_LIBRARY_PATHpara apontar para ela) e cabeçalhos de desenvolvimento podem ser instalados, por exemplo ~/includes.

  2. Dependendo dos detalhes específicos dos programas que você deseja instalar e das bibliotecas das quais eles dependem, você pode baixar os arquivos .deb e usar ' dpkg-deb -x' para extraí-los sob o diretório inicial. Então você vai ter um monte de "diversão" definindo o PATH, LD_LIBRARY_PATHe outros variables. Quanto mais complexo o programa ou aplicativo que você estiver instalando, mais divertido você terá :)

    Obviamente, você não poderá instalar setuidbinários dessa maneira - eles serão instalados, mas (já que você não tem permissão para exibi-los como root ou definir a setuidparte deles), eles serão binários normais de sua propriedade. .

    Da mesma forma, daemons e serviços do sistema que esperam estar em execução como certo UIDou têm a capacidade de alterar o uid, ou esperam que os arquivos estejam em /etcvez disso ~/etce assim por diante, provavelmente não funcionarão, se for o caso.

  3. A maioria dos administradores de sistemas consideraria mce mceditseria "principalmente inofensiva", programas inócuos.

    Muito poucos, no entanto, considerariam a instalação de um cliente de torrent inofensiva, especialmente se eles tiverem que pagar pela largura de banda ou acabarem sendo legalmente responsáveis. A maioria dos administradores de sistemas provavelmente não ficaria muito feliz se os usuários finais instalassem esse software sem permissão. Eles podem dizer "claro, vá em frente, se nocauteie" ou podem não ... mas você deve perguntar sobre qualquer coisa que possa causar problemas para os proprietários / administradores da máquina.

cas
fonte
Ouvi dizer que esse cenário LD_LIBRARY_PATHé um truque do mal . Isso se aplica aqui também, ou eu entendi errado?
Will Vousden
11
Todos os problemas com a configuração LD_LIBRARY_PATH se aplicam. Sim, é ou pode ser um hack do mal. às vezes, hacks malignos são necessários para atingir objetivos específicos ... o essencial ao quebrar as "regras" é conhecê-los o suficiente para saber do que eles são projetados para salvá-lo, e exatamente por que você precisa quebrá-los nesse caso específico e quais são ou podem ser os riscos.
10246 #
Eu só tinha que instalar um programa independente (zoom), então primeiro tentei a segunda opção ( dpkg-deb -xpara um diretório local). Funcionou como um encanto. Eu não tive que fazer nenhum LD_LIBRARY_PATHhacks. Mesmo que eu precise, eu faria na mesma linha de comando para não afetar as configurações globais (por exemplo $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher).
Antony
você só precisa definir LD_LIBRARY_PATH se um ou mais pacotes que você deseja instalar fornecerem bibliotecas compartilhadas. Se forem apenas executáveis ​​e dados, documentos e arquivos de configuração, etc., ele poderá usar as bibliotecas do sistema.
cas
50

Você precisa compilá-los da fonte. Deve ser apenas uma questão de

apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install

O binário seria então localizado em ~/myapps/bin. Então, adicione export PATH="$HOME/myapps/bin:$PATH"ao seu .bashrcarquivo e recarregue o .bashrcarquivo com source ~/.bashrc. Obviamente, isso pressupõe que o gcc esteja instalado no sistema.

eof
fonte
6
E as dependências? Existe uma maneira de lidar com eles automaticamente sem executar o mesmo código para cada um deles?
yura
11
@yura não, você tem que fazer isso sozinho.
Ulrich Dangel
E se você não tiver privilégios para fazer isso? É comum ter permissão para compilar software sem acesso ao sudo / root?
Freedo 12/08
5

Você pode usar o JuNest , que cria um pequeno contêiner Linux no diretório do usuário, onde você pode instalar qualquer pacote.

niutech
fonte
0

Eu enfrentei o mesmo problema, eis como o corrigi rapidamente, supondo que você tenha um servidor Linux com o mesmo sistema operacional e arquitetura.

  1. Instale o software no sistema que você controla

  2. Encontre o exemplo executável which pythone copie-o para~/

  3. Copie as bibliotecas com:

    ldd "$(which python)"  | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
    

Transfira o executável e as bibliotecas para o outro sistema em que você possui apenas privilégios locais e execute o seguinte:

mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib

Isso criará uma pasta ~/libpara armazenar as bibliotecas, adicioná-lo ao seu caminho e dizer ao LD para examinar as bibliotecas lá; basta adicionar seus executáveis ​​e as bibliotecas lá, agora você pode executá-lo como faria em outro lugar

Isso pode ser muito hacky, mas é muito portátil, rápido e ainda não encontrei algo que não possa ser executado dessa maneira, é claro, o software não pode tentar fazer coisas que precisam de acesso root, como vincular a uma porta inferior 1024, etc.

Freedo
fonte
-1

Estou tendo o mesmo problema que você. Ainda não tentei, mas parece que o Linuxbrew pode ser útil nessa questão.

JPCF
fonte