Existe alguma maneira de obter o APT para instalar pacotes no meu diretório pessoal?
Não quero fazer alterações em todo o sistema.
Como alternativa, existem gerenciadores de pacotes linux baseados no diretório inicial?
Existe alguma maneira de obter o APT para instalar pacotes no meu diretório pessoal?
Não quero fazer alterações em todo o sistema.
Como alternativa, existem gerenciadores de pacotes linux baseados no diretório inicial?
Respostas:
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ê pode fazer é usar um chroot se quiser testar algo antes de instalá-lo globalmente no sistema. Para fazer isso, você precisa ter acesso ao root. A primeira coisa a fazer é criar um chroot básico:
# debootstrap lenny lenny-chroot
Isso cria um chroot Lenny dentro do lenny-chroot
diretório.
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, digite exit ou pressione ctrl-D
O Linuxbrew é outro gerenciador de pacotes não raiz para Linux (baseado no popular sistema de gerenciamento de pacotes Homebrew para OS X) que compila a partir da fonte e mantém os binários em seu diretório pessoal.
Citando os documentos, os recursos do Linuxbrew são:
O prefixo do Gentoo faz exatamente o que você deseja.
Ele instala todos os pacotes em um diretório especificado. Não é necessário acesso root. Se você quiser se livrar dele, basta remover o diretório base.
PS: Isso não funciona no Ubuntu> = 11.04 ou em qualquer outro derivado do Debian com o Multiarch.
Assim como uma pequena adição à opção de compilá-lo, existe a opção intermediária de compilar em um pacote com uma opção de prefixo diferente no momento da compilação (com "checkinstall" ou talvez outro método). A vantagem é que o pacote aparecerá em gerenciadores de pacotes, como aptitude ou synaptic.
Além disso, acho que em alguns casos pode ser possível fazer o download do .deb real e forçar um prefixo diferente via instalação do dpkg, mas acho que não é algo que possa ser feito com qualquer pacote aleatório, mas eles devem ter sido compilados com alguma variável para sua localização (em vez do prefixo literal explícito) que você exportaria antes da instalação. Não sei nada sobre o procedimento, no google, para "dpkg instdir prefix".
Você pode usar o fakechroot - veja a demonstração no site deles.
O GoboLinux sem raiz 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 o usava há alguns anos, exigia alguns ajustes, pois o script de instalação estava um pouco desatualizado em relação a outras alterações do Gobo.
Há também o klik, que reembala alguns .deb
s, pode instalar pacotes no diretório inicial e não requer privilégios de root para operar ... mas a configuração inicial requer root.
Eu costumo pegar as fontes e verificar um arquivo como "INSTALL". Normalmente, existem instruções para fazer ./configure --prefix=somedir
. Então você tem que adicionar somedir/bin
ao seu caminho.
Não, acho que você não pode.
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.
Existem muito poucos casos em que você precisa instalar pacotes na sua pasta pessoal.
No entanto, você pode compilar e instalar o software na sua máquina local. Basta descompactar e configurar com ./configure --prefix=$HOME/local
ou em algum outro diretório. Você pode então make
e make install
como normal. Isso irá compilar e instalar esse programa ~/local/
, por exemplo, o programa que você executar estará ~/local/bin/programmname
.
Pela minha própria experiência, não há maneira fácil de usar pacotes DEB existentes para instalar em outro diretório que não seja um ambiente chroot . As ferramentas de instalação do Debian / Ubuntu, dpkg / aptitude / dselect, todas requerem privilégios de root para funcionar corretamente.
Agora, dado o DEB fonte, 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 mencionaram, você pode usar o debootstrap e criar facilmente um ambiente chroot, o 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 espaço e esta é uma solução viável, é possível combiná-lo com dchroot
, ou melhor ainda schroot
, para permitir a execução fácil dos aplicativos instalados no ambiente chroot.
Tenho problemas para imaginar como isso funcionaria com os repositórios oficiais de uma distribuição. Como deve resolver dependências? Do sistema ou dos diretórios pessoais? E se encontrar versões diferentes em ambas?
O melhor que consigo pensar seria em um ambiente chroot, como as pessoas fazem para aplicativos de 32 bits em sistemas de 64 bits. É mais sobrecarga como você estaria chamando debootstrap no chroot, mas com alguns links simbólicos , shell script wrapper divertido, ele pode fazer o que quiser.
Ainda estou trabalhando no problema, mas desbootstrap basicamente o que você precisa e deve funcionar com o fakeroot. O debootstrap é apenas um monte de scripts de shell, então estou separando-o para ver o que o faz funcionar. A parte mais difícil será desinstalar os arquivos depois que eles estiverem instalados.
Infelizmente, eu não ouvi nenhuma distro fornecer algo assim (embora eu tenha certeza que seria super popular). Você pode simular a distribuição baseada em rpm ... Não tentei isso, mas você pode criar um banco de dados rpm com base no usuário e depois instalar rpm no banco de dados do usuário.
Tente configurar uma nova distribuição baseada em usuário com:
rpm --initdb --dbpath DIRECTORY
Depois, há várias opções que podem ajudar:
--prefix
--relocate
Eu tenho uma solução que usei com sucesso para instalar uma grande coleção de pacotes de software cooperativos em um servidor Debian escolar, onde não tenho acesso root (nem mesmo para instalar outro gerenciador de pacotes). Ele não usa deboostrap
nem gerenciador de pacotes.
O método é parcialmente manual, mas eu fiz o possível para torná-lo conveniente.
Ele usa esse script que eu chamei install
(não esqueça chmod +x
):
#!/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
Geralmente, eu primeiro baixa 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 /usr
nos arquivos descompactados, se eles devem $PREFIX/usr
ou não ser substituídos .
Essa decisão depende completamente de quais pacotes são instalados pelo sistema e quais são instalados usando esse método. Normalmente, por exemplo, os arquivos pkg-config precisam dessa substituição, enquanto as linhas shebang #!/usr/bin/perl
não. A regra geral é o caminho resultante deve apontar para um arquivo existente.
Com os pacotes instalados dessa maneira, você obviamente precisa informar os outros programas sobre eles. Isto pode ser conseguido, acrescentando os valores correctos para LD_LIBRARY_PATH
, PATH
, PYTHONPATH
, PKG_CONFIG_PATH
, CMAKE_MODULES_PATH
, CMAKE_PREFIX_PATH
etc.
Há uma ressalva nessa abordagem: as dependências não são baixadas / instaladas automaticamente; você precisa acompanhá-los manualmente.
Além disso, o APT obviamente não sabe sobre esses pacotes, portanto os mostrará para sempre como ausentes. Mas isso faz sentido - quem gostaria de instalar um aplicativo em todo o sistema que depende da instalação do usuário.
Se você deseja desinstalar um programa, 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 arquivo PREFIX
.