Elenca dipendenze opzionali con pacman su arch linux


23

Sto usando Arch Linux.

C'è un modo per elencare le dipendenze opzionali di tutti i pacchetti installati? E se sì, posso filtrare questo elenco per vedere solo i pacchetti mancanti (non installati)?


1
Non ho usato Arch, ma "dipendenza" non sembra facoltativo (non è in altre distro).
jordanm,

AFAIK, non penso che tu possa farlo subito con Pacman. Ma è molto possibile scrivere una piccola sceneggiatura per farlo. Interroga pacman per l'elenco dei pacchetti installati. Chiedi a Yaourt di recuperare i loro PKGBUILD e di leggere l'elenco di optdeps. L'ultima versione di pacman-git ha un commit che indica se gli optdep sono già stati installati.
Darnir,

@jordanm: così come le dipendenze di build e le dipendenze opzionali. Optdeps è richiesto solo per alcune funzionalità di un pacchetto. Pertanto, a meno che non si stia utilizzando tale funzione, non è necessario gonfiare il sistema con un carico di dipendenze.
Darnir,

Ho usatopacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
stewSquared il

Risposte:


5

È possibile utilizzare expac per eseguire una query sul pacmandatabase.

Qualcosa di simile a:

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

stamperà un elenco di tutti i pacchetti installati sul tuo computer e l' optdependsuno per ciascuno ( %O) 1 in un file chiamato optdeps. È quindi possibile ordinare questo in base a un elenco di pacchetti optdepends installati.

Vedi man expacl'elenco completo delle opzioni.


1. Questa è una O maiuscola, non uno zero. Perché non possiamo avere un carattere che distingue tra i due ...


[poke] Abbiamo un tale carattere ora. :)
muru

4

C'è una bella utility nel repository AUR (aur / pacdep).

pacdep ha molte opzioni - solo un esempio - scopri i pacchetti opzionali per "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
[...]

L'output sopra indica che nessuno dei pacchetti opzionali è installato. Dopo aver installato "xarchiver" l'output appare come

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

Ho trovato (la prima parte di) questa risposta su
http://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-dependencies


3

Questo non è esattamente efficiente, ma troverà quello che vuoi (in COLORE!):

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 

Io non sono perfettamente sicuro, ma non dovrebbe essere che ||, invece di &&dopo la grep, e poi parentesi attorno al resto della linea?
Rörd,

E, soprattutto, questo dovrebbe probabilmente usare la sezione "Deps opzionali" invece della sezione "Dipende da" dell'output pacman.
Rörd,

Ad esempio con xmms2 :pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
i336_

2

Anche se ho dovuto notare che la soluzione di @ DarkHeart non funziona davvero, mi ha ispirato a farne una funzionante. (nessun colore, però)

Sto usando package-query , uno strumento simile al posto di expac, suggerito da @jasonwryan, perché l'ho già installato (è una dipendenza di yaourt). Dovrebbe essere banale cambiarlo per usare invece expac.

L'elenco di tutte le dipendenze opzionali viene eseguito principalmente dalla chiamata a package-query. Il primo for-loop rimuove le spiegazioni, quindi rimangono solo i nomi dei pacchetti per le dipendenze opzionali; il secondo for-loop rimuove le dipendenze già installate nella sua prima riga prima di stampare i risultati nella seconda.

#!/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

Questo dovrebbe fare il trucco:

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

Primo input per commelencare tutte le dipendenze opzionali, secondo input per tutti i pacchetti installati e i loro attributi 'fornire'. Entrambi gli elenchi sono ordinati e contengono ogni elemento solo una volta a causa di sort -u. Quindi vengono visualizzate solo le righe contenute nel primo ma non nel secondo elenco.

(modificato per incorporare il suggerimento di @ Archemar)


0

A volte devi lavorare all'indietro ... prima trova tutto dipende non facoltativo, quindi fai un riferimento incrociato con l'elenco completo, quindi usa uniq. Questo genererà un elenco di dipendenze installate opzionali.

Trova tutto installato

pacman -Q

Trova tutto non opzionale:

pacman -Qent

Le voci univoche devono pertanto essere facoltative:

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

Generare un elenco di optional mancanti dipende dalle descrizioni, non belle, ma funziona.

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

Ho provato solo in GNU sed ma

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

ha funzionato (usa sort / uniq come preferisci).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.