Existe alguma maneira de obter o APT para instalar pacotes no meu diretório home?

38

Existe alguma maneira de instalar o APT no meu diretório pessoal?

Eu não quero fazer mudanças no sistema inteiro.

Como alternativa, existe algum gerenciador de pacotes linux baseado no diretório home?

    
por Peter Mortensen 15.08.2018 / 06:45

14 respostas

17

O Dpkg não possui o recurso --relocate que o RPM possui. Vale a pena considerar quantos pacotes RPM suportam esse recurso. Basicamente, isso não pode ser feito.

O que você poderia fazer é usar um chroot se quiser testar algo antes de instalá-lo globalmente no sistema. Para fazer isso, você precisa ser capaz de obter acesso ao root. A primeira coisa a fazer é criar um chroot básico:

# debootstrap lenny lenny-chroot

Isso cria um chroot Lenny dentro do diretório lenny-chroot .

Agora podemos entrar no chroot:

# chroot lenny-chroot

Agora podemos fazer o que quisermos e instalar qualquer coisa sem atrapalhar o resto do sistema. Quando terminarmos, basta digitar exit ou pressionar ctrl-D

    
por 04.11.2015 / 14:38
8

Linuxbrew é outro gerenciador de pacotes não-raiz para Linux (baseado no popular sistema de gerenciamento de pacotes Homebrew para OS X) que compila da origem e mantém binários em seu diretório pessoal.

Citando os documentos, os recursos do Linuxbrew são:

  • É possível instalar software em um diretório inicial e, portanto, não requer sudo
  • Instalar software não fornecido pela distribuição nativa
  • Instale versões atualizadas do software quando a distribuição nativa for antiga
  • Use o mesmo gerenciador de pacotes para gerenciar suas máquinas Mac e Linux
por 10.08.2017 / 05:12
7

O prefixo do Gentoo faz exatamente o que você deseja.

Ele instala todos os pacotes em um diretório especificado. Nenhum acesso root é necessário. Se você quiser se livrar dele, basta remover o diretório base.

PS: Isso não funciona no Ubuntu > = 11.04, ou qualquer outro derivado do Debian com o Multiarch.

    
por 28.05.2014 / 09:09
4

Assim como uma pequena adição à opção de compilá-lo, há a opção intermediária de compilar em um pacote com uma opção de prefixo diferente no tempo de compilação (com "checkinstall" ou talvez algum outro método). A vantagem é que o pacote aparecerá nos gerenciadores de pacotes, como aptitude ou synaptic.

Além disso, eu acho que pode ser possível em alguns casos fazer o download do real .deb e forçar um prefixo diferente via dpkg install, mas eu acho que não é algo que pode ser feito com qualquer pacote aleatório, mas eles precisam ter foi compilado com alguma variável para sua localização (em vez do prefixo explícito literal) que você exportaria antes de instalar. Eu não sei nada sobre o procedimento, no entanto, google para "prefixo dpkg instdir".

    
por 20.11.2012 / 22:10
2

Você pode usar o fakechroot - veja a demonstração em seu site.

    
por 30.11.2014 / 22:59
1

O Rootless GoboLinux pode fazer exatamente o que você está pedindo: gerenciador de pacotes, sem privilégios elevados, em seu próprio diretório pessoal. Espero que você saiba o que está fazendo; O rootless não é o modo de instalação mais bem mantido do Gobo, e quando eu costumava usá-lo há alguns anos, era necessário alguns ajustes, pois o script de instalação estava um pouco desatualizado em relação a outras mudanças do Gobo.

Há também o klik que reempacota vários .deb s, pode instalar pacotes em seu diretório pessoal e não requer privilégios de root para operar ... mas a configuração inicial requer root.

    
por 11.06.2009 / 00:37
1

Eu normalmente obtenho as fontes e confiro um arquivo como "INSTALL". Geralmente há instruções para fazer ./configure --prefix=somedir . Então você tem que adicionar somedir/bin ao seu caminho.

    
por 14.03.2010 / 13:14
1

Não, não acho que você possa.

O melhor que posso pensar agora é usar apt-get source e compilar seu pacote. Talvez você possa de alguma forma ajustar o procedimento (que pode ser mais ou menos automatizado) para instalar os pacotes em sua casa.

Outro é usar dpkg -X para extraí-lo em um diretório de sua escolha.

    
por 14.03.2010 / 13:21
0

Existem muito poucos casos em que você precisa instalar pacotes em sua pasta pessoal.

No entanto, você pode compilar e instalar software em sua máquina local. Apenas descompacte e configure com ./configure --prefix=$HOME/local ou algum outro diretório. Você pode então make e make install como normal. Isto irá compilar e instalar esse programa em ~/local/ , por exemplo, o programa que você executa estará em ~/local/bin/programmname .

    
por 11.06.2009 / 01:24
0

De minha própria experiência, não há uma maneira fácil de usar pacotes DEB existentes para instalar em outro diretório que não seja um chroot dpkg / aptitude / O dselect requer privilégios de root para funcionar corretamente.

Agora, dada a fonte DEB, você pode modificar o arquivo Debian / rules para que o pacote seja compilado e instalado em uma árvore de diretórios diferente, mas você não está usando os pacotes binários já disponíveis.

Como outros já mencionaram, você pode usar o debootstrap e criar facilmente um ambiente chroot, que eu fiz no passado para ter um Ambiente de 32 bits em um host de 64 bits, mas isso requer a instalação de um chroot com pelo menos os pacotes base duplicados. Se você tem o espaço e esta é uma solução viável, você pode combiná-lo com dchroot , ou melhor ainda schroot , para permitir a fácil execução dos aplicativos instalados no ambiente chroot.

    
por 14.03.2010 / 13:13
0

Tenho dificuldade em imaginar como isso funcionaria com os repositórios oficiais de uma distribuição. Como deve resolver dependências? Do sistema ou dos diretórios de sua casa? E se encontrar versões diferentes em ambos?

O melhor que posso pensar seria um ambiente chroot'd como as pessoas fazem para aplicativos de 32 bits em sistemas de 64 bits. É mais overhead como você estaria chamando o debootstrap no chroot, mas com alguns symlinking , shell wrapper script divertido, ele pode fazer o que você quer.

    
por 14.03.2010 / 13:17
0

Eu ainda estou trabalhando no problema, mas desboque basicamente o que você precisa, e deve trabalhar com o fakeroot. O debootstrap é apenas um monte de scripts de shell, então estou separando para ver o que faz isso funcionar. A parte difícil será desinstalar os arquivos assim que eles forem instalados.

    
por 30.11.2011 / 07:12
0
Infelizmente eu não ouvi falar de nenhuma distro fornecendo algo assim (embora eu tenha certeza que seria super popular). Você pode ser capaz de imitar a distribuição baseada em rpm ... Eu não tentei isso, mas você pode ser capaz de construir um banco de dados rpm baseado em usuário e então instalar o rpm no banco de dados do usuário.

Tente configurar uma nova distribuição baseada no usuário com:

rpm --initdb --dbpath DIRECTORY

Depois, há várias opções que podem ajudar:

  • --prefix
  • --relocate
por 30.11.2011 / 08:08
0

Eu tenho uma solução que usei com sucesso para instalar uma grande coleção de pacotes de software cooperativos em um servidor Debian da escola, onde eu não tenho acesso root (nem mesmo para instalar outro gerenciador de pacotes). Não usa deboostrap nem qualquer gerenciador de pacotes.

O método é parcialmente manual, mas fiz o meu melhor para torná-lo conveniente.

Ele usa esse script chamado install (não se esqueça de chmod +x it):

#!/bin/bash

# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME

# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX

# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
    file="${PREFIX}${f}"
    if grep -Iq . "$file"; then
        if grep -q '/usr' "$file"; then
            # interactively ask for each occurence, if it should be replaced
            vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
        fi
    else
        echo "Leaving binary file $file unmodified"
    fi
done

Normalmente, primeiro baixo um arquivo deb usando apt-get download package_name . Então eu corro ./install package_name_blabla.deb , e decido manualmente sobre cada ocorrência de /usr nos arquivos descompactados, se ele deve ser substituído por $PREFIX/usr ou não.

Essa decisão depende completamente de quais pacotes são instalados pelo sistema e quais são instalados usando esse método. Normalmente, por ex. os arquivos pkg-config precisam dessa substituição, enquanto as linhas shebang como #!/usr/bin/perl não. A regra geral é que o caminho resultante deve apontar para um arquivo existente.

Com os pacotes instalados dessa forma, você obviamente precisa informar os outros programas sobre eles. Isso pode ser feito anexando os valores corretos a LD_LIBRARY_PATH , PATH , PYTHONPATH , PKG_CONFIG_PATH , CMAKE_MODULES_PATH , CMAKE_PREFIX_PATH etc.

Há uma ressalva nessa abordagem, que as dependências não são baixadas / instaladas automaticamente; você tem que manter o controle deles manualmente.

Além disso, o APT não sabe obviamente sobre esses pacotes, então os mostrará para sempre como desaparecidos. Mas isso faz sentido - quem gostaria de instalar um aplicativo para todo o sistema que depende da instalação de um usuário.

Se quiser desinstalar um programa, você pode listar o conteúdo do arquivo deb usando ar p "$1" data.tar.xz | tar tJ e, em seguida, excluir todos esses arquivos do PREFIX .

    
por 01.12.2016 / 03:26