O que exatamente acontece quando instalamos um deb
pacote que acaba como uma instalação quebrada e como apt-get -f
remediar a situação (em vez de isso acontecer durante a instalação para começar)?
Exemplo:
1) instalamos o pacote ferdi baixado de https://github.com/getferdi/ferdi/releases/tag/v5.3.3 :
$ dpkg -i ferdi.deb
Selecting previously unselected package ferdi.
(Reading database ... 180829 files and directories currently installed.)
Preparing to unpack .../ferdi_5.3.3_amd64.deb ...
Unpacking ferdi (5.3.3-157) ...
dpkg: dependency problems prevent configuration of ferdi:
ferdi depends on gconf2; however:
Package gconf2 is not installed.
ferdi depends on gconf-service; however:
Package gconf-service is not installed.
ferdi depends on libappindicator1; however:
Package libappindicator1 is not installed.
dpkg: error processing package ferdi (--install):
dependency problems - leaving unconfigured
Processing triggers for mime-support (3.64) ...
Processing triggers for hicolor-icon-theme (0.17-2) ...
Errors were encountered while processing:
ferdi
Como podemos ver, o pacote não está instalado corretamente devido à falta de dependências.
2) No entanto, consertar o pacote quebrado é bem-sucedido com facilidade:
$ apt-get --fix-broken --yes install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following additional packages will be installed:
gconf-service gconf2 libappindicator1 libdbusmenu-gtk4 libindicator7
Suggested packages:
gconf-defaults-service
The following NEW packages will be installed:
gconf-service gconf2 libappindicator1 libdbusmenu-gtk4 libindicator7
0 upgraded, 5 newly installed, 0 to remove and 53 not upgraded.
1 not fully installed or removed.
Need to get 993 kB of archives.
After this operation, 1,539 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian unstable/main amd64 gconf-service amd64 3.2.6-6 [415 kB]
Get:2 http://deb.debian.org/debian unstable/main amd64 gconf2 amd64 3.2.6-6 [426 kB]
Get:3 http://deb.debian.org/debian stable/main amd64 libdbusmenu-gtk4 amd64 18.10.20180917~bzr490+repack1-1 [45.7 kB]
Get:4 http://deb.debian.org/debian stable/main amd64 libindicator7 amd64 0.5.0-4 [53.0 kB]
Get:5 http://deb.debian.org/debian stable/main amd64 libappindicator1 amd64 0.4.92-7 [53.3 kB]
Fetched 993 kB in 1s (1,071 kB/s)
Selecting previously unselected package gconf-service.
(Reading database ... 181193 files and directories currently installed.)
Preparing to unpack .../gconf-service_3.2.6-6_amd64.deb ...
Unpacking gconf-service (3.2.6-6) ...
Selecting previously unselected package gconf2.
Preparing to unpack .../gconf2_3.2.6-6_amd64.deb ...
Unpacking gconf2 (3.2.6-6) ...
Selecting previously unselected package libdbusmenu-gtk4:amd64.
Preparing to unpack .../libdbusmenu-gtk4_18.10.20180917~bzr490+repack1-1_amd64.deb ...
Unpacking libdbusmenu-gtk4:amd64 (18.10.20180917~bzr490+repack1-1) ...
Selecting previously unselected package libindicator7:amd64.
Preparing to unpack .../libindicator7_0.5.0-4_amd64.deb ...
Unpacking libindicator7:amd64 (0.5.0-4) ...
Selecting previously unselected package libappindicator1:amd64.
Preparing to unpack .../libappindicator1_0.4.92-7_amd64.deb ...
Unpacking libappindicator1:amd64 (0.4.92-7) ...
Setting up libindicator7:amd64 (0.5.0-4) ...
Setting up gconf-service (3.2.6-6) ...
Setting up libdbusmenu-gtk4:amd64 (18.10.20180917~bzr490+repack1-1) ...
Setting up libappindicator1:amd64 (0.4.92-7) ...
Setting up gconf2 (3.2.6-6) ...
Setting up ferdi (5.3.3-157) ...
Processing triggers for man-db (2.9.0-1) ...
Processing triggers for libc-bin (2.29-2) ...
- por que as dependências ausentes não são instaladas durante
dpkg -i
? - por que é
apt-get -f
capaz de resolvê-lo facilmente? - isso é uma coisa boa a se fazer ou pode levar a um sistema quebrado?
Editar: veja a resposta @ thorian93 abaixo. Veja também https://askubuntu.com/a/795048/1002165
Tanto quanto eu sei
dpkg
, não há resolução de dependência. É por isso que você acaba com o pacote quebrado. O pacote é instalado de qualquer maneira, mas não funciona nesse estado.Entry
apt
:apt
lê odpkg
banco de dados, localiza o pacote quebrado e as dependências ausentes. Assim comoapt
a resolução de dependências, ele verifica seus espelhos configurados para as dependências e os instala.Para responder à sua terceira pergunta: Não há problema em fazer dessa maneira, embora eu sugira instalar o pacote
apt
em primeiro lugar, ou pelo menos usargdebi
, que também é capaz de resolver dependências.