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?
# aptitude clean
# aptitude --download-only install <your_package_here>
# cp /var/cache/apt/archives/*.deb <your_directory_here>
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 "^ ")
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.
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")
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
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.
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
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.
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
'