web-dev-qa-db-fra.com

Liste des dépendances facultatives avec Pacman sur Arch Linux

J'utilise Arch Linux.

Existe-t-il un moyen de répertorier les dépendances facultatives de tous les packages installés? Et si oui, puis-je filtrer cette liste pour voir uniquement les packages manquants (non installés)?

23
vonPetrushev

Vous pouvez utiliser expac pour interroger le pacmandatabase.

Quelque chose comme:

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

imprimera une liste de tous les packages installés sur votre machine et le optdepends pour chacun (%O)1 à un fichier appelé optdeps. Vous pouvez ensuite trier cela contre une liste des packages OptDepends installés.

Voir man expac Pour la liste complète des options.


1. C'est une majuscule O, pas un zéro. Parce que nous ne peut avoir une police qui se distingue entre les deux ...

5
jasonwryan

Il y a un bel utilité dans le référentiel Aur (Aur/Pacdep).

pACDEP a beaucoup d'options - un exemple - trouver des packages facultatifs pour "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
[...]

La sortie ci-dessus signifie qu'aucun des packages en option n'est installé. Après avoir installé "xarchiver", la sortie ressemble à

[...]
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
[...]

J'ai trouvé (la première partie de) cette réponse sur
[.____] http://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-depends

4
Martin Schneeweis

Ce n'est pas exactement efficace, mais trouvera ce que vous voulez (en couleur!):

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 
3
DarkHeart

Cela devrait faire l'affaire:

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

Première entrée à comm répertorie toutes les dépendances facultatives, deuxième entrée Tous les packages installés et leurs attributs "Fournir". Les deux listes sont triées et contiennent chaque élément une seule fois en raison de sort -u. Ensuite, seules les lignes sont montrées qui sont contenues dans la première mais pas dans la deuxième liste.

(édité pour incorporer la suggestion de @ Archemar)

2
Sunday

Bien que j'ai dû remarquer que la solution de @ Darkheart ne fonctionne pas vraiment, cela m'a inspiré de faire un travail en activité. (pas de couleurs, cependant)

J'utilise Requête-package , un outil similaire au lieu d'expac qui a été suggéré par @jasonwryan, car je l'avais déjà installé (c'est une dépendance de Yaourt). Il devrait être trivial pour changer cela pour utiliser Expac à la place.

La liste de toutes les dépendances facultatives est principalement effectuée par l'appel à la requête de package. La première boucle supprime les explications, de sorte que les noms de colis des dépendances facultatifs restent; La deuxième boucle supprime les dépendances déjà installées dans sa première ligne avant d'imprimer les résultats dans le second.

#!/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;
}
2
Rörd

Parfois, vous devez travailler à l'envers ... Tout d'abord trouver tout non-optionnel dépend, puis une référence croisée avec la liste complète, puis utilisez UNIQ. Cela générera une liste de facultatif installée dépend.

Trouver tous installés

pacman -Q

Trouvez tous les non-facultatifs:

pacman -Qent

Les entrées uniques doivent donc être facultatives:

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

Générer une liste de facultative manquante dépend des descriptions, pas jolie, mais cela fonctionne.

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'
0
kevinf

J'ai essayé seulement dans GNU SED mais

yay -Qi | sed -n '/Optional Deps/{:l s/.* \([a-zA-Z0-9.\-]\+\):.*/\1/p; n; /Required By/!bl}'

cela a fonctionné (utilisez le tri/uniq comme vous le souhaitez).

0
Yuki Ito