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


18

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

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

Respostas:


17

Existem maneiras de instalar o rpms em um diretório de usuários usando rpm, mas não acredito que seja direto. Não acredito que exista uma maneira de fazê-lo yum.

Minha prática padrão tornou-se compilar da fonte para um localdiretório em minha casa

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

Eu faço o download da fonte como faria /usr/localquando tenho raiz, por exemplo, no ~/local/git.

Ao compilar, defino o prefixo no localdiretório

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

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

Obviamente, o problema de instalar a partir do código-fonte é que você não obtém resolução de dependência automática. Se você achar que precisa instalar dependências, compile e instale-as como acima. Então, quando você compila git, é necessário atualizar os sinalizadores de compilação para que eles 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'

Isso funcionou perfeitamente, obrigado pelo conselho!
Wiredin

13

Um arquivo .rpm é na verdade uma forma de cpioarquivamento, 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 em padrão, para converter:

rpm2cpio whatever.rpm > whatever.cpio

Há um man cpiovocê pode olhar para si mesmo, mas o que agora quero fazer é alimentar o arquivo para cpio em "cópia em" modo:

cat whatever.cpio | cpio -i

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

rpm2cpio whatever.rpm | cpio -i -d

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

Construir a partir da origem é 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 comandante da meia-noite ( mc), e provavelmente outros navegadores de arquivos, permitirão que você navegue em uma hierarquia rpm ou cpio (ou tar compactado ou zip) e copie arquivos individuais como se o archive fosse descompactado (cria um arquivo sistema de arquivos temporário para navegar com o conteúdo do arquivo).


0

Esta é uma alternativa (sem usar o yum) e a permissão será maluca, mas você poderá chownposteriormente para o usuário alvo: - também é um acerto ou um 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 os locais apropriados ao seu caminho.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.