ฉันจะ จำกัด การอัพเดตที่ติดตั้งไว้กับสิ่งที่มาจากชุดของที่เก็บเฉพาะได้อย่างไร? เป็นไปได้ไหม?
ฉันจะ จำกัด การอัพเดตที่ติดตั้งไว้กับสิ่งที่มาจากชุดของที่เก็บเฉพาะได้อย่างไร? เป็นไปได้ไหม?
คำตอบ:
การปักเป็นกระบวนการที่ช่วยให้คุณสามารถใช้งาน Ubuntu ได้อย่างเสถียร (หรือระบบเดเบียนอื่น ๆ ) ในขณะที่กำลังคว้าแพ็คเกจจากรุ่นที่ใหม่กว่า - help.ubuntu.com
คุณสามารถปิดใช้งานการอัปเดตอัตโนมัติจากที่เก็บบางแห่งโดยไม่ต้องลบออกทั้งหมดผ่านaptนโยบาย:
หากต้องการปิดใช้งานการอัปเดตอัตโนมัติจากที่เก็บrepoให้เพิ่มไฟล์ที่/etc/apt/preferences.d/repoมีเนื้อหาต่อไปนี้:
Package: *
Pin: release n=repo
Pin-Priority: 50
ซึ่งจะให้แพคเกจทั้งหมดจากพื้นที่เก็บข้อมูลนี้มีความสำคัญต่ำกว่าแพคเกจที่ติดตั้งแล้ว (ซึ่งมี 100)
สำหรับข้อมูลเพิ่มเติมman apt_preferencesหรือตรวจสอบUbuntu ชุมชนวิกิพีเดีย
apt-cache policy package-name
release n=repoจะไม่แคชใครเลย
คุณสามารถระบุรุ่นด้วย-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, ... )"
apt-getคู่มือ-tระบุ release ไม่ใช่ชื่อที่เก็บ ไม่มีชื่อที่เก็บในอูบุนตู (ต่างจากลินุกซ์ที่ใช้ RedHat เช่น RHEL, Fedora, CentOS, ... )
-t xenialใช้งานได้กับแพ็คเกจเดียว แต่การพึ่งพาทั้งหมดนั้นจะยังคงถูกดึงมาจากแพ็คเกจที่สูงกว่า
คุณต้องปักหมุดที่เก็บที่คุณไม่ต้องการติดตั้งด้วยลำดับความสำคัญน้อยกว่า 100 ซึ่งหมายถึง (จากapt_preferenceหน้าคน)
100 <= P <500
ทำให้รุ่นที่จะติดตั้งยกเว้นว่ามีรุ่นที่เป็นของการแจกจ่ายอื่น ๆ หรือรุ่นที่ติดตั้งเป็นรุ่นล่าสุด
และเพื่อเลือกพื้นที่เก็บข้อมูลสำหรับปักหมุดคุณจะต้องใช้ฟิลด์จากReleaseไฟล์ของที่เก็บ เช่นarchive, label, release, versionฯลฯ โดยการระบุค่าของเขตข้อมูลเหล่านี้คุณสามารถเลือกได้อย่างแม่นยำพื้นที่เก็บข้อมูลและกำหนดลำดับความสำคัญที่คุณต้องการไป ตรวจสอบหน้าapt_preferenceสำหรับรายละเอียดเพิ่มเติม
ก่อนดำเนินการต่อเราจำเป็นต้องรู้สิ่งสำคัญบางอย่างเกี่ยวกับการปักหมุด เหล่านั้นรวมถึง
สาขาของReleaseไฟล์และมันเป็นแผนที่เพื่อapt-cache policyส่งออก
รูปแบบของไฟล์การกำหนดค่า apt
การใช้Releaseฟิลด์ไฟล์เพื่อกำหนดลำดับความสำคัญ
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สำหรับสิ่งนี้
ไฟล์ 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:ค่าของมันคือตัวเลข ซึ่งหมายถึงลำดับความสำคัญของรายการเป้าหมายด้านบน
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
ในการตรึงแพคเกจจากพื้นที่เก็บข้อมูลเราจำเป็นต้องกำหนดเป้าหมายโดยใช้ข้อมูลที่พบจาก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หน้าคู่มือเพื่อดูรายละเอียด
ทางเลือกที่ใช้ gui คือเปิดศูนย์ซอฟต์แวร์และเลือกแก้ไข> แหล่งซอฟต์แวร์ ...


สิ่งที่คุณต้องทำคือยกเลิกการทำเครื่องหมายที่เก็บที่คุณไม่ต้องการให้อัปเดต
หวังว่านี่จะช่วยได้
ตัวเลือกที่ชัดเจนคือการแก้ไข/etc/apt/sources.listและคอมเม้นต์ที่เก็บอื่น ๆ ทั้งหมดจากนั้นเรียกใช้
apt-get update && apt-get upgrade && apt-get autoclean
sources.listแล้วเอาความคิดเห็นจาก อาจไม่ใช่วิธีที่ดีที่สุด แต่อย่างน้อยapt-getman pages จะไม่ระบุวิธีการทำเช่นนั้น
ในหมายเหตุที่เกี่ยวข้องตัวอย่างเช่นกระบวนการอัปเกรดการแจกจ่าย Ubuntu จะปิดใช้งานที่เก็บข้อมูลบุคคลที่สามทั้งหมดในระหว่างการอัปเกรด (และไม่เพียงแค่เรียกใช้ตัวเลือกบางอย่างเพื่อยกเว้นสิ่งเหล่านั้นชั่วคราว)
อีกตัวเลือกหนึ่งของ GUI คือเลือกต้นทางในตัวจัดการแพ็คเกจ Synaptic