¿Cómo instalar un archivo deb, dpkg -i o apt?

600

Tengo un paquete deb para la instalación.

¿Debo instalar por dpkg -i my.debo por apt?

¿Ambos manejarán bien el problema de dependencia del software?

Si es por apt, ¿cómo puedo instalar desde deb por apt?

Tim
fuente
Podría usar el aptitudeque también elimina paquetes innecesarios.
Ramesh
2
Recomiendo no usar directamente dpkg. En el caso de deb único, vaya con gdebi y en caso de múltiples debs, vaya al repositorio local APT .
Pandya
55
por qué ......... @Pandya
Tim
2
@Tim porque dpkgno resuelve dependencias.
Pandya
1
@Tim gdebi identifica las dependencias que faltan, puede descargar e instalar (usando apt), puede instalar y configurar (usando dpkg).
Pandya

Respuestas:

771

Cuando usas aptpara instalar un paquete, debajo del capó que usa dpkg. Cuando instala un paquete usando apt, primero crea una lista de todas las dependencias y lo descarga del repositorio.

Una vez que finaliza la descarga, llama dpkgpara instalar todos esos archivos, satisfaciendo todas las dependencias.

Entonces, si tienes un .debarchivo:

  • Puedes instalarlo usando:

    sudo dpkg -i /path/to/deb/file
    sudo apt-get install -f
    
  • Puede instalarlo usando sudo apt install ./name.deb(o sudo apt install /path/to/package/name.deb).

    Con apt-getversiones anteriores, primero debe mover su archivo deb al /var/cache/apt/archives/directorio. Para ambos, después de ejecutar este comando, descargará automáticamente sus dependencias.

  • Instale gdebiy abra su archivo .deb usándolo ( haga clic con el botón derecho -> Abrir con ). Instalará su paquete .deb con todas sus dependencias.

    ( Nota : APT mantiene el índice de paquete que es una base de datos de paquetes disponibles disponibles en repositorio definido en el /etc/apt/sources.listarchivo y en el /etc/apt/sources.list.ddirectorio. Todos estos métodos no satisfarán la dependencia del software si las dependencias requeridas por el deb no están presentes en el índice del paquete .)


¿Por qué usar sudo apt-get install -fdespuéssudo dpkg -i /path/to/deb/file (mencionado en el primer método)?

De man apt-get:

 -f, --fix-broken
           Fix; attempt to correct a system with broken dependencies in place.

Cuando dpkginstala un paquete y no se satisface una dependencia del paquete, deja el paquete en un estado "no configurado" y ese paquete se considera roto.

sudo apt-get install -f El comando intenta reparar este paquete roto instalando la dependencia que falta.

g_p
fuente
2
@Tim, apt-get está diseñado para instalar paquetes desde el repositorio. Mantiene la lista de paquetes, así como su respectiva dirección de repositorio. Entonces, solo mover un archivo .dev, que no está presente en la lista de paquetes apt, en el directorio / var / cache / apt / archives no funcionará. Porque cada vez que intenta instalar este paquete usando apt-get, busca su repositorio, que no está presente. Para esto tienes que crear un repositorio local que creo que es inútil.
g_p
1
@g_p gracias! Estoy un poco confundido en su respuesta anterior. usted escribe: "(funcionará si el paquete .deb está presente en la lista de paquetes apt)" - No entiendo lo que significa aquí. ¿Cómo se puede asegurar que el paquete .deb esté presente en la lista de paquetes apt?
BKSpurgeon
1
@BKSpurgeon, he agregado información de bits en mi respuesta. Para averiguar si un paquete está presente en el índice o no se ejecuta apt-cache search <package name>. También puede usar apt-cache policy <package name>, lo que también le dará información adicional.
g_p
1
¿Estos métodos seguirán realizando la verificación de firma que suele realizar apt? ¿O es posible instalar un archivo .deb manipulado de esta manera?
Boann
8
Se puede usar apt-get moderno para instalar un paquete simplemente con apt-get install /path/to/package/name.deb. Sería genial si el autor de esta respuesta decidiera integrar eso. Si no, agregaré esa respuesta en algún momento cuando tenga suficiente representante aquí
Sam Hartman
91

Instala tu foo.debarchivo con dpkg -i foo.deb. Si hay algunos errores con dependencias no resueltas, ejecute apt-get install -fdespués.

ihor_dvoretskyi
fuente
Lo Unable to locate packageintenté de esta manera y me quedé perplejo. Utilicé como en Windows solo el nombre del paquete después de cambiar a la carpeta de archivo. Debería ser ./<file name>para Unix si está en la carpeta actual o en la ruta completa. Eso es si debno está en la carpeta presente en PATH.
Alexei Martianov
60

Aquí está la mejor manera de instalar un .debarchivo en Ubuntu en la línea de comandos:

sudo gdebi skype.deb

Si aún no lo ha gdebiinstalado, instálelo usando sudo apt install gdebi-core.

¿Por qué gdebi?

gdebibuscará todas las dependencias del .debarchivo y las instalará antes de intentar instalar el .debarchivo. Esto me parece mucho mejor que sudo dpkg -i skype.deb && sudo apt install -f. Este último está demasiado ansioso por eliminar dependencias en ciertas situaciones. Por ejemplo, cuando intenté instalar Skype, intentó eliminar 96 (!) Paquetes, incluidos paquetes como compizy unity! gdebidio un mensaje de error mucho más claro:

 $ sudo gdebi skype.deb
 Cannot install 'libqtgui:i386'

(Aquí está la solución a ese problema en particular , por cierto).

Flimm
fuente
funcionó genial gracias! por cierto, ¿podría ser que el intento de eliminar se tratara de esos paquetes transitorios / temporales? o crees que realmente rompería el sistema?
Acuario Power
Amigo, me encontré con un problema con tu solución. Estaba intentando instalar Rstudio. Encontró automáticamente una versión anterior de R para mí. Mientras usaba la solución de @g_p, solo pude instalar Rstudio.
Dr_Hope
39

Puede instalar un paquete .deb local de la siguiente manera:

sudo apt install ./foo.deb

Asegúrese de especificar una ruta local relativa o absoluta ( ./si está en el directorio actual), de lo contrario, buscará foo.deben los repositorios remotos y fallará.

Wisbucky
fuente
2
Esto debe marcarse como la respuesta correcta.
Rael Gugelmin Cunha
@RaelGugelminCunha no es 100% correcto. sudo apt install libstdc ++ 6_8-20180414-1ubuntu2_amd64.deb apt: error al cargar bibliotecas compartidas: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: encabezado ELF no válido
mvladk
2
@mvladk Por favor, preste atención a la sintaxis: le falta el ./antes del debarchivo.
Rael Gugelmin Cunha
Absolutamente la mejor / más simple respuesta.
gerardw
15

Verifique las dependencias con dpkg -I my.deby apt-get installlas dependencias antes dpkg -i my.deb.

Puede ser que usted puede copiar el my.deben /var/cache/apt/archivese instalarlo directamente con apt-getpero nunca lo intentó. No funciona, apt-gety dpkgestá buscando paquetes listados en archivos.

Alex
fuente
Gracias. en tu primera sentencia, ¿quieres decir apt-get install my.debcon apt-get install? ¿Es para instalar desde el archivo deb? ¿Por qué necesitamos dpkg -i my.debdespués de eso?
Tim
Siempre instalé .debs locales con dpkg -i, entiendo que aptno tiene una opción para instalarlos, aparte del directorio en el /var/cache/...que se descargan (puedo estar equivocado)
Alex
Parece que apt-get install ./my.debhará algo, porque genera muchas cosas. ¿Qué hace?
Tim
Hace demasiado :-) no funciona, ver la respuesta de @Igor_Dvoretskyi es simplemente perfecta, me olvidé-f
Alex
5

La respuesta más simple sería usar dpkg ejecutando dpkg -i packagename.deb. Luego puede desinstalarlo ejecutando dpkg -r packagename.deb.
apt-getes un instalador de nivel superior basado en dpkg, y como tal podría hacerlo apt-get install packagename.deb.
Sería beneficioso agregarlo a su directorio de archivos apt-get ( /var/cache/apt/archives) para que pueda hacer referencia a él como un paquete con dependencias y no como un archivo .deb independiente.
Además, al agregarlo a su directorio de archivos apt-get, tiene la oportunidad de usar dependencias con apt-get install packagename. Esto le permitiría instalarlo con cualquier dependencia agregada manualmente en lugar del sistema independiente basado en archivo de dpkg.

Interesante...
fuente
5

Modern apt-get se puede usar para instalar un paquete simplemente con apt-get install /path/to/package/name.deb.

(debe hacerse como editar a la respuesta principal pero fue rechazado; consulte https://unix.stackexchange.com/posts/159114/edit )

Mateusz Konieczny
fuente
Esto no funcionó conapt 1.0.9.8.4 for amd64 compiled on Dec 11 2016 09:48:19
Bruno Bronosky
-3

Es muy simple si quiero instalar Chrome.

Instala tu archivo de Chrome como:

dpkg -i googlechrome.deb.

A veces existe la posibilidad de obtener algunos errores de dependencia como los siguientes:

dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libappindicator1; however:
Package libappindicator1 is not installed.

Entonces, para resolver los problemas anteriores, debe agregar dependencias; dar el siguiente comando:

apt-get install -f

Después de dar el comando anterior, se agregarán dependencias a su máquina y .debse instalará su archivo de paquete Debian ( ).

Pavan vadrevu
fuente