ฉันจะยกเลิกหรือย้อนกลับคำสั่ง“ apt-get upgrade” บน Ubuntu ได้อย่างไร?


26

มีวิธีใน Ubuntu ที่จะย้อนกลับหรือยกเลิกการอัปเกรดล่าสุดหลังจากทำapt-get upgradeหากคุณไม่ชอบผลลัพธ์หรือไม่


ไม่ได้มีงานจำนวนมากที่ไม่คุ้มค่า คุณสามารถบันทึก / บ้านของคุณและเริ่มต้นใหม่ได้หรือไม่ คุณไม่ชอบอะไร
user10547

ฉันยังไม่ได้ทำ แต่นี่เป็นเซิร์ฟเวอร์ที่ใช้งานจริงและฉันต้องแน่ใจว่าไม่มีความเข้ากันไม่ได้กับการตั้งค่า PHP / MySQL / Apache2 ที่กำหนดเองของเราและกลับมาใหม่อย่างรวดเร็วหากมี ฉันต้องการอัปเกรดเพราะฉันคิดว่ามันจะแก้ไขปัญหาอื่นที่ฉันมีอยู่
jjclarkson

ถ้าคุณไม่ได้ทำอการอัปเกรดผมไม่เห็นสิ่งที่ส่งผลให้มีไม่ชอบตั้งแต่ผู้ที่มีแนวโน้มมากที่สุดที่การปรับปรุงการรักษาความปลอดภัย
LiraNuna

หากคุณมีการติดตั้งแบบกำหนดเองคุณจะต้องรับผิดชอบในการบันทึกแพตช์และปรับใช้กับเวอร์ชันปัจจุบัน
LiraNuna

2
หากเป็นเซิร์ฟเวอร์ให้ลองใช้เซิร์ฟเวอร์ dev ก่อนที่จะอัปเกรดเซิร์ฟเวอร์ที่ใช้งานจริง
Solarc

คำตอบ:


5

aptitudeจะช่วยให้คุณเข้าถึงทุกรุ่นของแพคเกจถ้ามีตามการจัดการแพคเกจ Debian


2.7.3 อาจช่วยให้คุณปรับลดรุ่นเป็นเสถียร 2.7.16 อธิบายการบันทึกและการกู้คืนสถานะ dpkg dpkg-repack ช่วยให้คุณสามารถ "บีบอัด" แพคเกจเดียว
joeytwiddle

5

ฉันเจอบล็อก Blogstatic ของ Hartman: วิธีเลิกทำการอัปเดตใน Ubuntu Lucid

ขั้นตอนแรกในการยกเลิกการอัปเดตที่กระทำผิดคือการค้นหาว่ามีการอัปเดตใดบ้าง หลังจากค้นหาบางฟอรัมฉันพบวิธีการดูประวัติการอัปเดตของฉัน: เปิดตัวจัดการแพคเกจ synaptic ("sudo synaptic" ในเทอร์มินัล) จากแถบเมนูคลิกไฟล์ -> ประวัติและคุณจะเห็นการอัปเดตทั้งหมดเรียงตามวันที่

น่าเสียดายที่ฉันได้ติดตั้งอัปเดตประมาณ 20 รายการในวันนี้และฉันไม่รู้ว่าตัวใดทำให้เกิดปัญหา ด้วยการค้นหาแต่ละแพ็คเกจที่มีชื่อในรายการประวัติฉันสามารถดาวน์เกรดได้สองสามครั้งจนกว่าปัญหาจะได้รับการแก้ไขและฉันได้ระบุการอัปเดตที่ละเมิด เพื่อทำสิ่งนี้:

ใช้แถบค้นหาเพื่อค้นหาแพ็คเกจที่คุณต้องการลดระดับ เมื่อคุณพบสิ่งที่คุณต้องการแล้วให้คลิกที่แพ็คเกจเพื่อเลือก จากแถบเมนูคลิกแพ็คเกจ -> บังคับเวอร์ชันและเลือกเวอร์ชันก่อนหน้าของแพ็คเกจจากเมนูแบบเลื่อนลง คลิกปุ่ม "ใช้" เพื่อปรับลดรุ่น


1
ฉันคาดหวังให้ทุกคนที่นี่รู้พื้นฐานเกี่ยวกับวิธีค้นหาอัปเดตที่ละเมิดล่าสุด:
Manav Brar

2
การแก้ไขนั้นเกี่ยวกับอะไร คุณมีคำถามอื่นหรือไม่ คุณต้องการให้เราเล่นเกมที่คาดเดาหรือไม่?
slhck

5

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

$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log
2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:26 upgrade traceroute:amd64 1:2.0.22-1 1:2.1.0-1
2016-03-20 16:58:33 upgrade ethtool:amd64 1:4.2-1 1:4.5-1
2016-03-20 16:58:34 upgrade libsdl1.2debian:amd64 1.2.15+dfsg1-3 1.2.15+dfsg1-4
2016-03-20 16:58:34 upgrade subversion:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:36 upgrade libsvn1:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:56 upgrade linux-image-amd64:amd64 4.3+70 4.4+71
2016-03-20 16:58:56 upgrade linux-libc-dev:amd64 4.3.5-1 4.4.6-1
2016-03-20 16:59:03 upgrade amd64-microcode:amd64 2.20141028.1 2.20160316.1

ต่อไปฉันพยายามค้นหาไฟล์แพ็กเกจยังคงแคชบนดิสก์ (โชคดีสำหรับฉันฉันไม่ได้เรียกใช้ autoclean):

$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_amd64.deb': No such file or directory
-rw-r--r-- 1 root root   28820 Dec 18  2014 /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb
-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root  185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb
-rw-r--r-- 1 root root 1317644 Mar  3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root    6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb
-rw-r--r-- 1 root root 1075506 Feb  7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb
-rw-r--r-- 1 root root  983174 Mar  3 11:30 /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root   53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb

ดูเหมือนว่าฉันไม่ได้มีแพ็คเกจ ethtool รุ่นเก่าด้วยเหตุผลบางอย่าง ยังคงลองดำเนินการต่อโดยติดตั้งไฟล์แพ็กเกจรุ่นเก่า:

$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
dpkg: warning: downgrading amd64-microcode from 2.20160316.1 to 2.20141028.1
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20160316.1) ...
dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:amd64 from 2.4.10-1 to 2.4.9-3
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.10-1) ...
dpkg: warning: downgrading libsdl1.2debian:amd64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...
dpkg: warning: downgrading libsvn1:amd64 from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-3) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
dpkg: warning: downgrading linux-image-amd64 from 4.4+71 to 4.3+70
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.4+71) ...
dpkg: warning: downgrading linux-libc-dev:amd64 from 4.4.6-1 to 4.3.5-1
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.4.6-1) ...
dpkg: warning: downgrading subversion from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-3) ...
dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:amd64:
 libwebkitgtk-3.0-0:amd64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:
  Package libwebkitgtk-3.0-common is not installed.

dpkg: error processing package libwebkitgtk-3.0-0:amd64 (--install):
 dependency problems - leaving unconfigured
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Errors were encountered while processing:
 libwebkitgtk-3.0-0:amd64

ดังที่ข้อความแสดงข้อผิดพลาดกล่าวว่าหนึ่งในแพ็คเกจของฉันขึ้นอยู่กับแพ็คเกจทั่วไปก่อนการอัพเกรด แต่การอัปเดตจะลบออกไป โชคดีที่ไฟล์แพ็กเกจยังคงอยู่ใน / var / cache / apt ดังนั้นฉันสามารถเพิ่มลงในรายการแล้วลองอีกครั้ง:

$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*
-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20141028.1) ...
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.3+70) ...
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.3.5-1) ...
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...
Selecting previously unselected package libwebkitgtk-3.0-common.
Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...
Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Setting up libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up libwebkitgtk-3.0-0:amd64 (2.4.9-3) ...
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64

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


3

ฉันต้องยกเลิกการอัพเกรดแพ็คเกจในวันนี้ด้วยเซิร์ฟเวอร์ Debian สองสามตัว ฉันย้อนกลับแพ็กเกจเป็นเวอร์ชันล่าสุดได้สำเร็จโดยใช้ aptitute ในขณะที่คำสั่ง awk ต่อไปนี้มีประโยชน์มาก

( ในคำสั่งด้านล่างให้แทนที่สตริงวันที่ด้วยวันที่ซึ่งคุณต้องการคืนการอัปเกรด )

awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) {gsub(/[\s\t)( ]+/,"",$5); printf("%s=%s ", $2 , $5)}}' /var/log/apt/term.log

ตรวจสอบผลลัพธ์เพื่อตรวจสอบว่าเป็นแพ็กเกจและเวอร์ชันที่จะเปลี่ยนกลับ จากนั้นใช้ aptitute เพื่อทำการลดระดับของแพ็คเกจที่แสดง:

aptitute install [paste output here]

ฉันหวังว่านี่จะเป็นตัวช่วยประหยัดเวลาสำหรับคนอื่นด้วย


2

ผมเชื่อว่าไม่ได้นอกเหนือจากการสำรองข้อมูลทั้งหมดของระบบไฟล์ที่เกี่ยวข้อง (ผู้ที่มี/, /bin, /lib, /sbin, /usr, /var, /etcและ/boot(ซึ่งอาจจะอยู่ในระบบแฟ้ม) และบันทึกการบูตของคุณ) เพื่อให้คุณสามารถม้วนเครื่องกลับมาหลังจากนั้น


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

1
คุณสามารถตรวจสอบให้แน่ใจว่าคุณมีสำเนาของแพ็กเกจทั้งหมดที่คุณกำลังจะอัพเกรดในเวอร์ชั่นก่อนหน้า (อาจยังคงอยู่ในแคชฉลาดของคุณที่ใดที่หนึ่ง/var) และไฟล์ปรับแต่งอื่น ๆ ที่เกี่ยวข้องเก็บไว้ จากนั้นคุณสามารถลองบังคับให้ย้อนกลับโดยบอกdpkgให้ติดตั้งเวอร์ชันเหล่านั้นอย่างชัดแจ้ง คุณอาจมีงานที่ต้องทำหลังจากนั้นเมื่อคุณต้องการให้การอัพเกรดปกติเกิดขึ้นดังนั้นจึงไม่ใช่สิ่งที่ฉันอยากแนะนำ
David Spillett

การสำรองข้อมูลที่ทำด้วย rsync (เปิดใช้งานการประทับเวลา) สามารถกู้คืนได้ค่อนข้างเร็วเมื่อเทียบกับการสำรองข้อมูลที่ทำด้วย tar
joeytwiddle

2

ฉันใช้เซิร์ฟเวอร์ linux ของฉันในสภาพแวดล้อมเสมือนจริงและเรียกใช้ shapshot ก่อนการอัพเกรด apt-get หรือการอัปเดต / อัปเกรดจากบุคคลที่สามที่สำคัญสำหรับเรื่องนั้น

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

สิ่งนี้ได้รับการจัดการอย่างดีเมื่อฉันอัปเกรดกล่อง Ubuntu เป็น 12.04 และ MySQL ก็ไม่สามารถใช้งานได้อย่างสมบูรณ์หลังจากการอัพเกรด ฉันย้อนกลับพบคำตอบในภายหลังรันการอัปเกรดแก้ไข MySQL และชีวิตก็ดี


1

คุณอาจจะลองcheckinstall

หลังจากคุณ. / กำหนดค่า; ทำโปรแกรมของคุณ CheckInstall จะทำการติดตั้ง (หรืออะไรก็ตามที่คุณบอกให้เรียกใช้) และติดตามทุกไฟล์ที่แก้ไขโดยการติดตั้งนี้โดยใช้โปรแกรมติดตั้ง excelent ...

ดังนั้นบางทีคุณอาจบอกให้รันความปลอดภัยระดับความถนัดอัพเกรดและจะติดตามการเปลี่ยนแปลงที่เกิดขึ้นจากการอัพเกรดทุกครั้ง


1

มีโครงการชื่อ Nexenta ที่รวมเคอร์เนล OpenSolaris เข้ากับ Ubuntu userspace มันมีเครื่องมือในการรวม ZFS ของ Solaris และ apt's Debian เพื่อให้มีปุ่มยกเลิกการอัพเกรด ดูที่นี่: http://www.nexenta.org/os/TransactionalZFSUpgrades

โดยทั่วไปสิ่งที่คุณต้องการคือระบบไฟล์เวอร์ชัน Btrfs สำหรับ Linux กำลังอยู่ในระหว่างการพัฒนา


1

การใช้Apt-Undoเป็นตัวเลือกที่เป็นไปได้ แต่สามารถใช้งานได้หากคุณใช้เพื่อติดตั้งและถอนการติดตั้งแพ็กเกจ มันจะไม่ช่วยถ้าคุณถอนการติดตั้งซอฟต์แวร์ด้วยวิธีปกติ

http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a ธรรมดาทางของการยกเลิก-apt-กระทำ /


0

ฉันได้ทำไปแล้วสองสามครั้ง แต่ไม่แนะนำ นี่คือสิ่งที่ฉันทำ (ถ้าฉันจำได้ถูกต้อง):

1) ลบซอฟต์แวร์ที่ไม่เป็นทางการซึ่งไม่ได้รวมอยู่ในที่เก็บอูบุนตูเริ่มต้น (อาจไม่จำเป็นต้องใช้ แต่ฉันแนะนำเพราะอาจทำให้คุณได้

2) เปลี่ยน /etc/apt/sources.list ของคุณ (และ source.list.d / *) เป็นเวอร์ชันก่อนหน้า (แสดงความคิดเห็นที่เก็บข้อมูลที่ไม่เป็นทางการทั้งหมด)

3) apt-get update / aptitude update

4) ใช้ความถนัด, ปรับลดแพ็คเกจหลัก (เช่น X11, ไลบรารี, ฯลฯ ) มันจะเริ่มทำการบรรจุหีบห่อที่แตกหักจำนวนมาก ... ดังนั้นคุณจะต้องแก้ไขแต่ละกรณี (คุณจำเป็นต้องรู้วิธีการทำอย่างถ่องแท้) วิธีที่คุณปรับลดรุ่นคือไปที่แผงคำอธิบายและติดตั้งเวอร์ชัน (โดยการกด +) ที่ด้านล่าง

5) ทำซ้ำ # 4 จนกระทั่งซอฟต์แวร์ทั้งหมดเป็นของรุ่นเป้าหมายของคุณ (ตรวจสอบในคอลัมน์เวอร์ชันในความถนัด)

นี่คือเหตุผลที่ฉันไม่แนะนำวิธีนี้:

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

ฉันขอแนะนำอย่างยิ่งให้ทำการติดตั้งใหม่ทั้งหมดและย้ายการกำหนดค่าของคุณไปทีละน้อย มันต้องใช้เวลาด้วย แต่สุดท้ายคุณก็มีเวอร์ชั่นที่เสถียร

เหตุผลที่ฉันทำมันส่วนใหญ่เป็นการทดลองและเป็นผลมาจากความสิ้นหวัง


0

DPkg :: Pre-Install-Pkgs และ ZFS บน Linux snapshot

หากคุณติดตั้งระบบปฏิบัติการของคุณในระบบไฟล์ ZFS (เช่นZFS บน Linux ) คุณสามารถกำหนดค่าapt-getให้รันzfs snapshotก่อนที่จะติดตั้งหรืออัปเกรดสิ่งใด ๆ ซึ่งจะสำรองระบบไฟล์ของคุณทันที อาจทำงานกับกลไกการสำรองข้อมูลอื่นนอกเหนือจาก ZFS snapshot แต่ฉันจะปล่อยให้การทดสอบนั้นแก่ผู้อื่น

บท

สร้างไฟล์เช่น

/etc/apt/apt.conf.d/71backup

มีเนื้อหา

// Tell `apt-get' to take a ZFS snapshot before installing or upgrading a
// set of packages:
DPkg::Pre-Install-Pkgs {"/sbin/zfs snapshot rpool/ROOT/debian@apt-get_$(date '+%Y-%m-%d-%H%M')";};

โดยที่rpool/ROOT/debianควรถูกแทนที่ด้วยชื่อของระบบไฟล์ ZFS ที่ระบบปฏิบัติการของคุณติดตั้งอยู่ คุณตั้งชื่อนั้นเมื่อคุณติดตั้งระบบปฏิบัติการครั้งแรกและสามารถพบได้ภายใต้คุณสมบัติNAMEพร้อมคำสั่ง

# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...

แต่มันใช้งานได้?

คุณควรถ่ายภาพก่อนที่จะทำตามคำแนะนำการกำหนดค่าของบุคคลอินเทอร์เน็ตแบบสุ่มบางคน:

# zfs snapshot rpool/ROOT/debian@$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/debian@2018-08-01-230001_test

นั่นไง ควรจะerror: fn_borkedเกิดขึ้นในไม่ช้าคุณอาจคืนค่าระบบของคุณให้เป็นสถานะปัจจุบันที่เต็มไปด้วยความสุข

# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test

ตอนนี้ลองโดยติดตั้งสองเกมเล็ก ๆ ที่มีอยู่ใน repo ของคุณ:

# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614

ภาพรวมนั้นมีระบบไฟล์ของคุณเหมือนก่อนติดตั้งเกมสองเกม

# exit
$ sudoku

เวลาที่สนุกสำหรับคุณยาย แต่คุณเกลียดซูโดกุ

$ sudo -i
# zfs rollback rpool/ROOT/debian@apt-get_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found

หลังจากถ่ายภาพสแนปชอตหลายภาพแล้วคุณสามารถย้อนกลับไปภาพก่อนหน้าได้โดยเพิ่มการ-rตั้งค่าสถานะ ตัวอย่างเช่นในกรณีของเราให้ลอง

# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test

อย่างไรก็ตามได้รับการเตือนว่าไม่เพียง แต่จะทำให้ระบบไฟล์ของคุณกลับสู่สถานะที่เคยrpool/ROOT/debian@2018-08-01-230001_testถูกถ่าย แต่มันจะลบสแนปชอตทั้งหมดในภายหลัง หากคุณติดตามพร้อมกับโพสต์นี้สแนปชอตrpool/ROOT/debian@apt-get_2018-08-02-033614จะหายไป

ฉันทดสอบapt-get upgradeบน Debian GNU / Linux ด้วย

# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get

มันได้ผล. หนึ่งสแน็ปช็อตถูกสร้างขึ้นสำหรับinstallคำสั่งอีกคำสั่งหนึ่งสำหรับupgradeคำสั่งนั้น

Caveat : ฉันทดสอบสิ่งนี้เป็นครั้งแรกในวันนี้และรู้เพียงเล็กน้อยเกี่ยวกับการทำงานภายในของ apt หากการแบ่งนี้มีบางอย่างสำหรับคุณหรือก่อให้เกิดความเสี่ยงต่อจิตใจที่มีเมตตากรุณาของฉันไม่ได้รับการพิจารณาโปรดแสดงความคิดเห็นเกี่ยวกับเรื่องนี้ด้านล่าง

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