¿Existe un comando apt para descargar un archivo deb de los repositorios al directorio actual?


46

A menudo me interesan los desencadenantes de instalación (postinst, postrm) o ciertas partes de paquetes (como /usr/sharey /etc). Actualmente, estoy ejecutando el siguiente comando para recuperar el código fuente:

apt-get source [package-name]

La desventaja es que este archivo suele ser mucho más grande que el paquete binario y no refleja el árbol de instalación.

En este momento, estoy descargando los paquetes a través de http://packages.ubuntu.com/ :

  1. Buscar [package-name]
  2. Selecciona el paquete
  3. Haga clic en amd64 / i386 para descargar
  4. Descargar el archivo real

Esto lleva demasiado tiempo para mí y, como alguien a quien realmente le gusta el shell, me gustaría hacer algo como el siguiente comando ( imaginario ):

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

No pude encontrar algo como esto en la página del manual de apt-get . Lo más cercano que encontré fue el --download-onlyinterruptor, pero esto coloca el paquete /var/cache/apt/archives(que requiere permisos de root) y no en el directorio actual.


Diferencias en máquinas sin guardar archivos: ssh debianmachine1 "dpkg --get-selections" | diff - <(dpkg --get-selections)
Scott Robert Schreckengaust

Puedes usar debgetdesde el paquete debian-goodies.
Shayan

Respuestas:


59

Puede usar el downloadsubcomando de apt, apt-geto aptitude. Por ejemplo, si $ PKG es el paquete que desea, cualquiera de estos hará:

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

Esto no requiere privilegios de root. Lo mismo también se puede aproximar usando apt-gety wget:

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

Sin embargo, esto buscará todos los paquetes necesarios para instalar el paquete, por lo que puede intentar limitarlo en su lugar:

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

También puede poner una línea wget en una función, para poder usarla como un comando apt-download con el nombre del paquete como parámetro:

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

Tenga en cuenta las modificaciones: $ PKG se reemplaza con $ 1 y el parámetro -c permite continuar descargas interrumpidas.


1
Excelente, esto es lo que estoy buscando. Otra razón para mantener aptitude en mi sistema, el otro comando útil que no proporciona aptes aptitude changelog $PKG.
Lekensteyn

44
Actualización: de Natty (versión 0.8.11 apta para ser exactos), la aptitude downloadfunción está disponible en aptasí: apt-get download $PKG.
Lekensteyn

dulce, funciona a pesar de mi antiguo apt v0.8.10
rogerdpack

parece que eliminaron la opción --print-urls
erjoalgo

La opción --print-urls sigue ahí
kumarharsh

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

Nota:

Necesita crear una carpeta llamada parcial en la carpeta de destino.


No suena tan mal. Las opciones parecen ser descritas por man apt.conf. Me gustaría evitar la creación de la carpeta.
Lekensteyn

Solo tengo curiosidad, ¿por qué evitarías crear la carpeta?
mount.cifs

No necesito almacenar el paquete para siempre y evitar crear la carpeta también ahorra tiempo.
Lekensteyn

Solo quería señalar que esta solución también insistirá en la eliminación del paquete (por ejemplo, si cambia la versión /etc/apt/sources.lista una más nueva, con la intención de descargar paquetes posteriores), en tal caso, el wgetmétodo anterior puede ser más útil, si no lo hace no quiero eliminar nada ...
sdaau

5

En Ubuntu 14.04 ( aptversión del paquete 1.0.1ubuntu2, creo), apt-getincluye el downloadcomando para descargar el paquete dado como .deben el directorio actual.

Por ejemplo, supongamos que queremos descargar el administrador de archivos Ranger:

$ apt-get download ranger

Resultados en:

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

Esto es perfecto. Todas las demás soluciones que probé no funcionan si apt installno pueden cumplir con todos los requisitos de dependencia. ¡Solo quería el archivo .deb para retoques!
Raziel

3

Si desea descargar todos los paquetes deb de una lista, puede hacer esto:

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

Simplemente ponga un nombre de paquete por línea. Como en un archivo require.txt. Por ejemplo, con contenidos como este:

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

Espero que esto ayude. ;)


2

sudo apt-get install devscripts

dget [package-name]


Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación.
s3lph

¿Cómo no proporciona una respuesta? Esto descarga una deb del archivo al directorio actual. ¿No es exactamente esa la pregunta?
Michael Terry

Un poco más de detalle puede ser útil. Si bien esto técnicamente califica como una respuesta, es posible que aún desee proporcionar más de dos comandos.
s3lph

:: encogimiento de hombros :: A diferencia de las otras respuestas aquí, esta no tiene condiciones ni advertencias. Es una respuesta simple a una pregunta directa.
Michael Terry

0

/var/cache/apt/archivesEs legible en todo el mundo. Después apt-get -d, simplemente extráigalo desde allí a su directorio de inicio. Ejecute dpkg -e /var/cache/apt/archives/foo_version.deb foomientras está en su directorio de inicio y los archivos de control se volcarán foo/.


Creo que el problema con este método es que la descarga aún requiere privilegios administrativos. Parece una tontería llegar a tales extremos solo para obtener un archivo en su directorio de inicio.
ændrük

Abrir el .debs no es el problema, descargarlo sí. Puede ser un error o no, pero los paquetes en / var / cache / apt / archives` también se ven afectados por umask. He configurado una umask de 027 y, por lo tanto, los paquetes /var/cache/apt/archivesno pueden ser leídos por mí. Como solo necesito examinar el contenido del paquete, solo necesito descargarlo una vez: to /tmp.
Lekensteyn

0

Puede usar el comando debgetque se incluye en el paquete debian-goodies.

Instalarlo con:

sudo apt install debian-goodies

Descargar paquetes usando:

debget <package_name>

Por ejemplo:

debget debian-goodies

Que se descargará debian-goodies_0.79_all.deben su directorio actual (haga pwdpara imprimir su directorio de trabajo actual).


debian-goodiesviene con muchos comandos útiles, vea también: askubuntu.com/a/1170001/777279
Shayan
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.