web-dev-qa-db-ja.com

更新とアップグレードの分離が存在するのはなぜですか?

aptのコマンドupdateは、使用可能なパッケージのリストを更新しますが、これらのパッケージから既にインストールされているソフトウェアはアップグレードしません。

また、upgradeは、上記のようにupdateで更新したパッケージから既にインストールしたソフトウェアをアップグレードすることも理解しています。

Ubuntu/Debian開発者がupdateupgradeをこのように分割する代わりに、1つのコマンドで両方のタスクを実行する理由は何ですか?

これは、Ubuntu開発者のアーキテクチャ哲学に関する質問です。

12
user9303970

apt-get updateが必要になる可能性があるのはアップグレードだけではありません。パッケージリストを単に更新するたびにアップグレードする必要はありません。

apt-get upgradeは、apt-get updateapt-get removeについても、少し前に実行されているapt-get installに依存する場合があります。これらはすべてapt-get updateを意味しますか?もちろん違います!リソースの効率性と設計のクリーンさの単純な問題として、ある操作が他の複数の操作に共通している場合は、除外する必要があります。

逆に、apt-get removeapt-get installも正常に終了するために最近実行されたapt-get updateに依存する場合、apt-get upgradeの実行ごとにapt-get updateが意味をなします?いいえ、繰り返しますが、私がしようとしていることは、apt-get upgradeが行うことと矛盾する可能性があります。

7
muru

ソフトウェアソースを変更するたびに、使用可能なソフトウェアのリストを更新するために、Sudo apt updateコマンドを実行する必要があります。次に、追加したばかりの新しいソフトウェアソースで使用可能なパッケージを検索したり、インストールしたりできます。

コマンドSudo apt upgradeは、Software Updaterアプリケーションを使用してインストール済みパッケージのリストをアップグレードするのと同等のターミナルです。これは、新しいソフトウェアソースを追加し、使用可能なソフトウェアのリストを更新して新しいソフトウェアソースからのパッケージを含め、追加したばかりの新しいソフトウェアソースから新しいパッケージをインストールする通常のワークフローとは異なるため、より便利ですSudo apt updateSudo apt upgradeが別々のコマンドであることをわかりやすくします。

また、Sudo apt updateSudo apt upgradeを分離する方が混乱が少なくなります。これは、Sudo apt updateを正常に実行すると、インターネットに接続できることを確認したためです。 Sudo apt upgradeの実行後に問題が発生した場合、問題はインターネット接続の問題よりもパッケージ管理の問題である可能性が高く、Sudo apt upgradeの結果は問題の診断と解決の手がかりを提供します。

6
karel

updateupgradeの違いの歴史は実際にはかなりクールです。

Ubuntuが存在する数年前の2000年頃など、ずっと昔、帯域幅とディスク容量ははるかに限られていましたが、1990年代半ばに比べて拡張性がありました。ブロードバンドはまだ始まったばかりであり、ダイヤルアップは依然としてオンライン接続の重要な方法でした。大きなディスクはまだ数百MBでした。 Aptは光沢があり、新しく、急進的で革新的で、dpkgの上に構築されました。

考えてみると、aptデータベースは驚くべきものです。allall既知のレポジトリからなるソフトウェアの正確なデータベースです。 aptが依存関係を計算し、利用可能なアップグレードを識別するのに十分なほど詳細ですが、当時のダイヤルアップモデムを介して送信し、当時の小さなドライブに保存するのに十分なほど小さいです。電話でデータベースを更新するには、良好な接続でminutesが必要になる場合があります。それは今では長い時間ですが、パッケージの更新を手動で(aptの前に)検索するとhoursを消費する可能性があります。

当時、ディストリビューションの構築は異なっていました-継続的インテグレーションも、煙テストもありません(まあ、テストはあまりありません!)、ビルドファームはまだ始まったばかりです。アップグレードは今よりも頻繁に元に戻す必要がありました。多くのユーザーは、さまざまな理由で特定のパッケージをnotアップグレードするか、今日(手動でテストするため)特定のアップグレードのみを選択し、明日は他のアップグレードを選択することを選択しました。

その後の15年ほどの間、toolsはあまり変更されていないため、updateupgradeのアクションが別々にあるのはこのためです。 ユーザーワークフローは、ディストリビューションの信頼性が向上し、かつて手動であったソース/更新/アップグレード管理の多くが、自動化のレイヤーの背後にゆっくりと隠されてきました(software-updaterunattended-upgrades)。

ソフトウェアパッケージツールの近代化は、SnapsとAppImageとFlatpackが最近登場した理由の1つですが、それは次の章です。

5
user535733

彼らは多くの理由で別々のことをします。

1つの例は、私が投稿して自己回答した質問です。 GUIを使用してPPAを削除するにはどうすればよいですか? 。この画面でPPAsを削除ソフトウェアをアップグレードしません:

Remove PPA.png

PPAを削除すると、GUIソフトウェアはSudo apt updateを自動的に実行します。コマンドラインからPPAを削除する場合は、Sudo apt updateafterを実行してソースリストからPPAを削除する必要があります。

別のapt update関数がなければ、PPAを削除する方法はありません!。


別の例は、コマンドラインからSudo apt updateを実行してソースを更新する必要がある場合です。それから、couldアップグレードするものを見つけることができますwithout実際にアップグレードする:

$ 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]

出力を見ると、特定のパッケージを「固定」または「保留」し、次回の「Sudo apt upgrade」の実行時にアップグレードしないことを決定できます。単一の「更新/アップグレード」プロセスがある場合、これらの機能は失われます。 。

個別のapt updateがなければ、何がアップグレードされるかわかりません!

2

ディストリビューションがない場合、コマンドの更新とアップグレードが1つあります。それが存在する場合は、事前定義されたエイリアス以外の何ものでもないと思います。これらのエイリアスは〜/ .bashrcを編集することでUbuntuでも簡単に設定できます。

更新は、リポジトリを再同期し、そこにある問題を修正するために使用されます。次に、アップグレードするときに、インストール済みパッケージを実際にアップグレードします。ただし、Dist-Upgradeを実行すると、完全にアップグレードされます。 Arch Linuxでは、Syuによる完全なアップグレードを強調しています。 Ubuntuでも同じことができます。完全アップグレードでは、部分的なアップグレードで発生する可能性のあるシステム上の賢明な依存関係の問題を実際に解決します。

それが役に立てば幸い。電話で書いている生のテキストを許してください。

0

aptを使用して正式なUbuntuリポジトリからプログラムをダウンロードし、インストールする理由を尋ねることができますか?一度にダウンロードしてインストールするのではなく、最初にダウンロードしてからインストールすると、どのような違いが生じますか?

コメントを読んでこれについてもっと考えた後、これは基本的に「各プログラムが1つのことをする」と言う nix哲学モジュラー 哲学によるものだと理解しています:ダウンロードしてからインストールします---各アクションには専用のプログラムがあります.

0
user9303970