Apa perbedaan antara dependensi dan pra-dependen?

12

Apa yang dimaksud dengan "depend" dan "pre-depend", dan perbedaan antara 2 jenis persyaratan paket ketika saya menginstal sesuatu di Ubuntu?

Bruno Pereira
sumber

Jawaban:

20

Seperti yang diambil dari tautan ini: https://www.debian.org/doc/debian-policy/#document-ch-relationships

Ada 5 jenis dependensi:

Arti dari lima bidang ketergantungan adalah sebagai berikut:

Tergantung

  • Ini menyatakan ketergantungan mutlak. Paket tidak akan dikonfigurasikan kecuali semua paket yang terdaftar di bidang Depend nya telah dikonfigurasi dengan benar. Kolom Depends harus digunakan jika paket dependen diperlukan untuk paket tergantung untuk menyediakan sejumlah fungsionalitas yang signifikan. Bidang Depends juga harus digunakan jika skrip postinst atau prerm mengharuskan paket dependen untuk dibongkar atau dikonfigurasikan agar dapat dijalankan. Dalam hal konfigurasi postinst, paket yang tergantung akan dibongkar dan dikonfigurasikan terlebih dahulu.

  • Dalam hal prerm atau tindakan postinst lainnya, dependensi paket biasanya akan setidaknya dibongkar, tetapi mereka mungkin hanya "Setengah-Dipasang" jika pemutakhiran dependensi sebelumnya gagal. Akhirnya, bidang Depends harus digunakan jika paket tergantung-diperlukan oleh skrip postrm untuk sepenuhnya membersihkan setelah penghapusan paket. Tidak ada jaminan bahwa dependensi paket akan tersedia ketika postrm dijalankan, tetapi paket dependen lebih mungkin tersedia jika paket menyatakan dependensi (terutama dalam hal penghapusan postrm). Script postrm harus dengan anggun melewati tindakan yang memerlukan dependensi jika dependensi itu tidak tersedia.

Merekomendasikan

  • Ini menyatakan ketergantungan yang kuat, tetapi tidak absolut. Bidang Rekomendasi harus mencantumkan paket yang akan ditemukan bersama dengan ini di semua kecuali instalasi yang tidak biasa.

Menyarankan

  • Ini digunakan untuk menyatakan bahwa satu paket mungkin lebih bermanfaat dengan satu atau lebih paket lainnya. Menggunakan bidang ini memberi tahu sistem pengemasan dan pengguna bahwa paket-paket yang tercantum terkait dengan yang ini dan mungkin dapat meningkatkan kegunaannya, tetapi menginstal yang ini tanpa mereka adalah sangat masuk akal.

Meningkatkan

  • Bidang ini mirip dengan Saran tetapi berfungsi berlawanan arah. Ini digunakan untuk menyatakan bahwa suatu paket dapat meningkatkan fungsionalitas dari paket lain.

Pra-Tergantung

  • Bidang ini seperti Depends, kecuali bahwa itu juga memaksa dpkg untuk menyelesaikan instalasi paket yang dinamai bahkan sebelum memulai instalasi paket yang menyatakan pra-dependensi . Ia bekerja seperti ini, ketika sebuah paket yang menyatakan pra-ketergantungan akan Dibongkar pra-ketergantungan dapat dipenuhi jika paket bergantung sepenuhnya dikonfigurasi, atau bahkan jika paket tergantung hanya dibongkar atau dalam keadaan "Setengah Dikonfigurasi", asalkan mereka telah dikonfigurasi dengan benar di beberapa titik di masa lalu (dan tidak dihapus atau dihapus sebagian karena).

  • Dalam hal ini, baik versi yang sebelumnya dikonfigurasi dan saat ini belum dibongkar atau "Setengah Dikonfigurasi" harus memenuhi setiap klausa versi di bidang Pra-Tergantung. Ketika paket yang menyatakan pra-dependensi akan dikonfigurasikan, pra-dependensi akan diperlakukan sebagai Tergantung normal. Itu akan dianggap puas hanya jika paket yang tergantung telah dikonfigurasi dengan benar. Namun, tidak seperti dengan Depends, Pre-Depends tidak mengizinkan dependensi sirkular untuk diputus. Jika ketergantungan melingkar ditemukan ketika mencoba untuk menghormati Pra-Dependen, instalasi akan dibatalkan.

  • Pra-Dependemen juga diperlukan jika skrip awal bergantung pada paket yang disebutkan. Yang terbaik adalah menghindari situasi ini jika memungkinkan. Pra-Dependensi harus digunakan secara hemat, lebih disukai hanya oleh paket-paket yang upgrade atau pemasangan prematurnya akan menghambat kemampuan sistem untuk melanjutkan dengan setiap upgrade yang mungkin sedang berlangsung.

Versi Lebih Kecil:

  • Keduanya tergantung dan pra-tergantungmenyebutkan dependensi yang dibutuhkan paket sebelum menginstal tetapi pra-dependensi memaksa instalasi dan konfigurasi paket dependensi bahkan sebelum memulai dengan paket yang membutuhkan dependensi. dpkg bahkan tidak akan membongkar paket utama sampai semua paket pre-dependen telah ditangani. Dengan dependen, urutan paket dependensi dan yang utama tidak penting. Dengan pre-dependen mempertimbangkan ini dan juga verifikasi jika paket pre-dependen dikonfigurasi dan diinstal atau tidak. Tanpa ini, paket utama bahkan tidak akan dibongkar, dikonfigurasi atau diinstal. Anda harus menginstal dependensi sebelum memulai proses bekerja dengan paket utama. Jika tidak, mereka harus diunduh / dikonfigurasi / diinstal terlebih dahulu sebelum melanjutkan.
Luis Alvarado
sumber
2
Perhatikan bahwa ada juga anti-dependensi seperti Conflicts and Breaks. Dan membangun dependensi seperti Build-Depends.
Alexis Wilke
3

Istilah "ketergantungan" dapat digunakan secara luas untuk mencakup hubungan "Tergantung" dan "Pra-Tergantung" (dan kadang-kadang bahkan hubungan lain yang lebih lemah), atau dapat digunakan secara sempit sebagai sinonim dari "Tergantung".

Perbedaan antara hubungan paket "Depends" dan "Pre-Depends" adalah bahwa jika X bergantung pada Y, maka Y harus sepenuhnya dikonfigurasikan sebelum X dikonfigurasikan. (Konfigurasi adalah langkah instalasi di mana suatu paket, setelah file-nya dibongkar ke lokasi yang tepat - yaitu, sekali "diinstal" - memiliki perubahan apa pun yang diperlukan yang dibuat sehingga dimungkinkan untuk benar-benar menggunakan perangkat lunak yang disediakannya. Misalnya , konfigurasi server HTTP mungkin melibatkan memastikan ada wwwpengguna dengan kemampuan yang tepat dan /var/wwwdirektori dengan izin yang tepat.) Sebaliknya, jika X pra-tergantung pada Y maka Y harus diinstal dan (biasanya) sepenuhnya dikonfigurasi sebelum X bahkan diinstal .

Lihat Bagian 7.2 dari Manual Kebijakan Debian untuk lebih jelasnya. Saya mengutip dua bagian yang paling relevan di sini, tetapi ada informasi lain di bagian itu (dan dalam bab 7 lebih umum) yang membantu menerangi bagaimana dependensi bekerja.


Depends

Ini menyatakan ketergantungan mutlak. Paket tidak akan dikonfigurasikan kecuali semua paket yang terdaftar di Dependsbidangnya telah dikonfigurasikan dengan benar (kecuali ada ketergantungan melingkar seperti dijelaskan di atas).

The Dependslapangan harus digunakan jika bergantung-pada paket diperlukan untuk paket tergantung untuk menyediakan sejumlah besar fungsi.

The Dependslapangan juga harus digunakan jika postinstatau prermscript memerlukan tergantung-pada paket untuk menjadi dibongkar atau dikonfigurasi untuk menjalankan. Dalam hal konfigurasi postinst, paket yang tergantung akan dibongkar dan dikonfigurasikan terlebih dahulu. (Jika kedua paket terlibat dalam loop ketergantungan, ini mungkin tidak berfungsi seperti yang diharapkan; lihat penjelasan beberapa paragraf kembali.) Dalam kasus prermatau postinsttindakan lain , dependensi paket biasanya akan setidaknya dibongkar, tetapi mereka mungkin hanya "Setengah Terpasang" jika pemutakhiran dependensi sebelumnya gagal.

Akhirnya, Dependsbidang tersebut harus digunakan jika paket yang tergantung dibutuhkan oleh postrmskrip untuk membersihkan sepenuhnya setelah penghapusan paket. Tidak ada jaminan bahwa dependensi paket akan tersedia saat postrmdijalankan, tetapi paket dependen lebih mungkin tersedia jika paket menyatakan ketergantungan (terutama dalam kasus postrm remove). The postrmScript harus anggun melewatkan tindakan yang memerlukan ketergantungan jika itu ketergantungan tidak tersedia.


Pre-Depends

Bidang ini seperti Depends, kecuali bahwa itu juga memaksa dpkguntuk menyelesaikan instalasi paket yang dinamai bahkan sebelum memulai instalasi paket yang menyatakan pra-ketergantungan, sebagai berikut:

Ketika sebuah paket yang menyatakan pra-dependensi akan dibongkar , pra-dependensi dapat dipenuhi jika paket dependen-on dikonfigurasi secara penuh, atau bahkan jika paket-paket yang tergantung hanya dibongkar atau dalam "Setengah -Configured "state, asalkan mereka telah dikonfigurasi dengan benar di beberapa titik di masa lalu (dan tidak dihapus atau dihapus sebagian sejak itu). Dalam hal ini, baik versi yang sebelumnya dikonfigurasi dan saat ini belum dibongkar atau "Setengah Dikonfigurasi" harus memenuhi klausa versi apa pun di Pre-Dependsbidang.

Ketika paket yang menyatakan pra-dependensi akan dikonfigurasikan , pra-dependensi akan diperlakukan sebagai normal Depends. Itu akan dianggap puas hanya jika paket yang tergantung telah dikonfigurasi dengan benar. Namun, tidak seperti dengan Depends, Pre-Dependstidak mengizinkan dependensi melingkar untuk diputus. Jika ketergantungan melingkar ditemukan ketika mencoba untuk menghormati Pre-Depends, instalasi akan dibatalkan.

Pre-Dependsjuga diperlukan jika preinstskrip tergantung pada paket yang disebutkan. Yang terbaik adalah menghindari situasi ini jika memungkinkan.

Pre-Depends harus digunakan dengan hemat, lebih disukai hanya oleh paket-paket yang upgrade atau pemasangan prematurnya akan menghambat kemampuan sistem untuk melanjutkan dengan setiap upgrade yang mungkin sedang berlangsung.

Anda tidak boleh menentukan Pre-Dependsentri untuk suatu paket sebelum ini telah dibahas pada debian-develmilis dan konsensus tentang melakukan hal yang telah dicapai. Lihat Dependensi, Bagian 3.5 .

Eliah Kagan
sumber