Apakah ada distribusi yang mendukung peluncuran kembali paket yang diperbarui?

23

Apakah ada alat atau bahkan seluruh distribusi yang mendukung paket yang diubah kembali setelah pembaruan?

Sebagai contoh: Saya memutakhirkan paket A, B dan C. Setelah bekerja dengan paket-paket itu selama beberapa hari, saya menemukan bug di B yang melanggar kesepakatan.

Sementara saya mengirimkan laporan bug, saya juga harus menurunkan versi B ke versi sebelumnya sehingga saya bisa menyelesaikan apa yang akan saya lakukan. Sementara itu A tergantung pada B, jadi itu perlu diturunkan juga, tetapi C tidak tergantung pada keduanya, sehingga bisa tetap pada versi saat ini.

Apakah ada alat atau distribusi yang mendukung ini?

Saya tahu bahwa sebagian besar distribusi memiliki cara untuk menurunkan versi suatu paket tetapi itu biasanya agak samar atau bahkan tidak mungkin karena paket sebelumnya telah dihapus dari repositori dan beberapa kasus (misalnya setelah memutakhirkan X server dan Mesa) benar-benar .. berantakan.

Steffen Winkler
sumber
3
Hal yang perlu diperhatikan: jika perubahan versi paket kecil, jawaban di bawah ini mungkin berlaku; namun perhatikan bahwa perubahan paket yang lebih besar mungkin meningkatkan data di-disk yang tidak akan berfungsi dengan benar setelah itu di versi yang lebih lama. Sebagai contoh, peningkatan besar mysql-server (atau joomla) akan menambah dan memodifikasi bidang dan meningkatkan tabel SQL, peningkatan inn2 mungkin mengubah jenis basis data, atau beberapa peningkatan distro kernel mungkin meningkatkan sistem file ext3 ke ext4, atau beberapa paket upgrade akan mengonversi file konfigurasi, dll. Satu-satunya perlindungan terhadap perubahan-perubahan yang "tidak dapat dikembalikan" adalah snapshot LVM / btrfs / etc (atau backup / restore yang jauh lebih lambat).
Matija Nalis
@MatijaNalis +1 karena menyebutkan itu!
Steffen Winkler

Jawaban:

21

NixOS mendukung upgrade rollback, meskipun seperti yang saya pahami, itu tidak berjalan sejauh yang Anda inginkan: jika Anda memutakhirkan A, B dan C dalam satu operasi, Anda dapat mengembalikan seluruh operasi itu, tetapi tidak hanya A dan B. (Anda harus dapat memutar kembali A, B dan C, dan kemudian memutakhirkan C ...) Itu masuk akal dari perspektif transaksional sekalipun.

Debian (dikombinasikan dengan arsip snapshot jika Anda tidak lagi memiliki paket lama) akan memungkinkan Anda untuk menurunkan versi B, dan alat-alat seperti aptatau aptitudeakan dalam banyak kasus mengetahui bahwa A juga perlu diturunkan (setelah Anda meyakinkan mereka bahwa Anda tidak ingin hanya memutakhirkan B). Tetapi seperti yang Anda katakan itu cenderung agak berantakan, dan penurunan versi paket tidak didukung di Debian (yang berarti bahwa sebagian besar waktu mereka bekerja, tetapi jika mereka rusak itu bukan bug).

Stephen Kitt
sumber
1
itu terlihat menarik! Masyarakat terlihat aktif dan sehat. Saya pasti akan mencoba ini, terima kasih! Jika pada hari Jumat malam tidak ada jawaban yang lebih baik / berbeda, saya akan menandai jawaban Anda.
Steffen Winkler
Kembalikan pada NixOS mengagumkan, tetapi kekuatan sebenarnya berasal dari pendekatan deklaratif: Deskripsi paket (dan sistem) dapat diambil dari repositori git, sehingga Anda dapat mengelola sistem Anda dengan cara yang sama seperti Anda mengelola proyek perangkat lunak, termasuk cabang dan menggabungkan dll (dan karena peningkatan atom dan kemurnian Anda tidak pernah merusak barang-barang)
Daniel Jour
Manajer paket Nix juga dapat dijalankan di distro Linux lain, berdampingan dengan manajer paket 'asli' mereka. Itu juga berjalan pada OSX, dan saya telah melihat klaim bahwa itu mungkin bekerja pada Windows. Anda juga dapat memberi tahu Nix untuk menggunakan versi 'asli' dari beberapa paket, daripada menginstal duplikatnya sendiri, meskipun Anda kehilangan sebagian dari jaminannya dengan cara itu (mis. Mungkin tidak menyadari bahwa Anda telah menukar ketergantungan).
Warbo
hanya FYI, saya berhasil menginstal NixOS di laptop saya (gambar KDE4 memberi saya Kernel Panic, tetapi gambar kecil (~ 390 MB) bisa di-boot dengan baik. Untuk seseorang yang hanya pernah menginstal distribusi berbasis Debian ini cukup menarik / menyenangkan. Saya belum mengerti hal-hal tertentu tentang manajer paket, terutama ketika datang ke lingkungan desktop. Saya menginstal gdm / gnome-shell tetapi tidak berfungsi. Saya kemudian mengaktifkan gnome3 / gdm dalam file configuration.nix dan membangun kembali itu, baik paket dan dependensi mereka diunduh lagi. Itu berhasil setelah reboot tetapi saya tidak mengerti mengapa
Steffen Winkler
@ SteffenWinkler Saat menggunakan NixOS, Anda biasanya tidak menginstal sesuatu nix-env, sebaliknya Anda menentukan hal-hal di configuration.nixkemudian jalankan nixos-rebuild switch. Ini memiliki keuntungan bahwa semua konfigurasi sistem Anda ada di satu tempat, dan mudah untuk mencadangkan seluruh konfigurasi sistem Anda (cukup buat cadangan configuration.nixfile).
Pauan
15

Pada yumdistribusi berbasis apa pun (mis. Red Hat EL , CentOS , dll), Anda dapat:

  1. memeriksa sejarah perubahan menggunakan sistem sudo yum history list

    Loaded plugins: fastestmirror
    ID     | Login user               | Date and time    | Action(s)      | Altered
    ------------------------------------------------------------------------------
        10 | Administrator <admin>    | 2016-03-08 09:08 | Install        |   11   
         9 | Administrator <admin>    | 2016-03-03 16:48 | Install        |    1   
         8 | Administrator <admin>    | 2016-03-03 16:09 | Install        |    5   
         7 | Administrator <admin>    | 2016-02-26 18:13 | Install        |    1   
         6 | Administrator <admin>    | 2016-02-26 15:12 | Install        |   27   
         5 | Administrator <admin>    | 2016-02-26 15:07 | Install        |    1   
         4 | Administrator <admin>    | 2016-02-26 15:05 | Install        |    3  <
         3 | Administrator <admin>    | 2016-02-26 15:03 | Install        |    1 > 
         2 | Administrator <admin>    | 2016-02-26 15:01 | I, U           |   49   
         1 | System <unset>           | 2016-02-26 14:38 | Install        |  296   
    history list
    
  2. periksa detailnya, gunakan sudo yum history info 10

  3. kembalikan ke titik sebelumnya dalam riwayat, menggunakan sudo yum history rollback 9

Peringatan

Ada beberapa peringatan yang jelas:

  1. Jika paket lama tidak tersedia lagi, Anda bersulang (mengutip @vonbrand),
  2. Jika Anda memasang apa pun di luar yum, Anda bisa memecah sejarah.

Dalam contoh saya, bahwa <di baris dengan ID 4(di kolom terakhir), berarti saya tidak dapat mengembalikan melewati titik itu.

sudo yum history rollback 2
Loaded plugins: fastestmirror
Transaction history is incomplete, before 4.
 You can use 'history rollback force', to try anyway.
Error: Failed history rollback, incomplete
andcoz
sumber
3
fitur menarik! Tetapi karena 'roti bakar' tidak sesuai dengan tagihan saya.
Steffen Winkler
AFAIK ini hanya dimungkinkan dalam RHEL / CentOS 6 atau lebih tinggi. Jika Anda masih menggunakan RHEL / CentOS 5 Anda SOL.
Wildcard
Dan omong-omong, di lingkungan perusahaan dengan repo yang dikelola, pendekatan ini cukup bisa diterapkan karena Anda selalu memiliki paket lama, bahkan jika Anda perlu menggunakan --enablerepoflag untuk mengaktifkan repositori lama yang sebelumnya tidak digunakan untuk downgrade.
Wildcard
Apa manfaat dari memutar kembali dibandingkan hanya menginstal versi yang lebih lama lagi?
Bratchley
Otomatisasi @Bratchley! yum hanya menjaga agar daftar paket dan versi terinstal dan memeriksa dependensi ketika menginstal ulang versi lama. Jelas Anda bisa melakukannya dengan tangan .
andcoz
7

Pada OpenSUSE Anda dapat dengan mudah menggunakan Snapper dengan sistem file Btrfs .

Jika Anda menggunakan konfigurasi sistem file standar selama instalasi, ini diaktifkan secara default .

Setelah Kakap diaktifkan, ia sepenuhnya terintegrasi dengan yast2dan zypper. Ini akan membuat snapshot sistem file setiap kali Anda menginstal atau meningkatkan sesuatu (atau membuat pengguna, dll).

Untuk mengembalikan sistem ke kondisi sebelumnya, Anda hanya perlu menjalankannya yast2 snapper.

masukkan deskripsi gambar di sini

andcoz
sumber
alat yang sangat menarik. Meskipun saya cukup menyukai ext4. Akan meneliti ini! Apakah saya benar dengan menganggap bahwa Snapper tidak 'terikat' dengan OpenSUSE tetapi ke btrfs?
Steffen Winkler
Kakap dikembangkan oleh SUSE. Ini adalah kumpulan alat yang mengotomatiskan pembuatan snapshot Brtfs pada "acara". Saya kira Anda dapat menggunakannya pada distribusi lain tetapi saya tidak yakin. Bagaimanapun, Anda dapat secara manual membuat snapshot Brtfs pada distribusi apa pun.
andcoz
3
Hanya perlu diingat bahwa jika volume Anda berisi data apa pun, bukan hanya binari dan skrip, yang memutar snapshot akan memutar kembali data Anda sendiri juga. Opsi ini terdengar berisiko, paling cocok untuk mereka yang benar - benar mengetahui tata letak sistem file mereka. Bagi saya, snapshot selalu untuk cadangan yang konsisten, replikasi, dan situasi pemulihan total.
jimp
1
Perhatikan juga bahwa banyak paket memiliki file dan / atau direktori /varsehingga harus digulung kembali /walaupun itu adalah fs atau subvolume yang terpisah. Jauh lebih baik untuk menguji upgrade secara menyeluruh sebelum menerapkannya pada server produksi daripada mengandalkan fitur-fitur seperti rollback upgrade OS (yang sepele mudah dilakukan dengan cara setengah-arsen tetapi merupakan masalah yang sangat sulit untuk dipecahkan dengan benar ).
cas
1
@ Jimp Nasihat yang bagus. Bagaimanapun, OpenSuSE tidak mengaktifkan snapper kecuali /homedalam sistem file non snapshot yang terpisah .
andcoz
6

AIX sangat baik dalam memutar kembali pembaruan. Yah - kami berada di situs Unix / Linux dan Anda tidak pernah menentukan Anda ingin Linux :)

Setiap pembaruan AIX menyimpan semua file yang dimodifikasi dalam subdirektori terpisah di dalam sistem file / var. Pembaruan dapat dipulihkan dengan perintah asli yang sederhana, dan pemulihan tidak perlu jaringan untuk naik, tidak perlu media / paket, tidak menginstal ulang apa pun dan tidak tergantung pada apa pun teknologi snapshot - efeknya hanya bahwa file muncul kembali seperti sebelum pembaruan.

Sebagai bonus, ada satu perintah asli sepele mksysbuntuk membuat cadangan sistem yang dapat di-boot-sendiri. File yang dapat dengan mudah di-boot pada sistem yang benar-benar disfungsional yang tidak bisa boot karena beberapa kerusakan / korupsi.

Dan itu semua teknologi yang telah terbukti dengan sejarah puluhan tahun :)

kubanczyk
sumber
Apakah Anda sering mengalami masalah dengan program yang dipulihkan dengan cara itu berada dalam keadaan tidak konsisten dan rollback (yaitu, database yang mesin penyimpanannya telah berubah atau layanan yang beralih ke format file konfigurasi baru), atau apakah ada cara yang baik untuk bekerja tentang bahwa?
Josh Rumbut
1
Ini adalah model yang saya gunakan ketika saya membangun sistem manajemen paket yang belum sempurna untuk perangkat lunak yang secara tradisional telah didistribusikan dalam tarbal terkompresi / gzip. Setiap kali menginstal pembaruan, itu pertama kali membangun "paket rollback" dari semua yang harus dimodifikasi. Paket rollback ini kemudian dapat digunakan untuk kembali, asalkan tidak ada paket pembaruan lain yang telah diterapkan untuk sementara. Saya sering bertanya-tanya apakah manajer paket yang tepat bisa melakukan ini, tetapi mengingat kendala memutar kembali hanya dalam urutan terbalik ... mungkin kita harus menggunakan git saja.
Monty Harder
sial. Saya seharusnya menyebutkan bahwa maksud saya distribusi GNU / Linux. Tapi yang menarik, AIX tampaknya mampu menjalankan 'program' GNU / Linux saat ini, saya kira saya akan melihat lebih dekat.
Steffen Winkler
5

Di Fedora (dan saya yakin di distribusi lain juga) Anda dapat meminta untuk kembali ke versi sebelumnya:

dnf downgrade <packages>

memberi Anda versi paket selanjutnya, dan Anda dapat meminta yang spesifik dengan:

dnf downgrade <package>.<version>

Ini hanya berfungsi jika paket masih tersedia di repositori. Fungsionalitas tidak pernah terdengar, dengan cara apa pun. Ini memiliki hambatan, jika bagian dari upgrade adalah untuk mengubah konfigurasi, rollback tidak harus ke versi pastinya.

vonbrand
sumber
Anda juga bisa menggunakan dnf history undo #thing to undo
Clearer
This only works if the package(s) are still available in the repositories. yup, itulah masalahnya. Saya agak terkejut bahwa sepertinya tidak ada solusi yang 'lebih luas' untuk ini, terutama dengan jumlah distribusi rilis bergulir. Sampai sekarang sepertinya NixOS adalah pilihan terbaik saya, atau saya akan memerlukan semacam alat pencitraan sistem yang hanya bekerja pada perbedaan dan dapat mengembalikan sistem ke titik waktu tertentu selama 20 pembaruan terakhir (?).
Steffen Winkler
@SteffenWinkler, jika paket lama tidak tersedia lagi, Anda bersulang. Jelas sekali. Kecuali jika Anda memiliki semacam cadangan lokal.
vonbrand
2
@ Mtsted, karena sudah terlalu tua? Repositori tidak mengandung semua versi sejak awal waktu.
vonbrand
1
Dalam dnf.conf (sama seperti yum.conf) memiliki keepcache = true Paket lama tersedia, karena lond cache tidak dihapus secara manual. Tapi itu pergi ke "mengasapi" cache paket.
mmv-ru
2

Arch Linux juga mendukung paket penurunan versi dan kernel. Anda juga dapat menginstal downgraderdan downgradealat untuk mengotomatiskan proses. Solusi btrfs juga berfungsi, saya telah menggunakannya untuk melakukan rollback manual sebelumnya.

Bagaimana saya mengembalikan sistem saya:

sudo -i
mount /dev/sda3 /mnt/hd #mount the top btrfs subvolume
ls #find the version you want
mv @ @-old #move the '/' subvolume (I named mine '@')
btrfs sub snap @-<date> @ #replace @ with the backup from <date>
sync
reboot #the changes will take effect once the system restarts

Salah satu manfaat btrf adalah Anda dapat menggunakan subvolume dan "partisi" dinamis. Sebagai contoh, saya memiliki subvolume untuk / (disebut @), / tmp (@tmp), dan / home (@home). Maka mudah untuk membuat cadangan dan memutar kembali semua ini. Saya memiliki / tmp dalam subvolume terpisah karena membuat cadangan dengan sisa sistem tampaknya tidak ada gunanya, karena terhapus pada hampir setiap reboot.

Caleb Reister
sumber
Saya mengikuti tautan di wiki dan sampai di sini . Itu terlihat sangat keren dan dari memeriksa repositori, ada file yang kembali ke 2013! Mengapa menggunakan cara btrf saat ini ada? Karena file yang 'ditingkatkan'? Atau ada alasan lain?
Steffen Winkler
Saya sekarang beralih secara permanen ke Arch Linux setelah membayar NixOS kunjungan singkat. Itu (Arch Linux) hampir tidak stabil seperti yang saya selalu pikirkan dan memiliki komunitas yang sehat.
Steffen Winkler
@SteffenWinkler Itu benar. Juga, opsi downgrade Arch tidak didukung "secara resmi" dan penurunan versi mungkin akan mengabaikan dependensi (yang dapat menjadi sangat berantakan jika terjadi kesalahan).
Caleb Reister
2

Saya menggunakan Arch Linux dan menyimpan semua paket yang diunduh /var/cache/pacman/pkg/sehingga Anda dapat menurunkan versi paket apa saja kapan saja (Anda tidak dapat boot, gunakan live usb). Dari Arch Wiki :

pacman -U <file_name_of_the_package>

Untuk mencegah paket ditingkatkan, masukkan nama paket di /etc/pacman.conf, seperti:

IgnorePkg=linux

Untuk menghemat ruang, Anda dapat menghapus folder cache dengan:

pacman -Sc

Yang akan menghapus semua paket lama dan menyimpan yang terbaru, atau gunakan -Sccuntuk menghapus semua.

Alko
sumber
Perhatikan bahwa ini (paket yang diabaikan) sama dengan peningkatan parsial, yang tidak didukung ...
jasonwryan
Saya mengikuti tautan di wiki dan sampai di sini . Itu terlihat sangat keren dan dari memeriksa repositori, ada file yang kembali ke 2013! Mengapa menggunakan cara btrf saat ini ada? Karena file yang 'ditingkatkan'? Atau ada alasan lain?
Steffen Winkler