سؤال كيفية تثبيت حزم أوبونتو محددة ، مع الإصدار الدقيق؟


أرغب في إعداد جهاز ظاهري جديد مع بعض الحزم المحددة (الاسم والإصدار) ، التي يتم توفيرها.

على سبيل المثال apache2 في الإصدار 2.2.20-1ubuntu1 مع كل التبعيات. حتى إذا كان هناك إصدار جديد من هذه الحزمة على الخوادم ، فيجب تثبيت هذا الإصدار.

الحل يجب أن يعمل / يوسع مع عدة "n" "setups". قد يحتاج جهاز ظاهري آخر إلى إصدار قديم من apache2.

أعرف حاليًا بعض الاحتمالات التي تقوم بتثبيت الحزم الدقيقة ، ولكن لا يتم قياسها على النحو التالي:

  1. نسخ كل المطلوب *.deb إلى كل جهاز ظاهري يدويًا وأدخل: dpkg -i ... -> يمكن أن تعمل ، ولكن من الخطأ جدا عرضة. (نصوص يدوية ، إلخ.)
  2. قم بإنشاء واستخدام مستودع Ubuntu جديد لكل إعداد. -> لا يعمل لأنني بحاجة ن المستودعات.
  3. قم بإعداد الجهاز مرة واحدة وانسخ VM / قم بإنشاء لقطة. -> لا يعمل لأنني بحاجة إلى تخزين أجهزة VM.

يمكن تصنيف مشكلتي على أنها إدارة التصحيح ، ولكن لا أريد تحديث طردي إلى الإصدار الحالي. هدفي هو تثبيت الحزم القديمة.


188
2018-01-01 20:39


الأصل




الأجوبة:


يمكنك استخدام apt-get لتثبيت نسخة محددة من الحزمة طالما أنها موجودة في أرشيف يعرفه apt. من apt-get manpage:

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

على سبيل المثال ، يمكنك القيام بما يلي:

sudo apt-get install apache2=2.2.20-1ubuntu1

لاحظ أنك قد تحتاج إلى إجراء بعض قرارات التبعية بنفسك في هذه الحالة ، ولكن إذا كانت هناك أية مشكلات ، فإن apt-get سيخبرك بما يسببها. في نظام 11.10 لدي سأكون بحاجة إلى القيام بما يلي كي أتمكن من العمل:

sudo apt-get install apache2=2.2.20-1ubuntu1 \
                     apache2.2-common=2.2.20-1ubuntu1 \
                     apache2.2-bin=2.2.20-1ubuntu1 \
                     apache2-mpm-worker=2.2.20-1ubuntu1

190
2018-01-01 20:57



كيف تعرف النسخ المتاحة؟ - Rodrigo Gurgel
Rodrigo Gurgel، "aptitude versions apache2" - user169015
@ user169015 "إصدار موجود"! = "تم حزم الإصدار لأوبونتو ومتاح مع apt" - Kyle Strand
مرحبا كايل ، لم أحصل على تعليقك ، على الرغم من نعم ، يمكن تثبيت الحزمة باستخدام ملائمة كذلك. أنا فقط على استعداد مع aptitude لأنني قد تم استخدام ذلك لفترة طويلة ... :) - user169015
@ user169015 أعتقد أنك افتقدت نقطة تعليق كايل. إلقاء نظرة على الجواب psusi أدناه. يبدو أن مستودعات Ubuntu APT لا تستمر في استضافة الإصدارات القديمة من الحزم! وبخلاف ذلك مع مديري حزم وقت التشغيل (pip ، gem ، maven ، إلخ) ، لا يمكنك الاعتماد على مستودعات Ubuntu APT إذا كنت ترغب في إعادة تكوين تكوين قديم معروف جيدًا. فوجئت وخيبة الأمل لتحقيق هذا بنفسي. ربما يعالج القوس هذا أفضل؟ ( askubuntu.com/questions/728439/... ) - algal


للتحقق من الإصدارات المتاحة ، يمكنك التحقق عبر:

sudo apt-cache madison ^apache2

إذا لم تنجح ، ففكر في التشغيل sudo apt-get update قبل تحديث قائمة الحزمة.

ثم انسخ النسخة أو استخدم الصيغة التالية:

sudo apt-get install apache2=2.2\*

للتحقق من الإصدار الذي ثبته ، قم بتشغيل:

dpkg -l 'apache2*' | grep ^i

51
2018-04-01 12:44



شكرا جزيلا للإشارة إلى =2.2\* الخيار كطريقة لاستخدام حرف بدل لتحديد أي تخريب متاح. هذا ما أردت أن أعرف ولكن لم أعرف كيف أسأل :) - aexl
عند سرد الإصدارات باستخدام dpkg -l <packageName>، يتم اقتطاع رقم الإصدار أحيانًا. لتجنب هذا ، استخدم COLUMNS=100 dpkg -l <packageName> - CJBS
على Yakkety ، يعطيني الأمر الأول فقط: N: Unable to locate package ^apache2 - Jesse Glick
تضمين التغريدة sudo apt-get update أول. تأكد من تكوين مصدر Apt الصحيح. - kenorb
N: غير قادر على تحديد موقع الحزمة ^ apache2 بعد $ sudo apt-get update ولكن sudo apt-get install apache2 = 2.2 * works for me - Braian Mellor


سوف أتوسع في إجابات سابقة مع أوامر إصدارات أخرى مفيدة في apt أسرة. لمعرفة الإصدارات المتوفرة ، شغّل apt-cache policy:

# apt-cache policy apache2
apache2:
  Installed: (none)
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

ثم ، كما ذكر في مكان آخر ، قم بتثبيت إصدار محدد باستخدام apt-get:

# apt-get install apache2=2.4.7-1ubuntu4.5
...

يمكنك الآن رؤية الإصدار الذي قمت بتثبيته عن طريق التشغيل apt-cache policy مرة أخرى:

# apt-cache policy apache2
apache2:
  Installed: 2.4.7-1ubuntu4.5
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main amd64 Packages
 *** 2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages

إذا كنت لا ترغب في تثبيت إصدارات أحدث على التحديثات ، فقم بتثبيت الحزمة باستخدام apt-mark:

# apt-mark hold apache2
apache2 set on hold.

لنفترض أن الإصدار الجديد من apache2 يضاف إلى فهرس الحزمة وتتم مزامنة جهازك مع apt-get update. سترى هذا عند تشغيل التالي apt-get upgrade:

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

10
2017-07-15 17:25





من الناحية العملية ، هذا غير ممكن لأنه لا يتم الاحتفاظ بالإصدارات القديمة في الأرشيف ، لذلك ما لم يكن لديك نسخة من النسخة القديمة التي تدور حول مكان ما ، لا يمكنك تثبيتها. يجب أن تسأل نفسك لماذا تريد تثبيت إصدار قديم في المقام الأول. في الإصدار الثابت ، السبب الرئيسي لإصدار إصدار جديد هو تصحيح ثغرة أمنية ، ولا تريد أن تقوم بتشغيل خادم ضعيف هل أنت كذلك؟


8
2018-01-02 00:33



أحتاج هذا لإعادة إنتاج نسخ طبق الأصل من البيئات القديمة لأغراض التطوير. هل من الممكن إعداد نسخة متطابقة لا تحذف نسخ الحزم القديمة للوصول إلى الحزم المطلوبة أو هل أحتاج إلى إعداد مستودعات متعددة تحتوي على فرق فقط؟ - ayckoster
psusi: ليس بالضبط استجابة منصفة ، قد يكون هناك العديد من الأسباب. في حالتي ، قد يحتوي الإصدار الأحدث فعليًا على خطأ ، وللتأكد من أن هذه هي الحالة التي تتطلبها النسخة الأقدم. مجرد مثال. - Cookie
nomen ، لا ، بل هو توزيعة واحدة تفعل ذلك ليس استخدام نموذج الإصدار المتداول. يتم الحرص على التأكد من أنه عندما يتم إصلاح الخلل الحرجة والثغرات الأمنية في الإصدار الثابت ، فإنها لا تتسبب في حدوث انتكاسات ، ولكن إذا حدث ذلك ، فقم بتقديم تقرير خطأ تم وضع علامة عليه بإصدار الانحدار وسيتم إصلاحه أو لفه الى الخلف. - psusi
nomen ، إذا كنت تريد أن تشكل معانيك الخاصة للكلمات سيكون لديك صعوبة في التواصل مع الآخرين. بالنسبة إلى أي شخص آخر في العالم ، هذا ليس ما هو الإصدار المتداول ، والإفراج المتدحرج هو عكس ذلك تمامًا ، وبالتالي ، لا يتماشى مع الإصدار الثابت. والآن بعد أن أفكر في ذلك ، يتم الاحتفاظ بالإصدار الأصلي الذي يتم شحنه مع الإصدار فعليًا في الجيب -dease ، وتحديث التحديثات إلى جيب -الأجوبة أو -الأمن ، لذلك بينما لا يمكنك العودة إلى تحديث سابق ، يمكن العودة إلى الإصدار الذي صدر في الأصل. - psusi
psusi: هنا واحد آخر لك. مطلوب انسجام ليكون دائما نفس الإصدار على جميع الأجهزة. ولكن في 13.10 ، يكون الإصدار مختلفًا عنه في 12.04 LTS. ماذا الآن؟ عندما تأتي إلى سؤال كهذا ، فإن تلقي إجابة مثل لماذا تريد أن تفعل هذا هو أمر غير مفيد حقا بشكل لا يصدق ومضيعة للوقت للجميع. - Cookie