¿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.

Lekensteyn
fuente
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.

Kees Cook
fuente
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.

mount.cifs
fuente
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
Aaron Santavicca
fuente
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. ;)

Jayme Tosi Neto
fuente
2

sudo apt-get install devscripts

dget [package-name]

Michael Terry
fuente
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/.

psusi
fuente
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).

Shayan
fuente
debian-goodiesviene con muchos comandos útiles, vea también: askubuntu.com/a/1170001/777279
Shayan