จะติดตั้งการอัพเดตจากที่เก็บเฉพาะได้อย่างไร


39

ฉันจะ จำกัด การอัพเดตที่ติดตั้งไว้กับสิ่งที่มาจากชุดของที่เก็บเฉพาะได้อย่างไร? เป็นไปได้ไหม?


คุณต้องการที่จะสามารถระบุ repo ในช่วงรันไทม์หรือควรจะเป็นสิ่งที่คงที่มากขึ้น? สอง คำตอบนี้จะถือว่าตัวเลือกหลัง
tshepang

เป็นการดีที่มันจะเป็นในช่วงรันไทม์ ตัวเลือกแบบคงที่ก็เพียงพอแล้ว
Ton van den Heuvel

2
คุณมุ่งหน้าและความช่วยเหลือจริงที่คุณขอแตกต่างกัน
sundar

คำตอบ:


29

ใช้การปักหมุด

การปักเป็นกระบวนการที่ช่วยให้คุณสามารถใช้งาน Ubuntu ได้อย่างเสถียร (หรือระบบเดเบียนอื่น ๆ ) ในขณะที่กำลังคว้าแพ็คเกจจากรุ่นที่ใหม่กว่า - help.ubuntu.com

คุณสามารถปิดใช้งานการอัปเดตอัตโนมัติจากที่เก็บบางแห่งโดยไม่ต้องลบออกทั้งหมดผ่านaptนโยบาย:

หากต้องการปิดใช้งานการอัปเดตอัตโนมัติจากที่เก็บrepoให้เพิ่มไฟล์ที่
/etc/apt/preferences.d/repoมีเนื้อหาต่อไปนี้:

Package: *
Pin: release n=repo
Pin-Priority: 50

ซึ่งจะให้แพคเกจทั้งหมดจากพื้นที่เก็บข้อมูลนี้มีความสำคัญต่ำกว่าแพคเกจที่ติดตั้งแล้ว (ซึ่งมี 100)

สำหรับข้อมูลเพิ่มเติมman apt_preferencesหรือตรวจสอบUbuntu ชุมชนวิกิพีเดีย


3
มันเป็นความอัปยศเพียง apt_preferences คำตอบเป็นครั้งสุดท้าย ...
โรเบิร์ต Siemer

วิธีการค้นหารุ่นที่มาจาก repo ใด
Max N

2
@ MaxN คุณมักจะพบข้อมูลโดยการเรียกใช้apt-cache policy package-name
Anwar

นี่จะไม่บังคับให้ที่เก็บข้อมูลไม่ได้รับการพิจารณาในขณะที่อัปเดต เพราะrelease n=repoจะไม่แคชใครเลย
อันวาร์

35

คุณสามารถระบุรุ่นด้วย-tตัวเลือก ตัวอย่างฉันได้เพิ่มที่เก็บต่อไปนี้/etc/apt/sources.listเพื่อติดตั้ง Iceweasel รุ่นล่าสุด:

deb http://mozilla.debian.net/ squeeze-backports iceweasel-release

ดังที่คุณทราบว่ามีแพ็คเกจเดียวกันiceweaselในที่เก็บ Debian อย่างเป็นทางการ หากฉันต้องการติดตั้ง Iceweasel จากรุ่นที่เฉพาะเจาะจงนี้ฉันเรียกใช้:

apt-get install -t squeeze-backports iceweasel

จาก apt-get manual page:

-t, --target-release, --default-release
           This option controls the default input to the policy engine, it creates a default pin at priority 990 using the specified
           release string. This overrides the general settings in /etc/apt/preferences. Specifically pinned packages are not affected by
           the value of this option. In short, this option lets you have simple control over which distribution packages will be retrieved
           from. Some common examples might be -t '2.1*', -t unstable or -t sid. Configuration Item: APT::Default-Release; see also the
           apt_preferences(5) manual page.

ฉันคิดว่านี่เป็นทางออกที่ดีกว่า

อัปเดต : ตามที่ @SuB กล่าวถึงในความคิดเห็น" -tระบุรีลีสไม่ใช่ชื่อที่เก็บไม่มีชื่อที่เก็บในอูบุนตู (ต่างจากลินุกซ์ที่ใช้ RedHat เช่น RHEL, Fedora, CentOS, ... )"


4
ตามที่คุณเห็นในapt-getคู่มือ-tระบุ release ไม่ใช่ชื่อที่เก็บ ไม่มีชื่อที่เก็บในอูบุนตู (ต่างจากลินุกซ์ที่ใช้ RedHat เช่น RHEL, Fedora, CentOS, ... )
SuB

1
@SuB ใช่คุณพูดถูก! ฉันสับสนชื่อพื้นที่เก็บข้อมูลด้วยการเปิดตัว!
นักเขียนการ์ตูน

-t xenialใช้งานได้กับแพ็คเกจเดียว แต่การพึ่งพาทั้งหมดนั้นจะยังคงถูกดึงมาจากแพ็คเกจที่สูงกว่า
Anwar

11

คำตอบสั้น ๆ

คุณต้องปักหมุดที่เก็บที่คุณไม่ต้องการติดตั้งด้วยลำดับความสำคัญน้อยกว่า 100 ซึ่งหมายถึง (จากapt_preferenceหน้าคน)

100 <= P <500
ทำให้รุ่นที่จะติดตั้งยกเว้นว่ามีรุ่นที่เป็นของการแจกจ่ายอื่น ๆ หรือรุ่นที่ติดตั้งเป็นรุ่นล่าสุด

และเพื่อเลือกพื้นที่เก็บข้อมูลสำหรับปักหมุดคุณจะต้องใช้ฟิลด์จากReleaseไฟล์ของที่เก็บ เช่นarchive, label, release, versionฯลฯ โดยการระบุค่าของเขตข้อมูลเหล่านี้คุณสามารถเลือกได้อย่างแม่นยำพื้นที่เก็บข้อมูลและกำหนดลำดับความสำคัญที่คุณต้องการไป ตรวจสอบหน้าapt_preferenceสำหรับรายละเอียดเพิ่มเติม


คำตอบยาว

ก่อนดำเนินการต่อเราจำเป็นต้องรู้สิ่งสำคัญบางอย่างเกี่ยวกับการปักหมุด เหล่านั้นรวมถึง

  1. สาขาของReleaseไฟล์และมันเป็นแผนที่เพื่อapt-cache policyส่งออก

  2. รูปแบบของไฟล์การกำหนดค่า apt

  3. การใช้Releaseฟิลด์ไฟล์เพื่อกำหนดลำดับความสำคัญ

1. ฟิลด์ของReleaseไฟล์และapt-cache policyเอาต์พุต

จากบทความDebian Wiki

  • ลักษณะ
  • ฉลาก
  • ที่มา
  • รุ่น
  • ชุด
  • รหัสชื่อ
  • ส่วนประกอบ
  • สถาปัตยกรรม

คุณจะเห็นผลลัพธ์จากapt-cache policyสิ่งเหล่านี้

 500 http://mirrors.ircam.fr/pub/ubuntu/archive xenial/main amd64 Packages
 release v=16.04,o=Ubuntu,a=xenial,n=xenial,l=Ubuntu,c=main,b=amd64

ค่าในบรรทัดเหล่านี้มาจากReleaseไฟล์

  • คำอธิบายตั้งค่าคำอธิบายสำหรับที่เก็บ สิ่งนี้ไม่แสดงในapt-cache policyเอาต์พุต

  • Labelมันเป็นเลเบลของที่เก็บ ที่เก็บข้อมูลจำนวนมากมีป้ายกำกับที่ว่างเปล่า มันแสดงให้เห็นl=<label>ในการส่งออก

  • Originสิ่งนี้บอกเกี่ยวกับที่มาของที่เก็บ ที่เก็บ Ubuntu อย่างเป็นทางการมีUbuntuค่า ดังที่แสดงo=ในเอาต์พุต

  • Versionคือเวอร์ชันของการแจกแจง มันคือ 16.04 สำหรับ Xenial ดังที่แสดงv=ในเอาต์พุต

  • สวีทเป็นเช่นเดียวกับเอกสารเก่า จาก debian wiki มันคือชื่อของการแจกจ่าย Debian แพ็คเกจในไดเรกทอรีนี้เป็นของ (หรือถูกออกแบบมาสำหรับ), เช่นเสถียร, การทดสอบหรือไม่เสถียร . สำหรับ Ubuntu เหล่านี้เป็นrelease-updates, ฯลฯrelease-security ตัวอย่างเช่น, มันก็แสดงให้เห็นในการส่งออกเป็น, PPAs ใช้เพียงชื่อรุ่นสำหรับสิ่งนี้นั่นเป็นเหตุผลว่าทำไมมันจึงไม่ได้ช่วยอะไรมากในการปักหมุดxenial-updatesxenial-securitya=xeniala=xenial-security

  • คอมโพเนนต์บอกเกี่ยวกับสิ่งที่อนุญาตให้ใช้สิทธิ์ มันmain, multiverse, restricted, universeในอูบุนตู ในผลลัพธ์จะแสดงเป็นc=mainหรือc=restrictedอื่น ๆ PPAs ส่วนใหญ่ใช้mainสำหรับฟิลด์นี้ดังนั้นจึงไม่ช่วยในการตรึงมากเช่นกัน

  • สถาปัตยกรรมเป็นเรื่องเกี่ยวกับสถาปัตยกรรมระบบปฏิบัติการ แสดงเป็นb=i386หรือb=amd64ในผลลัพธ์

  • ชื่อรหัสคือชื่อรุ่นของการแจกจ่าย สำหรับ 16.04 xenialมันเป็น สำหรับ 14.04 trustyมันเป็น แสดงในapt-cache policyออกเป็นหรือn=xenial n=trustyมันก็เหมือนกันสำหรับที่เก็บทั้งหมดสำหรับการกระจายเดียวมักจะ นั่นเป็นเหตุผลที่มันไม่ได้ช่วยในการตรึงมาก

บรรทัดอื่น ๆ ในapt-cache policyเอาต์พุตเริ่มต้นด้วยการoriginบอกแหล่งกำเนิดอินเทอร์เน็ตของที่เก็บ นอกจากนี้ยังสามารถใช้ในการปักหมุด แต่ไม่ควรผสมกับฟิลด์Releaseไฟล์ Originเหล่านั้นแตกต่างกัน

เราจะใช้ค่าเหล่านี้เพื่อตรึงพื้นที่เก็บข้อมูล

ดังนั้นเราจะใช้การตรึง1เพื่อ จำกัด พื้นที่เก็บข้อมูลได้อย่างไร

มีหลายวิธีในการควบคุมการปักหมุดและชุดย่อยขนาดเล็กเท่านั้นที่มีประสิทธิภาพสำหรับ Ubuntu คำอธิบายรายละเอียดอยู่นอกเหนือขอบเขตของคำตอบ โปรดอ้างอิงถึงapt_preferenceman-pageสำหรับสิ่งนี้

2. ปักหมุดรูปแบบไฟล์

ไฟล์ Pin หรือ apt preferences อยู่ใน/etc/apt/preferences.dโฟลเดอร์ การปักหมุดแต่ละครั้งมีสามบรรทัด

  • บรรทัดแรกเริ่มต้นด้วยPackage:และชื่อแพคเกจที่คั่นด้วยจุลภาคมีดังนี้ อนุญาตให้ใช้การแสดงออกและ globs ปกติ

  • บรรทัดที่สองเริ่มต้นด้วยPin:และใช้เพื่อกำหนดเป้าหมายชุดของแพ็กเกจ

    ถ้าเราต้องการแพคเกจขาออกจากxenialที่สูงกว่าเราจะใช้xenial-updatesrelease a=xenial

    หากเราต้องการปักหมุดรุ่น 5.0 เราจะใช้version 5.0ที่นี่ อนุญาตให้สวมถุงมือกลมได้

    หรือถ้าเราต้องการที่จะแพคเกจขาออกจากแหล่งกำเนิดที่เราจะใช้http://archive.ubuntu.com origin "archive.ubuntu.com"หมายเหตุเราไม่ได้เขียนhttp://โปรโตคอลที่นั่น

  • บรรทัดที่สามเริ่มต้นด้วยPin-Priority:ค่าของมันคือตัวเลข ซึ่งหมายถึงลำดับความสำคัญของรายการเป้าหมายด้านบน

3. การใช้Releaseฟิลด์ไฟล์เพื่อกำหนดลำดับความสำคัญ

นี่คือตัวอย่าง

Package: *
Pin: release a=xenial
Pin-Priority: 1001

ในตัวอย่างนี้แพคเกจจากxenialจดหมายเหตุจะได้รับความสำคัญสูงกว่าและxenial-updatesxenial-security

หลังจากตรึง, ทำงานapt-cache policy nautilusแสดงให้เห็นว่ามันแน่นอนได้ให้ความสำคัญสูงเป็นรุ่นที่ลดลงจากxenialที่เก็บถาวรกว่าสูง versioned จากxenial-updatesเก็บ สังเกตเห็นCandidate:สาย

nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.4.is.3.14.3-0ubuntu4
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 100
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

แต่ถ้าเราต้องการให้ความสำคัญมากกว่า PPA ที่ให้แพคเกจด้วยสิ่งนี้จะไม่ทำงาน เนื่องจาก PPAs ใช้ชื่อไฟล์เก็บถาวรเดียวกันxenialตามค่าเริ่มต้น ดังนั้นการกำหนดลำดับความสำคัญให้กับa=xenialจะใช้กับแพ็คเกจเหล่านั้นด้วย ตัวอย่างเช่น (หลังจากเปิดใช้งาน PPA)

13:31 $ apt-cache policy nautilus
nautilus:
  Installed: 1:3.18.5-0ubuntu1~xenial1
  Candidate: 1:3.18.5-0ubuntu1~xenial1
  Version table:
 *** 1:3.18.5-0ubuntu1~xenial1 1001
        500 http://ppa.launchpad.net/budgie-remix/ppa/ubuntu xenial/main amd64 Packages
        500 http://ppa.launchpad.net/gnome3-team/gnome3/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     1:3.18.4.is.3.14.3-0ubuntu5 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     1:3.18.4.is.3.14.3-0ubuntu4 1001
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

ตอนนี้ผู้สมัครรุ่นมาจาก PPA ทั้งแพ็คเกจจากxenialไฟล์เก็บถาวรของ repo Ubuntu อย่างเป็นทางการและ PPA มีลำดับความสำคัญเท่ากัน1001เนื่องจากทั้งคู่ใช้ค่าเดียวกันสำหรับArchiveในไฟล์ Release ในการปักหมุดสำเร็จเราจำเป็นต้องรวมเขตข้อมูลเพิ่มเติมในไฟล์ Pin


ตัวอย่างบางส่วน

ปักหมุดที่เก็บ PPA

ในการตรึงแพคเกจจากพื้นที่เก็บข้อมูลเราจำเป็นต้องกำหนดเป้าหมายโดยใช้ข้อมูลที่พบจากapt-cache policyคำสั่ง เราเพิ่งเห็นว่าa=xenialจะไม่ช่วยระบุตำแหน่งที่เก็บพิน เราจำเป็นต้องใช้หลายเขตข้อมูลร่วมกันโดยใช้เครื่องหมายจุลภาคในไฟล์กำหนดลักษณะเพื่อกำหนดเป้าหมายที่เก็บอย่างแม่นยำ

ตัวอย่างเช่นเพื่อป้องกันไม่ให้แพคเกจทั้งหมดจากhttp://ppa.launchpad.net/oibaf/graphics-drivers/ppa เราสามารถใช้

Package: *
Pin: release n=xenial,o=LP-PPA-oibaf-graphics-drivers
Pin-Priority: 10

ที่นี่เรากำลังใช้ค่าชื่อรหัสเช่นเดียวกับOriginค่าของ PPA (แม้ว่าจะไม่จำเป็นต้องใช้ค่าชื่อไฟล์ที่นี่จริง ๆ ) บางครั้งที่เก็บอาจพลาดค่าเหล่านี้ ในกรณีเหล่านั้นควรใช้เทคนิคอื่น ผลลัพธ์ของการapt-cache policy libgl1-mesa-glxบอกว่ามันใช้งานได้ ลดความสำคัญของแพ็คเกจทั้งหมดของ PPA นี้

libgl1-mesa-glx:
  Installed: 12.1~git1608200730.16ef7a~gd~x
  Candidate: 12.1~git1608200730.16ef7a~gd~x
  Version table:
 *** 12.1~git1608200730.16ef7a~gd~x 100
        -10 http://ppa.launchpad.net/oibaf/graphics-drivers/ubuntu xenial/main amd64 Packages
        100 /var/lib/dpkg/status
     11.2.0-1ubuntu2.1 500
        500 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
     11.2.0-1ubuntu2 500
        500 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 Packages

ไม่สนใจข้อเท็จจริงที่ว่ามันเป็นผู้สมัคร นี้ happended เพราะจะถูกติดตั้งอยู่แล้วในระบบของฉัน ตรวจสอบลำดับความสำคัญทางด้านขวา

ปักหมุดที่เก็บเมื่อไม่มีข้อมูลการปล่อย

หากเราต้องการตรึงพื้นที่เก็บข้อมูลที่มีข้อมูลการวางจำหน่ายหายไปเช่นนี้http://download.opensuse.org/repositories/home:/sarimkhan/xUbuntu_14.04เราต้องใช้วิธีอื่น เนื่องจากไม่มีที่เก็บอื่นที่ใช้ต้นกำเนิดนั้นเราจึงสามารถใช้originเพื่อปักหมุดที่เก็บนี้ได้อย่างปลอดภัย

Package: *
Pin: origin download.opensuse.org
Pin-Priority: 10

หมายเหตุ 1:ต้นกำเนิดนี้เป็นจุดเริ่มต้นทางอินเทอร์เน็ตไม่ใช่แหล่งกำเนิดซึ่งระบุผู้ขายในไฟล์ Release

หมายเหตุ 2: Pin-Priorityหมายเลขมีความหมายพิเศษ ตรวจสอบapt_preferenceหน้าคู่มือเพื่อดูรายละเอียด


7

ทางเลือกที่ใช้ gui คือเปิดศูนย์ซอฟต์แวร์และเลือกแก้ไข> แหล่งซอฟต์แวร์ ...

เลือกแหล่งซอฟแวร์พร้อมแท็บซอฟต์แวร์ Ubuntu

แหล่งซอฟแวร์พร้อมเลือกแท็บซอฟต์แวร์อื่น

สิ่งที่คุณต้องทำคือยกเลิกการทำเครื่องหมายที่เก็บที่คุณไม่ต้องการให้อัปเดต

หวังว่านี่จะช่วยได้


5

ตัวเลือกที่ชัดเจนคือการแก้ไข/etc/apt/sources.listและคอมเม้นต์ที่เก็บอื่น ๆ ทั้งหมดจากนั้นเรียกใช้

apt-get update && apt-get upgrade && apt-get autoclean

sources.listแล้วเอาความคิดเห็นจาก อาจไม่ใช่วิธีที่ดีที่สุด แต่อย่างน้อยapt-getman pages จะไม่ระบุวิธีการทำเช่นนั้น

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


1

อีกตัวเลือกหนึ่งของ GUI คือเลือกต้นทางในตัวจัดการแพ็คเกจ Synaptic

  1. ค้นหาชื่อแพ็คเกจที่คุณต้องการติดตั้ง
  2. คลิกที่ปุ่มกำเนิด
  3. เลือกที่เก็บที่คุณต้องการติดตั้ง
  4. เลือกแพ็คเกจ
  5. ใช้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.