Instalar arquivos de desenvolvimento localmente para criar no sistema sem acesso root?

10

Há um servidor no qual trabalho, executando uma versão mais antiga do Linux. Como não tenho acesso root ao sistema, quis criar uma versão mais recente de uma ferramenta que utilizo muito (Vim 7.3). Eu pensei que eu iria compilá-lo e instalá-lo em ~ / bin. No entanto, requer ncurses arquivos de desenvolvimento que não estão instalados em todo o sistema. Encontrei o ncurses-devel rpm e extraí as pastas 'lib' e 'include', onde eu as colocaria e como diria ao script ./configure para encontrá-las para que eu pudesse configurar e construir o pacote localmente?

Edit: Acabei contornando isso instalando o SO idêntico no Virtualbox, construindo o pacote lá e copiando nos binários.

pós-futebolista
fonte
serverfault.com/questions/23734 pode ser semelhante o suficiente para ajudar. A maioria das respostas envolve a instalação do que é efetivamente um sistema inteiro dentro do seu homedir, mas isso pode ser contornado no Gentoo Prefix e no Rootless Gobo.
ephemient 16/09/10

Respostas:

13

Eu fiz isso com bastante frequência no meu último trabalho - a solução que parecia funcionar melhor foi criar um diretório ~ / usr e usar o argumento --prefix para apontar os scripts ./configure na direção certa. Aqui estão as etapas:

  • Crie o diretório ~ / usr e inclua os diretórios lib e bin abaixo dele.
  • No seu script .profile, .bashrc ou outro shell init, adicione o seguinte (ou equivalente no dialeto do seu shell):
    export PATH=$PATH:~/usr/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/usr/lib
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:~/usr/include
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:~/usr/include
  • Ao criar pacotes, use ./configure --prefix=/home/<username>/usr

Esse arranjo funcionou para mim na maioria das situações em que eu precisava criar coisas no espaço do usuário. A parte mais difícil é geralmente encontrar e criar todas as dependências necessárias, mas isso requer apenas um uso minucioso ou criterioso da funcionalidade 'obter código-fonte' do seu gerenciador de pacotes.

chaos95
fonte
Não funcionou muito bem para mim. O script configure não parece encontrar qualquer coisa em ~ / usr
postfuturist
Eu tive o mesmo problema @postfuturist. Acabei consertando-o usando em ${HOME}vez de ~em todas as minhas chamadas de exportação e, em seguida, o pkg-config ficou feliz e conseguiu encontrar as bibliotecas e pacotes instalados pelo usuário.
Phyatt # 28/15
3

Normalmente você deve reconfigurar e alterar o código para definir um novo local no diretório inicial ou outro caminho para todas as bibliotecas e programas ...

Mas, IMHO, a maneira mais fácil (se você tem bastante espaço) é usar o chroot em um subdiretório com toda uma distribuição Linux instalada nele. Como um usuário normal, você não pode usar o chroot , mas pode usar estas ótimas ferramentas: fakechroot e fakeroot

Para criar o sistema de arquivos chroot, eu gosto de implantar um diretório com o Debian (ou qualquer outro derivado do Debian como o ubuntu) usando o utilitário debootstrap .

Portanto, o procedimento é fácil (não entrarei em detalhes técnicos, leia os manuais de comando):

  • Obtenha e instale: ferramentas fakeroot, fakechroot e debootstrap
  • crie um subdiretório usando o debootstrap (só consegui executá-lo como root. Você pode fazer isso em outro computador e copiar os binários, se necessário)
  • Executar: fakechroot fakeroot chroot mydebian-dir

Se você precisar de mais detalhes, acho que tinha um script em algum lugar para fazer tudo isso.

Keymon
fonte
1

Outra solução para esse problema é usar o prefixo do Gentoo, como os usuários do MacOSX e outra plataforma (solaris, AIX):

http://www.gentoo.org/proj/en/gentoo-alt/prefix/

Ele irá compilar a pilha do Gentoo (com portage) em um local $ PREFIX. Ele usa os pacotes do Gentoo, a maioria dos pacotes suporta o uso dessas configurações.

O Portage acompanhará todas as dependências, você terá a última versão do software, foi testada pela comunidade ...

Keymon
fonte
1

Se prefix=/home/foo/usrnão funcionar, tente:

CFLAGS=-I/home/foo/usr/include LDFLAGS=-L/home/foo/usr/lib ./configure
BobuSumisu
fonte