كيف يمكنني سرد ​​الحد الأدنى من مجموعة حزم دبيان اللازمة لإعادة إنشاء مجموعة من الحزم المثبتة؟

StackOverflow https://stackoverflow.com/questions/2273836

  •  20-09-2019
  •  | 
  •  

سؤال

هل هناك طريقة للحصول على 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 للعثور على التبعيات لحزمة معينة (انظر هذه الصفحة على سبيل المثال الاستخدام والإخراج).

الخطوط العريضة الإجراء

  1. تكرار من خلال قائمة الحزم التي تم إرجاعها بواسطة رمز Dannysauer
  2. يتصل apt-rdepends على كل
  3. حذف أي حزم من القائمة التي تظهر في إخراج 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

هل تعمل بشكل جيد؟ هل يمكن تحسينه بطريقة ما؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top