Có một phân phối hỗ trợ cuộn lại các gói cập nhật?


23

Có một công cụ hoặc thậm chí toàn bộ phân phối hỗ trợ các gói thay đổi hoàn nguyên sau khi cập nhật không?

Ví dụ: Tôi đã nâng cấp các gói A, B và C. Sau khi làm việc với các gói đó trong vài ngày, tôi gặp phải một lỗi trong B là vi phạm thỏa thuận.

Trong khi tôi gửi bugreport, tôi cũng cần hạ cấp B xuống phiên bản trước để tôi có thể hoàn thành những gì tôi sắp làm. Trong khi đó A phụ thuộc vào B, do đó, nó cũng cần phải được hạ cấp, nhưng C độc lập với cả hai, vì vậy nó có thể ở phiên bản hiện tại.

Có một công cụ hoặc một phân phối hỗ trợ này?

Tôi biết rằng hầu hết các bản phân phối đều có cách hạ cấp gói nhưng điều đó thường sơ sài hoặc thậm chí không thể vì gói trước đã bị xóa khỏi kho và một số trường hợp (ví dụ: sau khi nâng cấp máy chủ X và Mesa), nó thực sự .. . lộn xộn.


3
Điều cần lưu ý: nếu thay đổi phiên bản gói là nhỏ, câu trả lời dưới đây có thể được áp dụng; tuy nhiên lưu ý rằng các thay đổi gói lớn hơn có thể nâng cấp dữ liệu trên đĩa không hoạt động chính xác sau đó trong phiên bản cũ hơn. Ví dụ, nâng cấp chính của mysql-server (hoặc j Joomla) sẽ thêm và sửa đổi các trường và nâng cấp các bảng SQL, nâng cấp inn2 có thể thay đổi loại cơ sở dữ liệu hoặc một số nâng cấp kernel distro có thể nâng cấp ext3 lên hệ thống tệp ext4 hoặc một số nâng cấp gói sẽ chuyển đổi tệp cấu hình, v.v ... Bảo vệ duy nhất chống lại những thay đổi "không thể kiểm soát" đó là ảnh chụp nhanh LVM / btrfs / etc (hoặc sao lưu / khôi phục chậm hơn nhiều).
Matija Nalis 11/03/2016

@MatijaNalis +1 khi đề cập đến điều đó!
Steffen Winkler

Câu trả lời:


21

NixOS hỗ trợ các rollback nâng cấp, mặc dù theo tôi hiểu, nó không đi xa như bạn muốn: nếu bạn nâng cấp A, B và C trong một thao tác, bạn có thể khôi phục toàn bộ hoạt động đó, nhưng không chỉ A và B. (Bạn sẽ có thể cuộn A, B và C trở lại, sau đó nâng cấp C ...) Điều đó có ý nghĩa từ góc độ giao dịch mặc dù.

Debian (kết hợp với kho lưu trữ ảnh chụp nhanh nếu bạn không còn các gói cũ) sẽ cho phép bạn hạ cấp B và trong nhiều trường hợp , các công cụ như apthoặc aptitudesẽ tìm ra rằng A cũng cần phải hạ cấp (một khi bạn đã thuyết phục họ rằng bạn không muốn đơn giản là nâng cấp B). Nhưng như bạn nói, điều đó có xu hướng hơi lộn xộn và việc hạ cấp gói không được hỗ trợ trong Debian (điều này có nghĩa là hầu hết thời gian chúng hoạt động, nhưng nếu chúng phá vỡ thì đó không phải là lỗi).


1
Trông thật thú vị! Cộng đồng có vẻ năng động và khỏe mạnh. Tôi chắc chắn sẽ thử cái này, cảm ơn bạn! Nếu đến tối thứ Sáu không có câu trả lời tốt hơn / khác, tôi sẽ đánh dấu câu trả lời của bạn.
Steffen Winkler

Rollback trên NixOS là tuyệt vời, nhưng sức mạnh thực sự đến từ cách tiếp cận khai báo: Mô tả gói (và hệ thống) có thể được lấy từ kho lưu trữ git, do đó bạn có thể quản lý hệ thống của mình giống như cách bạn quản lý dự án phần mềm, bao gồm các chi nhánh và hòa trộn vv (và do nâng cấp nguyên tử và độ tinh khiết bạn không bao giờ phá vỡ những thứ)
Daniel Jour

Trình quản lý gói Nix cũng có thể được chạy trên các bản phân phối Linux khác, song song với trình quản lý gói 'gốc' của chúng. Nó cũng chạy trên OSX và tôi đã thấy tuyên bố rằng nó có thể hoạt động trên Windows. Bạn cũng có thể yêu cầu Nix sử dụng các phiên bản 'bản địa' của một số gói, thay vì cài đặt các bản sao của chính nó, mặc dù bạn mất một số đảm bảo theo cách đó (ví dụ: có thể bạn không nhận thấy rằng mình đã trao đổi một số phụ thuộc).
Warbo 10/03/2016

Chỉ FYI, tôi đã quản lý để cài đặt NixOS trên máy tính xách tay của mình (hình ảnh KDE4 đã cho tôi một Kernel Panic, nhưng hình ảnh nhỏ (~ 390 MB) đã khởi động tốt. Đối với một người chỉ cài đặt các bản phân phối dựa trên Debian thì điều này khá thú vị / vui vẻ. , Tôi chưa hiểu một số điều nhất định về trình quản lý gói, đặc biệt là khi nói đến môi trường máy tính để bàn. Tôi đã cài đặt gdm / gnome-shell nhưng nó sẽ không hoạt động. Sau đó, tôi đã bật gnome3 / gdm trong tệp configure.nix và xây dựng lại nó, cả gói và phụ thuộc của chúng đã được tải xuống một lần nữa. Nó đã hoạt động sau khi khởi động lại nhưng tôi không hiểu tại sao.
Steffen Winkler

@SteffenWinkler Khi sử dụng NixOS, bạn thường không cài đặt mọi thứ với nix-env, thay vào đó bạn chỉ định mọi thứ trong configuration.nixđó và sau đó chạy nixos-rebuild switch. Điều này có lợi ích là tất cả cấu hình hệ thống của bạn nằm ở một nơi và thật dễ dàng sao lưu toàn bộ cấu hình hệ thống của bạn (chỉ cần sao lưu configuration.nixtệp).
Pauan

15

Trên bất kỳ yumphân phối dựa trên nào (ví dụ Red Hat EL , CentOS , v.v.), bạn có thể:

  1. kiểm tra lịch sử thay đổi hệ thống bằng cách sử dụng 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. kiểm tra các chi tiết, sử dụng sudo yum history info 10

  3. quay trở lại một điểm trước đó trong lịch sử, sử dụng sudo yum history rollback 9

Cảnh báo

Có một số cảnh báo rõ ràng:

  1. Nếu gói cũ không còn khả dụng nữa, bạn sẽ nướng (để trích dẫn @vonbrand),
  2. Nếu bạn cài đặt bất cứ thứ gì bên ngoài yum, bạn có thể phá vỡ lịch sử.

Trong ví dụ của tôi, rằng <trong hàng có ID 4(ở cột cuối cùng), có nghĩa là tôi không thể quay lại điểm đó.

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

3
tính năng thú vị! Nhưng do 'bánh mì nướng' không phù hợp với hóa đơn của tôi.
Steffen Winkler

AFAIK điều này chỉ có thể có trong RHEL / CentOS 6 trở lên. Nếu bạn vẫn đang sử dụng RHEL / CentOS 5, bạn là SOL.
tự đại diện

Và nhân tiện, trong một môi trường doanh nghiệp với các repos được quản lý, cách tiếp cận này hoàn toàn khả thi khi bạn luôn có các gói cũ xung quanh, ngay cả khi bạn cần sử dụng --enablerepocờ để kích hoạt kho lưu trữ cũ không sử dụng để hạ cấp.
tự đại diện

Lợi ích của việc quay trở lại so với việc chỉ cài đặt lại phiên bản cũ là gì?
Bratchley 11/03/2016

@Bratchley tự động hóa! yum chỉ cần chăm sóc giữ danh sách các gói và phiên bản được cài đặt và kiểm tra các phụ thuộc khi cài đặt lại các phiên bản cũ. Rõ ràng bạn có thể làm điều đó bằng tay .
andcoz 11/03/2016

7

Trên OpenSUSE, bạn có thể dễ dàng sử dụng Snapper với hệ thống tập tin Btrfs .

Nếu bạn sử dụng cấu hình hệ thống tệp tiêu chuẩn trong khi cài đặt, nó được bật theo mặc định .

Khi Snapper được bật, nó được tích hợp hoàn toàn với yast2zypper. Nó sẽ tạo một ảnh chụp nhanh hệ thống tập tin mỗi khi bạn cài đặt hoặc nâng cấp thứ gì đó (hoặc tạo người dùng, v.v.).

Để khôi phục hệ thống về điều kiện trước đó, bạn chỉ phải chạy yast2 snapper.

nhập mô tả hình ảnh ở đây


công cụ thú vị thực sự. Mặc dù tôi khá thích ext4. Sẽ nghiên cứu điều này! Tôi có đúng không khi cho rằng Snapper không bị 'ràng buộc' với OpenSUSE mà là btrfs?
Steffen Winkler

Snapper được phát triển bởi SUSE. Nó là một tập hợp các công cụ tự động hóa việc tạo các ảnh chụp nhanh Brtfs trên "sự kiện". Tôi cho rằng bạn có thể sử dụng nó trên các bản phân phối khác nhưng tôi không chắc chắn. Trong mọi trường hợp, bạn có thể tự tạo các ảnh chụp nhanh Brtfs trên bất kỳ bản phân phối nào.
andcoz

3
Chỉ cần lưu ý rằng nếu âm lượng của bạn chứa bất kỳ dữ liệu nào, không chỉ là nhị phân và tập lệnh, thì việc quay lại ảnh chụp nhanh cũng sẽ quay lại dữ liệu của chính bạn. Tùy chọn này nghe có vẻ mạo hiểm, phù hợp nhất cho những người thực sự biết cách bố trí hệ thống tập tin của họ. Đối với tôi, ảnh chụp nhanh luôn được sao lưu, sao chép và tổng các tình huống phục hồi nhất quán.
dong dỏng

1
Cũng lưu ý rằng nhiều gói có tệp và / hoặc thư mục /varđể nó phải được khôi phục cùng với /ngay cả khi đó là một fs hoặc subvolume riêng biệt. Tốt hơn hết là kiểm tra kỹ bản nâng cấp trước khi áp dụng nó cho các máy chủ sản xuất hơn là dựa vào các tính năng như rollback nâng cấp hệ điều hành (điều này rất dễ thực hiện theo cách nửa vời nhưng là một vấn đề cực kỳ khó giải quyết chính xác ).
cas

1
@Jimp Một lời khuyên tốt. Trong mọi trường hợp, OpenSuSE không kích hoạt snapper trừ khi /homeở trong một hệ thống tập tin không chụp nhanh riêng biệt .
andcoz

6

AIX là rất tốt trong việc cập nhật lại. Chà - chúng tôi đang ở trang Unix / Linux và bạn chưa bao giờ chỉ định bạn muốn Linux :)

Mỗi bản cập nhật AIX duy nhất lưu tất cả các tệp đã sửa đổi trong một thư mục con riêng bên trong hệ thống tệp / var. Bản cập nhật có thể được hoàn nguyên bằng một lệnh gốc đơn giản và hoàn nguyên không cần mạng, nó không cần bất kỳ phương tiện / gói nào, nó không cài đặt lại bất cứ thứ gì và nó không phụ thuộc vào bất kỳ công nghệ chụp nhanh - hiệu ứng chỉ đơn giản là các tệp xuất hiện lại như trước khi cập nhật.

Như một phần thưởng, có một lệnh gốc tầm thường mksysbđể tạo bản sao lưu hệ thống độc lập có thể khởi động. Tệp có thể được khởi động đơn giản trên một hệ thống hoàn toàn không hoạt động do không khởi động được do một số trục trặc / hỏng.

Và đó là tất cả công nghệ đã được chứng minh với hàng thập kỷ lịch sử :)


Bạn có thường gặp vấn đề với các chương trình được khôi phục theo cách đó ở trạng thái không nhất quán và khôi phục (nghĩa là cơ sở dữ liệu có công cụ lưu trữ đã thay đổi hoặc dịch vụ chuyển sang định dạng tệp cấu hình mới) hoặc có cách nào tốt để xử lý cái đó?
Josh Rumbut

1
Đây là mô hình tôi đã sử dụng khi tôi xây dựng một hệ thống quản lý gói thô sơ cho phần mềm thường được phân phối trong các tarball được nén / nén. Bất cứ khi nào nó cài đặt các bản cập nhật, lần đầu tiên nó sẽ xây dựng một "gói rollback" của tất cả mọi thứ cần được sửa đổi. Gói rollback này sau đó có thể được sử dụng để hoàn nguyên, với điều kiện là không có gói cập nhật nào khác được áp dụng tạm thời. Tôi thường tự hỏi liệu các nhà quản lý gói phù hợp có thể làm điều này hay không, nhưng với các ràng buộc chỉ quay trở lại theo thứ tự ngược lại ... có lẽ chúng ta chỉ nên sử dụng git thay thế.
Monty Harder

Chết tiệt. Tôi nên xác định rằng tôi có nghĩa là các bản phân phối GNU / Linux. Nhưng thật thú vị, ngày nay AIX dường như có khả năng chạy các chương trình 'GNU / Linux', đoán tôi sẽ xem xét kỹ hơn.
Steffen Winkler

5

Trong Fedora (và tôi chắc chắn trong các bản phân phối khác nữa), bạn có thể yêu cầu quay lại phiên bản trước:

dnf downgrade <packages>

mang đến cho bạn phiên bản kế tiếp của các gói và bạn có thể yêu cầu một gói cụ thể bằng cách:

dnf downgrade <package>.<version>

Điều này chỉ hoạt động nếu (các) gói vẫn có sẵn trong kho. Các chức năng không phải là chưa từng nghe thấy, bằng mọi cách. Nó có nhược điểm, nếu một phần của bản nâng cấp là thay đổi cấu hình, việc khôi phục lại không nhất thiết phải là phiên bản chính xác trong quá khứ.


Bạn cũng có thể sử dụng DNF lịch sử undo #thing để undo
rõ hơn

This only works if the package(s) are still available in the repositories. yup, đó chính xác là vấn đề. Tôi hơi ngạc nhiên khi dường như không có một giải pháp 'rộng hơn' nào cho việc này, đặc biệt là với số lượng phân phối phát hành cuộn. Cho đến bây giờ, có vẻ như NixOS là lựa chọn tốt nhất của tôi hoặc tôi cần một loại công cụ hình ảnh hệ thống chỉ hoạt động dựa trên sự khác biệt và có thể khôi phục hệ thống về một thời điểm cụ thể trong 20 lần cập nhật gần nhất (?).
Steffen Winkler

@SteffenWinkler, nếu gói cũ không còn nữa, bạn sẽ nướng. Chắc chắn. Trừ khi bạn có một số loại sao lưu cục bộ.
vonbrand

2
@MTilsted, vì nó đã quá cũ? Các kho lưu trữ không chứa tất cả các phiên bản từ buổi bình minh của thời gian.
vonbrand

1
Trong dnf.conf (giống như yum.conf) có keepcache = true Các gói cũ có sẵn, vì bộ đệm ẩn không được xóa thủ công. Nhưng nó đã đi đến "bộ đệm" bộ đệm.
mmv-ru

2

Arch Linux cũng hỗ trợ hạ cấp các gói và kernel. Bạn cũng có thể cài đặt downgraderdowngradecác công cụ để tự động hóa quy trình. Giải pháp btrfs cũng hoạt động, tôi đã sử dụng nó để thực hiện khôi phục thủ công trước đây.

Làm thế nào tôi phục hồi hệ thống của mình:

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

Một lợi ích của btrfs là bạn có thể sử dụng các subvolume và "phân vùng" động. Chẳng hạn, tôi có một subvolume cho / (được gọi là @), / tmp (@tmp) và / home (@home). Sau đó, thật dễ dàng để sao lưu và khôi phục bất kỳ trong số này. Tôi có / tmp trong một subvolume riêng vì sao lưu nó với phần còn lại của hệ thống dường như vô nghĩa, vì nó bị xóa trên hầu hết các lần khởi động lại.


Tôi đã theo một liên kết trong wiki và đến đây . Điều đó có vẻ khá tuyệt và từ việc kiểm tra kho lưu trữ, có những tập tin quay trở lại năm 2013! Tại sao sử dụng cách btrfs khi điều này tồn tại? Vì các tệp được 'nâng cấp'? Hoặc có một số lý do khác?
Steffen Winkler

Bây giờ tôi đã chuyển vĩnh viễn sang Arch Linux sau khi trả cho NixOS một chuyến thăm ngắn. Nó (Arch Linux) gần như không ổn định như tôi luôn nghĩ và nó có một cộng đồng lành mạnh.
Steffen Winkler

@SteffenWinkler Đúng vậy. Ngoài ra, các tùy chọn hạ cấp Arch không được hỗ trợ "chính thức" và việc hạ cấp có thể sẽ bỏ qua các phụ thuộc (có thể trở nên khá lộn xộn nếu xảy ra sự cố).
Caleb Reister

2

Tôi sử dụng Arch Linux và nó lưu trữ tất cả các gói đã tải xuống để /var/cache/pacman/pkg/bạn có thể hạ cấp bất kỳ gói nào bất cứ lúc nào (trong số bạn không thể khởi động, sử dụng usb trực tiếp). Từ Arch Wiki :

pacman -U <file_name_of_the_package>

Để ngăn gói được nâng cấp, hãy bao gồm tên gói /etc/pacman.conf, như:

IgnorePkg=linux

Để tiết kiệm dung lượng, bạn có thể xóa thư mục bộ đệm bằng:

pacman -Sc

Sẽ xóa tất cả các gói cũ hơn và giữ gói mới nhất hoặc sử dụng -Sccđể xóa tất cả.


Lưu ý rằng điều này (bỏ qua các gói) lên tới một phần nâng cấp, không được hỗ trợ ...
jasonwryan 14/03/2016

Tôi đã theo một liên kết trong wiki và đến đây . Điều đó có vẻ khá tuyệt và từ việc kiểm tra kho lưu trữ, có những tập tin quay trở lại năm 2013! Tại sao sử dụng cách btrfs khi điều này tồn tại? Vì các tệp được 'nâng cấp'? Hoặc có một số lý do khác?
Steffen Winkler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.