web-dev-qa-db-fra.com

Comment télécharger toutes les dépendances et les packages dans un répertoire

J'essaye d'installer un paquet sur une machine sans connexion Internet. Ce que je veux faire, c'est télécharger tous les paquets et les dépendances sur une machine avec une connexion Internet, puis tout le net sur l'ordinateur hors ligne.

Je joue avec les apt-get et apt-cache mais je n'ai pas trouvé de moyen rapide et facile de télécharger le paquet et ses dépendances d'un seul coup dans le répertoire de mon choix. Comment je ferais ça? Est-ce que je m'occupe correctement de ce problème? Comment installeriez-vous des paquets hors ligne qui comportent de nombreuses dépendances?

49
user583507
# aptitude clean
# aptitude --download-only install <your_package_here>
# cp /var/cache/apt/archives/*.deb <your_directory_here>
35
metalheart

La réponse marquée présente le problème suivant: les packages disponibles sur la machine effectuant les téléchargements peuvent être différents de la machine cible et l'ensemble de packages peut donc être incomplet.

Pour éviter cela et obtenir toutes les dépendances, j'utilise ce qui suit: 

apt-get download $(apt-rdepends <package>|grep -v "^ ")
59
onno

L’approche aptitude --download-only ... ne fonctionne que si vous avez une distribution debian avec une connexion Internet entre vos mains. 

Si vous ne le faites pas, je pense qu'il est préférable d'exécuter le script suivant sur la machine Debian déconnectée:

apt-get --print-uris --yes install <my_package_name> | grep ^\' | cut -d\' -f2 >downloads.list

déplacez le fichier downloads.list sur une machine Linux connectée (ou non-linux) et exécutez:

wget --input-file myurilist

cela télécharge tous vos fichiers dans le répertoire actuel. Après cela, vous pourrez les copier sur une clé USB et les installer sur votre machine Debian déconnectée.

crédits: http://www.tuxradar.com/answers/517

PS En fait, j’ai copié l’article du blog parce qu’il n’était pas très lisible, et au cas où cet article disparaîtrait.

16
FSp

Même question déjà répondu ici: Comment lister/télécharger les dépendances récursives d’un paquet debian?

essayer:

PACKAGES="wget unzip"
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests \
  --no-conflicts --no-breaks --no-replaces --no-enhances \
  --no-pre-depends ${PACKAGES} | grep "^\w")
14
panticz.de

Un peu simplifié (et ce qui a fonctionné pour moi) qui a fonctionné pour moi (basé sur tout ce qui précède)
Notez que la hiérarchie des dépendances peut aller plus loin qu’un niveau

Obtenez des dépendances de votre paquet

$ apt-cache depends mongodb | grep Depends:
  Depends: mongodb-dev
  Depends: mongodb-server

Obtenir les URL:

Sudo apt-get --print-uris --yes -d --reinstall install mongodb-org mongodb-org-server mongodb-org-Shell mongodb-org-tools | grep "http://" |  awk '{print$1}' | xargs -I'{}' echo {} | tee files.list
wget --input-file files.list
8
ozma

Cela téléchargera tous les Debs dans le répertoire actuel et n'échouera PAS s'il ne peut trouver un candidat.

De plus, il n’EST PAS nécessaire que Sudo exécute le programme sript!

nano getdebs.sh && chmod +x getdebs.sh && ./getdebs.sh

#!/bin/bash

package=ssmtp

apt-cache depends "$package" | grep Depends: >> deb.list

sed -i -e 's/[<>|:]//g' deb.list

sed -i -e 's/Depends//g' deb.list

sed -i -e 's/ //g' deb.list

filename="deb.list"

while read -r line
do
    name="$line"
    apt-get download "$name"
done < "$filename"

apt-get download "$package"

Note: J'ai utilisé cela comme exemple parce que j'essayais réellement de DL les Deps pour SSMTP et que cela échouait sous debconf-2.0, mais ce script m'a fourni ce dont j'avais besoin! J'espère que ça aide.

7

J'ai utilisé apt-cache depends package pour obtenir tous les paquetages requis dans tous les cas si ils sont déjà installés sur le système ou non .
Comme la commande apt-cache fonctionne différemment, en fonction de la langue, vous devez essayer cette commande sur votre système et adapter la commande . Apt-cache dépend de votre package.
Sur un système anglais, vous obtenez:

$ apt-cache depends yourpackage
node
  Depends: libax25
  Depends: libc6


Sur un système allemand, vous obtenez: Node

  Hängt ab von: libax25
  Hängt ab von: libc6


La version anglaise avec le terme:
"Depends:"
Vous devez changer le terme "yourpackage" à votre souhait deux fois dans cette commande, prenez-en soin!

$ Sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep "  Depends:" |  sed 's/  Depends://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list


Et la version allemande avec le terme:
"Hängt ab von:"
Vous devez changer le terme "yourpackage" à votre souhait deux fois dans cette commande, prenez-en soin!
Ce texte est utilisé deux fois dans cette commande, si vous voulez l’adapter à votre langue, prenez-en soin!

$ Sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep "Hängt ab von:" |  sed 's/  Hängt ab von://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list


Vous obtenez la liste des liens dans downloads.list
Vérifiez la liste, allez dans votre dossier et lancez la liste:

$ cd yourpathToYourFolder

$ wget --input-file downloads.list


Tous vos paquets requis sont dans:

$ ls yourpathToYourFolder
4
michbau

Je suppose que vous avez un Nice fat USB HD et une bonne connexion au net. Vous pouvez utiliser apt-mirror pour créer votre propre miroir Debian.

http://apt-mirror.sourceforge.net/

1
joshuacronemeyer

Cela téléchargera tous les paquets et dépendances (pas déjà installés) dans un répertoire de votre choix:

Sudo apt-get install -d -o Dir::Cache=/path-to/directory/apt/cache -o Dir::State::Lists=/path-to/directory/apt/lists packages

Assurez-vous que /path-to/directory/apt/cache et /path-to/directory/apt/lists existent .. Si vous ne définissez pas -o Dir::Cache, il pointe sur /var/cache/apt, Dir::State::Lists pointe sur /var/lib/apt/lists ( qui conserve les fichiers d'index des packages disponibles )

Les deux options -o peuvent être utilisées avec update et upgrade au lieu de install.

Sur une machine différente, exécutez la même commande sans '-d'

0
jjvs