Câu hỏi “Các gói sau đã được giữ lại:” Tại sao và làm cách nào để giải quyết nó?


Tôi vừa thêm một kho lưu trữ PPA cho phiên bản phát triển của GIMP, nhưng tôi nhận được lỗi này:

$ apt-get update && apt-get upgrade
...
The following packages have been kept back:
  gimp gimp-data libgegl-0.0-0 libgimp2.0

Tại sao và làm thế nào tôi có thể giải quyết nó để tôi có thể sử dụng phiên bản mới nhất thay vì phiên bản tôi có bây giờ?


720
2017-07-31 21:59


gốc


Nói đúng ra, tôi sẽ nói đó là cảnh báo chứ không phải lỗi. - Kazark


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


Theo một bài viết trên debian-administration.org,

Nếu các phụ thuộc đã thay đổi trên một trong các gói mà bạn đã cài đặt để gói mới phải được cài đặt để thực hiện nâng cấp thì gói đó sẽ được liệt kê là "lưu giữ lại".

Giải pháp thận trọng 1:

Giải pháp thận trọng là chạy sudo apt-get install <list of packages kept back>. Trong hầu hết trường hợp, điều này sẽ cung cấp cho các gói lưu trữ những gì họ cần để nâng cấp thành công.

Giải pháp thận trọng 2:

Mỗi Câu trả lời của Pablo, bạn có thể chạy sudo apt-get --with-new-pkgs upgradevà nó sẽ cài đặt các gói lưu trữ.

Điều này có lợi ích là không đánh dấu các gói được lưu trữ lại là "được cài đặt thủ công", điều này có thể buộc nhiều người dùng can thiệp xuống dòng hơn (xem nhận xét).

Nếu giải pháp của Pablo phù hợp với bạn, vui lòng upvote nó. Nếu không, xin vui lòng bình luận những gì đã đi sai.

Giải pháp tích cực:

Một giải pháp tích cực hơn là chạy sudo apt-get dist-upgrade, sẽ buộc cài đặt các phụ thuộc mới đó.

Nhưng dist-upgrade  có thể khá nguy hiểm. Không giống như nâng cấp nó có thể tẩy gói để giải quyết các tình huống phụ thuộc phức tạp. Không giống như bạn, APT không phải lúc nào cũng đủ thông minh để biết liệu những bổ sung và loại bỏ này có thể tàn phá không.

Vì vậy, nếu bạn thấy mình ở một nơi mà "giải pháp thận trọng" không hoạt động, dist-upgrade  có thể công việc ... nhưng có lẽ bạn nên học thêm một chút về APT và giải quyết các vấn đề phụ thuộc "bằng tay" bằng cách cài đặt và gỡ bỏ các gói trên cơ sở từng trường hợp cụ thể.

Hãy suy nghĩ về nó như sửa chữa một chiếc xe ... nếu bạn có thời gian và tiện dụng với một chìa khoá, bạn sẽ nhận được một số sự an tâm bằng cách đọc và tự sửa chữa. Nếu bạn cảm thấy may mắn, bạn có thể thả xe của bạn với người anh em họ của bạn dist-upgrade và hy vọng cô ấy biết công cụ của mình.


704
2017-07-31 22:15



Vì đây là một nhu cầu trả lời được chấp nhận, nó thực sự cần cập nhật để cảnh báo về việc sử dụng dist-upgrade trên một hệ thống ổn định như nhiều câu trả lời khác dưới đây đã chỉ ra. Cá nhân tôi nghĩ rằng có một câu trả lời đơn giản / an toàn hơn cần được quảng bá: apt-get install <danh sách các pkg> - Cas
Cas, tôi nên thêm rằng nó có thể nguy hiểm để chạy một bản nâng cấp trên một hệ thống ổn định? Tại sao chính xác là nguy hiểm? (Tôi thành thật không biết rõ tất cả điều đó.) - mac9416
Đây là một Server Fault answer điều đó giải thích việc nâng cấp một cách chi tiết hơn một chút. Tôi nghĩ rằng nó chỉ đáng làm rõ (không nguy hiểm như vậy) mà nó có thể nâng cấp toàn bộ hệ thống mà có thể vượt quá những gì người dùng mong muốn / muốn trong ví dụ OP họ đang tự hỏi tại sao gimp đang bị giữ lại. - Cas
Xin lưu ý rằng sudo apt-get dist-upgrade cũng có thể tẩy gói. Do đó, tốt nhất là luôn kiểm tra danh sách các thay đổi sẽ được thực hiện trước khi đồng ý với chúng, khi chạy sudo apt-get dist-upgrade. - Eliah Kagan
@EliahKagan Tôi có thể thêm rằng ngay cả apt-get upgrade có thể loại bỏ các gói? Nó sẽ luôn luôn làm điều đó khi sẽ có một cuộc xung đột phiên bản khác. Hãy nghĩ về llvm3.6 so với llvm3.6v5 (với "v5" có nghĩa là nó được biên dịch với gcc 5). Hai không thể cùng tồn tại, chỉ một trong hai có thể được giữ trên hệ thống. Vâng, vâng dist-upgrade có thể loại bỏ một số gói, nhưng nó không chỉ dist-upgrade điều đó sẽ làm điều này; trong một số trường hợp, upgrade cũng vậy. - syntaxerror


Bất cứ khi nào bạn nhận được từ lệnh apt-get upgrade thông điệp

The following packages have been kept back:

sau đó nâng cấp một hoặc tất cả các gói được lưu trữ lại mà không thực hiện nâng cấp phân phối (đây là những gì dist-upgrade hiện, nếu tôi nhớ chính xác) là phát hành lệnh:

apt-get install <list of packages kept back>

điều này sẽ giải quyết các vấn đề lưu giữ lại và sẽ yêu cầu cài đặt các gói bổ sung, vv như đã được giải thích bởi các câu trả lời khác.


468
2017-09-08 09:14



Khi gói được giữ lại theo cách này và tôi theo cách thủ công apt-get upgrade <list of packages>, nếu tôi làm lại apt-get upgrade, nó sẽ liệt kê các gói được đề cập là không còn cần thiết và tôi có thể sử dụng apt autoremove để loại bỏ chúng, mà tôi làm, và sau đó cuối cùng apt-get upgrade và họ không còn được liệt kê như là giữ lại ... Rất lạ. Có suy nghĩ gì không? - cram2208
Làm apt-get install cũng loại bỏ các gói khi cần thiết để giải quyết tình huống phụ thuộc gnarly, hoặc bạn sẽ phải chạy riêng apt-get remove lệnh để hoàn thành phần đó của quá trình nâng cấp? - mac9416
@ cram2208 Tôi tin rằng đó là hành vi mong đợi. Các gói đã được "tự động cài đặt và [...] không còn cần thiết" là các phiên bản trước của gói nâng cấp, mà bây giờ không còn cần thiết nữa. apt autoremove sau đó loại bỏ những phụ thuộc không sử dụng này. - Alex
Nếu nâng cấp sẽ yêu cầu một gói mới được cài đặt, gói sẽ được "giữ lại". Trước tiên hãy cân nhắc sử dụng: sudo apt-get --with-new-pkgs upgrade mà sẽ không có ảnh hưởng phụ của việc gây ra các gói được đánh dấu là được cài đặt thủ công - l --marc l
@ mac9416 có nó. - jarno


apt-get dist-upgrade nguy hiểm cho môi trường ổn định,

  1. cài đặt source.list sai và bạn kết thúc với ubuntu bị hỏng.
  2. bạn có thể nhận được toàn bộ ứng dụng được nâng cấp lên phiên bản bạn không muốn.

Trường hợp sử dụng: nâng cấp hạt nhân giữ lại, bạn chỉ muốn nâng cấp hạt nhân, không muốn nâng cấp toàn bộ phân phối.

Cách tốt hơn để xử lý gói được giữ lại:

sudo aptitude

Nếu bạn đã giữ lại gói, bạn sẽ thấy Gói nâng cấp ở đầu danh sách.

  • Lần truy cập + trên danh sách đó
  • Nhấn g hai lần
  • Trả lời công cụ debconf nếu được hỏi
  • Nhấn quay lại để tiếp tục
  • Nhấn Q
  • Nhấn có

Gói cài đặt được giữ lại của bạn đã được cài đặt.


170
2017-12-24 00:43



apt-get dist-upgrade chỉ nguy hiểm nếu bạn có kho lưu trữ xấu trong /etc/apt/sources.list*. Thật tốt khi biết rằng dist-upgrade nâng cấp tất cả các các gói, nhưng với các kho lưu trữ mặc định, điều đó sẽ ổn. không phải sử dụng dist-upgrade có thể nguy hiểm, vì bạn có thể bỏ lỡ các cập nhật bảo mật. - Flimm
apt-get dist-upgrade có thể tẩy cũng như thêm các gói, nhưng nó không thực sự nguy hiểm. Bất kỳ lệnh cài đặt gói nào cũng có thể gây ra thiệt hại nghiêm trọng nếu bạn có vấn đề trong sources.list tập tin! Thường xuyên apt-get upgrade lệnh sẽ cài đặt bất kỳ gói nào từ bất kỳ nguồn phần mềm nào được bật; dist-upgrade không phải là duy nhất theo cách này. Hơn nữa, sử dụng aptitude để thực hiện bất kỳ hoạt động nào, ít nhất là trên amd64, nguy hiểm hơn nhiều so với chạy apt-get dist-upgrade, trong bản phát hành lỗi 831768 không cố định. - Eliah Kagan
Đối với tôi, nó đã được dễ dàng hơn (máy địa phương với X chạy) để chỉ cần mở synaptic và buộc nâng cấp của gói. Đối với một số lý do nó dường như không hiển thị ở tất cả các nơi bạn mô tả trong synaptic. - djvs
Cũng thế sudo aptitude safe-upgrade - msanford


Tại sao bạn không thử câu trả lời Unix SE này:

sudo apt-get --with-new-pkgs upgrade

Điều này cho phép cài đặt các gói mới. Nó sẽ cho bạn biết những gói nào sẽ được cài đặt và nhắc bạn trước khi thực sự cài đặt.

apt chỉ huy (thay thế thân thiện đến apt-get) chia sẻ điều này apt-get Tùy chọn.

Sử dụng apt install <pkg> thay vào đó sẽ đánh dấu pkg là "cài đặt thủ công" !! Để đánh dấu lại nó là sử dụng "tự động cài đặt" apt-mark auto <pkg> (xem thêm tiểu ban showmanual). Thêm thông tin về câu trả lời này.


60
2017-12-20 20:16



1 bởi vì nó không có ảnh hưởng phụ của việc gây ra các gói được đánh dấu là được cài đặt thủ công. - ctrl-alt-delor
Lưu ý cho những người từng đọc nhận xét của tôi ở trên: không có tác dụng phụ của việc đánh dấu là cài đặt theo cách thủ công là một điều tốt. Tôi thích câu trả lời này. - ctrl-alt-delor
Vì vậy, nếu bạn sử dụng sudo apt-get --with-new-pkgs upgrade  không có đang chạy apt-mark auto <pkg>, mọi thứ sẽ ổn chứ? Lệnh thứ hai chỉ cần thiết nếu bạn làm chọn cài đặt thủ công các gói bị giữ lại? - mac9416
Vâng. apt-mark auto <pkg> chỉ cần thiết để đánh dấu một gói đang được cài đặt tự động (ở đây trang người đàn ông). - Pablo Bianchi


Thường có hai lý do bạn có thể thấy thông báo này.

Nếu nâng cấp chương trình (qua sudo apt-get upgrade) sẽ khiến các gói được thêm vào hoặc bị loại bỏ, sau đó chương trình sẽ được giữ lại. Bạn có thể dùng sudo apt-get dist-upgrade trong trường hợp này, sau đó sẽ cung cấp thêm hoặc xóa các chương trình bổ sung.

Điều này khá phổ biến và thường không phải là vấn đề. Thỉnh thoảng (đặc biệt là trong Ubuntu alpha) dist-upgrade sẽ đề nghị xóa nhiều chương trình khác, trong trường hợp đó bạn có thể muốn hủy bỏ nó.

Nếu chương trình phụ thuộc vào các gói hoặc các phiên bản không có sẵn, thì chương trình sẽ được giữ lại. Bạn thực sự không thể làm bất cứ điều gì nhưng chờ đợi trong trường hợp này, vì gói cơ bản có thể gỡ cài đặt. Điều này có thể xảy ra khi các gói được thêm vào kho lưu trữ không đúng thứ tự, khi gói được đổi tên hoặc khi gói ngừng cung cấp gói ảo.


30
2017-07-31 22:16



Có cách nào để xác định xem gói được lưu trữ có cần một phụ thuộc không thể cài đặt hay không nếu nó bị giữ vì các gói khác phụ thuộc vào nó. Tôi có nhiều gói được tổ chức và tôi tin rằng cả hai trường hợp này đều có thể áp dụng trên hệ thống của tôi. - Jake
Cảm ơn, lý do thứ hai là vấn đề đối với tôi. Cũng apt-get dist-upgrade từ chối cài đặt nó. Kiểm tra gói với aptitude cho thấy rằng nó phụ thuộc vào một gói không có sẵn. Tôi đoán tôi sẽ phải đợi. - jlh


Nhiều khả năng các gói này được giữ lại vì cài đặt của chúng sẽ tạo ra sự mâu thuẫn phụ thuộc. Điều này có thể xảy ra vì bạn đang sử dụng lưu trữ dưới sự phát triển tích cực, trang hoặc vì máy nhân bản bạn sử dụng không được cập nhật đầy đủ.

Trong trường hợp cuối cùng, chỉ cần chờ đợi, khi các phụ thuộc được giải quyết, nó sẽ được cài đặt vào lần sau.

Chỉnh sửa:

Có một khả năng khác, các gói có thể được giữ lại nếu có đặt giữ chúng, hoặc nếu chúng được ghim.


18
2017-07-31 22:17



Bạn dựa vào khả năng nào, mà không biết bất cứ điều gì anh ta chạy nâng cấp apt-get hoặc nâng cấp apt-get (alt. Aptitude equivalentents)? - andol
đây là vấn đề xảy ra nhất trong các câu hỏi và lỗi hỗ trợ - txwikinger
Đã đồng ý. Có lẽ bạn nên đợi và kiểm tra apt_preferences. Điều này thường được gây ra bởi các tài liệu lưu trữ phát triển, nơi các gói phụ thuộc và sẵn có đang thay đổi rất nhanh chóng. Chờ cho họ lắng xuống và bạn có thể không cần phải dist-upgrade ở tất cả. Nếu bạn vẫn muốn dist-upgrade, sau đó xem các gói MỚI sẽ được cài đặt và các gói cần xóa trước khi tiếp tục. - Umang
Đây là trường hợp của tôi vì tôi nhận được thông báo "được giữ lại" bằng cách sử dụng bản nâng cấp - Postadelmaga
Trong trường hợp vấn đề này là do một messup với apt preferences (ghim), tôi thấy cài đặt lại các gói đã lưu đã giúp tôi: apt-get install --reinstall <packages>. - tanius


Bạn cũng có thể thử:

sudo aptitude safe-upgrade.

Nó an toàn hơn full-upgrade (ban đầu có tên là dist-upgrade) vì "các gói sẽ không bị xóa trừ khi chúng không được sử dụng".

Từ man aptitude:

nâng cấp an toàn

Nâng cấp các gói đã cài đặt lên phiên bản mới nhất của chúng. Cài đặt   gói sẽ không bị xóa trừ khi chúng không được sử dụng / .../ Gói   hiện không được cài đặt có thể được cài đặt để giải quyết   phụ thuộc trừ khi tùy chọn dòng lệnh --no-new-install là   được cung cấp.


18
2017-08-12 08:02





Điều này thường là do gói đã thêm một phụ thuộc và nâng cấp không muốn thêm nó cho bạn mà không được phép.

Nếu bạn chạy:

sudo apt-get install gimp gimp-data libgegl-0.0-0 libgimp2.0

Sau đó, các phiên bản mới nên được cài đặt cùng với sự phụ thuộc mới của chúng.


9
2017-12-27 19:20



Nâng cấp các gói cụ thể (và phụ thuộc của chúng) mà không có sự cam kết (rủi ro) của việc nâng cấp. - John Mee


Tôi đã thấy rằng aptitude làm tốt hơn trong việc nâng cấp các gói nếu các phiên bản khác nhau một chút. Tôi đã có một tình huống như thế này:

me@compy:/etc/apt$ apt-cache policy gzip
gzip:
  Installed: 1.3.5-15
  Candidate: 1.3.5-15+etch1
  Version table:
     1.3.5-15+etch1 0
        500 http://archive.debian.org etch/main Packages
 *** 1.3.5-15 0
        100 /var/lib/dpkg/status

Điều này làm cho apt-get giữ lại bản cập nhật, nhưng aptitude đã cập nhật nó tốt. Tôi không chắc thuật toán nào được sử dụng để xác định xem gói có nên được cập nhật hay không. Tôi đoán hai người này có cùng một phiên bản, chỉ có một 'vòng loại' khác nhau. Nhưng trong mọi trường hợp, apt-get sẽ không cập nhật nó, nhưng aptitude sẽ.


7
2018-05-02 20:48





Điều này làm việc cho tôi

sudo aptitude full-upgrade

7
2018-03-22 11:40



Cũng aptitude upgrade đã làm cho tôi. - Bibhas
Tôi đang sử dụng Ubuntu 14.04 và tôi không có aptitude dòng lệnh - ahmed hamdy
apt-get dist-upgrade đã cho tôi cùng một thông điệp, nhưng điều này đã giải quyết nó cho tôi. Tôi đã có một gói đã phá vỡ nâng cấp của gói khác. Tôi không cần cái mà tôi đã cài đặt, vì vậy aptitude full-upgrade đã cho tôi tùy chọn xóa nó để nó có thể nâng cấp mọi thứ khác. - f.ardelian