Encontre o equivalente mínimo de pacotes atualmente instalados

6

Eu usei uma ferramenta que calcula o conjunto mínimo de pacotes que você pode instalar para obter o conjunto atual de pacotes que você tem. Isso é diferente de dizer quais são suas seleções. Ele literalmente encontra a lista mais curta de pacotes que, por meio de dependências, fornece o que você tem atualmente.

Esqueci onde encontrar essa ferramenta. Como é chamado?

    
por A Student at a University 17.02.2011 / 21:33

3 respostas

2

aptitude pode te ajudar na maior parte do caminho com o recurso de pesquisa. Veja como você encontra tudo instalado que não era apenas uma dependência automática:

aptitude search -F "%p" "?installed ?not(?automatic)"

Isso não será ideal, alguns deles podem ser removidos, mas não conheço uma maneira simples de resolver isso. Talvez a resposta esteja em man aptitude .

Pensando bem, com essa lista você pode percorrê-lo e encontrar os pacotes dependentes (não dependências) para cada um. Se um deles estiver na lista principal, remova o pacote atual da lista ... mas somente depois de ter analisado toda a lista ou você perderá intermediários em uma árvore dep de nível 3+.

Você encontra dependentes com uma consulta como esta:

aptitude search '~i~Dpackage'

Eu tentaria escrever o roteiro, mas estou digitando isso em um minúsculo teclado de telefone. Até eu tenho limites.

Edit: Depois de cinco minutos tentando dormir, comecei a atacar isso. algo assim deveria fazer o trabalho:

orig=$(aptitude search -F "%p" "?installed ?not(?automatic)")
newlist="";
for p in $orig; do
    depended=0;
    for dependant in 'aptitude search -F "%p" "~i~D$p"'; do
        if [[ $orig == "* $dependant *" ]]; then
            depended=1;
        fi;
    done;
    if [[ $depended == 0 ]]; then
        newlist="$newlist $p";
    fi;
done;
echo $newlist

Note que isso leva muito tempo para ser executado e pode ser exagerado (por exemplo, ele removerá algo que você instalou manualmente, que deseja instalar manualmente, se eles dependerem por outra coisa na lista $ orig que você talvez tenha instalado depois.

    
por Oli 18.02.2011 / 00:30
1

Eu escrevi um pequeno script python para fazer isso, publicado como aqui .

Você dá a ele um conjunto de nomes de pacotes na linha de comando, e deve fornecer um conjunto mínimo e menor de pacotes que implica todos os outros que você forneceu como argumentos. Aqui, x11-proto-fixes-dev está implícito (uma dependência de) por libgtk2.0-dev :

fuwaad:~$ python mindeps.py x11proto-fixes-dev libgtk2.0-dev
libgtk2.0-dev
    
por huitseeker 24.08.2011 / 17:01
1

Eu tentei respostas a partir disso e de outras duas perguntas semelhantes em um sistema que eu venho executando há anos e a lista mais curta que eu pude obter foi 1338 pacotes, a maioria dos quais eram obviamente dependências ou pacotes de ações.

No entanto, no Unix / Linux Stack Exchange eu encontrei esta resposta , que puxa a lista de pacotes de estoque para sua instalação do espelho do Ubuntu e filtra. Isso fez com que minha lista baixasse para 404, que parece sensata para mim.

    
por Dirk Bergstrom 19.04.2012 / 18:43