Pertanyaan Bagaimana menentukan apakah paket adalah meta-paket dari baris perintah?


Bagaimana saya bisa menentukan apakah paket adalah meta-paket dari baris perintah, mungkin melalui apt-get, aptitude atau apt-cache?

Saya telah mencoba:

apt-cache show texlive-full
apt-cache showpkg texlive-full

tetapi satu-satunya cara saya dapat mengatakan paket ini adalah meta adalah dengan membaca kolom "en-description".

Apakah ada cara yang lebih otomatis untuk melakukan ini, yang akan memberi saya jawaban ya / tidak, atau setidaknya memiliki bidang seperti "en-deskripsi" yang didedikasikan untuk ini?


13
2017-09-26 20:20


asal


Selain dari fakta bahwa pertanyaan dan jawaban ini cukup menarik, mengapa Anda ingin mengetahui hal ini? - Joe
Saya menginstal banyak hal dengan apt-get, dan memperhatikan bahwa jika saya menginstal metapackage (texlive-full), ia menginstal dependensi yang saya inginkan, tetapi jika saya menghapus metapackage, dependensi tetap di sana (apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremove). Kemudian saya menemukan bahwa ini adalah kasus hanya untuk metapackages brainstorm.ubuntu.com/idea/17785. aptitude di sisi lain tidak menghilangkan dependensi yang tidak perlu dari metapackage. - Ciro Santilli 新疆改造中心 六四事件 法轮功


Jawaban:


Tidak ada definisi formal dari metapackage. Definisi informal adalah bahwa metapackage adalah yang hanya dimaksudkan untuk diinstal karena dependensinya dan tidak mengandung file yang berguna.

Anda dapat mendefinisikan metapackage sebagai paket yang tidak berisi file. Tidak ada cara untuk menentukan ini dari paket database. Anda dapat menggunakan file database dan periksa bahwa paket hanya berisi direktori (banyak paket semacam itu berisi beberapa direktori). Bahkan, sebagian besar metapackages berisi beberapa file di dalamnya /usr/share/doc/<package name>: Sebuah copyright file, changelog, terkadang beberapa lagi. Berikut ini perkiraan yang mendefinisikan metapackage sebagai hanya berisi file di /usr/share/doc/<some directory> (tidak dalam subdirektori itu) dan direktori terkemuka:

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
  echo "$package looks like a metapackage"
fi

Pendekatan lain adalah mencari a tag paket dengan debtags. Ada beberapa tag yang biasa digunakan pada metapackages.

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

Pendekatan lain adalah mencari paket dengan ukuran kecil. Setiap direktori dihitung sebagai 4 kB, jadi rencanakan sesuai ketika memilih ambang (lagi, ini adalah perkiraan).

aptitude -F '%I %p' search "~n^$package\$"

Setelah refleksi, saya bertanya-tanya apakah maksud Anda paket virtual bukannya metapackages. Paket virtual sebenarnya bukan paket tetapi nama paket yang digunakan Provides: ladang. Anda bisa daftar dengan mereka aptitude search '~v'. Lari apt-cache show di satu layar "Tidak dapat memilih versi dari paket 'zcav' karena murni virtual". Lari aptitude show daftar paket yang menyediakannya. Cara mudah untuk menampilkan paket virtual adalah dengan apt-cache: ini mencetak satu baris untuk paket non-virtual dan berpotensi beberapa baris (satu untuk setiap penyedia) untuk paket virtual - Anda dapat mengetahui apakah paket itu virtual bahkan jika ada penyedia tunggal karena nama penyedianya berbeda.

apt-cache -n search "^$package\$"

7
2017-09-26 22:16



terima kasih untuk metode tersebut: Saya tidak tahu tentang debtags! juga, saya membaca bahwa ketika Anda menginstal metapackage dengan apt-get, itu persis seolah-olah Anda telah menginstal setiap dependensi dengan tangan secara individual, yang berarti bahwa menghapus paket asli tidak akan segera menghapus dependensinya, sementara untuk paket normal, hapus kehendak hapus dependensi yang terinstal. Apakah ini benar? Jika ya, bagaimana caranya untuk mengetahui perbedaannya? Ini dapat dieksploitasi juga ... (tampaknya juga bahwa bakat tidak peduli apakah meta atau tidak, apakah ini benar?) - Ciro Santilli 新疆改造中心 六四事件 法轮功
@cirosantilli Fitur untuk menghapus ketergantungan secara otomatis tidak terkait dengan metapackages. Ini terjadi karena jika Anda tidak meminta paket secara eksplisit, itu ditandai sebagai diinstal secara otomatis, dan paket yang ditandai sebagai diinstal secara otomatis dihapus jika tidak ada paket yang tergantung pada itu diinstal. Lihat apt-get autoremove, aptitude (un)markauto, yang M perintah dalam antarmuka interaktif bakat. - Gilles
@cirosantilli Setelah berefleksi, saya bertanya-tanya apakah Anda yang ada dalam pikiran Anda adalah paket virtual, dan bukan metapackages? Lihat jawaban saya yang diperbarui. - Gilles
Saya benar-benar tidak tahu tentang paket virtual, tapi saya pikir texlive-full tidak virtual karena apt-cache show texlive-full menunjukkan hasil yang biasa. Meski begitu, setelah saya lakukan apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremove tidak menghapus semua dependensi yang terinstal. Saya membaca bahwa ini karena texlive-penuh adalah metapackage, dan ini adalah perilaku normal dari metapackage, tapi mungkin ini salah. Kecakapan di sisi lain tampaknya menghapus dependensi yang diinstal otomatis hanya saja. - Ciro Santilli 新疆改造中心 六四事件 法轮功


Anda bisa mencoba masuk

apt-cache search 'metapackage | meta-package'

yang akan memberi Anda daftar panjang, dan kemudian gunakan grep untuk, katakanlah menunjukkan semua ilmu yang berhubungan dengan metapackages

apt-cache search 'metapackage | meta-package' | grep -i science

Ini akan mengembalikan daftar panjang (saya punya dipersingkat itu disini)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

Anda dapat menggunakan sejumlah alternatif untuk sains, seperti KDE untuk menemukan semua KDE metapackages.

Ini mungkin yang terbaik yang bisa Anda lakukan apt-cache, tetapi harus cepat menemukan sebagian besar metapackages yang ingin Anda temukan. Jika tidak menemukan apa yang Anda cari, hal yang paling sederhana adalah melihat bagian metapackage di Synaptic.


2
2017-09-26 20:36