سؤال ما هو الفرق بين التبعيات والاعتماد المسبق؟


ما المقصود بـ "يعتمد" و "يعتمد مسبقًا" ، والفرق بين هذين النوعين من متطلبات الحزمة عندما أقوم بتثبيت شيء في أوبونتو؟


12
2017-11-28 21:51


الأصل




الأجوبة:


كما مأخوذ من هذا الرابط: https://www.debian.org/doc/debian-policy/#document-ch-relationships

هناك 5 أنواع من التبعيات:

معنى حقول التبعية خمسة كالتالي:

يعتمد على

  • هذا يعلن التبعية المطلقة. لن يتم تكوين حزمة ما لم يتم تكوين كافة الحزم المدرجة في حقل Depends الخاص بها بشكل صحيح. يجب استخدام الحقل Depends إذا كانت الحزمة المعتمدة مطلوبة للحزمة المناسبة لتوفير قدر كبير من الوظائف. يجب أيضًا استخدام الحقل Depends إذا تطلبت البرامج النصية postinst أو prerm أن يتم فك الحزمة المعتمدة على الحزمة أو تكوينها لكي يتم تشغيلها. في حالة تكوين postinst ، سيتم فك حزم الحزم المعتمدة وتكوينها أولاً.

  • في حالة prerm أو إجراءات postinst الأخرى ، عادةً ما تكون عبارات الحزمة غير مفعلة على الأقل ، ولكنها قد تكون "نصف مثبتة" إذا فشلت ترقية سابقة للتبعية. وأخيرًا ، يجب استخدام الحقل Depends إذا كانت الحزمة المعتمدة على البرنامج مطلوبة من قبل البرنامج النصي postrm لتنظيفها بالكامل بعد إزالة الحزمة. لا يوجد ضمان بأن تكون اعتمادات الحزمة متوفرة عند تشغيل postrm ، ولكن من المرجح أن تكون الحزمة المعتمدة متاحة إذا أعلنت الحزمة تبعية (خاصة في حالة إزالة postrm). يجب على البرنامج النصي postrm تخطي بأمان الإجراءات التي تتطلب تبعية إذا كانت تلك التبعية غير متوفرة.

توصي

  • هذا يعلن اعتمادًا قويًا ، لكن ليس مطلقًا. ينبغي أن يذكر حقل التوصية في الحزم التي يمكن العثور عليها مع هذا في جميع التركيبات غير العادية.

وتقترح

  • يستخدم هذا للإعلان عن أن حزمة واحدة قد تكون أكثر فائدة مع واحدة أو أكثر. إن استخدام هذا الحقل يخبر نظام التغليف والمستخدم بأن الحِزَم المدرجة مرتبطة بهذا ويمكن أن تعزز فائدته ، لكن تثبيت هذا بدونها معقول تماما.

يعزز

  • يشبه هذا الحقل Suggests ولكنه يعمل في الاتجاه المعاكس. يتم استخدامه للإعلان عن أن الحزمة يمكن أن تعزز وظائف حزمة أخرى.

قبل يعتمد

  • هذا الحقل مثل يعتمد ، باستثناء أنه أيضًا يفرض dpkg لإكمال تثبيت الحزم المسماة حتى قبل بدء تثبيت الحزمة التي تعلن عن التبعية المسبقةيعمل مثل هذا ، عندما تكون الحزمة التي تعلن وجود تبعية مسبقة على وشك أن يتم تفريغها ، يمكن استيفاء التبعية المسبقة إذا تم تكوين الحزمة المعتمدة بشكل كامل ، أو حتى إذا كانت الحزمة (الحزم) المعتمدة فقط unpacked أو في حالة "نصف تكوين" ، شريطة أن يتم تكوينها بشكل صحيح في وقت ما في الماضي (وليس إزالتها أو إزالتها جزئيا منذ ذلك الحين).

  • في هذه الحالة ، يجب أن تتوافق كل الإصدارات التي تم تكوينها بالفعل والتي تم تفكيكها أو التي تم تفكيكها حاليًا أو التي تحتوي على "نصف مكون" مع أي مجموعة من الإصدارات في الحقل Pre-Depends. عندما تكون الحزمة التي تعلن عن تبعية سابقة على وشك أن يتم تهيئتها ، سيتم التعامل مع ما قبل التبعية على أنه Depends عادي. سيتم اعتباره راضًا فقط إذا تم تكوين الحزمة المعتمدة بشكل صحيح. ومع ذلك ، على عكس ما يعتمد عليه Depends ، فإن Pre-Depends لا تسمح بكسر التبعيات الدائرية. إذا تمت مصادفة تبعية دائرية أثناء محاولة احترام Pre-Depends ، فسيتم إحباط التثبيت.

  • كما يجب استخدام Pre-Depend أيضًا إذا كان البرنامج النصي preinst يعتمد على الحزمة المسماة. من الأفضل تجنب هذا الموقف إن أمكن. يجب استخدام ما قبل الاستخدام لماما ، ويفضل فقط عن طريق الحزم التي من شأنها أن تعوق ترقية أو تركيب سابق لأوانه قدرة النظام على الاستمرار في أي ترقية قد تكون قيد التنفيذ.

نسخة أصغر:

  • على حد سواء يعتمد على و قبل يعتمد أذكر التبعيات التي تحتاجها الحزمة قبل التثبيت ، لكن تعتمد مسبقًا على تثبيت وتكوين حزم التبعية قبل البدء بالحزمة التي تحتاج إلى التبعيات. لن يقوم dpkg حتى بتفكيك الحزمة الرئيسية حتى يتم التعامل مع جميع الحزم المعتمدة مسبقًا. مع اعتماد ، ترتيب حزم التبعية الرئيسية ولا المهم. مع ما قبل يعتمد فإنه يأخذ بعين الاعتبار هذا وكذلك التحقق إذا كانت الحزم التي تعتمد مسبقا هي تكوينات وتثبيتها أم لا. بدون هذا ، لن يتم فك الحزمة الرئيسية أو تكوينها أو تثبيتها. يجب أن يكون لديك إما تبعيات مثبتة قبل بدء عملية التعامل مع الحزمة الرئيسية. إذا لم يكن الأمر كذلك ، فيجب تنزيلها / تكوينها / تثبيتها أولاً قبل المتابعة. عادة ما يتم استخدام الاعتماد المسبق في الحالات التي يكون فيها استقرار الحزمة مهمًا ولن يؤثر على النظام أو البرنامج بطريقة سيئة جدًا ، ولكن يتم تجنب هذه الحالات مع العديد من المعايير المذكورة أيضًا في الرابط أعلاه.

19
2017-11-28 22:15



لاحظ أن هناك أيضا مكافحة تبعيات مثل الصراعات وفواصل. وبناء الاعتماديات مثل Build-Depends. - Alexis Wilke


يمكن استخدام مصطلح "التبعية" على نطاق واسع ليشمل علاقات "تعتمد" و "ما قبل الاعتماد" (وأحيانًا علاقات أخرى أضعف) ، أو يمكن استخدامه بشكل ضيق كمرادف لـ "يعتمد".

الفرق بين العلاقات "يعتمد" و "Pre-Depends" هو أنه إذا X يعتمد على على Y ، ثم يجب تهيئة Y بشكل كامل قبل تكوين X. (تكون عملية التهيئة هي خطوة التثبيت حيث تكون الحزمة ، بمجرد أن يتم فك ملفاتها إلى المواقع المناسبة - أي بمجرد "تثبيت" - أي تغييرات ضرورية أخرى تم إجراؤها بحيث يمكن استخدام البرنامج الذي توفره بالفعل. قد يتضمن تكوين خادم HTTP التأكد من وجود www المستخدم مع القدرات المناسبة و /var/www الدليل مع الأذونات المناسبة.) في المقابل ، إذا X قبل يعتمد على Y ثم يجب تثبيت Y و (عادة) تكوين بالكامل قبل X حتى المثبتة.

نرى القسم 7.2 من دليل سياسة دبيان لمزيد من التفاصيل. أقتبس القسمين الأكثر ملاءمة هنا ، ولكن هناك معلومات أخرى في هذا القسم (وفي الفصل 7 بشكل عام) تساعد في توضيح كيفية عمل التبعيات.


Depends

هذا يعلن التبعية المطلقة. لن يتم تكوين الحزمة ما لم يتم سرد كافة الحزم في Depends تم تكوين الحقل بشكل صحيح (ما لم يكن هناك تبعية دائرية كما هو موضح أعلاه).

ال Depends يجب استخدام الحقل إذا كانت الحزمة المعتمدة مطلوبة للحزمة المناسبة لتوفير قدر كبير من الوظائف.

ال Depends المجال ينبغي أيضا أن تستخدم إذا كان postinst أو prerm تتطلب البرامج النصية فك الحزمة المعتمدة على الحزمة أو تهيئتها للتشغيل. في حالة تكوين postinst ، سيتم فك حزم الحزم المعتمدة وتكوينها أولاً. (إذا كان كلا الحزمتين متورطين في حلقة تبعية ، فقد لا يعمل ذلك كما هو متوقع ؛ راجع شرح بعض الفقرات مرة أخرى.) في حالة prerm أو غيرها postinst الإجراءات ، عادةً ما تكون عبارات الحزمة على الأقل غير معبأة ، ولكن قد تكون "مثبتة نصف" فقط إذا فشلت ترقية سابقة للتبعية.

وأخيرا، فإن Depends يجب استخدام الحقل إذا كانت الحزمة المعتمدة على البروتوكول مطلوبة من قبل postrm النصي لتنظيف بالكامل بعد إزالة الحزمة. ليس هناك ما يضمن أن التبعيات الحزمة ستكون متاحة عندما postrmيتم تشغيله ، ولكن الحزمة التي يتم الاعتماد عليها تكون متاحة على الأرجح إذا كانت الحزمة تعلن تبعية (خاصة في حالة postrm remove). ال postrm يجب أن تخطي البرنامج النصي بأمان الإجراءات التي تتطلب تبعية إذا لم تكن تلك التبعية متوفرة.


Pre-Depends

هذا المجال هو مثل Depends، إلا أنها أيضا قوات dpkg لاستكمال تثبيت الحزم التي تم تسميتها قبل بدء التثبيت من الحزمة التي تعلن ما قبل التبعية ، على النحو التالي:

عندما تكون الحزمة التي تعلن وجود تبعية سابقة على وشك أن تكون تفكيك يمكن استيفاء التبعية المسبقة إذا تم تكوين الحزمة المعتمدة بشكل كامل ، أو حتى لو لا يتم فك حزم الحزمة (الحزم) المعتمدة إلا في حالة "نصف تكوين" ، بشرط أن يتم تكوينها بشكل صحيح في وقت ما في الماضي (وليس إزالتها أو إزالتها جزئيًا منذ ذلك الحين). في هذه الحالة ، يجب أن تستوفي كل الإصدارات التي تمت تهيئتها أو التي تم تفكيكها حاليًا أو التي تم "فك نصفها" ، أي بند نسخة في Pre-Depends حقل.

عندما تكون الحزمة التي تعلن وجود تبعية سابقة على وشك أن تكون تكوين، سيتم التعامل مع ما قبل التبعية كالمعتاد Depends. سيتم اعتباره راضًا فقط إذا تم تكوين الحزمة المعتمدة بشكل صحيح. ومع ذلك ، على عكس مع Depends، Pre-Depends لا يسمح بكسر التبعيات الدائرية. إذا واجهت التبعية الدائرية أثناء محاولة الشرف Pre-Depends، سيتم إحباط التثبيت.

Pre-Depends مطلوبة أيضا إذا كان preinst النصي يعتمد على الحزمة المسماة. من الأفضل تجنب هذا الموقف إن أمكن.

Pre-Dependsينبغي أن تستخدم بشكل مقتصد ، ويفضل فقط عن طريق الحزم التي من شأنها أن تعوق الترقية أو التثبيت السابق لأوانه قدرة النظام على الاستمرار في أي ترقية قد تكون قيد التنفيذ.

يجب عليك عدم تحديد Pre-Depends دخول لحزمة قبل هذا وقد نوقشت على debian-devel قائمة بريدية وإجماع حول القيام بذلك قد تم التوصل إليه. نرى التبعيات ، القسم 3.5.


3
2017-11-28 22:23