Por que o apt instala ou desinstala outros pacotes implicitamente?

1

Isso aconteceu comigo com muita frequência, onde no processo de instalação de um pacote, por exemplo, package X , outros pacotes são instalados ou desinstalados implicitamente.

Isso se torna muito chato, onde, ANTES de você perceber, 3 dos seus outros pacotes desapareceram, assim mesmo.

Para ser mais claro, hoje eu quis criar Grive2 arquivos de origem com cmake . Então, você queria instalar cmake primeiro.

Para minha surpresa, Executar apt install cmake -s sinalizou que iria instalar outros pacotes também como php7.0 , ettercap , rtorrent , uget etc.

root@XXXXX_XXXXCE:/home/bob/pythontr# apt install cmake -s
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  coinor-libcbc3 coinor-libcgl1 coinor-libclp1 coinor-libcoinmp1v5 coinor-libcoinutils3v5 
coinor-libosi1v5 erlang-asn1
  erlang-base erlang-crypto erlang-mnesia erlang-public-key erlang-runtime-tools erlang-ssl 
fonts-opensymbol libabw-0.1-1
  libboost-date-time1.61.0 libboost-date-time1.62.0 libboost-filesystem1.62.0 libboost-
iostreams1.62.0
  libboost-locale1.62.0 libcdr-0.1-1 libclang-common-3.7-dev libclc-amdgcn libclc-dev 
libclc-r600 libclucene-contribs1v5
  libcmis-0.5-5v5 libcolamd2 libe-book-0.1-1 libeot0 libepubgen-0.1-1 libetonyek-0.1-1 
libexttextcat-2.0-0
  libexttextcat-data libfreehand-0.1-1 libjs-jquery-form liblangtag-common liblangtag1 
libllvm3.7 libmspub-0.1-1
  libmwaw-0.3-3 libmythes-1.2-0 libodfgen-0.1-1 liborcus-0.13-0 libpagemaker-0.0-0 
libqxp-0.0-0 librevenge-0.0-0 libsctp1
  libstaroffice-0.0-0 libsuitesparseconfig4 libtorrent19 libvisio-0.1-1 libwpd-0.10-10 
libwpg-0.3-3 libwps-0.4-4 libxmlsec1
  libxmlsec1-nss libzmf-0.0-0 lp-solve mesa-opencl-icd ocl-icd-libopencl1 uno-libs3 ure
**Use 'apt autoremove' to remove them.**
The following additional packages will be installed:
  cmake-data dirb erlang-asn1 erlang-base erlang-crypto erlang-mnesia erlang-public-key 
erlang-runtime-tools erlang-ssl
  ettercap-common ettercap-graphical libafflib0v5 libapache2-mod-php7.0 libcppunit-1.14-0 
libcurl4 libncurses6 libncursesw6
  librhash0 libtinfo6 libtorrent20 libxmlrpc-core-c3 osslsigncode php7.0-bz2 php7.0-cli     
php7.0-common php7.0-curl
  php7.0-dev php7.0-gd php7.0-json php7.0-mbstring php7.0-mysql php7.0-opcache php7.0-
readline php7.0-xml php7.0-zip
  rtorrent ruby-ethon uget
Suggested packages:
  cmake-doc ninja-build erlang erlang-manpages erlang-doc erlang-tools erlang-inets
Recommended packages:
  erlang-syntax-tools
The following packages will be REMOVED:
  couchdb erlang-eunit erlang-inets erlang-os-mon erlang-snmp erlang-syntax-tools 
erlang-tools erlang-webtool erlang-xmerl
  libcurl3
The following NEW packages will be installed:
  cmake cmake-data libcppunit-1.14-0 libcurl4 libncurses6 librhash0 libtorrent20
The following packages will be upgraded:
  dirb erlang-asn1 erlang-base erlang-crypto erlang-mnesia erlang-public-key erlang-    
runtime-tools erlang-ssl
  ettercap-common ettercap-graphical libafflib0v5 libapache2-mod-php7.0 libncursesw6     
libtinfo6 libxmlrpc-core-c3
  osslsigncode php7.0-bz2 php7.0-cli php7.0-common php7.0-curl php7.0-dev php7.0-gd 
php7.0-json php7.0-mbstring
  php7.0-mysql php7.0-opcache php7.0-readline php7.0-xml php7.0-zip rtorrent ruby-ethon     
uget

Tenho certeza de que essas instalações adicionais não estão relacionadas a cmake .

PERGUNTA

Não existe uma maneira de dizer ao apt para instalar um pacote, ou seja, cmake e NÃO lidar com outros pacotes não relacionados?

[Editar]

Como solicitado por @Stephen Kitt,
Executando apt install -f retorna: -

root@XXXXX_XXXXCE:/home/bob/pythontr# apt install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer  
required:
  coinor-libcbc3 coinor-libcgl1 coinor-libclp1 coinor-libcoinmp1v5
  coinor-libcoinutils3v5 coinor-libosi1v5 fonts-opensymbol libabw-0.1-1
  libboost-date-time1.61.0 libboost-date-time1.62.0 libboost-   
filesystem1.62.0
  libboost-iostreams1.62.0 libboost-locale1.62.0 libcdr-0.1-1
  libclang-common-3.7-dev libclc-amdgcn libclc-dev libclc-r600
  libclucene-contribs1v5 libcmis-0.5-5v5 libcolamd2 libe-book-0.1-1     
libeot0
  libepubgen-0.1-1 libetonyek-0.1-1 libexttextcat-2.0-0 libexttextcat-data
  libfreehand-0.1-1 liblangtag-common liblangtag1 libllvm3.7 libmspub-   
0.1-1
  libmwaw-0.3-3 libmythes-1.2-0 libodfgen-0.1-1 liborcus-0.13-0
  libpagemaker-0.0-0 libqxp-0.0-0 librevenge-0.0-0 libstaroffice-0.0-0
  libsuitesparseconfig4 libvisio-0.1-1 libwpd-0.10-10 libwpg-0.3-3
  libwps-0.4-4 libxmlsec1 libxmlsec1-nss libzmf-0.0-0 lp-solve
  mesa-opencl-icd ocl-icd-libopencl1 uno-libs3 ure
Use 'apt autoremove' to remove them.

[Editar]

Tentando listar as dependências de cmake executando apt-cache depends cmake retornado: -

root@XXXXX_XXXXCE:/home/bob/pythontr# apt-cache depends cmake
cmake
  Depends: cmake-data
  Depends: procps
  Depends: libarchive13
  Depends: libc6
  Depends: libcurl4
  Depends: libexpat1
  Depends: libgcc1
  Depends: libjsoncpp1
  Depends: librhash0
  Depends: libstdc++6
  Depends: libuv1
  Depends: zlib1g
  Recommends: gcc
  Recommends: make
    make-guile
  Suggests: cmake-doc
  Suggests: ninja-build
    
por steven mwesigwa 03.10.2018 / 08:06

2 respostas

4

Alguns dos outros pacotes são extraídos como dependências devido a serem recomendados ou sugeridos por pacotes já selecionados para instalação. Pacotes recomendados não são necessários, mas são necessários para uma funcionalidade completa. Os detalhes exatos das relações entre os pacotes recomendados e sugeridos estão documentados em Política Debian

Você pode usar --no-install-recommends para evitar puxar os pacotes recomendados como dependências.

Se você nunca quiser instalar pacotes recomendados ou sugeridos automaticamente, crie um arquivo de configuração /etc/apt/apt.conf.d/90-no-recommends.conf :

APT::Install-Recommends 0;
APT::Install-Suggests 0;

Se um pacote foi instalado automaticamente como uma dependência automática, ele pode ser marcado para remoção automática posteriormente, se o pacote original que o extraiu como dependência for removido ou não precisar mais dele após uma atualização.

Note que esta não é uma resposta completa, como o @StephenKitt apontou em comentários que as dependências recomendadas e sugeridas não explicam todos os pacotes envolvidos. Há algum outro motivo pelo qual os pacotes que você mencionou estão incluídos.

    
por 03.10.2018 / 08:14
0

Geralmente, esses outros pacotes são pacotes dos quais sua seleção depende por um motivo ou outro. Isto é uma coisa boa. Está além do escopo da minha resposta justificar cada pacote, mas alguém reservou um tempo para criar um banco de dados de dependências e ele geralmente funciona bem. A maioria dos instaladores, como o apt, tem a opção de ignorar / não processar dependências, mas existe uma grande probabilidade de que o resultado não seja o esperado. A opção para apt é --nodeps.

    
por 03.10.2018 / 08:13