ฉันจะ จำกัด การอัพเดตที่ติดตั้งไว้กับสิ่งที่มาจากชุดของที่เก็บเฉพาะได้อย่างไร? เป็นไปได้ไหม?
ฉันจะ จำกัด การอัพเดตที่ติดตั้งไว้กับสิ่งที่มาจากชุดของที่เก็บเฉพาะได้อย่างไร? เป็นไปได้ไหม?
คำตอบ:
การปักเป็นกระบวนการที่ช่วยให้คุณสามารถใช้งาน 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-updates
xenial-security
a=xenial
a=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_preference
man-pageสำหรับสิ่งนี้
ไฟล์ Pin หรือ apt preferences อยู่ใน/etc/apt/preferences.d
โฟลเดอร์ การปักหมุดแต่ละครั้งมีสามบรรทัด
บรรทัดแรกเริ่มต้นด้วยPackage:
และชื่อแพคเกจที่คั่นด้วยจุลภาคมีดังนี้ อนุญาตให้ใช้การแสดงออกและ globs ปกติ
บรรทัดที่สองเริ่มต้นด้วยPin:
และใช้เพื่อกำหนดเป้าหมายชุดของแพ็กเกจ
ถ้าเราต้องการแพคเกจขาออกจากxenial
ที่สูงกว่าเราจะใช้xenial-updates
release 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-updates
xenial-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-get
man pages จะไม่ระบุวิธีการทำเช่นนั้น
ในหมายเหตุที่เกี่ยวข้องตัวอย่างเช่นกระบวนการอัปเกรดการแจกจ่าย Ubuntu จะปิดใช้งานที่เก็บข้อมูลบุคคลที่สามทั้งหมดในระหว่างการอัปเกรด (และไม่เพียงแค่เรียกใช้ตัวเลือกบางอย่างเพื่อยกเว้นสิ่งเหล่านั้นชั่วคราว)
อีกตัวเลือกหนึ่งของ GUI คือเลือกต้นทางในตัวจัดการแพ็คเกจ Synaptic