Dưới đây là một mô tả chi tiết hơn của quá trình. Xin lỗi các văn bản đã nhận được rất lâu.
Kinh nghiệm của tôi bắt nguồn từ Debian, mà toàn bộ hệ thống đóng gói và nâng cấp được sử dụng trong Ubuntu ban đầu được phát minh. Nâng cấp bảo mật Ubuntu hàng ngày tương ứng với việc chạy apt-get upgrade
mà thường không xóa bất kỳ phần mềm nào. Các bản nâng cấp phát hành lớn tương ứng với apt-get dist-upgrade
thời gian mà các gói phần mềm có thể được trao đổi hoàn toàn.
Trên thực tế, các thành phần cấp rất thấp thường không được trao đổi trong quá trình nâng cấp phát hành. Ngay sau khi nâng cấp, bạn sẽ tìm thấy hai hình ảnh kernel và initrd trong thư mục / boot của bạn. Điều này là do không giống như các chương trình, các thành phần kernel không thể thay thế cho nhau. Nếu có nhu cầu tải trình điều khiển thiết bị mới trong quá trình nâng cấp, chúng phải tương thích với kernel đang chạy. Sau khi hệ thống khởi động với kernel mới, cái cũ có thể được gỡ bỏ. Lần trước tôi đã kiểm tra điều này phải được thực hiện thủ công, tôi không biết trình cập nhật hiện tại xử lý việc này như thế nào. Đây là BTW. lý do chính, tại sao hình ảnh hạt nhân mang số phiên bản của nó trong tên tệp - vì vậy bạn có thể cài đặt các phiên bản kernel khác nhau cùng một lúc. Tương tự cho đường dẫn mô-đun (/ lib / mô-đun / ...)
Các gói phần mềm được nâng cấp từng cái một, bắt đầu với các gói thấp nhất trong chế độ phụ thuộc. Đó là những thư viện chương trình bình thường như libc và những người khác. Trình tự trong đó các gói được cập nhật không phải là mã hóa cứng mà được tính toán động khi các phụ thuộc gói được giải quyết. Trong hầu hết các trường hợp, các chương trình cũ có thể hoạt động với các thư viện mới, vì vậy sẽ không có vấn đề gì nếu những thư viện đó được thay thế trước.
Bạn phải hiểu ở đây, rằng hệ thống phân biệt giữa các gói được cài đặt thủ công (tức là các gói mà bạn tự yêu cầu trực tiếp, tức là crom) và các gói được cài đặt tự động, trong đó chỉ cài đặt để đáp ứng các gói phụ thuộc được cài đặt thủ công (và phụ thuộc của các phụ thuộc đó ).
Đối với mỗi chương trình được cài đặt thủ công, trình cập nhật chỉ tìm phiên bản mới hơn. Thông thường các chương trình đó chỉ là các gói meta như "ubfox-desktop", không chứa dữ liệu và chỉ phụ thuộc. Các phiên bản mới của thư viện phụ thuộc sẽ được đưa vào, vì chúng được yêu cầu bởi các chương trình được cập nhật trực tiếp (yêu cầu thủ công). Trình cập nhật sẽ luôn cố gắng cài đặt phiên bản có thể sử dụng mới nhất của bất kỳ gói phụ thuộc nào (trong mọi lần nâng cấp không chỉ phát hành nâng cấp).
Các chương trình không thể hoạt động với các phiên bản thư viện mới không thể được khởi động trong thời gian sau khi thư viện được nâng cấp và trước khi chính chương trình cũng được nâng cấp. Nếu các chương trình đó đã được chạy trước khi nâng cấp thư viện, tuy nhiên chúng sẽ tiếp tục chạy, vì phiên bản thư viện cũ vẫn còn trong bộ nhớ miễn là nó vẫn được sử dụng. Các chương trình đã được bắt đầu trước khi chúng được nâng cấp cũng vậy. Những người sẽ không cung cấp các tính năng mới cho đến khi chúng bị chấm dứt và khởi động lại.
Sau khi cập nhật, một số thư viện (hoặc phụ thuộc nói chung) sẽ bị mồ côi. Đó là những thư viện được yêu cầu bởi các phiên bản chương trình cũ, nhưng không còn được yêu cầu bởi các phiên bản mới. Vì các gói này được đánh dấu là tự động cài đặt và vì không có chương trình cài đặt thủ công nào liên quan đến chúng nữa nên các gói này có thể dễ dàng được định vị và gỡ bỏ. Bạn thậm chí có thể quan sát đây là bước cuối cùng của quá trình cập nhật (trình cập nhật là "loại bỏ các gói lỗi thời" hoặc một cái gì đó tương tự).
Một số gói sẽ được cài đặt, nơi chưa được cài đặt trước đó, đó là những phụ thuộc đơn giản mới, được đánh dấu là tự động cài đặt và có thể được gỡ bỏ, nếu yêu cầu đối với chúng sẽ biến mất trong tương lai.
Cơ chế này thậm chí cho phép trao đổi toàn bộ chương trình người dùng. Ví dụ như chuyển từ Gnome2 sang Unity. Vì cả hai chỉ là phụ thuộc tự động của máy tính để bàn Ubuntu, đây là một trong số ít các gói, trong đó phiên bản mới thực sự được yêu cầu ở vị trí đầu tiên.
Các chương trình thường không phụ thuộc vào một phiên bản cụ thể của kernel OS, vì vậy chúng sẽ hoạt động tốt với kernel đang chạy.
Ngoài tất cả những điều này, tôi nghi ngờ trình cập nhật Ubuntu ném một số bản sửa lỗi và cách khắc phục cụ thể vào hỗn hợp, để tránh các tình huống trong đó lý thuyết này bị phá vỡ.
Như bạn có thể thấy trong quá trình cập nhật, có những điều kiện rất tốt trong đó hệ thống chỉ có thể sử dụng được cho một phần hạn chế. Nếu có lỗi xảy ra trong quá trình cập nhật, rất có thể bạn sẽ bị bỏ lại với một hệ thống bị hỏng. Thường thì ngay cả một thứ không thể dễ dàng sửa chữa, vì chương trình nâng cấp cũng có thể bị ảnh hưởng. Hãy nhớ rằng, các chương trình với các phụ thuộc bị hỏng có thể tiếp tục hoạt động, nhưng không được khởi động lại, miễn là các phụ thuộc bị hỏng, điều này cũng đúng với trình cập nhật.
Bạn có thể sử dụng chương trình dòng lệnh apt-mark
để tìm ra gói nào được đánh dấu là cài đặt thủ công và gói nào được cài đặt tự động. Bạn cũng có thể chuyển đổi các dấu bằng cách sử dụng cùng một chương trình. Điều này sẽ ảnh hưởng trực tiếp đến quá trình cập nhật.
Trong một thiết lập phần mềm phức tạp hơn, Trình cập nhật đôi khi sẽ yêu cầu bạn giải quyết một cách phụ thuộc bằng tay. Tức là khi một chương trình được cài đặt thủ công được cập nhật và yêu cầu một phiên bản mới của thư viện trong khi một chương trình khác được cài đặt thủ công phụ thuộc vào phiên bản cũ của cùng một thư viện và không thể hoạt động với phiên bản mới. Sau đó, bạn sẽ phải đưa ra lựa chọn của mình, hoặc từ bỏ một trong những chương trình đó hoặc không được nâng cấp cả hai. Vì sự phụ thuộc thường phức tạp nên điều này có thể trở nên rất lộn xộn rất nhanh (bạn có thể đã nghe về thuật ngữ "địa ngục phụ thuộc").
Bây giờ đến các câu hỏi cụ thể:
- Khi cơ sở hạ tầng cấp thấp bị thay đổi (cấp thấp như trong kernel, trình điều khiển, thư viện, v.v ... bất cứ điều gì mà người dùng không trực tiếp tương tác), điều gì xảy ra với các nhị phân không dùng nữa?
- OK ... tôi đã trình bày cái này
- Điều gì xảy ra với một ứng dụng đã hoàn toàn không dùng nữa? Ví dụ: Unity 2D (hoặc bất kỳ phần mềm nào khác bị bỏ / không có người bảo trì có gói không ở trong repo mới).
- Nếu Ứng dụng đã được cài đặt thủ công, nó sẽ tồn tại trong hệ thống, thường gây ra địa ngục phụ thuộc mà tôi đã mô tả.
- ubfox-desktop là một siêu dữ liệu lấy các ứng dụng Ubuntu mặc định làm phụ thuộc. Nếu tôi gỡ bỏ Firefox và cài đặt Chrome, Firefox vẫn sẽ được nâng cấp như một phần của nâng cấp chứ?
- Miễn là nó là trình duyệt tiêu chuẩn của Phiên bản mới, có. Chromium cũng sẽ được nâng cấp. Tôi không chắc chắn nếu bạn có thể loại bỏ Firefox mà không cần gỡ bỏ máy tính để bàn Ubuntu. Lưu ý rằng ngoài các phụ thuộc nghiêm ngặt, hệ thống gói còn biết đến khái niệm khuyến nghị, nơi phần mềm thường sẽ được cài đặt như phụ thuộc, nhưng có thể được gỡ cài đặt sau mà không ảnh hưởng đến bất kỳ điều gì khác ngoài phụ thuộc riêng của nó.
- Hơn nữa, điều gì xảy ra nếu một ứng dụng duy nhất được sử dụng phụ thuộc vào gói-x và không còn làm như vậy trong bản phát hành mới; gói-x sẽ được nâng cấp cùng với các gói còn lại mặc dù đã mồ côi?
Chỉ cần hỏi tôi nếu bạn vẫn còn bất kỳ câu hỏi.