Listar dependências opcionais com pacman no arch linux

21

Estou usando o arch linux.

Existe uma maneira de listar dependências opcionais de todos os pacotes instalados? E, se sim, posso filtrar esta lista para ver apenas os pacotes ausentes (não instalados)?

    
por vonPetrushev 28.10.2012 / 02:40

6 respostas

4

Existe um bom utilitário no Repositório AUR (aur / pacdep).

O pacdep tem muitas opções - apenas um exemplo - descobrir pacotes opcionais para o "thunar-archive-plugin":

> pacdep -oppp thunar-archive-plugin
[...]
Optional dependencies:    6.16 MiB
  extra/file-roller     3.89 MiB
  extra/kdeutils-ark    1.12 MiB
  community/xarchiver   1.16 MiB
[...]

A saída acima significa que nenhum dos pacotes opcionais está instalado. Depois de instalar o "xarchiver", a saída se parece com

[...]
Optional dependencies:    6.16 MiB
 local:    1.16 MiB
  xarchiver            1.16 MiB
 sync:     5.01 MiB
  extra/file-roller    3.89 MiB
  extra/kdeutils-ark   1.12 MiB
[...]

Eu encontrei (a primeira parte de) essa resposta no link

    
por 08.12.2014 / 18:01
4

Você pode usar expac para consultar o banco de dados pacman .

Algo como:

awk 'NF>=2' <(expac "%n %O") > optdeps

imprimirá uma lista de todos os pacotes instalados em sua máquina e o optdepends para cada um ( %O ) 1 em um arquivo chamado optdeps . Você poderia, então, ordenar isso em uma lista de pacotes de optdepends instalados.

Veja man expac para a lista completa de opções.


1. Isso é um maiúsculo, não um zero. Porque nós não pode ter uma fonte que distinga entre os dois ...

    
por 28.10.2012 / 07:43
3

Isso não é exatamente eficiente, mas vai encontrar o que você quer (em COLOR!):

pacman -Q > /tmp/paccache
for pkg in $(awk '{print $1}' /tmp/paccache) ; do 
   echo -n "$pkg => "; 
   for dep in $(pacman -Qi $pkg | awk -F: '/Optional Deps/{gsub(/[\<\>=].*/,"");print $NF;}' ) ; do 
       grep -q "$dep" /tmp/paccache && COLOR=32 ; echo -en "\e[1;${COLOR:-31}m${dep}\e[0;m " ; unset COLOR ; 
   done 
   echo
done 
    
por 28.10.2012 / 09:28
2

Embora eu tenha notado que a solução do @ DarkHeart realmente não funciona, me inspirou a fazer um trabalho. (sem cores, no entanto)

Estou usando o package-query , uma ferramenta semelhante em vez de expac que foi sugerida por @jasonwryan , porque eu já tinha instalado (é uma dependência de yaourt). Deve ser trivial mudar isso para usar o expac.

A listagem de todas as dependências opcionais é feita principalmente pela chamada à consulta de pacotes. O primeiro for-loop remove as explicações, portanto, apenas os nomes dos pacotes para as dependências opcionais permanecem; o segundo loop for remove as dependências já instaladas em sua primeira linha antes de imprimir os resultados no segundo.

#!/usr/bin/perl
use strict;
use warnings;

my %deps;
for ('package-query -Q -f'%n %O'') {
    $deps{ (/^(\S+)/)[0] } = [/(\S+):/g];
}
my @pkgs = keys %deps;
for my $pkg (@pkgs) {
    my @missing_deps = grep { !($_ ~~ @pkgs) } @{ $deps{$pkg} };
    print "$pkg => @missing_deps\n" if @missing_deps;
}
    
por 21.11.2012 / 00:56
2

Isso deve funcionar:

comm -23 <(expac -l"\n" "%o" | sort -u) <(expac -l"\n" "%n\n%S" | sort -u)

A primeira entrada para comm lista todas as dependências opcionais, a segunda entrada todos os pacotes instalados e seus atributos 'fornecer'. Ambas as listas são classificadas e contêm cada elemento apenas uma vez devido a sort -u . Em seguida, apenas as linhas são mostradas contidas na primeira, mas não na segunda.

(editado para incorporar a sugestão de @ Archemar)

    
por 29.07.2015 / 10:02
0

Às vezes, você precisa trabalhar de trás para frente ... primeiro, encontra todas as dependências não opcionais, depois faz referência cruzada com a lista completa e, em seguida, usa o uniq. Isso gerará uma lista de dependências opcionais instaladas.

Encontrar tudo instalado

pacman -Q

Encontre todos os não opcionais:

pacman -Qent

As entradas únicas devem, portanto, ser opcionais:

(pacman -Q; pacman -Qent) | sort | uniq -u 

Gerar lista de opções opcionais em falta depende das descrições, não é bonita, mas funciona.

pacman -Q > /tmp/paccache; for pkg in $(awk '{print $1}' /tmp/paccache); do pacman -Qi $pkg | grep "^Optional Deps" | grep -v None >/dev/null && echo $pkg >> /tmp/hasdeps; done

for pkg in $(awk '{print $1}' /tmp/hasdeps); do echo -ne "Package: $pkg ___ "; (pacman -Qi $pkg | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1) | grep -v installed; echo ___; done | grep -v "___ ___" | sed -e 's/Optional Deps/ /' -e 's/___//' | sed -e 's/ \+/ /g'
    
por 11.10.2018 / 04:18