ฉันจะลดระดับแพ็กเกจโดยไม่ลบผู้ติดตามได้อย่างไร


17

ฉันมีแพคเกจ mesa จำนวนมากที่ฉันได้อัปเกรดเป็นรุ่น PPA ก่อนที่จะกำจัด PPA เพื่อให้ฉันสามารถอัปเกรดระบบของฉันได้ ความแตกต่างในรุ่นต่าง ๆ เล็กน้อย (ในทางเทคนิคเหมือนกันมีเพียงหนึ่งชุดของไลบรารีที่มาจาก git และอื่น ๆ เป็นรุ่นสุดท้าย)

หากฉันพยายามปรับลดรุ่นผ่านทาง Synaptic, apt-get หรือ aptitude ฉันจะถูกโยนลงไปในนรกที่ต้องพึ่งพา

มีวิธีลดระดับแพ็คเกจด้วยตนเอง (อาจเป็นแบบหนึ่งต่อหนึ่ง) และทำเครื่องหมายแพ็คเกจที่ขึ้นต่อกันของพวกเขาเป็นอสังหาริมทรัพย์ (ถ้าเหมาะสม) จนกว่าฉันจะทำเสร็จหรือไม่

ป.ล. คำถามนี้: จะทำการดาวน์เกรดแพ็คเกจผ่าน apt-get ได้อย่างไร?แตกต่างกันเล็กน้อยและไม่ช่วยสถานการณ์นี้


ทำไมคุณไม่ppa-purgeก่อน
landroni

คุณอาจติดตั้งแพคเกจใหม่ตัวอย่างเช่นถ้าคุณใช้synapticเมื่อคุณเลือกแพ็คเกจ xyz การอ้างอิงทั้งหมดจะถูกเลือกโดยค่าเริ่มต้น แต่คุณอาจยกเลิกการเลือกการอ้างอิงทั้งหมดและเพียงแค่ติดตั้งแพ็กเกจหลักต่อไปคุณอาจติดตั้งการพึ่งพาทั้งหมดอีกครั้ง สิ่งนี้จะทำงานได้ก็ต่อเมื่อคุณพร้อมที่จะติดตั้งใหม่
สมาชิกที่ลงทะเบียน

@landroni ถ้าฉันลบมันจะลบแพ็คเกจที่ฉันไม่ต้องการลบ
RolandiXor

คำตอบ:


13

ฉันไม่เคยเล่นเกมนี้มาก่อน แต่ฉันขอแนะนำให้คุณhold(หรือlock) เวอร์ชั่นอ้างอิงที่ทำให้คุณเดือดร้อน วิธีนี้aptมีวิธีแก้ไขปัญหาที่เป็นไปได้จำนวน จำกัด และอาจไม่สับสนเมื่อคุณพยายามลดระดับแพ็คเกจอื่น ๆ


หากไม่มีสิ่งใดที่ใช้งานได้คุณสามารถใช้แนวทางแบบแมนนวลในคำตอบนี้: จะทำการดาวน์เกรดแพ็คเกจผ่าน apt-get ได้อย่างไร? . โดยทั่วไปดาวน์โหลดที่จำเป็น.debแพคเกจด้วยตนเองแล้วติดตั้งพวกเขาหนึ่งโดยหนึ่งใช้ในระดับต่ำกว่าdpkgและเป็นหนึ่งในข้อโต้แย้งที่มีพลังของมัน: --ignore-depends, --force-depends,--force-depends-versionหรือแม้กระทั่ง--force-allหรือแม้กระทั่ง

ในจิตวิญญาณเดียวกันกับข้างต้นคุณมี--force-downgradeข้อโต้แย้ง:

          downgrade(*): Install a package, even if newer version of
          it is already installed.

          Warning:  At  present  dpkg  does  not  do any dependency
          checking on downgrades and therefore will not warn you if
          the  downgrade  breaks the dependency of some other pack‐
          age. This can  have  serious  side  effects,  downgrading
          essential system components can even make your whole sys‐
          tem unusable. Use with care.

แต่สิ่งนี้จะถือว่าคุณได้อ่านman dpkgและเข้าใจสิ่งที่คุณทำ:

          Warning: These options are mostly intended to be used  by
          experts  only.  Using  them  without  fully understanding
          their effects may break your whole system.

ดูข้อผิดพลาด: หมายเลขเวอร์ชันไม่ได้ขึ้นต้นด้วยหลักและวิธีการติดตั้ง Java เวอร์ชันเก่าและวิธีการติดตั้งแพคเกจเวอร์ชั่นเก่าเช่น liquid 2.2.2? สำหรับตัวอย่างของ:

sudo dpkg --force-downgrade -i your_mesa_package.deb

และดูฉันจะติดตั้งแพคเกจโดยไม่ต้องติดตั้งการอ้างอิงบางอย่างได้อย่างไร สำหรับตัวอย่าง (พร้อมกับคำเตือนที่เหมาะสม) ของ:

sudo dpkg --force-all -i your_mesa_package.deb

อีกวิธีหนึ่งคือการสร้าง.debแพ็คเกจจำลองโดยใช้equivsแพ็คเกจ (และอาจเป็นชื่อที่แตกต่างกันเล็กน้อย) จากนั้นการติดตั้งแพคเกจจำลองจะช่วยให้คุณสามารถลบแพคเกจ "ของจริง" ในขณะที่รักษา deps ที่เกี่ยวข้องแล้วติดตั้งรุ่นที่เก่ากว่า ฉันไม่แน่ใจว่าตรงนี้จะทำงาน แต่ตรวจสอบหัวข้อนี้สำหรับรายละเอียดที่เกี่ยวข้อง: วิธีการลบ deb โดยไม่ต้องถอดพึ่งพา


4

ครั้งแรกที่คุณสามารถใช้apt-markเพื่อทำเครื่องหมายทั้งหมดอ้างอิงแพคเกจของเป้าหมาย(และอาจจะแนะนำ / ปัญหาคนเกินไป)ติดตั้งในระบบเป็นคู่มือการติดตั้ง หลังจากทำเช่นนั้นให้ติดตั้งเวอร์ชันก่อนหน้าของซอฟต์แวร์โดยapt-getระบุรุ่นอย่างชัดเจน

  • หากต้องการแสดงรายการการพึ่งพาแนะนำและแพ็คเกจที่แนะนำสำหรับแพ็คเกจ - แพ็คเกจ

    apt-cache show <target-package-name>
    
  • ทำเครื่องหมายแพ็คเกจที่ติดตั้งด้วยตนเอง :

    sudo apt-mark manual <package-name(s)>
    

    (ใช้สิ่งนี้สำหรับการอ้างอิงทั้งหมดแนะนำและแนะนำ)

  • ลบแพ็คเกจเป้าหมาย:

    sudo apt-get remove <target-package-name>
    
  • หากต้องการดูรายการเวอร์ชันแพ็คเกจที่คุณอาจดาวน์เกรด / อัปเกรดเป็นให้ใช้:

    apt-cache policy <target-package-name>
    
  • ติดตั้งแพ็คเกจปลายทางที่ต้องการ:

    sudo apt-get install <target-package-name>=<target-package-version-number> 
    

    หรือ

    sudo apt-get -t=<target release> install <target-package-name>
    

PS หากรายการการพึ่งพา / แนะนำ /แพ็คเกจที่แนะนำคือสิ่งที่ต้องทำเครื่องหมายด้วยapt-markมีขนาดใหญ่ให้บันทึกรายการที่ต้องการของผลลัพธ์ที่ได้รับการบรรจุโดยapt-cache show <target-package-name>ไปยังไฟล์ใด ๆ ที่พูด/path/to/fooและใช้apt-markคำสั่งผสมในลักษณะนี้:

cat /path/to/foo | xargs -imarkthese sudo apt-mark manual markthese

วิธีนี้อาจใช้งานได้ แต่แทนที่จะทำเครื่องหมายมากกว่า 100 แพคเกจฉันเพิ่งไปกับคำตอบอื่น
RolandiXor

@RolandiXor คุณสามารถใช้apt-cache policy <target-package-name>เพื่อให้มีรายชื่อของแพ็คเกจรุ่นที่คุณสามารถดาวน์เกรด / อัปเกรดเป็น ..
ความแม่นยำ

.. โปรดอ้างถึงการแก้ไขที่ทำการโพสต์; หากมีการทำเครื่องหมายไฟล์จำนวนมากคุณสามารถใช้คอมโบคำสั่งที่รวมอยู่ ...
แม่นยำ

ฉันไม่คิดว่าคุณเข้าใจฉัน อย่างไรก็ตามฉันได้รับการแก้ไขแล้วและฉันได้รับรางวัล (ไม่สามารถสลับได้)
RolandiXor

1

ฉันเพิ่งผ่านความเจ็บปวดจากการอัพเกรดเป็นแพ็คเกจอัปสตรีมแล้วตัดสินใจลดระดับ นี่คือผ่านพื้นที่เก็บข้อมูลส่วนตัวของผู้ดูแล ในกรณีของฉันนี่คือทั้งหมดที่เกี่ยวกับการทดลองใช้ systemd 233 รุ่นล่าสุด (ยังไม่ได้เผยแพร่)

กุญแจสำคัญคือการเข้าใจว่าคุณต้องระบุแพ็คเกจทั้งหมดที่ควรลดระดับ หากคุณได้รับสิทธินี้โอกาสที่เหมาะสมจะทำในสิ่งที่คุณต้องการ หากคุณพลาดบางอย่างไปแล้ว apt จะบอกคุณว่าการกระทำจะทำให้แพ็กเกจจำนวนมากถูกลบออกไป เพื่อให้แน่ใจว่าเราใช้แฟล็ก '-s' เพื่อลองปรับลดรุ่นก่อนดำเนินการจริง

ขั้นตอนที่คุณต้องทำคือ:

1) แสดงรายการการพึ่งพาทั้งหมดที่อัปเกรดเป็นอัปสตรีม (ใช้คำหลักอื่น ๆ หากสถานการณ์ของคุณแตกต่าง):

dpkg -l|grep upstream

สิ่งนี้ให้รายการของแพ็คเกจที่มีหมายเลขเวอร์ชันอัปสตรีม

2) เขียนรายการเวอร์ชั่นเสถียรที่ถูกต้องสำหรับแต่ละแพ็คเกจ:

for i in libnss-resolve:amd64 libsystemd0:amd64 libpam-systemd:amd64 libsystemd0:i386 libudev1:amd64 libudev1:i386 systemd systemd-sysv udev; do apt-cache show $i; done|grep Version

3) ตรวจสอบอีกครั้งทุกอย่างดี:

apt -s --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5

0 to upgrade, 0 to newly install, 9 to downgrade, 0 to remove and 0 not to upgrade.

(ไม่แน่ใจว่าจำเป็นต้องทำการติดตั้งใหม่หรือไม่ btw แต่นี่คือสิ่งที่ฉันทำ)

4) ลบ -s และทำมัน

apt --allow-downgrades --no-remove --reinstall install libnss-resolve:amd64=232-21ubuntu5 libsystemd0:amd64=232-21ubuntu5 libpam-systemd:amd64=232-21ubuntu5 libsystemd0:i386=232-21ubuntu5 libudev1:amd64=232-21ubuntu5 libudev1:i386=232-21ubuntu5 systemd=232-21ubuntu5 systemd-sysv=232-21ubuntu5 udev=232-21ubuntu5
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.