Instalando pacotes no diretório local?

38

Gostaria de instalar pacotes de software, semelhantes a apt-get install <foo>mas:

  1. Sem sudoe
  2. Em um diretório local

O objetivo deste exercício é isolar compilações independentes no meu servidor de integração contínua .

Não me importo de compilar a partir do código-fonte, se é isso que é preciso, mas obviamente prefiro a abordagem mais simples possível. Eu tentei apt-get source --compile <foo>como mencionado aqui, mas não consigo fazê-lo funcionar em pacotes como o autoconf. Estou tendo o erro a seguir:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

Eu tenho o help2man compilado em um diretório local, mas não sei como informar o apt-get disso. Alguma ideia?

ATUALIZAÇÃO : Encontrei uma resposta que quase funciona em https://askubuntu.com/a/350/23678 . O problema chrooté que ele requer sudo. O problema apt-get sourceé que não sei resolver dependências. Devo dizer, chrootparece muito atraente. Existe um comando equivalente que não exija sudo?

Gili
fonte
Eu sugiro que seja uma duplicata desta pergunta: [ askubuntu.com/questions/147654/… [1]: askubuntu.com/questions/147654/…
7
@ Kamil, não é. Não estou tentando instalar sem acesso à rede. Estou tentando instalar sem sudoe em um diretório que não seja do sistema.
Gili
4
Gente, por favor, não diminua o voto da minha pergunta sem explicar o porquê . Obrigado.
Gili
Se você não possui root no sistema, não poderá resolver dependências facilmente . Às vezes é possível; você teria que começar a instalar o software em sua casa, começando com as dependências mais baixas e modificando o LD_PATH para que os programas possam encontrar suas bibliotecas. No entanto, você falhará se algum dos pacotes exigir que o root (ou suid) seja executado.
janeiro
@ Janeiro, estou tentando compilar um projeto de software dentro de um sistema de compilação automatizado. Até onde eu sei, nenhuma de suas dependências (necessárias para compilar) requer raiz.
Gili

Respostas:

20

Isso geralmente não é possível, porque você mexeria no sistema de dependências do apt.

Existem duas soluções:

  1. Instale o pacote de origem, mude para o diretório de origem, configure e instale o pacote, independentemente dos sistemas de empacotamento manualmente, em um diretório de sua escolha.

    apt-get source <package>
    

    Isso não precisa de raiz, baixa a fonte do pacote, descompacta-a ​​em um diretório dentro do diretório atual. Você pode então mudar para esse diretório, fazer modificações na fonte, configurar a instalação para outro destino etc.

    A configuração para qual diretório de instalação os programas devem ir depende, no entanto, do programa específico. Muitos programas usam o ./configure --prefix localdirpara direcionar a instalação ao localdir; mas esse nem sempre é o caso.

  2. Crie um ambiente chroot no qual você instalará os pacotes:

    debootstrap precise myfancyinstall
    

    Agora você criou uma instalação fictícia no diretório myfancyinstall /

    chroot myfancyinstall
    

    Você pode usar o apt-get install dentro do compartimento chroot para instalar o que quiser.

janeiro
fonte
Isso parece promissor. Usando apt-get sourcesem --compileparece suprimir o aviso sobre dependências não satisfeitas (permitindo-me para resolvê-los eu mesmo)
Gili
Existe uma maneira de obter pacotes que não têm fonte dessa maneira também?
Soandos
A solução (2) funcionará independentemente. Caso contrário, você estará por sua conta: talvez exista outra maneira de instalar o pacote. Ou baixar o arquivo de pacote deb e descompacte-o com ar: ar vx mypackage.deb. Em seguida, analise o conteúdo do pacote e descubra como instalá-lo manualmente.
janeiro
14

usando um shell bash e adquirindo o arquivo "package.deb" (assumindo que o nome do pacote seja "package"), você pode executar o seguinte comando para realizar o que deseja - instalar o pacote para que seu diretório pessoal seja tratado da mesma maneira "/ "seria tratado em uma instalação normal.

Este é o comando:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

Você pode enfrentar alguns erros, como falta de $ HOME / var / lib / dpkg / lock, então crie todos os arquivos ausentes que você obterá com os erros e a instalação deverá funcionar sem o sudo.

observe que se "apt-get download" não funcionar, você pode tentar "apt download" ou "apitutde download package".

se nenhum dos métodos funcionar, basta baixar o pacote manualmente em http://packages.ubuntu.com/

outro método seria executar o comando chroot com o parâmetro $ HOME e, em seguida, instalar da mesma maneira como acima apenas sem --root = $ HOME. esse comando levaria você a um shell em que "/" é seu $ HOME atual. para retornar ao modo normal, não se esqueça de "sair"

boa sorte.

user172681
fonte
Depois de criar os arquivos ausentes, reclamados pelo dpkg, ele começou a segfaulting.
Matt Chambers
0

Se você estiver em um host da Web compartilhado com sshacesso, mas apt-getsem raiz, etc. ou um sistema restrito da mesma forma, o seguinte poderá funcionar para você. Funcionou para mim em um sistema onde uname -aretornava algo comoSMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
iolsmit
fonte