Como baixar o pacote .deb e todas as dependências?


14

Para todas as respostas que encontrei sobre esse tópico, a solução foi criar, em um determinado computador A, onde eu preciso instalar o pacote, um arquivo contendo todas as dependências necessárias e, em seguida, baixá-lo em outro computador, vamos chamá-lo de B.

O problema é que eu quero ter um armazenamento de certos softwares críticos que preciso trabalhar para poder instalá-los offline posteriormente, caso precise formatar minha área de trabalho.

REALMENTE NÃO ME IMPORTO em ter muitos arquivos .deb redundantes no meu computador, e REALMENTE NÃO ME IMPORTO se vou armazenar 1 GB de arquivos para instalar um software de 10 MB.

Então, eu quero ter qualquer dependência possível baixada. Existe alguma maneira de fazer isso?


Respostas:


22

Eu iria com isso:

apt-get download PACKAGE && apt-cache depends -i PACKAGE | awk '/Depends:/ {print $2}' | xargs apt-get download

Em seguida, você pode instalá-lo dpkg -i *.debno diretório em que os baixou.


11
Eu acho que deu certo, muito obrigado. Vou testá-lo mais algumas vezes antes de voltar para agradecer novamente :) #
3011

Você pode me explicar o que os comandos awk e xargs fazem? Estou apenas começando a usar o linux e nunca vi esses 2 comandos antes #
3011

apt-cache depends -iirá verificar dependências importantes para o pacote. Ele será executado apenas se apt-get download PACKAGEconseguir encontrar PACKAGE nos repositórios ppa aos quais você adicionou /etc/apt/sources.list. Agora, apt-cache depends -i PACKAGEtem saída de forma Depends: dependency-name. Nós só precisamos de nomes de dependências, e é isso que o awk está fazendo - está recebendo apenas a segunda string. Por exemplo, tente fazer apt-cache depends -i vim | awk '{print $2}' . Observe também que toda a linha à direita de && pode ser considerada uma declaração
Sergiy Kolodyazhnyy

11
Obrigado! Mas fiz algumas pesquisas e usei o comando sed '/ ^ </ d' para excluir parte da saída do apt-cache depende, ele já era bom, mas agora funciona em todos os casos que estou tentando. Muito obrigado!
ebernardes

dpkg -i *.debnão é tão bom, ele não instala o pacote por ordem de dependências. Portanto, você pode precisar tentar várias vezes para instalar todo o pacote. De qualquer forma para contornar?
Mithril #

1

Isso é algo único ou algo que você deseja manter atualizado? Você trabalha principalmente on-line e deseja apenas um backup local de todos os seus pacotes?

Existem vários serviços que você pode instalar que atuam como um proxy / cache do APT. Você aponta o APT para o cache local, ele é baixado da Internet e mantém uma cópia em cache local de todos os pacotes. Isso pode ser muito útil se você tiver muitos computadores em sua rede com uma seleção idêntica de pacotes.

Meu cache preferido do apt é aprox , mas também há o apt-cacher-ng e alguns outros. Cada um tem pequenas diferenças sobre como o cache pode ser configurado.

Eu sempre uso o mínimo de instaladores netinst para construir meus sistemas baseados no Debian, o que significa que meu cache apt geralmente possui quase todos os pacotes para construir totalmente meus sistemas.


Isso é algo que eu quero manter, caso precise instalar rapidamente algum software, mesmo que seja uma versão desatualizada, antes de poder atualizá-lo mais tarde. Verificarei isso, obrigado :) #
11785

0

execute o seguinte programa python:

import subprocess
package=input("insert package name:")
t=subprocess.run(["apt-cache", "depends", "-i", package], stdout=subprocess.PIPE)
if t.stderr or t.returncode:
    print(t.stdout)
    exit(t.stderr)
#print(":", t.stdout)
needed_pacages=t.stdout.split(b"Depends: ")
print(package, "depends of", needed_pacages)
for choices in needed_pacages:
    one_choice_made=False
    for needed_package in choices.split(b"\n"):
        needed_package=needed_package.strip(b"\n ")
        t=subprocess.run(["apt-get", "download", needed_package])
        if t.stderr or t.returncode:
            print("ERROR: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "package name:", needed_package)
        else:
            one_choice_made = True
            #print("downloaded",vajalik_pakk)
            break
    if not one_choice_made:
        print("could not get one of dependecies", choices)

11
E por que isso é melhor do que a resposta aceita?
RalfFriedl

0

execute o seguinte programa python3:

import subprocess
olemas_olevad_pakid=set()
def r(pakk):
    t=subprocess.run(["apt-get", "download", pakk])
    if t.stderr or t.returncode:
        #print("could not load package: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "paki nimi:", pakk)
        return False
    olemas_olevad_pakid.add(pakk)
    t=subprocess.run(["apt-cache", "depends", "-i", pakk], stdout=subprocess.PIPE)
    if t.stderr or t.returncode:
        print(t.stdout)
        exit(t.stderr)
    #print(":", t.stdout)
    needed_pacages=t.stdout.split(b"Depends: ")[1:]
    #print(pakk, "needs packages:", needed_pacages)
    for choices in needed_pacages:
        one_choice_made=False
        for needed_package in choices.split(b"\n"):
            needed_package=needed_package.strip(b"\n ")
            if needed_package in olemas_olevad_pakid or r(needed_package):
                one_choice_made=True
                break
        if not one_choice_made:
            print("PROBLEM: could not download any of", choices)
            return False
    return True
#for pakk in packages_to_download:
#    print("pakk:",pakk)
#    r(pakk)
r(input("package name:"))

Ele fará o download de todas as dependências de todas as dependências, não apenas das dependências imediatas. Mas instalá-los com dpkg -i *.debfalha. Talvez porque apt-cache depends -i packagedê informações erradas ou alguns arquivos some.deb ainda precisem de conexão com a Internet para instalar.


Pode falhar porque o dpkg não está instalando os pacotes na ordem correta. Você pode tentar repetir o dpkg algumas vezes até que todas as dependências sejam instaladas.
Black Owl Kai
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.