Keluaran visual (ASCII) Pohon ketergantungan Debian ke terminal?

19

Saya tidak yakin apakah ini lebih merupakan pertanyaan SuperUser atau UnixLinux, tapi saya akan coba di sini ...

Baru-baru ini, saya menemukan ini:

# 710689 - aptitude: gunakan karakter unicode di pohon - log laporan Debian Bug

Alangkah baiknya ketika aptitude akan menggunakan karakter unicode untuk pohon dalam daftar dependensi, misal alih-alih:

--\ Depends (3)
   --- libc-dev-bin (= 2.17-3)
   --- libc6 (= 2.17-3)
   --- linux-libc-dev
 --\ Suggests (2)
   --- glibc-doc (UNSATISFIED)
   --\ manpages-dev

...

... dan saya pikir - wow, saya sangat suka keluaran pohon seni ASCII itu, tidak sadar aptitudebisa melakukan itu! Jadi, saya mulai bermain-main selama satu jam dengan aptitudesakelar baris perintah - dan saya tidak bisa mendapatkan keluaran itu? Jadi pertanyaan awal saya adalah - dari mana output itu berasal?

Setelah beberapa saat, saya menyadari bahwa pada sistem saya, aptitudepada akhirnya terhubung dengan /usr/bin/aptitude-curses; dan saya akhirnya menyadari bahwa aptitudememiliki cursesantarmuka!:/

Jadi, saya akhirnya berjalan aptitudetanpa argumen - dan cursesantarmuka dimulai, dan saya bisa melihat sesuatu seperti ini:

aptitude-curses-terminal

... jadi jelas sekali, karakter pohon ASCII itu berasal dari antarmuka kutukan.

Jadi saya bertanya-tanya - apakah ada alat Debian / apt, yang akan menampilkan pohon ASCII "visual" seperti itu - tetapi dengan dependensi paket yang sebenarnya?

Saya tahu tentang debtree - Grafik ketergantungan paket (juga rekomendasi perangkat lunak - Bagaimana cara menampilkan dependensi suatu paket? - Tanya Ubuntu ); tapi saya lebih suka memiliki sesuatu di terminal, menyerupai pohon direktori (daripada grafik "tidak teratur" [dalam hal posisi simpul] dari debtree, yang dihasilkan oleh graphviz's dot).

Saya juga telah melihat Apakah ada sesuatu yang akan menunjukkan dependensi secara visual, seperti pohon? , yang merekomendasikan:

$ apt-rdepends aptitude
Reading package lists... Done
Building dependency tree       
Reading state information... Done
aptitude
  Depends: libapt-pkg4.10
  Depends: libboost-iostreams1.42.0 (>= 1.42.0-1)
  Depends: libc6 (>= 2.4)
  Depends: libcwidget3
  Depends: libept1
  Depends: libgcc1 (>= 1:4.1.1)
  Depends: libncursesw5 (>= 5.7+20100313)
  Depends: libsigc++-2.0-0c2a (>= 2.0.2)
  Depends: libsqlite3-0 (>= 3.7.3)
  Depends: libstdc++6 (>= 4.5)
  Depends: libxapian22
libapt-pkg4.10
libboost-iostreams1.42.0
  Depends: libbz2-1.0
  Depends: libc6 (>= 2.3.6-6~)
  Depends: libgcc1 (>= 1:4.1.1)
  Depends: libstdc++6 (>= 4.2.1)
  Depends: zlib1g (>= 1:1.1.4)
...

... mana yang baik, karena ia mencantumkan terlebih dahulu dependensi langsung dari paket yang diperlukan; dan kemudian dependensi paket ketergantungan tingkat pertama, dan sebagainya - tapi itu tidak divisualisasikan sebagai pohon (dan benar-benar, aptitude's cursesantarmuka hanya menunjukkan diinstal info ketika Anda memperluas ketergantungan simpul, ia tidak memperluas untuk dependensi lanjut).

Jadi, pertanyaannya adalah - apakah ada alat, yang akan menghasilkan grafik pohon dependensi dengan karakter terminal - seperti, katakanlah, dalam pseudocode berikut:

$ pseudo-deb-graph --show-package="aptitude"

aptitude
  --- Depends: libapt-pkg4.10
  --\ Depends: libboost-iostreams1.42.0 (>= 1.42.0-1)
     --- Depends: libbz2-1.0
     --- Depends: libc6 (>= 2.4)
  --\ Depends: libc6 (>= 2.3.6-6~)
     --\ Depends: libc-bin (= 2.13-0ubuntu13)
        --- ...
     --\ Depends: libgcc1
        --- ...
     --\ Depends: tzdata
        --- ...
...
sdaau
sumber

Jawaban:

23

Anda dapat melakukannya dengan skrip bash

Kode sumber: "apt-rdepends-tree"

https://gist.github.com/damphat/6214499

Lari

# sudo apt-get install apt-rdepends
# save gist, above, as "apt-rdepends-tree"
# chmod +x apt-rdepends-tree
# ./apt-rdepends-tree gcc

Output terlihat seperti ini:

# ./apt-rdepends-tree gcc
├─ gcc
│    ├─ cpp (>= 4:4.7.2-1)
│    └─ gcc-4.7 (>= 4.7.2-1)
└─ package-a
     ├─ package-b
     └─ package-c
basah
sumber