Comment télécharger le package .deb et toutes les dépendances?

14

Pour toutes les réponses que j'ai trouvées à ce sujet, la solution a été de créer, dans un certain ordinateur A où j'ai besoin d'installer le paquet, un fichier contenant toutes les dépendances dont il a besoin puis de le télécharger sur un autre ordinateur, appelons-le B.

Le truc, c'est que je veux avoir un stockage de certains logiciels critiques dont j'ai besoin pour pouvoir les installer hors ligne plus tard au cas où je devrais formater mon bureau.

JE NE VEUX PAS VRAIMENT d'avoir beaucoup de fichiers .deb redondants dans mon ordinateur, et JE NE VEUX PAS VRAIMENT si je vais stocker 1 Go de fichiers pour installer un logiciel de 10 Mo.

Donc, je veux télécharger toute dépendance possible. Y a-t-il un moyen de le faire?

ébernardes
la source
stackoverflow.com/questions/13756800/…
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

Réponses:

22

J'irais avec ceci:

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

Ensuite, vous pouvez l'installer avec dpkg -i *.debdans le répertoire que vous avez téléchargé.

Darek
la source
1
Je pense que cela a fait le travail, merci beaucoup. Je vais juste le tester un peu plus de fois avant de revenir pour vous remercier à nouveau :)
ebernardes
Pouvez-vous m'expliquer ce que font les commandes awk et xargs? Je commence tout juste à utiliser Linux et je n'ai jamais vu ces 2 commandes auparavant
ebernardes
apt-cache depends -ivérifiera les dépendances importantes pour le PAQUET. Il ne sera exécuté que s'il apt-get download PACKAGEréussit à trouver le PACKAGE dans les référentiels ppa auxquels vous avez ajouté /etc/apt/sources.list. Maintenant, apt-cache depends -i PACKAGEa la sortie du formulaire Depends: dependency-name. Nous n'avons besoin que de noms de dépendances, c'est donc ce que fait awk - il n'obtient que la deuxième chaîne. Par exemple, essayez de faire apt-cache depends -i vim | awk '{print $2}' . Notez également que toute la ligne à droite de && peut être considérée comme une déclaration
Sergiy Kolodyazhnyy
1
Merci! Mais j'ai fait quelques recherches, et j'ai utilisé la commande sed '/ ^ </ d' pour supprimer une partie de la sortie d'apt-cache dépend, c'était déjà bien, mais maintenant ça marche dans tous les cas j'essaye. Merci beaucoup!
ebernardes
dpkg -i *.debn'est pas si bon, il n'installe pas le paquet par ordre de dépendances. Ainsi, vous devrez peut-être réessayer plusieurs fois pour installer tous les packages. Quoi qu'il en soit pour contourner?
Mithril
1

Est-ce une chose ponctuelle ou quelque chose que vous souhaitez garder à jour? Travaillez-vous principalement en ligne et souhaitez-vous simplement une sauvegarde locale de tous vos packages, au cas où?

Il existe plusieurs services que vous pouvez installer qui agissent comme un proxy / cache APT. Vous pointez APT vers votre cache local, il sera téléchargé à partir d'Internet et conservera une copie mise en cache localement de tous les packages. Cela peut être très utile si vous avez beaucoup d'ordinateurs sur votre réseau avec une sélection identique de packages.

Mon cache d'apt préféré est d' environ , mais il y a aussi apt-cacher-ng, et quelques autres. Chacun a des différences mineures sur la façon dont la mise en cache peut être configurée.

J'utilise toujours les installateurs minimaux de netinst pour construire mes systèmes basés sur Debian, ce qui signifie que mon cache apt a généralement presque tous les paquets pour construire entièrement mes systèmes.

Zoredache
la source
C'est quelque chose que je veux garder au cas où, si j'ai besoin d'installer rapidement un logiciel, même s'il s'agit d'une version obsolète, avant de pouvoir le mettre à jour plus tard. Je vais vérifier ça, merci :)
ebernardes
0

exécutez le programme python suivant:

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)
Hilugan
la source
1
Et pourquoi est-ce mieux que la réponse acceptée?
RalfFriedl
0

exécutez le programme python3 suivant:

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:"))

Il téléchargera toutes les dépendances de toutes les dépendances non seulement les dépendances immédiates. Mais leur installation a dpkg -i *.debéchoué. Peut-être parce que apt-cache depends -i packagedonne des informations erronées ou certains fichiers some.deb ont toujours besoin d'une connexion Internet pour l'installation.

POISSON
la source
Il peut échouer car dpkg n'installe pas les packages dans le bon ordre. Vous voudrez peut-être réessayer dpkg plusieurs fois jusqu'à ce que toutes les dépendances soient installées.
Black Owl Kai