Nâng cấp từ xa là gì và tại sao nó nâng cấp nhiều hơn so với nâng cấp của Wap?


395

Tôi đã tự hỏi tại sao upgradeđôi khi không muốn nâng cấp một số phần của hệ thống, trong khi dist-upgradeđó. Đâ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.

so 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?

Câu trả lời:


327

Từ apt-gethướng dẫn :

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 aptcông cụ mới hơn có sẵn từ ngày 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-headerslà một gói ảo được cung cấp bởi cả hai linux-headers-3.0.0-12linux-headers-3.0.0-13nghe có vẻ giống như kiểu cài đặt và gỡ bỏ gói được xử lý bởi dist-upgrade, nhưng không phải bởi upgrade.


4
Tôi không thấy full-upgradelà một lựa chọn apt-getdưới 14.04.1.
tộc

Tôi cũng không biết aptnhưng dường như đó là một mệnh lệnh hoàn toàn khác biệt theo trang người đàn ông mà anh ta liên kết
BlueWizard

18
@nobar Bạn không thấy vì đó là một tùy chọn aptvà không phải của apt-get... :-) Hãy thử man apt.
Hastur

Được rồi, tôi đã tìm kiếm và liên kết sớm nhất mà tôi tìm thấy là dành cho Ubuntu 15.10 (xuất hiện vào cuối năm 2014, điều này hợp lý với thử nghiệm của Jessie) manpages.ubfox.com/manpages/wily/en/man8/apt.8.html
Z boson

6
@Zboson Vâng, và 14.04 xuất hiện không phải vào năm 2011, nhưng vào tháng 4 năm 2014 ... xem mô hình nào?
tgies

137

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

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

Lưu ý cách một apt-get upgradesẽ nói rằng các gói kernel đã được held back. Đó là gợi ý cho việc sử dụng apt-get dist-upgrade.


2
Hoàn hảo! : D Hai câu hỏi nữa ... trình quản lý cập nhật đồ họa trong Ubuntu sử dụng cái gì? Một đề nghị là gì?
THpub

11
Các tiện ích đồ họa update-manager, không sử dụng apt-gettrực tiếp; thay vào đó nó hoạt động với một phụ trợ được gọi aptdaemon. Các khả năng tiêu chuẩn update-managerlà sự pha trộn giữa upgradedist-upgradecác chế độ apt-get: nó có thể thêm nhưng không loại bỏ các gói - nó gọi công cụ "Nâng cấp một phần" khi cần phải gỡ bỏ. 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 đã bị "giữ lại", hãy chạy apt-get dist-upgradeđể chọn các bản cập nhật còn lại.
pommeomme

33

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ỏ các gói, ngay cả khi làm như vậy là bắt buộc để nâng cấp các gói khác. Trong trường hợp cập nhật kernel, nâng cấp gói linux-generic yêu cầu cài đặt gói chung linux-3.0.0-13 mới và vì 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 sự không tương thích khác nhau giữa các gói sẽ yêu cầu loại bỏ một số gói để nâng cấp các gói khác và điều đó cũng sẽ yêu cầu nâng cấp xa. Các bản cập nhật kernel sẽ luôn yêu cầu nâng cấp dist vì cách chúng được xử lý. Thay vì có một gói kernel được cập nhật, một gói kernel hoàn toàn mới được tạo ra mỗi lần và siêu dữ liệu kernel được cập nhật để phụ thuộc vào gói kernel mới thay vì gói cũ. Điều này đã được thực hiện để bạn giữ các phiên bản kernel cũ xung quanh để trong trường hợp có vấn đề với việc khởi động kernel mới, bạn có thể chọn phiên bản cũ từ menu boot và recovery.


2
Ý chính tốt nhất Tuy nhiên, làm thế nào để giữ một gói nhất định?
0xC0000022L

11

Các apt-get upgradelệnh thường sẽ chỉ cài đặt bản cập nhật (hoặc sửa chữa) với các gói hiện cài đặt. Thông thường, một bản phát hành mới của Mozilla Firefox , chẳng hạn, sẽ được cài đặt bằng lệnh này.

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

Để cài đặt kernel mới, bạn sẽ cần 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 các gói nhất định đã bị giữ lại. Đó là gợi ý của bạn để sử dụng : apt-get dist-upgrade.


12
Điều này là sai lệch. dist-upgradesẽ 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à cách hỗ trợ để nâng cấp trong Ubuntu). Khi một kernel mới được cài đặt dist-upgrade, đó không phải là một 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 upgradehoàn toàn có khả năng nâng cấp các gói trong tình huống GRUB phải được cập nhật, miễn là không có gói nào bị xóa và các gói mới được cài đặt. update-grubđược chạy tự động, như mọi khi.
Eliah Kagan

2
Bạn nên viết câu trả lời của riêng bạn, vì điều đó không thêm rõ ràng cho tôi.
david6

2
Bên cạnh những gì Eliah đã đề cập, điểm quan trọng là apt-get upgradesẽ không xóa hoặc thêm các gói. Nếu sửa lỗi cho gói yêu cầu gói mới, bản cập nhật sẽ được giữ lại. Câu trả lời của pottaomme mà bạn sửa lại là kém chính xác hơn, tốt hơn và tôi khuyên độc giả nên đi đến câu trả lời đó.
Chan-Ho Suh

1
Sửa chữa: apt-get upgradesẽ không bao giờ cài đặt hoặc gỡ bỏ bất kỳ gói. Nâng cấp kernel được đóng gói dưới dạng các gói mới và kết quả là, apt-get upgradesẽ không bao giờ nâng cấp kernel. Việc nâng cấp kernel thực hiện các thay đổi "chính" như cấu hình GRUB không phải là lý do cho sự khác biệt giữa upgradedist-upgrade.
Mikko Rantalainen

1

Lựa chọn tốt nhất của bạn là:

apt full-upgrade

-Có thể tự động xử lý các phụ thuộc khi nâng cấp gói; trong khi:

apt upgrade

-Không tự động xử lý các phụ thuộc khi nâng cấp gói.

- duBtrotter

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.