Daftar dependensi opsional dengan pacman di arch linux

23

Saya menggunakan linux arch.

Apakah ada cara untuk membuat daftar dependensi opsional dari semua paket yang diinstal? Dan jika ya, dapatkah saya memfilter daftar ini hanya untuk melihat paket yang hilang (tidak terpasang)?

vonPetrushev
sumber
1
Saya belum pernah menggunakan Arch, tetapi "ketergantungan" tidak terdengar opsional (tidak ada di distro lain).
jordanm
AFAIK, saya tidak berpikir Anda bisa melakukannya dengan pacman langsung. Tetapi sangat mungkin untuk menulis naskah kecil untuk melakukannya. Pacman permintaan untuk daftar paket yang diinstal. Suruh Yaourt mengambil PKGBUILD mereka dan membaca daftar optdeps. Versi terbaru dari pacman-git memiliki commit yang menyatakan apakah optdeps sudah diinstal.
darnir
@jordanm: As telah membangun dependensi dan dependensi opsional. Optdeps hanya diperlukan untuk fitur tertentu dari suatu paket. Jadi, kecuali Anda menggunakan fitur itu, Anda tidak benar-benar perlu mengasapi sistem Anda dengan banyak dependensi.
darnir
Saya menggunakanpacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
stewSquared

Jawaban:

5

Anda dapat menggunakan expac untuk query pacmandatabase.

Sesuatu seperti:

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

akan mencetak daftar semua paket yang diinstal pada mesin Anda dan optdependsuntuk masing-masing paket ( %O) 1 ke file yang dipanggil optdeps. Anda kemudian dapat mengurutkannya berdasarkan daftar paket yang diinstal independen.

Lihat man expacdaftar opsi lengkap.


1. Itu adalah huruf besar O, bukan nol. Karena kita tidak dapat memiliki font yang membedakan antara keduanya ...

jasonwryan
sumber
[colek] Kami memang memiliki font seperti itu sekarang. :)
muru
4

Ada utilitas yang bagus di AUR-Repository (aur / pacdep).

pacdep memiliki banyak opsi - hanya satu contoh - cari paket-paket opsional untuk "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
[...]

Output di atas berarti bahwa tidak ada paket opsional yang diinstal. Setelah menginstal "xarchiver" hasilnya seperti

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

Saya menemukan (bagian pertama) jawaban ini di http://mywaytoarch.tumblr.com/post/34979742718/ dengan
mudah- daftar-paket-dependensi

Martin Schneeweis
sumber
3

Ini tidak tepat efisien, tetapi akan menemukan apa yang Anda inginkan (dalam WARNA!):

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 
Hati gelap
sumber
Saya tidak begitu yakin, tetapi bukankah seharusnya itu ||bukan &&setelah grep, dan kemudian tanda kurung di seluruh baris?
Rörd
Dan yang lebih penting, ini mungkin harus menggunakan bagian "Opsi opsional" dan bukan bagian "Tergantung pada" dari output pacman.
Rörd
Misalnya dengan xmms2 :pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
i336_
2

Meskipun saya harus memperhatikan bahwa solusi @ DarkHeart tidak benar-benar berfungsi, itu mengilhami saya untuk membuat solusi yang berfungsi. (tidak ada warna)

Saya menggunakan paket-query , alat yang mirip dan bukan expac yang disarankan oleh @jasonwryan, karena saya sudah menginstalnya (ini adalah ketergantungan dari yaourt). Seharusnya sepele untuk mengubahnya menggunakan expac saja.

Daftar semua dependensi opsional sebagian besar dilakukan oleh panggilan ke paket-permintaan. For-loop pertama menghapus penjelasan, jadi tinggal nama paket untuk dependensi opsional; for-loop kedua menghapus dependensi yang sudah diinstal di baris pertama sebelum mencetak hasilnya di yang kedua.

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

Ini harus melakukan trik:

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

Input pertama untuk commmencantumkan semua dependensi opsional, input kedua semua paket yang diinstal dan atribut 'sediakan'. Kedua daftar diurutkan dan mengandung setiap elemen hanya sekali karena sort -u. Maka hanya baris yang ditampilkan yang ada di daftar pertama tetapi tidak di daftar kedua.

(diedit untuk memasukkan saran @ Archemar)

Minggu
sumber
0

Kadang-kadang Anda harus bekerja mundur ... pertama-tama menemukan semua non-opsional tergantung, kemudian referensi silang dengan daftar lengkap, lalu gunakan uniq. Ini akan menghasilkan daftar tergantung opsional yang diinstal.

Temukan semua terpasang

pacman -Q

Temukan semua non-opsional:

pacman -Qent

Entri unik karenanya harus opsional:

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

Menghasilkan daftar opsi yang hilang tergantung pada deskripsi, tidak cantik, tetapi berfungsi.

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
sumber
0

Saya mencoba hanya di sed GNU tetapi

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

ini berhasil (Gunakan sort / uniq sesuka Anda).

Yuki Ito
sumber