Перечислите необязательные зависимости с pacman на arch linux

23

Я использую Arch Linux.

Есть ли способ перечислить необязательные зависимости всех установленных пакетов? И если да, могу ли я отфильтровать этот список, чтобы увидеть только отсутствующие (не установленные) пакеты?

vonPetrushev
источник
1
Я не использовал Arch, но «зависимость» не звучит необязательно (это не в других дистрибутивах).
Иордания
AFAIK, я не думаю, что вы можете сделать это с Pacman сразу. Но очень возможно написать небольшой скрипт для этого. Запрос pacman для списка установленных пакетов. Пусть Яурт принесет свои PKGBUILDы и прочитает список вариантов. В последней версии pacman-git есть коммит, в котором указано, были ли уже установлены optdeps.
Дарнир
@jordanm: As имеет зависимости сборки и необязательные зависимости. Optdeps требуются только для определенных функций пакета. Так что, если вы не используете эту функцию, вам не нужно раздувать вашу систему с множеством зависимостей.
Дарнир
Я использовалpacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
stewSquared

Ответы:

5

Вы можете использовать expac для запроса pacmanбазы данных.

Что-то типа:

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

распечатает список всех установленных пакетов на вашем компьютере и optdependsдля каждого ( %O) 1 в файл с именем optdeps. Затем вы можете отсортировать список установленных пакетов optdepends.

Смотрите man expacполный список вариантов.


1. Это верхний регистр O, а не ноль. Потому что у нас не может быть шрифта, который бы различал два ...

jasonwryan
источник
[poke] У нас сейчас такой шрифт. :)
Муру
4

В AUR-репозитории есть хорошая утилита (aur / pacdep).

У pacdep есть много опций - только один пример - найдите дополнительные пакеты для "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
[...]

Вывод выше означает, что ни один из дополнительных пакетов не установлен. После установки «xarchiver» вывод выглядит так

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

Я нашел (первая часть) этот ответ на
http://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-dependencies

Мартин Шнейвейс
источник
3

Это не совсем эффективно, но найдет то, что вы хотите (в ЦВЕТ!):

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 
Темное сердце
источник
Я не совсем уверен, но не это должно быть , ||а не &&после того , как grep, а затем круглые скобки вокруг остальной части линии?
Rörd
И что более важно, для этого, вероятно, следует использовать раздел «Optional Deps» вместо раздела «Depends On» вывода pacman.
Rörd
Например, с xmms2 :pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
i336_
2

Хотя я должен был заметить, что решение @ DarkHeart на самом деле не работает, оно вдохновило меня на создание рабочего. (без цветов, хотя)

Я использую package-query , похожий инструмент вместо expac, который был предложен @jasonwryan, потому что он у меня уже установлен (это зависимость от yaourt). Это должно быть тривиально, чтобы вместо этого использовать expac.

Список всех необязательных зависимостей в основном выполняется путем вызова пакета-запроса. Первый цикл for удаляет объяснения, поэтому остаются только имена пакетов для необязательных зависимостей; второй цикл for удаляет уже установленные зависимости в первой строке перед печатью результатов во второй.

#!/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;
}
Rörd
источник
2

Это должно сделать трюк:

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

Первый ввод, чтобы commперечислить все необязательные зависимости, второй ввод всех установленных пакетов и их атрибуты «предоставить». Оба списка отсортированы и содержат каждый элемент только один раз из-за sort -u. Затем отображаются только строки, которые содержатся в первом, но не во втором списке.

(отредактировано, чтобы включить предложение @ Archemar)

Воскресенье
источник
0

Иногда приходится работать задом наперед ... сначала найдите все необязательные зависимости, затем сделайте перекрестную ссылку с полным списком, затем используйте uniq. Это создаст список установленных необязательных зависимостей.

Найти все установленное

pacman -Q

Найти все не обязательно:

pacman -Qent

Поэтому уникальные записи должны быть необязательными:

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

Сформировать список недостающих необязательно зависит от описания, не красиво, но работает.

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'
kevinf
источник
0

Я пробовал только в GNU sed но

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

это сработало (используйте sort / uniq, как вам нравится).

Юки Ито
источник