¿Cómo dejar que `dpkg -i` instale dependencias para mí?

325

Digamos, tengo foo-1.2.3.debque depende perly python, sin embargo, ejecutar el comando:

dpkg -i ./foo-1.2.3.deb

no instalará estas dependencias. Entonces debo hacerlo apt-get install perl pythona mano.

¿Cómo hacer que dpkg -iinstalar estas dependencias para mí automáticamente?

Xiè Jìléi
fuente
55
@ pd12: ¡Hurra por las referencias circulares! :-D
David Foerster
heh, decidí vincular ambos y ver cuál seleccionaría los mods.
pd12

Respuestas:

417

Después de usar dpkg, ejecutar el siguiente comando me ayudó a instalar las dependencias requeridas:

sudo apt-get -f install

En general, su terminal debería verse así:

$ sudo dpkg -i package_with_unsatisfied_dependencies.deb
dpkg: dependency problems prevent ... 
[additional messages]

$ sudo apt-get -f install
[apt messages]
Setting up [dependency]...
Setting up package_with_unsatisfied_dependencies...

Observe la línea sobre Setting up package_with_unsatisfied_dependencies. Esto corrige (y completa) la instalación de package_with_unsatisfied_dependencies.deb.

Arindom
fuente
8
¿Debo correr de sudo dpkg -i mypackage.debnuevo?
Muhammad Gelbana
23
Después de ejecutar sudo apt-get -f installmi paquete y sus dependencias, todas fueron instaladas. La ejecución sudo dpkg -i my_package.debes innecesaria y solo instalará el paquete nuevamente.
Gus E
55
Siguiendo las obras en Ubuntu 14.04: sudo dpkg -i package.deb; sudo apt-get -f install; sudo dpkg -i package.deb. La primera dpkg -iejecución marca las dependencias, apt-get -f installinstala las dependencias requeridas y la segunda dpkg -iinstala con éxito el paquete. Tenga en cuenta que apt-get install -fes un comando totalmente diferente.
Mikko Rantalainen
1
@ysth no, no lo hagas dpkg -i --force; eso obligará a instalar un paquete roto! Ejecutar dpkg/ sin / --forcehará la entrada necesaria en la base de datos del paquete para que apt-get -f installhaga lo correcto.
Brian A. Henning
@Lotharyx: No puedo probarlo ahora mismo, pero yo no creo que el dpkg sin fuerza (que falla debido a dependencias faltantes) haría una entrada en la base de datos de paquete
ysth
111

Puede instalar gdebi-core, que es la versión de línea de comandos del instalador del paquete GDebi de 10.04 y anteriores. En las versiones más nuevas de Ubuntu, el Centro de software se utiliza para instalar debs, que no tiene una línea de comandos equivalente.

Para instalar un paquete deb usando gdebi, simplemente ejecute:

sudo gdebi my_package_1.0.deb
Andrew Gunnerson
fuente
64

comenzando con apt 1.1 (disponible en Xenial (16.04), stretch) apt installtambién permite archivos locales:

sudo apt install ./foo-1.2.3.deb

Mucho más simple y limpio.

Ver el anuncio de lanzamiento

shell de texto
fuente
44
Es cuestión de tiempo que esté disponible
Mike
Esta solución no funcionó. Todo lo que sucedió fue una lista de errores.
Billy S
@BillyS lamento escuchar que no funcionó para usted, pero sin la versión de distribución que está utilizando y los errores que obtuvo, esto no es procesable en absoluto.
texthell
El comando no funcionó para mí, pero apt ./install foo-1.2.3.debfuncionó.
Cenk Alti
1
Se corrigió el comando, los comentarios anteriores se referían a la versión anterior de la respuesta que omitió lo necesario ./o la ruta
Zanna
38

Gdebi

gdebiinstala un paquete deb y sus dependencias. Para usarlo ejecuta:

sudo gdebi package.deb

En las versiones más recientes de Ubuntu, esto no está instalado de manera predeterminada, por lo que deberá instalarlo desde los repositorios.

Consulte man gdebipara obtener una lista completa de opciones.

gdebies la línea de comando equivalente a la herramienta gráfica del mismo nombre que solía incluirse por defecto en Ubuntu. El comando para la herramienta gráfica es gdebi-gtky tiene una funcionalidad similar:

gdebi-gtk

dv3500ea
fuente
gdebi-gtk no mostrará los deps requeridos (la versión que tengo aquí al menos, y parece un error), ¡pero la línea de comando lo hará! Si tenemos otra máquina con los paquetes que podemos usar dpkg-repacken base a dicha lista de detalles :)
Aquarius Power
21

corriendo

sudo apt-get install -f

después de instalar el paquete con dpkg puede resolver dependencias rotas (al menos man apt-get lo dice ...). Actualizaré cuando lo comprobaré.

Denwerko
fuente
¿Debo correr de sudo dpkg -i mypackage.debnuevo?
Muhammad Gelbana
3
apt-get -f installfunciona, pero apt-get install -fno es lo mismo.
200_success
9

dpkg no tiene soporte de dependencia. Hay una forma de evitarlo, pero eso requeriría que creara una base de datos local (y, por lo tanto, ya sabría las dependencias) y se considera obsoleto (...).

¿Tiene que ser la línea de comando? (¿instalación del servidor?) Si es así, también eche un vistazo, apt-get -fpero tenga cuidado: resolver dependencias después de la instalación podría hacer que termine con un sistema roto.

gdebi (interfaz gráfica de usuario ) solía poder hacer esto, pero fue reemplazado por USC.

¿Cómo descargaste el .deb? Algunas de las nuevas características de 11.04 son el manejo de .deb descargado de un sitio web: se abre en USC, por lo que el instalador resolverá las dependencias.

EDITAR basado en el comentario de Andrew: ¡ sudo gdebi foo-1.2.3.deb Haría el truco!

Rinzwind
fuente
gdebi todavía se puede usar para esto. Software Center ahora es solo la aplicación predeterminada. Además, como señala Chen Xiao-Long, gdebi también se puede usar en la línea de comando.
andrewsomething
¡bueno! entonces la pregunta tiene una respuesta porque gdebi también se puede usar en la línea de comandos.
Rinzwind
Esta debería ser la respuesta aceptada.
prosti
3

Como alternativa gdebi-gtk, puede usar Ubuntu Software Center.

Haga doble clic en el paquete y un botón de instalación debería estar disponible.

Henrique
fuente
3

Puede crear un archivo dpkg-dep-instcon el siguiente contenido.

#!/bin/bash

DEBIAN_FILE1=$1
dpkg -i $DEBIAN_FILE1 || apt-get --fix-broken install

Supongo que creó el archivo en su carpeta de inicio. Hazlo ejecutable con chmod +x dpkg-dep-insty muévelo a /usr/local/bincon sudo cp dpkg-dep-inst /usr/local/bin.

Ahora puede instalar el paquete debian con dependencias automáticamente con:

sudo dpkg-dep-inst foo-1.2.3.deb
BuZZ-dEE
fuente
1
Usar apt-get --yes --fix-broken instally hacer la fijación automática.
Lucas
@ysth No, en general no.
BuZZ-dEE
1

Acabo de encontrarme con este problema. apt-get install -fSin embargo, llamar no instalará las dependencias recomendadas . La única solución para esto sería crear un repositorio local y agregarlo /etc/apt/sources.list, es decir:

apt-ftparchive packages . > Packages && gzip < Packages > Packages.gz
sudo echo "deb file://$PWD /" >> /etc/apt/sources.list
sudo apt-get update
Alex Kläser
fuente
0

En realidad, la respuesta es que el dpkgadministrador de paquetes no puede instalar dependencias fuera de la caja. Te levantaste man dpkgy descubriste eso. Así que hay que utilizar herramientas como apt, apt-get, aptitude, ..., basado en dpkg.

Yo diría que el mismo caso es para el rpmadministrador de paquetes en el otro hemisferio de Linux. rmpno está destinado a realizar instalaciones basadas en dependencias. Se puede instalar paquetes individuales, y para la instalación de las dependencias que utiliza yum, urpmi, up2dateéstos están todas basadas en RPM.

Como se señaló, existe un pequeño peligro al instalar paquetes dpkgdirectamente, porque la resolución posterior de la resolución de dependencias puede terminar con un sistema roto como se describe en @Rinzwind.

prosti
fuente