Warum gibt es überhaupt eine Trennung von Update und Upgrade?


12

Ich verstehe, dass aptder Befehl updatein die Liste der verfügbaren Pakete aktualisiert, jedoch keine Software aktualisiert, die bereits von diesen Paketen installiert wurde.

Ich verstehe auch, dass upgradealle Software-Upgrades, die ich bereits von einem Paket installiert habe, mit dem ich updatewie oben beschrieben ein Update durchgeführt habe.

Was war der Grund für die Ubuntu / Debian-Entwickler, diese Aufteilung vorzunehmen updateund upgradestattdessen mit einem Befehl zu arbeiten, um beide Aufgaben zu erledigen?

Dies ist eher eine Frage zur Architekturphilosophie der Ubuntu-Entwickler.


Wenn ich viele, viele Apps installieren werde (und sie gruppiere, also einen Befehl für eine Gruppe, den nächsten Befehl für die nächste usw.), warum sollte ich dann die Repos für jede Gruppe herunterladen wollen - indem ich repo.update und repo.update voneinander trenne? Nachfolgende Installationsschritte Ich kann Bandbreite sparen. Wenn ich wollte, dass ein Befehl beides ausführt, könnte ich ein Skript schreiben oder aliases trotzdem. Der Unix-Weg ist ein Befehl, der sowieso nur eine Sache macht, also passt die Trennung besser zum Unix-Weg, wenn Sie auch theologische / philosophische Argumente haben.
guiverc

Ebenso, wenn ich gehe apt dist-upgradeund "n" drücke, um abzubrechen, dann ändere ich meine Meinung, dass ich Bandbreite sparen werde, weil es nicht 'aktualisiert' wird, um meinen apt dist-upgradeBefehl erneut auszuführen ... Auch wenn 'dist-upgrade' das Update durchgeführt hat automatisch gibt es Gründe für ein 'Update', die nicht 'install', 'upgrade' oder 'dist-upgrade' beinhalten, so dass der Befehl 'update' sowieso existieren würde.
guiverc

Ich habe argumentiert, dass die Trennung aus Sicht des Benutzers nicht existieren sollte und dass die Aktion von apt updatenur automatisch ausgeführt werden sollte, wenn dies erforderlich ist.
Robie Basak

Antworten:


7

Ein Upgrade ist möglicherweise nicht das einzige Mal, das Sie benötigen apt-get update, und ich möchte nicht jedes Mal ein Upgrade durchführen, wenn ich einfach die Paketlisten aktualisieren möchte.

Ein apt-get upgradefunktionierender Brunnen kann davon abhängen apt-get update, dass er vor nicht allzu langer Zeit gelaufen ist, aber das gilt auch für apt-get removeund apt-get install! Sollten alle diese implizieren apt-get update? Natürlich nicht! Aus Gründen der Ressourceneffizienz und der Entwurfssauberkeit sollte ein Vorgang, der mehreren anderen Vorgängen gemeinsam ist, ausgeschlossen werden.

Ist es angesichts dessen apt-get removeund apt-get installmöglicherweise auch abhängig davon , ob apt-get updateder letzte Lauf erfolgreich abgeschlossen wurde, sinnvoll, dies apt-get upgradefür jeden Lauf von zu apt-get updatetun? Nein, denn was ich vorhabe zu tun, kann durchaus im Widerspruch zu dem stehen, was zu apt-get upgradetun ist.


6

Wenn Sie die Softwarequellen ändern, müssen Sie den Befehl sudo apt updateausführen, um die Liste der verfügbaren Software zu aktualisieren. Anschließend können Sie in der gerade hinzugefügten neuen Software-Quelle nach verfügbaren Paketen suchen und / oder diese installieren.

Der Befehl sudo apt upgradeist das Terminaläquivalent zum Aktualisieren der Liste der installierten Pakete mit der Software Updater-Anwendung. Dies unterscheidet sich vom normalen Arbeitsablauf beim Hinzufügen einer neuen Softwarequelle, beim Aktualisieren der Liste der verfügbaren Software, um Pakete von der neuen Softwarequelle einzuschließen, und beim Installieren neuer Pakete von der neuen Softwarequelle, die Sie gerade hinzugefügt haben und weniger verwirrend das sudo apt updateund sudo apt upgradesind separate Befehle.

Es ist auch weniger verwirrend zu trennen, sudo apt updateund sudo apt upgradewenn Sie sudo apt updateerfolgreich ausgeführt werden, haben Sie bestätigt, dass Sie über eine Internetverbindung verfügen. Wenn beim anschließenden Ausführen ein Problem sudo apt upgradeauftritt, handelt es sich wahrscheinlich eher um ein Paketverwaltungsproblem als um ein Problem mit der Internetverbindung. Die Ergebnisse von sudo apt upgradeliefern Hinweise zur Diagnose und Lösung des Problems.


5

Die Geschichte des Unterschieds zwischen updateund upgradeist eigentlich ziemlich cool.

Vor langer, langer Zeit - etwa 2000, Jahre bevor Ubuntu existierte - waren Bandbreite und Speicherplatz viel begrenzter ... obwohl sie im Vergleich zu Mitte der 1990er Jahre expansiv waren. Breitband war gerade in den Anfängen und Einwahl war immer noch eine wichtige Möglichkeit, online zu gehen. Große Festplatten hatten nur noch wenige hundert MB. Apt war glänzend und neu, radikal und revolutionär und auf dpkg aufgebaut.

Die apt-Datenbank ist ein Wunder: Sie ist eine minutengenaue Datenbank aller Software aus allen bekannten Repositories. Es ist detailliert genug, um Abhängigkeiten zu berechnen und verfügbare Upgrades zu identifizieren. Es ist jedoch klein genug, um über die damaligen DFÜ-Modems zu übertragen und auf den kleinen Laufwerken der Zeit zu speichern. Das Aktualisieren Ihrer Datenbank per Telefon kann über eine gute Verbindung einige Minuten dauern . Das manuelle Nachschlagen von Paketaktualisierungen (vor apt) kann Stunden in Anspruch nehmen .

Damals wurden Distributionen anders gebaut - keine kontinuierliche Integration, keine Rauchtests (na ja, es wurden überhaupt keine umfangreichen Tests durchgeführt!), Die Erstellung von Farmen begann gerade. Upgrades mussten häufiger als bisher zurückgesetzt werden. Viele Benutzer haben sich aus verschiedenen Gründen dafür entschieden, bestimmte Pakete nicht zu aktualisieren oder nur bestimmte Aktualisierungen heute (zum manuellen Testen) und andere Aktualisierungen morgen auszuwählen.

In den folgenden rund 15 Jahren haben sich die Tools nicht wesentlich verändert, weshalb wir immer noch separate Toolsupdate und upgradeAktionen haben. Der Benutzerworkflow hat sich mit der Verbesserung der Distributionszuverlässigkeit weiterentwickelt, und ein Großteil der Verwaltung von Quellen, Updates und Upgrades, die früher manuell durchgeführt wurde, wurde langsam hinter Automatisierungsebenen ( software-updater, unattended-upgrades) verborgen .

Die Modernisierung von Softwarepaket-Tools ist ein Grund dafür, dass Snaps und AppImage sowie Flatpack kürzlich erschienen sind, aber das ist das nächste Kapitel.


2

Sie machen aus vielen Gründen getrennte Dinge.

Ein Beispiel ist eine Frage, die ich gepostet und selbst beantwortet habe: Wie können PPAs über die Benutzeroberfläche entfernt werden? . Auf diesem Bildschirm möchten wir PPAs entfernen, ohne die Software zu aktualisieren:

Entfernen Sie PPA.png

Nach dem Entfernen eines PPA wird die GUI-Software automatisch ausgeführt sudo apt update. Wenn Sie eine PPA von der Befehlszeile entfernen möchten, müssen Sie sie ausführen, sudo apt update nachdem Sie eine PPA aus der Quellenliste entfernt haben.

Ohne eine separate apt updateFunktion kann ein PPA! Nicht entfernt werden.


Ein weiteres Beispiel ist, dass Sie sudo apt updatevon der Befehlszeile aus ausführen müssen , um die Quellen zu aktualisieren. Dann können Sie herausfinden, was aktualisiert werden könnte , ohne tatsächlich zu aktualisieren:

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

Wenn Sie sich die Ausgabe ansehen, könnten Sie entscheiden, ob ein bestimmtes Paket "angeheftet" oder "zurückgehalten" und beim nächsten Ausführen von "sudo apt upgrade" nicht aktualisiert wird .

Ohne eine separate können apt updateSie nicht sehen, was aktualisiert werden würde!


Der zweite Absatz ist falsch. yumund dnfautomatisch das Äquivalent eines Updates ausführen, wenn relevante Vorgänge ausgeführt werden. Das Äquivalent von apt list --upgradableist beispielsweise yum check-update, das die Paketliste aktualisiert, wenn sie nicht kürzlich aktualisiert wurde. Es ist sicherlich möglich, dass dies funktioniert, wie in anderen Paketmanagern zu sehen ist.
muru

@muru Es basiert auf dieser Antwort mit 238 Stimmen, die besagt, dass Sie sudo apt updatenach dem Entfernen eines Repositorys ausgeführt werden müssen.
WinEunuuchs2Unix

der zweite --- getrennte Abschnitt dann.
muru

Nun, da Sie es erwähnen, ist das auch falsch. Wie aus dem Beispiel von yum/ dnfwieder hervorgeht, erfolgt die Aktualisierung automatisch, sodass eine deaktivierte Quelle beim nächsten Vorgang automatisch entfernt wird. Wieder etwas, was durchaus möglich ist.
muru

@muru Auch auf meinem System sind zumindest weder yumnoch dnfinstalliert. Das Installieren einer dieser Komponenten als Ersatz für eine apt updatewürde den Systemaufwand und die Lernzeit erhöhen.
WinEunuuchs2Unix

0

Man könnte fragen, warum man das Programm aus dem formalen Ubuntu-Repository herunterlädt und aptdann installiert. Welchen Unterschied würde es machen, wenn Sie es zuerst herunterladen und dann installieren, anstatt es in einem Vorgang herunterzuladen und zu installieren?

Nachdem ich die Kommentare gelesen und mehr darüber nachgedacht habe, habe ich verstanden, dass dies auf die Unix-Philosophie zurückzuführen ist , eine modulare Philosophie, die im Grunde sagt: "Jedes Programm macht eine Sache": Zuerst herunterladen, dann installieren - jede Aktion mit einem eigenen Programm .


0

In keiner Distribution gibt es ein Kommando update-upgrade, wenn es da ist, dann sind es nur vordefinierte Aliase, so viel ich vermute. Diese Aliase können auch unter Ubuntu einfach durch Bearbeiten von ~ / .bashrc gesetzt werden.

Update wird verwendet, um die Repositorys neu zu synchronisieren und eventuelle Probleme dort zu beheben. Wenn Sie dann ein Upgrade durchführen, werden Ihre installierten Pakete tatsächlich beschädigt. Wenn Sie jedoch ein Dist-Upgrade durchführen, führen Sie ein vollständiges Upgrade durch. In Arch Linux legen sie Wert auf ein vollständiges Upgrade mit Syu. Sie können dasselbe in Ubuntu tun. Bei einem vollständigen Upgrade lösen Sie tatsächlich alle systembedingten Abhängigkeitsprobleme, die bei einem teilweisen Upgrade auftreten können.

Ich hoffe es hilft. Bitte entschuldigen Sie den rohen Text als Schreiben am Telefon.


2
yumund dnftun automatisch das Äquivalent eines updateauf die meisten Operationen , wenn die im Cache gespeicherten Daten alt genug ist. Siehe zum Beispiel die Diskussion zur Änderung dieses Verhaltens in dnf: lwn.net/Articles/750334
muru
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.