Existe-t-il une commande apt permettant de télécharger un fichier deb des référentiels vers le répertoire actuel?


46

Je suis souvent intéressé par les déclencheurs d'installation (postinst, postrm) ou par certaines parties de paquets (comme /usr/shareet /etc). Actuellement, j'exécute la commande suivante pour récupérer le code source:

apt-get source [package-name]

L'inconvénient est que ce fichier est souvent beaucoup plus volumineux que le paquet binaire et ne reflète pas l'arborescence d'installation.

En ce moment, je télécharge les packages via http://packages.ubuntu.com/ :

  1. Rechercher [package-name]
  2. Sélectionnez le forfait
  3. Cliquez sur amd64 / i386 pour télécharger
  4. Télécharger le fichier actuel

Cela prend trop de temps pour moi et en tant que personne qui aime vraiment le shell, j'aimerais faire quelque chose comme la commande suivante ( imaginaire ):

apt-get get-deb-file [package-name]

Je ne pouvais pas trouver quelque chose comme ça dans la page de manuel d'apt-get . Le plus proche que j'ai trouvé était le --download-onlycommutateur, mais cela place le paquet dans /var/cache/apt/archives(ce qui nécessite des autorisations root) et non dans le répertoire en cours.


Différences sur les machines sans sauvegarde de fichiers: ssh debianmachine1 "dpkg --get-selections" | diff - <(dpkg --get-selections)
Scott Robert Schreckengaust

Vous pouvez utiliser debgetle package debian-goodies.
Shayan le

Réponses:


59

Vous pouvez utiliser la downloadsous-commande de apt, apt-getou aptitude. Par exemple, si $ PKG est le paquet que vous voulez, l’une de ces choses fera:

apt-get download $PKG
apt download $PKG
aptitude download $PKG

Cela ne nécessite pas de privilèges root. La même chose peut aussi être approchée en utilisant apt-getet wget:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2)

Cependant, tous les packages requis pour l’installer seront récupérés. Vous pourrez donc tenter de le limiter:

wget $(apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | grep "/${PKG}_")

Vous pouvez également mettre une ligne wget dans une fonction pour pouvoir l'utiliser comme commande apt-download avec le nom du paquet en tant que paramètre:

function apt-download { wget -c $(apt-get install --reinstall --print-uris -qq $1 | cut -d"'" -f2); }

Notez les modifications: $ PKG est remplacé par $ 1 et le paramètre -c permet la poursuite des téléchargements interrompus.


1
Excellent, c'est ce que je recherche. Une autre raison de conserver aptitude sur mon système, l’autre commande utile non fournie par aptest aptitude changelog $PKG.
Lekensteyn

4
Mise à jour: de Natty (version 0.8.11 apt pour être précis), la aptitude downloadfonctionnalité est disponible dans aptainsi: apt-get download $PKG.
Lekensteyn

sweet, fonctionne malgré mon ancien apt v0.8.10
rogerdpack

il semble qu'ils aient supprimé l'option --print-urls
erjoalgo le

L'option --print-urls est toujours là
kumarharsh

8
sudo apt-get -o dir::cache::archives="/path/to/folder/" -d install package

Remarque:

Vous devez créer un dossier nommé partial dans le dossier de destination.


Ça ne sonne pas si mal. Les options semblent être décrites par man apt.conf. Je voudrais éviter la création du dossier.
Lekensteyn

Je suis juste curieux, pourquoi voudriez-vous éviter de créer le dossier?
mount.cifs

Je n'ai pas besoin de stocker le paquet pour toujours et éviter de créer le dossier fait gagner du temps aussi.
Lekensteyn

Je voulais juste noter que cette solution insistera également sur la suppression des paquets (par exemple, si vous changez de version via /etc/apt/sources.listune version plus récente, dans l’intention de télécharger des paquets plus récents). Dans ce cas, la wgetméthode ci-dessus peut s'avérer plus utile. 'veux rien enlever ...
sdaau

5

Dans Ubuntu 14.04 ( aptversion du paquet 1.0.1ubuntu2, je crois), apt-getinclut la downloadcommande permettant de télécharger le paquet donné en tant que .debdans le répertoire actuel.

Par exemple, supposons que nous voulions télécharger le gestionnaire de fichiers Ranger:

$ apt-get download ranger

Résulte en:

$ ls . | grep ranger
ranger_1.6.0-1_all.deb

C'est parfait. Toutes les autres solutions que j'ai essayées ne fonctionnent pas si apt installelles ne répondent pas à toutes les exigences de dépendance. Je voulais juste le fichier .deb pour bricoler!
Raziel

3

Si vous voulez télécharger tous les paquets deb d'une liste, vous pouvez faire ceci:

cat path/to/text/file.txt | xargs apt-get install --reinstall --print-uris -qq $PKG | cut -d"'" -f2 | xargs wget

Il suffit de mettre un nom de paquet par ligne. Comme dans un fichier requirements.txt. Par exemple, avec un contenu comme celui-ci:

apache2-mpm-event
curl
dmidecode
ethtool
libapache2-mod-wsgi
libapache2-mod-python

J'espère que cela t'aides. ;)


2

sudo apt-get install devscripts

dget [package-name]


Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son message.
s3lph

Comment ne fournit-il pas une réponse? Ceci télécharge une deb de l’archive dans le répertoire courant. N'est-ce pas exactement la question?
Michael Terry

Un peu plus de détails peuvent être utiles. Bien que cela puisse être techniquement considéré comme une réponse, vous pouvez toujours vouloir fournir plus de deux commandes.
s3lph

:: haussement de épaules :: Contrairement aux autres réponses ici, celle-ci n'a pas de réserves ni de mises en garde. C'est une réponse simple à une question simple.
Michael Terry

0

/var/cache/apt/archivesest lisible dans le monde entier. Ensuite apt-get -d, extrayez-le dans votre répertoire personnel. Exécutez dpkg -e /var/cache/apt/archives/foo_version.deb foodans votre répertoire personnel et les fichiers de contrôle seront importés foo/.


Je pense que le problème avec cette méthode est que le téléchargement nécessite toujours des privilèges d'administrateur. Il semble idiot d’aller dans des conditions extrêmes pour obtenir un fichier dans votre répertoire personnel.
ændrük

Ouvrir le fichier .debs n’est pas le problème, mais le télécharger. Cela peut être un bug ou non, mais les paquets dans / var / cache / apt / archives` sont également affectés par umask. J'ai défini un umask sur 027 et, par conséquent, les packages en /var/cache/apt/archivesne peuvent pas être lus par moi. Comme je n’ai qu’à examiner le contenu du paquet, j’ai juste besoin de le télécharger une fois: à /tmp.
Lekensteyn

0

Vous pouvez utiliser la commande debgetincluse dans le package debian-goodies.

Installez-le avec:

sudo apt install debian-goodies

Télécharger des packages en utilisant:

debget <package_name>

Par exemple:

debget debian-goodies

Qui va télécharger debian-goodies_0.79_all.debdans votre répertoire actuel (faire pwdpour imprimer votre répertoire de travail actuel).


debian-goodiescomprend de nombreuses commandes utiles, voir aussi: askubuntu.com/a/1170001/777279
Shayan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.