Câu hỏi “Nâng cấp” là gì và tại sao nó nâng cấp hơn “nâng cấp”?


Tôi đã tự hỏi tại sao upgrade đôi khi không muốn nâng cấp một số phần nhất định của hệ thống, trong khi dist-upgrade làm. Đây là một ví dụ sau khi chạy apt-get upgrade:

apt-get upgrade:

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
0 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.

đấu với apt-get dist-upgrade:

rimmer@rimmer-Lenovo-IdeaPad-S10-2:~$ sudo apt-get dist-upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following NEW packages will be installed:
  linux-headers-3.0.0-13 linux-headers-3.0.0-13-generic
  linux-image-3.0.0-13-generic
The following packages will be upgraded:
  linux-generic linux-headers-generic linux-image-generic
3 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 48.5 MB of archives.
After this operation, 215 MB of additional disk space will be used.
Do you want to continue [Y/n]?

Nói cách khác, tại sao điều này không thể được thực hiện bởi upgrade?


344
2017-11-22 06:03


gốc




Các câu trả lời:


Từ apt-get thủ công:

upgrade
   upgrade is used to install the newest versions of all packages
   currently installed on the system from the sources enumerated in
   /etc/apt/sources.list. Packages currently installed with new
   versions available are retrieved and upgraded; under no
   circumstances are currently installed packages removed, or packages
   not already installed retrieved and installed. New versions of
   currently installed packages that cannot be upgraded without
   changing the install status of another package will be left at
   their current version. An update must be performed first so that
   apt-get knows that new versions of packages are available.

dist-upgrade
   dist-upgrade in addition to performing the function of upgrade,
   also intelligently handles changing dependencies with new versions
   of packages; apt-get has a "smart" conflict resolution system, and
   it will attempt to upgrade the most important packages at the
   expense of less important ones if necessary. So, dist-upgrade
   command may remove some packages. The /etc/apt/sources.list file
   contains a list of locations from which to retrieve desired package
   files. See also apt_preferences(5) for a mechanism for overriding
   the general settings for individual packages.

Và với phiên bản mới hơn apt công cụ có sẵn từ 14.04 trở đi:

full-upgrade
   full-upgrade performs the function of upgrade but may also remove
   installed packages if that is required in order to resolve a
   package conflict.

Trong trường hợp cụ thể của bạn, tôi thấy, ví dụ, linux-headers là một gói ảo được cung cấp bởi cả hai linux-headers-3.0.0-12 và linux-headers-3.0.0-13 và có vẻ như loại cài đặt gói và loại bỏ được xử lý bởi dist-upgrade, nhưng không phải bởi upgrade.


285
2017-11-22 06:57



Tôi không thấy full-upgrade như một tùy chọn để apt-get dưới 14.04.1. - nobar
Tôi không biết về apt nhưng nó có vẻ là một lệnh hoàn toàn khác biệt theo trang người đàn ông anh ta liên kết - BlueWizard
@ nobar Bạn không thấy vì nó là một lựa chọn apt và không apt-get... :-) Thử man apt. - Hastur
Được rồi, tôi đã tìm kiếm và liên kết đầu tiên tôi tìm thấy là dành cho Ubuntu 15.10 (xuất hiện vào cuối năm 2014 mà đường nối hợp lý với thử nghiệm của Jessie) manpages.ubuntu.com/manpages/wily/en/man8/apt.8.html - Z boson
@ Zboson Yeah, và 14.04 ra mắt không phải vào năm 2011, nhưng vào tháng 4 năm 2014 ... xem mẫu? - tgies


apt-get upgrade được giới hạn trong trường hợp các gói được thay thế bằng các phiên bản mới hơn, nhưng không cần thêm hoặc xóa gói nào. Ví dụ, phiên bản mới của Firefox nên được cài đặt với apt-get upgrade.

Tuy nhiên apt-get upgrade sẽ từ chối làm việc khi có các bổ sung hoặc xóa bỏ theo yêu cầu của các phiên bản cập nhật. Ví dụ, khi bạn có hạt nhân linux-image-3.2.0-10-generic cài đặt và linux-image-3.2.0-11-generic xuất hiện, linux-image-generic gói được cập nhật để phụ thuộc vào phiên bản mới hơn. Để cài đặt hạt nhân mới, bạn cần phải chạy apt-get dist-upgrade.

Chú ý như thế nào apt-get upgrade sẽ nói rằng các gói hạt nhân đã được held back. Đó là gợi ý cho việc sử dụng apt-get dist-upgrade.


118
2018-01-27 16:34



Hoàn hảo! : D Hai câu hỏi khác ... những gì được sử dụng bởi trình quản lý cập nhật đồ họa trong Ubuntu? Đề nghị là gì? - THpubs
Tiện ích đồ họa, update-manager, không sử dụng apt-get trực tiếp; thay vào đó, nó hoạt động với một phụ trợ được gọi là aptdaemon. Các khả năng tiêu chuẩn của update-manager là sự kết hợp của upgrade và dist-upgrade phương thức của apt-get: nó có thể thêm nhưng không xóa các gói - nó gọi công cụ "Nâng cấp một phần" khi yêu cầu xóa. Khi sử dụng dòng lệnh, sử dụng apt-get upgrade. Nếu bạn thấy nó báo cáo rằng các gói đã được "giữ lại", hãy chạy apt-get dist-upgrade để nhận các bản cập nhật còn lại. - pablomme


Về cơ bản, nâng cấp sẽ chỉ nâng cấp các gói hiện có từ phiên bản này sang phiên bản khác. Nó sẽ không cài đặt hoặc gỡ bỏ gói, ngay cả khi làm như vậy là cần thiết để nâng cấp những gói khác. Trong trường hợp cập nhật hạt nhân, việc nâng cấp gói linux-generic yêu cầu cài đặt gói linux-3.0.0-13-generic mới, và kể từ khi nâng cấp từ chối cài đặt hoặc gỡ bỏ các gói, nó từ chối nâng cấp linux-generic.

Đôi khi các sự không tương thích khác nhau giữa các gói sẽ yêu cầu một số gói cần xóa để nâng cấp các gói khác và điều đó cũng sẽ yêu cầu nâng cấp. Cập nhật hạt nhân sẽ luôn yêu cầu nâng cấp vì chúng được xử lý như thế nào. Thay vì có một gói hạt nhân được cập nhật, một gói hạt nhân hoàn toàn mới được tạo ra mỗi lần, và siêu gói hạt nhân được cập nhật để phụ thuộc vào gói hạt nhân mới thay vì gói hạt nhân cũ. Điều này đã được thực hiện để bạn giữ các phiên bản hạt nhân cũ xung quanh để trong trường hợp có vấn đề với việc khởi động hạt nhân mới, bạn có thể chọn phiên bản cũ từ trình đơn khởi động và phục hồi.


32
2017-11-22 14:45



Gist tốt nhất. Tuy nhiên, làm thế nào để giữ một gói nhất định? - 0xC0000022L


Các apt-get upgrade lệnh thông thường sẽ chỉ cài đặt các bản cập nhật (hoặc sửa lỗi) cho các gói hiện đang được cài đặt. Điển hình là bản phát hành mới của Mozilla Firefox, ví dụ, sẽ được cài đặt với lệnh này.

Tuy nhiên apt-get upgrade sẽ KHÔNG PHẢI thường cài đặt các bản phát hành mới, trong đó các thay đổi lớn (bao gồm việc loại bỏ các gói hoặc cập nhật GRUB là bắt buộc). Ví dụ, khi một hạt nhân Linux mới (linux-image-3.x.x-xx-generic, vv) có sẵn, gói sẽ không được cài đặt.

Để cài đặt hạt nhân mới, bạn sẽ cần phải chạy apt-get dist-upgrade. Bạn sẽ được thông báo khi bạn chạy apt-get upgrade, vì nó sẽ nói rằng một số gói đã được giữ lại. Đó là gợi ý của bạn để sử dụng: apt-get dist-upgrade.


11
2018-01-28 00:55



Điều này là gây hiểu lầm. dist-upgrade sẽ không nâng cấp lên bản phát hành mới trừ khi sources.list đã được sửa đổi cho phù hợp (và thậm chí sau đó, đó không phải là một cách được hỗ trợ để nâng cấp trong Ubuntu). Khi một hạt nhân mới được cài đặt với dist-upgrade, đó không phải là bản phát hành mới của Ubuntu. Nó chỉ là một gói mới. Hơn nữa, yêu cầu "hoặc cập nhật GRUB là bắt buộc" là sai. sudo apt-get upgrade hoàn toàn có khả năng nâng cấp các gói trong một tình huống mà GRUB phải được cập nhật, miễn là không có gói nào được gỡ bỏ và các gói mới được cài đặt. update-grub được chạy tự động, như mọi khi. - Eliah Kagan
Bạn nên viết câu trả lời của riêng bạn, vì điều đó không thêm vào sự rõ ràng của tôi. - david6
Bên cạnh những gì Eliah đề cập, điểm quan trọng là apt-get upgrade sẽ không xóa hoặc thêm gói. Nếu sửa chữa một gói yêu cầu một gói mới, bản cập nhật sẽ được giữ lại. câu trả lời của pablomme, mà bạn đã sửa đổi để ít chính xác hơn, tốt hơn và tôi khuyên người đọc nên truy cập trang đó. - Chan-Ho Suh
Điều chỉnh: apt-get upgrade sẽ không bao giờ cài đặt, dựng lên hoặc là tẩy bất kỳ gói nào. Nâng cấp hạt nhân được đóng gói như các gói mới và kết quả là, apt-get upgrade sẽ không bao giờ nâng cấp hạt nhân. Thực tế là nâng cấp hạt nhân có những thay đổi "lớn" như cấu hình GRUB không phải là lý do cho sự khác biệt giữa upgrade và dist-upgrade. - Mikko Rantalainen