كيف يمكنني سرد الحد الأدنى من مجموعة حزم دبيان اللازمة لإعادة إنشاء مجموعة من الحزم المثبتة؟
سؤال
هل هناك طريقة للحصول على DPKG أو APT-GET أو الكفاءة لإنتاج قائمة من الحزم التي تحتاج إلى تثبيت على جهاز ثانٍ لتكرار الحزم المثبتة على الأول؟
أي إذا قمت بتثبيت خادم Ubuntu عادي ، فقد اخترت خيار SSHD في وقت التثبيت ، ثم تثبيت بناءً ، أتوقع أن يبدو الإخراج شيئًا مثل:
#ubuntu 9.10 server
openssh-sshd
build-essential
بقدر ما أستطيع أن أرى ، ستنتج جميع أدوات التغليف المتاحة قائمة مطوّلة للحزم على مربع. لست مهتمًا بـ Openssh Libs و LD و GCC وجميع الحزم الأخرى التي يتم سحبها بواسطة SSHD و Build-Essessed ، حيث سيتم تثبيتها عندما أقوم بتثبيت SSHD و Build-Essessed.
أود أن أرى فقط قائمة الحزمة التي أحتاج إلى تثبيتها لإعادة إنشاء مجموعة الحزم الحالية على جهاز آخر.
هل هذا ممكن؟
المحلول
deborphan
, ، نوعا ما. إنه يبني قائمة بكل حزمة في نظامك ، ويكتشف ما يعتمد على ما ، ويطبع الحزم التي لا تحتوي على أي تبعيات. بشكل افتراضي ، يطبع المكتبات فقط (لجعل من السهل العثور على مكتبات تم تثبيتها بواسطة حزم أخرى ولم تعد هناك حاجة إليها ، وبالتالي الاسم). لديها خيارات لفعل ما تريد ، في الغالب. أديرها مثل:
deborphan -anp required --no-show-section
-a
يحدد جميع الحزم (وليس فقط المكتبات)
-n
يتجاهل "تقترح" أو "يوصي" التحقق من التبعية (أي فقط "يعتمد")
-p required
يسرد جميع الحزم على الرغم من الأولوية
--no-show-section
لا يشير إلى أي جزء من Debian ، مجرد ميزة تنسيق لطيفة قد تجدها مفيدة لبناء قائمة.
الآن ، ستفقد الحزم ، لأن بعض الحزم لها تبعيات دائرية. لكن هؤلاء يميلون إلى أن يكونوا غير شائعين إلى حد ما ، لذلك يجب أن يقربك بما فيه الكفاية.
نصائح أخرى
الرمز الذي نشره Dannysauer هو بداية. بمجرد أن يكون لديك قائمة من الحزم التي تتضمن التبعيات ، يمكنك استخدامها apt-rdepends
للعثور على التبعيات لحزمة معينة (انظر هذه الصفحة على سبيل المثال الاستخدام والإخراج).
الخطوط العريضة الإجراء
- تكرار من خلال قائمة الحزم التي تم إرجاعها بواسطة رمز Dannysauer
- يتصل
apt-rdepends
على كل - حذف أي حزم من القائمة التي تظهر في إخراج
apt-rdepends
لذا ، فأنت تريد قائمة الحزم التي تم تثبيتها بشكل صريح (مثل ، على سبيل المثال ، Ubuntu-desktop و Openssh) ، وليس الاعتماد التلقائي؟ أنا لست إيجابيًا ، لكنني أعتقد أن هذا ما dpkg --get-selections
يفعل. لذلك ، يمكنك القيام به
dpkg --get-selections > file
وبعد ذلك ، على الكمبيوتر الآخر ، استخدم نفس "الملف" وتشغيله
dpkg --set-selections < file
apt-get dselect-upgrade
أنالست إيجابية للغاية أن تلك الأوامر تفعل فقط الحزم المختارة يدويًا ، وأنا حاليًا بعيدًا عن أي أنظمة قائمة على ديبان للتحقق منها. قون
ماذا عن هذا:
#!/bin/bash
packages=$(dpkg --get-selections | grep '[[:space:]]install$' | awk '{print $1}')
for pkg in $packages
do
nr_lines=$(apt-cache -i rdepends $pkg | wc -l )
if [ "$nr_lines" = "2" ]
then
echo $pkg
fi
done
هل تعمل بشكل جيد؟ هل يمكن تحسينه بطريقة ما؟