Tại sao sự tách biệt của cập nhật và nâng cấp thậm chí còn tồn tại?


12

Tôi hiểu rằng apt, trong lệnh update, cập nhật danh sách các gói có sẵn, nhưng nó không nâng cấp phần mềm đã được cài đặt từ các gói này.

Tôi cũng hiểu rằng upgradenâng cấp bất kỳ phần mềm nào tôi đã cài đặt từ gói tôi đã cập nhật updatenhư mô tả ở trên.

Lý do của các nhà phát triển Ubuntu / Debian để thực hiện việc phân tách này updateupgradethay vào đó làm việc với một lệnh để thực hiện cả hai tác vụ?

Đây là một câu hỏi về triết lý kiến ​​trúc của các nhà phát triển Ubuntu.


Nếu tôi sẽ cài đặt nhiều ứng dụng (và đang nhóm chúng, vì vậy một lệnh cho một nhóm, lệnh tiếp theo cho nhóm tiếp theo, v.v.), tại sao tôi muốn tải xuống repo cho mỗi nhóm - bằng cách tách repo.update và Các bước cài đặt tiếp theo tôi có thể tiết kiệm băng thông. Nếu tôi muốn một lệnh để làm cả hai, tôi có thể viết kịch bản hoặc bằng aliasmọi cách. Cách unix là một lệnh chỉ thực hiện một điều duy nhất để phân tách phù hợp hơn với cách unix nếu các đối số 'thần học / triết học' là điều bạn cũng vậy.
guiverc

tương tự, nếu tôi đi apt dist-upgradevà nhấn "n" để hủy, sau đó thay đổi ý định tôi sẽ tiết kiệm băng thông vì nó sẽ không 'cập nhật' để thực hiện lại apt dist-upgradelệnh của tôi ... Ngay cả khi 'nâng cấp' đã cập nhật tự động, có những lý do để 'cập nhật' không bao gồm 'cài đặt', 'nâng cấp' hoặc 'nâng cấp' để lệnh 'cập nhật' vẫn tồn tại ..
guiverc

Tôi đã lập luận rằng sự tách biệt không nên tồn tại từ góc độ người dùng và hành động apt updatechỉ nên chạy tự động khi được yêu cầu.
Robie Basak

Câu trả lời:


7

Nâng cấp không phải là lần duy nhất bạn có thể cần apt-get updatevà tôi không muốn nâng cấp mỗi lần tôi chỉ muốn cập nhật danh sách gói.

Một hoạt apt-get upgradeđộng tốt có thể phụ thuộc vào apt-get updateviệc chạy cách đây không lâu, nhưng sau đó điều đó đúng apt-get removeapt-get installcũng vậy! Tất cả những điều này có nghĩa là apt-get updategì? Dĩ nhiên là không! Là một vấn đề đơn giản về hiệu quả tài nguyên và độ sạch thiết kế, nếu một hoạt động là phổ biến đối với nhiều hoạt động khác, thì nó cần được thực hiện.

Ngược lại, cho rằng apt-get removeapt-get installcũng có thể phụ thuộc vào apt-get updateviệc chạy gần đây để kết thúc thành công, điều đó có hợp lý apt-get upgradevới mỗi lần chạy apt-get updatekhông? Không, một lần nữa, vì những gì tôi dự định làm cũng có thể mâu thuẫn với những gì apt-get upgradesẽ làm.


6

Bất cứ khi nào bạn thay đổi các nguồn phần mềm, bạn phải chạy lệnh sudo apt updateđể làm mới danh sách các phần mềm có sẵn. Sau đó, bạn có thể tìm kiếm các gói có sẵn trong nguồn phần mềm mới mà bạn vừa thêm và / hoặc cài đặt chúng.

Lệnh sudo apt upgradenày là thiết bị đầu cuối tương đương với việc nâng cấp danh sách các gói đã cài đặt bằng ứng dụng Trình cập nhật phần mềm. Điều này khác với quy trình làm việc thông thường là thêm nguồn phần mềm mới, cập nhật danh sách phần mềm có sẵn để bao gồm các gói từ nguồn phần mềm mới và cài đặt (các) gói mới từ nguồn phần mềm mới mà bạn vừa thêm, vì vậy sẽ thuận tiện hơn và ít gây nhầm lẫn đó sudo apt updatesudo apt upgradelà các lệnh riêng biệt.

Việc tách biệt cũng khó hiểu hơn sudo apt updatesudo apt upgradebởi vì khi bạn chạy sudo apt updatethành công, bạn đã xác nhận rằng bạn có kết nối internet. Nếu có sự cố khi chạy sudo apt upgradesau đó, sự cố có thể là sự cố quản lý gói hơn là sự cố với kết nối internet và kết quả sudo apt upgradesẽ cung cấp manh mối để chẩn đoán và giải quyết sự cố.


5

Lịch sử của sự khác biệt giữa updateupgradethực sự là khá mát mẻ.

Từ lâu, rất lâu - khoảng năm 2000 hoặc lâu hơn, nhiều năm trước khi Ubuntu tồn tại--, băng thông và không gian đĩa bị hạn chế hơn nhiều ... mặc dù mở rộng so với giữa những năm 1990. Băng thông rộng chỉ mới bắt đầu và quay số vẫn là một cách quan trọng để trực tuyến. Các đĩa lớn vẫn chỉ vài trăm MB. Apt là sáng bóng và mới, triệt để và cách mạng, được xây dựng trên đỉnh dpkg.

Cơ sở dữ liệu apt, khi bạn nghĩ về nó, là một điều kỳ diệu: Đó là cơ sở dữ liệu chính xác đến từng phút của tất cả các phần mềm từ tất cả các kho lưu trữ đã biết. Nó đủ chi tiết để apt tính toán các phụ thuộc và xác định các nâng cấp có sẵn, nhưng đủ nhỏ để truyền qua các modem quay số thời gian và lưu trữ trên các ổ đĩa nhỏ của thời gian. Cập nhật cơ sở dữ liệu của bạn qua điện thoại có thể mất vài phút qua một kết nối tốt. Mặc dù đó là một thời gian dài bây giờ, việc tìm kiếm các bản cập nhật gói thủ công (trước apt) có thể tiêu tốn hàng giờ .

Trước đó, các bản phân phối được xây dựng khác nhau - không tích hợp liên tục, không thử nghiệm khói (tốt, không thử nghiệm nhiều!), Xây dựng trang trại chỉ mới bắt đầu. Nâng cấp phải được hoàn nguyên thường xuyên hơn bây giờ. Nhiều người dùng đã chọn không nâng cấp các gói nhất định vì nhiều lý do hoặc chỉ chọn một số nâng cấp nhất định hôm nay (để kiểm tra thủ công) và các nâng cấp khác vào ngày mai.

Trong 15 năm sau đó, các công cụ không thay đổi nhiều, đó là lý do tại sao chúng ta vẫn có những hành động updateupgradehành động riêng biệt . Quy trình làm việc của người dùng đã phát triển khi độ tin cậy của distro được cải thiện và phần lớn quản lý nguồn / cập nhật / nâng cấp được sử dụng để làm thủ công đã dần bị ẩn sau các lớp tự động hóa ( software-updater, unattended-upgrades).

Hiện đại hóa các công cụ gói phần mềm là một lý do mà Snaps và AppImage và Flatpack gần đây đã xuất hiện, nhưng đó là chương tiếp theo.


2

Họ làm những việc riêng biệt vì nhiều lý do.

Một ví dụ là một câu hỏi tôi đã đăng và tự trả lời: Làm thế nào để loại bỏ PPA bằng GUI? . Trên màn hình này, chúng tôi muốn xóa PPA không nâng cấp phần mềm:

Xóa PPA.png

Sau khi loại bỏ PPA, phần mềm GUI sẽ tự động chạy sudo apt update. Nếu bạn đã loại bỏ PPA khỏi dòng lệnh, bạn cần chạy sudo apt update sau khi xóa PPA khỏi danh sách nguồn.

Không có apt updatechức năng riêng biệt , không có cách nào để loại bỏ PPA!.


Một ví dụ khác là bạn cần chạy sudo apt updatetừ dòng lệnh để làm mới nguồn. Sau đó, bạn có thể tìm hiểu những gì có thể được nâng cấp mà không thực sự nâng cấp:

$ apt list --upgradable
Listing... Done
conky-std/xenial 1.10.1-3 amd64 [upgradable from: 1.9.0-4]
google-chrome-stable/stable 65.0.3325.181-1 amd64 [upgradable from: 63.0.3239.132-1]
libxnvctrl0/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
nvidia-settings/xenial 390.48-0ubuntu0~gpu16.04.1 amd64 [upgradable from: 387.22-0ubuntu0~gpu16.04.1]
peek/xenial 1.3.1-0~ppa23~ubuntu16.04.1 amd64 [upgradable from: 1.2.1-0~ppa20~ubuntu16.04.1]

Nhìn vào đầu ra, bạn có thể quyết định có một gói nhất định "được ghim" hoặc "giữ lại" và không được nâng cấp vào lần tiếp theo `sudo apt nâng cấp" được chạy. Nếu có một quá trình "cập nhật / nâng cấp" duy nhất, bạn sẽ mất các khả năng này .

Nếu không có sự tách biệt, apt updatebạn không thể thấy những gì sẽ được nâng cấp!


Các para thứ hai là sai. yumdnftự động chạy tương đương với một bản cập nhật khi thực hiện các hoạt động liên quan. Ví dụ, tương đương apt list --upgradableyum check-update, cập nhật danh sách gói nếu nó không được cập nhật gần đây. Điều này chắc chắn có thể làm việc này, như có thể thấy trong các trình quản lý gói khác.
muru

@muru Nó dựa trên câu trả lời bỏ phiếu 238 này nói rằng bạn phải chạy sudo apt updatesau khi xóa kho lưu trữ.
WinEunuuchs2Unix

phần thứ hai --- tách ra, sau đó.
muru

Bây giờ bạn đề cập đến nó, đó cũng là sai. Như có thể thấy từ ví dụ về yum/ dnfmột lần nữa, hoạt động cập nhật là tự động, do đó, một nguồn bị vô hiệu hóa sẽ tự động bị xóa khỏi hoạt động tiếp theo. Một lần nữa, một cái gì đó là hoàn toàn có thể.
muru

@muru Ngoài ra, trên hệ thống của tôi ít nhất, yumcũng không dnfđược cài đặt. Cài đặt một trong số chúng để thay thế apt updatesẽ giúp tăng thời gian học tập và hệ thống.
WinEunuuchs2Unix

0

Người ta có thể hỏi tại sao tải xuống chương trình từ kho lưu trữ Ubuntu chính thức aptsau đó cài đặt nó? Sẽ có gì khác biệt nếu bạn tải xuống lần đầu tiên và sau đó cài đặt nó thay vì tải xuống và cài đặt trong một thao tác?

Ngay sau khi đọc các bình luận và suy nghĩ thêm về điều này, tôi hiểu rằng đó là do triết lý Unix , một triết lý mô-đun về cơ bản nói rằng "Mỗi chương trình làm một việc": Đầu tiên hãy tải xuống, sau đó cài đặt --- mỗi hành động với chương trình dành riêng của nó .


0

Không có phân phối, có một điều nâng cấp cập nhật lệnh, nếu có, đó không phải là gì ngoài các bí danh được xác định trước nhiều như tôi đoán. Những bí danh đó cũng có thể dễ dàng được đặt trên Ubuntu, bằng cách chỉnh sửa ~ / .bashrc.

Cập nhật được sử dụng để đồng bộ hóa lại các kho lưu trữ và khắc phục mọi sự cố ở đó. Sau đó, khi bạn Nâng cấp, bạn thực sự làm hỏng các gói đã cài đặt của mình. Nhưng khi bạn nâng cấp, bạn nâng cấp đầy đủ. Trong Arch linux, họ nhấn mạnh vào việc nâng cấp đầy đủ với Syu. Bạn có thể làm tương tự trong Ubuntu. Trong nâng cấp đầy đủ, bạn thực sự giải quyết bất kỳ vấn đề phụ thuộc hệ thống khôn ngoan, có thể phát sinh trong nâng cấp một phần.

Hy vọng nó giúp. Xin vui lòng tha thứ cho văn bản thô như viết trên điện thoại.


2
yumdnftự động thực hiện tương đương updatevới hầu hết các thao tác nếu dữ liệu được lưu trong bộ nhớ cache đủ cũ. Xem, ví dụ, thảo luận về việc thay đổi hành vi đó trong dnf: lwn.net/Articles/750334
muru
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.