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-chrootdiretó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:
Pode instalar software em um diretório inicial e, portanto, não requer sudo
Instale o software não empacotado 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
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.
O Gentoo constrói a partir da fonte, o poster parece querer instalar via pacote em um diretório específico. Isso não é realmente a mesma coisa.
Andrew Case
1
@AndrewCase Gentoo também tem pacotes, eu acredito. O fato de não serem binários é irrelevante para a instalação final.
jiggunjer
4
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".
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 .debs, 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/binao seu caminho.
pode ser difícil obter, compilar e manter as dependências atualizadas.
Paolo
Isso é ao contrário. A questão é sobre como fazer com que os gerenciadores de pacotes (que são preferíveis desde os anos 90) se comportem dessa maneira.
Lightness Races com Monica
1
Não, acho que você não pode.
O melhor que posso pensar agora é usar apt-get sourcee 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 -Xpara 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/localou em algum outro diretório. Você pode então makee make installcomo 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.
Eu (e milhares de outros usuários) de todo coração encorajamos isso. Algo que explode no banco de dados rpm (ou apt alternativo) já existente em todo o sistema, bem como em um banco de dados rpm fornecido pelo usuário e instala rpms localizados pelo usuário. Isso seria incrível. Isso pode até ser mesclado na linha principal. Alguma pesquisa foi feita sobre isso anteriormente?
Andrew Case
0
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:
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 deboostrapnem 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.debe decido manualmente sobre cada ocorrência /usrnos arquivos descompactados, se eles devem $PREFIX/usrou 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/perlnã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_PATHetc.
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 tJe, em seguida, excluir todos esses arquivos do arquivo PREFIX.
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:
Isso cria um chroot Lenny dentro do
lenny-chroot
diretório.Agora podemos entrar no 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
fonte
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:
fonte
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.
fonte
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".
fonte
Você pode usar o fakechroot - veja a demonstração no site deles.
fonte
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.fonte
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 adicionarsomedir/bin
ao seu caminho.fonte
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.fonte
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ãomake
emake install
como normal. Isso irá compilar e instalar esse programa~/local/
, por exemplo, o programa que você executar estará~/local/bin/programmname
.fonte
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 aindaschroot
, para permitir a execução fácil dos aplicativos instalados no ambiente chroot.fonte
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.
fonte
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.
fonte
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
fonte
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çachmod +x
):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 arquivoPREFIX
.fonte