Instalando um pacote localmente para um usuário – práticas recomendadas?

Instalando um pacote localmente para um usuário – práticas recomendadas?

Quero instalar o Git localmente para um usuário em um servidor RHEL (não tenho acesso root). Qual seria a maneira mais limpa/organizada de instalar software em uma conta de usuário local?

  • Instalando tudo no diretório inicial dos usuários?
  • Como seria o layout do diretório?
  • Você instalaria a partir do código-fonte ou RPM?
  • Se fosse do RPM você usaria YUM ou RPM?

Responder1

Existem maneiras de instalar rpms em um diretório de usuário usando rpm, mas não acredito que seja simples. Eu não acredito que haja uma maneira yum.

Minha prática padrão passou a ser compilar do código-fonte para um localdiretório em minha casa

$ mkdir ~/local
$ mkdir ~/local/bin
$ mkdir ~/local/lib
$ mkdir ~/local/include

Eu baixo o código-fonte como faria /usr/localquando tenho root, por exemplo, em ~/local/git.

Ao compilar eu defino o prefixo para o localdiretório

$ configure --prefix=/home/user_name/local
$ make
$ make install

Em seguida, adiciono ~/local/binao meu $PATH em .bash_profile.

Obviamente, o problema de instalar a partir do código-fonte é que você não obtém resolução automática de dependências. Se você achar que precisa instalar dependências, compile e instale-as conforme acima. Então, ao compilar git, você precisa atualizar os sinalizadores de compilação para que procurem no local correto as bibliotecas da dependência e incluam arquivos:

./configure --prefix=/home/user_name/local LDFLAG='-L/home/user_name/local/lib' CFLAGS='-I/home/user_name/local/include' CPPFLAGS='-I/home/user_name/local/include' CXXFLAGS='-I/home/user_name/local/include'

Responder2

Um arquivo .rpm é na verdade uma forma de cpioarquivo, que é muito parecida com uma forma simples de tar. O rpm2cpioutilitário provavelmente está instalado no sistema e não requer privilégios para uso; ele grava para padronizar, então para converter:

rpm2cpio whatever.rpm > whatever.cpio

Você man cpiopode olhar para si mesmo, mas o que você quer fazer agora é alimentar o arquivo para cpio no modo "copiar em":

cat whatever.cpio | cpio -i

Muito provavelmente o material está organizado em uma árvore de diretórios para que os arquivos vão para os locais apropriados (bin, etc, etc.). Se eles não existirem em seu pwd, você receberá um erro, mas isso listará os arquivos no arquivo (você pode obter a mesma coisa com a opção -t/ --list). Se você quiser criar os diretórios automaticamente, use -d. Então, uma maneira rápida de descompactar um rpm:

rpm2cpio whatever.rpm | cpio -i -d

Você pode usar isso para instalar em $HOME. O único problema será se o programa espera encontrar coisas em /etc, etc., já que muitas coisas têm seu local de instalação codificado para qualquer finalidade quando são compiladas.

Construir a partir do código-fonte é provavelmente uma opção melhor (já que você pode fornecer o local correto), mas se você conseguir que isso funcione em qualquer caso, será rápido e simples.

Além disso, o navegador de arquivos do Midnight Commander ( mc), e provavelmente outros navegadores de arquivos, permitirá que você navegue em uma hierarquia rpm ou cpio (ou tar compactado ou zip) e copie arquivos individuais como se o arquivo estivesse descompactado (cria um sistema de arquivos temporário para navegar com o conteúdo do arquivo nele).

Responder3

Esta é uma alternativa (sem usar yum) e a permissão será maluca, mas você poderá chownpara o usuário alvo depois: - também é um acerto ou erro :-(

#-## Download all dependency for the RPM -- 
#sudo yum install yum-utils
#sudo yumdownloader --resolve --destdir ~/download bash

#-## Install all downloaded to an alternate root 
#sudo rpm --initdb --root <user_home_dir>
#sudo rpm --root <user_home_dir> -Uvh --nodeps ~/download/*

Em seguida, adicione locais apropriados ao seu caminho.

informação relacionada