Bagaimana cara menentukan apakah suatu paket adalah paket meta dari baris perintah?

14

Bagaimana saya bisa menentukan apakah suatu paket adalah paket meta 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 bidang "en-description".

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

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
1
Terlepas dari kenyataan bahwa pertanyaan ini dan jawabannya cukup menarik, mengapa Anda ingin tahu ini?
Joe
1
Saya menginstal hal-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 ada (apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremove). Lalu saya menemukan bahwa ini hanya berlaku untuk metapackages brainstorm.ubuntu.com/idea/17785 . aptitude di sisi lain memang menghapus dependensi yang tidak perlu dari metapackage.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

7

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

Anda dapat mendefinisikan metapackage sebagai paket yang tidak mengandung file. Tidak ada cara untuk menentukan ini dari basis data paket. Anda dapat menggunakan basis data file dan memeriksa bahwa paket hanya berisi direktori (banyak paket semacam itu mengandung beberapa direktori). Bahkan, sebagian besar metapackage berisi beberapa file di /usr/share/doc/<package name>: copyrightfile, changelog, kadang-kadang beberapa file lagi. Berikut ini perkiraan yang mendefinisikan metapackage sebagai hanya berisi file di /usr/share/doc/<some directory>(bukan dalam subdirektori dari itu) dan direktori utama:

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

Pendekatan lain adalah untuk mencari 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 saat memilih ambang (sekali lagi, ini adalah perkiraan).

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

Setelah refleksi, saya bertanya-tanya apakah maksud Anda paket virtual daripada metapackages. Paket virtual sebenarnya bukan paket tetapi nama paket yang digunakan dalam Provides:bidang. Anda dapat mendaftarkannya dengan aptitude search '~v'. Berjalan apt-cache showpada satu tampilan "Tidak dapat memilih versi dari paket 'zcav' karena ini murni virtual". Menjalankan aptitude showdaftar paket-paket yang menyediakannya. Cara mudah untuk menunjukkan 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 tersebut virtual bahkan jika ada satu penyedia karena nama penyedia berbeda.

apt-cache -n search "^$package\$"
Gilles 'SANGAT berhenti menjadi jahat'
sumber
terima kasih untuk metode itu: saya tidak tahu tentang hutang! juga, saya membaca di suatu tempat bahwa ketika Anda menginstal metapackage dengan apt-get, itu persis seperti Anda telah menginstal setiap dependensi dengan tangan secara individual, yang berarti bahwa menghapus paket asli tidak akan langsung menghapus dependensinya, sedangkan untuk paket normal, hapus akan hapus dependensi yang diinstal. Apakah ini benar? Jika demikian, bagaimana cara membedakannya? Ini bisa dieksploitasi juga ... (juga nampaknya bakat tidak peduli apakah meta-nya atau tidak, apakah ini benar?)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@cirosantilli Fitur untuk menghapus dependensi secara otomatis tidak terkait dengan metapackages. Ini terjadi karena jika Anda tidak meminta paket secara eksplisit, itu ditandai sebagai yang diinstal secara otomatis , dan paket yang ditandai sebagai yang diinstal secara otomatis dihapus jika tidak ada paket yang bergantung padanya diinstal. Lihat apt-get autoremove, aptitude (un)markauto, yang Mperintah dalam antarmuka interaktif bakat.
Gilles 'SO- stop being evil'
@cirosantilli Setelah refleksi, saya ingin tahu apakah yang Anda pikirkan adalah paket virtual, dan bukan metapackages? Lihat jawaban saya yang diperbarui.
Gilles 'SO- stop being evil'
Saya benar-benar tidak tahu tentang paket virtual, tapi saya pikir texlive-full bukan 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 autoremovetidak menghapus semua dependensi yang diinstal. Saya membaca di suatu tempat bahwa ini karena texlive-full adalah metapackage, dan ini adalah perilaku normal dari metapackage, tapi mungkin ini salah. aptitude di sisi lain tampaknya menghapus dependensi yang diinstal secara otomatis dengan baik.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
2

Anda bisa mencoba masuk

apt-cache search 'metapackage | meta-package'

yang akan memberi Anda daftar panjang, dan kemudian gunakan grepuntuk, katakanlah tunjukkan semua metapackages yang berhubungan dengan sains

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

Ini akan menghasilkan daftar panjang (saya telah mempersingkatnya di sini)

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 KDEuntuk menemukan semua KDEmetapackage.

Ini mungkin tentang hal terbaik yang dapat Anda lakukan apt-cache, tetapi harus dengan cepat menemukan sebagian besar paket metap yang ingin Anda temukan. Jika tidak menemukan semua yang Anda cari, hal paling sederhana adalah dengan melihat di bagian metapackage di Synaptic.


sumber