Lista de dependencias opcionales con pacman en arch linux


23

Estoy usando Arch Linux.

¿Hay alguna manera de enumerar las dependencias opcionales de todos los paquetes instalados? Y en caso afirmativo, ¿puedo filtrar esta lista para ver solo los paquetes faltantes (no instalados)?


1
No he usado Arch, pero "dependencia" no suena opcional (no está en otras distribuciones).
jordanm

AFAIK, no creo que puedas hacer eso con Pacman de inmediato. Pero es muy posible escribir un pequeño script para hacerlo. Consulte pacman para obtener una lista de los paquetes instalados. Haga que Yaourt busque sus PKGBUILD y lea la lista de optdeps. La última versión de pacman-git tiene una confirmación que indica si los optdeps ya se han instalado.
darnir

@jordanm: Como tiene dependencias de compilación y dependencias opcionales. Optdeps se requiere solo para ciertas características de un paquete. Por lo tanto, a menos que esté utilizando esa función, realmente no necesita inflar su sistema con una carga de dependencias.
darnir

Solíapacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
stewSquared

Respuestas:


5

Puede usar expac para consultar la pacmanbase de datos.

Algo como:

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

imprimirá una lista de todos los paquetes instalados en su máquina y el optdependsde cada uno ( %O) 1 en un archivo llamado optdeps. Luego puede ordenar esto en una lista de paquetes instalados de optdepends.

Consulte man expacla lista completa de opciones.


1. Esa es una O mayúscula, no un cero. Porque no podemos tener una fuente que distinga entre los dos ...


[empuje] Tenemos esa fuente ahora. :)
muru

4

Hay una buena utilidad en el AUR-Repository (aur / pacdep).

pacdep tiene muchas opciones - solo un ejemplo - encuentre paquetes opcionales para "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
[...]

El resultado anterior significa que ninguno de los paquetes opcionales están instalados. Después de instalar "xarchiver" el resultado se ve como

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

Encontré (la primera parte de) esta respuesta en
http://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-dependencies


3

Esto no es exactamente eficiente, pero encontrará lo que desea (en 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 

No estoy completamente seguro, pero ¿no debería ser eso en ||lugar de &&después del grepparéntesis y luego entre paréntesis en el resto de la línea?
Rörd

Y lo que es más importante, esto probablemente debería usar la sección "Deps opcionales" en lugar de la sección "Depende de" de la salida de pacman.
Rörd

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

2

Aunque he tenido que darme cuenta de que la solución de @ DarkHeart realmente no funciona, me inspiró a hacer una que funcione. (sin colores, sin embargo)

Estoy usando package-query , una herramienta similar en lugar de expac que fue sugerida por @jasonwryan, porque ya la tengo instalada (es una dependencia de yaourt). Debería ser trivial cambiar esto para usar expac en su lugar.

La lista de todas las dependencias opcionales se realiza principalmente mediante la llamada a la consulta de paquete. El primer bucle for elimina las explicaciones, por lo que solo quedan los nombres de paquete para las dependencias opcionales; el segundo for-loop elimina las dependencias ya instaladas en su primera línea antes de imprimir los resultados en la segunda.

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

Esto debería funcionar:

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

La primera entrada a commenumera todas las dependencias opcionales, la segunda entrada todos los paquetes instalados y sus atributos 'proporcionar'. Ambas listas están ordenadas y contienen cada elemento solo una vez debido a sort -u. Entonces solo se muestran las líneas que están contenidas en la primera pero no en la segunda lista.

(editado para incorporar la sugerencia de @ Archemar)


0

A veces tiene que trabajar hacia atrás ... primero encuentre todas las dependencias no opcionales, luego haga una referencia cruzada con la lista completa, luego use uniq. Esto generará una lista de dependencias opcionales instaladas.

Encuentra todo instalado

pacman -Q

Encuentra todos los no opcionales:

pacman -Qent

Por lo tanto, las entradas únicas deben ser opcionales:

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

Generar una lista de opciones opcionales que faltan depende de las descripciones, no es bonito, pero 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'

0

Lo intenté solo en GNU sed pero

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

esto funcionó (Use sort / uniq como desee).

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.