Apakah ada cara di Ubuntu untuk mengembalikan atau membatalkan pemutakhiran terakhir setelah melakukan apt-get upgrade
jika Anda tidak menyukai hasilnya?
Apakah ada cara di Ubuntu untuk mengembalikan atau membatalkan pemutakhiran terakhir setelah melakukan apt-get upgrade
jika Anda tidak menyukai hasilnya?
Jawaban:
aptitude
memberi Anda akses ke semua versi paket jika tersedia sesuai dengan manajemen paket Debian .
Saya menemukan Blog Blog Hartman: Cara Membatalkan Pembaruan di Ubuntu Lucid
Langkah pertama untuk mengurungkan pembaruan yang menyinggung itu adalah untuk mengetahui pembaruan apa itu sebenarnya. Setelah mencari di beberapa forum, saya menemukan cara untuk melihat riwayat pembaruan saya: Buka pengelola paket synaptic ("sudo synaptic" di terminal). Dari bilah menu, klik File -> History dan Anda akan melihat semua pembaruan Anda diurutkan berdasarkan tanggal.
Sayangnya saya telah menginstal sekitar 20 pembaruan hari ini, dan saya tidak tahu yang mana yang menyebabkan masalah. Dengan mencari melalui masing-masing paket yang disebutkan dalam daftar History, saya dapat menurunkan versi beberapa kali sampai masalah terpecahkan dan saya telah mengidentifikasi pembaruan yang menyinggung. Untuk melakukan ini:
Gunakan bilah pencarian untuk menemukan paket yang ingin Anda turunkan. Setelah Anda menemukan apa yang Anda cari, klik pada paket untuk memilihnya. Dari bilah menu, klik Paket -> Force Version dan pilih versi paket sebelumnya dari menu drop down. Klik tombol "Terapkan" untuk menerapkan downgrade.
Saya harus melakukan ini hari ini di sistem Debian saya. Pertama, saya mengidentifikasi rentang waktu ketika pemutakhiran yang menyinggung terjadi, dan mengambil entri log yang memberikan nomor versi lama dan baru dari paket yang ditingkatkan:
$ 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
Selanjutnya, saya mencoba mencari file paket yang masih di-cache pada disk (untungnya bagi saya saya belum menjalankan 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
Sepertinya saya tidak memiliki paket ethtool yang lebih lama karena beberapa alasan. Namun, mari kita lanjutkan dengan menginstal paksa file paket yang lebih lama:
$ 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
Seperti yang dikatakan pesan kesalahan, salah satu paket saya bergantung pada paket-umum sesaat sebelum upgrade, tetapi upgrade menghapusnya (dan apt-get tidak dapat menemukannya lagi). Untungnya, file paketnya masih di / var / cache / apt jadi saya bisa menambahkannya ke daftar dan coba lagi:
$ 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
Keberhasilan! Sebenarnya ini tidak menyelesaikan masalah saya. Tapi itu berhasil menurunkan versi paket, QED.
Saya juga harus membatalkan pembaruan paket hari ini di beberapa server Debian. Saya berhasil mengembalikan paket ke versi terakhir dengan menggunakan aptitute, sedangkan perintah awk berikut ini sangat membantu.
( Pada perintah di bawah ini ganti string tanggal dengan tanggal hari dari mana Anda ingin mengembalikan pemutakhiran )
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
tinjau output untuk memverifikasi bahwa ini adalah paket dan versi yang akan dikembalikan. Kemudian gunakan aptitute untuk melakukan downgrade dari paket yang terdaftar:
aptitute install [paste output here]
Saya harap ini juga menghemat waktu bagi orang lain.
Saya percaya tidak, selain dari mengambil salinan lengkap dari filesystem yang relevan (yang mengandung /
, /bin
, /lib
, /sbin
, /usr
, /var
, /etc
dan /boot
(yang semua mungkin pada pada filesystem) dan boot record Anda) sehingga Anda dapat memutar mesin kembali setelah itu.
/var
tersimpan di cache apt Anda di suatu tempat di ) dan file konfigurasi yang relevan disimpan. Anda kemudian dapat mencoba memaksa kembali dengan secara eksplisit mengatakan dpkg
untuk menginstal versi tersebut. Anda mungkin memiliki beberapa pekerjaan yang harus dilakukan setelah itu ketika Anda ingin upgrade normal terjadi, jadi itu bukan sesuatu yang saya sarankan.
Saya menjalankan server linux saya di lingkungan yang tervirtualisasi dan menjalankan shapshot tepat sebelum upgrade apt-get, atau pembaruan / pemutakhiran pihak ketiga utama apa pun dalam hal ini.
Kemudian jika ada yang tidak beres, saya kembali dan hidup terus berjalan sampai saya dapat menemukan lebih banyak informasi.
Ini sangat berguna ketika saya memutakhirkan kotak Ubuntu saya menjadi 12,04, dan entah bagaimana MySQL benar-benar tidak berfungsi setelah peningkatan. Saya memutar kembali, menemukan jawabannya kemudian, memutar ulang upgrade, memperbaiki MySQL, dan hidup itu baik.
Anda dapat mencoba checkinstall
Setelah Anda ./configure; buat program Anda, CheckInstall akan menjalankan make install (atau apa pun yang Anda suruh dijalankan) dan melacak setiap file yang dimodifikasi oleh instalasi ini, menggunakan installwatch excelent ...
Jadi mungkin Anda bisa memerintahkannya untuk menjalankan aptitude safe-upgrade dan itu akan melacak setiap modifikasi yang dilakukan oleh upgrade.
Ada sebuah proyek bernama Nexenta yang menggabungkan kernel OpenSolaris dengan ruang pengguna Ubuntu. Ini menyediakan alat untuk mengintegrasikan Solaris's ZFS dan Debian's apt untuk menyediakan tombol undo untuk upgrade. Lihat di sini: http://www.nexenta.org/os/TransactionalZFSUpgrades
Secara umum, yang Anda butuhkan adalah sistem file versi. Btrfs untuk Linux sedang dalam pengembangan.
Menggunakan Apt-Undo adalah opsi yang memungkinkan, tetapi itu hanya bisa berfungsi jika Anda menggunakannya untuk menginstal dan menghapus paket. Ini tidak akan membantu jika Anda telah menghapus instalan perangkat lunak dengan cara biasa.
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a -simple-way-of-undoing-apt-actions /
Saya telah berhasil melakukannya beberapa kali tetapi saya tidak akan merekomendasikannya. Inilah yang saya lakukan (jika saya ingat dengan benar):
1) Hapus semua perangkat lunak tidak resmi yang tidak termasuk dalam repositori default ubuntu (mungkin tidak diperlukan, tetapi saya menyarankannya karena mungkin menghalangi Anda).
2) Ubah /etc/apt/sources.list Anda (dan sources.list.d / *) ke versi sebelumnya (komentar semua repositori tidak resmi).
3) pembaruan apt-get / perbaruan aptitude
4) Menggunakan aptitude, downgrade paket inti (seperti X11, perpustakaan, dll). Ini akan mulai menembakkan banyak paket yang rusak ... jadi Anda harus menyelesaikan setiap kasus (Anda harus tahu bagaimana melakukannya dengan tepat). Cara Anda menurunkan versi itu dengan membuka panel deskripsi dan menginstal versi (dengan menekan +) di bagian bawah.
5) Ulangi # 4 sampai semua perangkat lunak milik versi target Anda (periksa kolom versi di aptitude).
Inilah alasan mengapa saya tidak merekomendasikan metode ini:
Saya akan sangat menyarankan untuk melakukan instalasi bersih dan memindahkan konfigurasi Anda sedikit demi sedikit. Ini juga membutuhkan waktu, tetapi pada akhirnya Anda memiliki versi yang stabil.
Alasan saya melakukannya terutama sebagai eksperimen dan hasil dari keputusasaan.
Jika Anda menginstal sistem operasi pada sistem file ZFS (misalnya, ZFS di Linux ), Anda dapat mengonfigurasi apt-get
untuk menjalankan zfs snapshot
sebelum menginstal atau meningkatkan apa pun, yang akan membuat cadangan sistem file Anda secara instan. Mungkin bekerja dengan mekanisme cadangan selain snapshot ZFS, tapi saya akan menyerahkan pengujian itu kepada orang lain.
Buat file seperti
/etc/apt/apt.conf.d/71backup
dengan konten
// 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')";};
di mana rpool/ROOT/debian
harus diganti dengan nama sistem file ZFS tempat sistem operasi Anda dipasang. Anda memberinya nama itu ketika pertama kali menginstal OS Anda, dan itu dapat ditemukan di bawah atribut NAME
dengan perintah
# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...
Anda sebaiknya mengambil snapshot sebelum mengikuti saran konfigurasi dari beberapa orang internet acak:
# 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
Itu ada. Jika error: fn_borked
segera terjadi, Anda dapat mengembalikan sistem Anda ke kondisi saat ini dengan bahagia
# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test
Sekarang cobalah dengan menginstal dua game kecil yang kemungkinan tersedia di repo Anda:
# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614
Cuplikan itu berisi sistem file Anda seperti sebelum kedua game dipasang.
# exit
$ sudoku
Waktu yang menyenangkan untuk nenek, tetapi Anda membenci 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
Setelah beberapa snapshot diambil, Anda dapat kembali ke yang sebelumnya dengan menambahkan -r
bendera. Dalam kasus kami, misalnya, coba
# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test
Berhati-hatilah, bagaimanapun, bahwa ini tidak hanya akan mengembalikan sistem file Anda ke keadaan saat rpool/ROOT/debian@2018-08-01-230001_test
diambil, tetapi juga akan menghapus semua snapshot yang tidak dapat diambil kembali. Jika Anda mengikuti pos ini, foto rpool/ROOT/debian@apt-get_2018-08-02-033614
itu sekarang akan hilang.
Saya menguji apt-get upgrade
pada Debian GNU / Linux dengan
# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get
Berhasil. Satu snapshot dibuat untuk install
perintah, yang lain untuk upgrade
perintah.
Peringatan : Saya menguji ini untuk pertama kalinya hari ini dan tahu sedikit tentang cara kerja apt. Jika ini menghancurkan sesuatu untuk Anda atau menimbulkan risiko yang belum dipertimbangkan oleh pikiran saya, silakan komentar tentang hal itu di bawah ini.