Pourquoi la séparation de la mise à jour et de la mise à niveau existe-t-elle même?

12

Je comprends que dans apt, la commande updatemet à jour la liste des packages disponibles, mais elle ne met pas à niveau le logiciel déjà installé à partir de ces packages.

Je comprends également que la upgrademise à niveau de tout logiciel que j'ai déjà installé à partir d'un package que j'ai mis à jour updatecomme décrit ci-dessus.

Quelle était la raison pour laquelle les développeurs Ubuntu / Debian ont effectué ce fractionnement updateet ont upgradeplutôt travaillé avec une seule commande pour effectuer les deux tâches?

Il s'agit plus d'une question sur la philosophie architecturale des développeurs Ubuntu.

user9303970
la source
Si je vais installer de nombreuses applications (et les regrouper, donc une commande pour un groupe, une commande suivante pour le suivant, etc.), pourquoi voudrais-je télécharger les dépôts pour chaque groupe - en séparant le repo.update et le étapes d'installation suivantes, je peux économiser la bande passante. Si je voulais qu'une commande fasse les deux, je pourrais tout de même l'écrire alias. La méthode Unix est une commande qui ne fait qu'une chose de toute façon, donc la séparation correspond mieux à la méthode Unix si les arguments «théologiques / philosophiques» sont aussi votre truc.
guiverc
de même, si je vais apt dist-upgradeet appuyez sur "n" pour annuler, puis changez d'avis, je vais économiser la bande passante car il ne sera pas "mis à jour" afin de refaire ma apt dist-upgradecommande ... Même si "dist-upgrade" a fait la mise à jour automatiquement, il y a des raisons de 'mettre à jour' qui n'incluent pas 'install', 'upgrade' ou 'dist-upgrade' donc la commande 'update' existerait de toute façon ..
guiverc
J'ai soutenu que la séparation ne devrait pas exister du point de vue de l'utilisateur et que l'action de apt updatedevrait simplement s'exécuter automatiquement en cas de besoin.
Robie Basak

Réponses:

7

Une mise à niveau n'est pas la seule fois dont vous pourriez avoir besoin apt-get update, et je ne veux pas mettre à niveau chaque fois que je veux simplement mettre à jour les listes de packages.

Un apt-get upgradefonctionne bien peut dépendre en apt-get updatecours d' exécution n'y a pas longtemps, mais cela est vrai de apt-get removeet apt-get installaussi bien! Est-ce que tout cela devrait impliquer apt-get update? Bien sûr que non! Par simple souci d'efficacité des ressources et de propreté de la conception, si une opération est commune à plusieurs autres opérations, elle doit être éliminée.

A l' inverse, étant donné que , apt-get removeet apt-get installpeut également dépendre d' apt-get updateêtre exécutés récemment avec succès à la fin, est - il logique de apt-get upgradechaque série de apt-get update? Non, encore une fois, car ce que j'ai l'intention de faire pourrait bien entrer en conflit avec ce qui apt-get upgradeva le faire.

muru
la source
6

Chaque fois que vous modifiez les sources logicielles, vous devez exécuter la commande sudo apt updatepour actualiser la liste des logiciels disponibles. Ensuite, vous pouvez rechercher les packages disponibles dans la nouvelle source logicielle que vous venez d'ajouter et / ou les installer.

La commande sudo apt upgradeest l'équivalent terminal de la mise à niveau de la liste des packages installés à l'aide de l'application Software Updater. Ceci est différent du flux de travail normal consistant à ajouter une nouvelle source logicielle, à mettre à jour la liste des logiciels disponibles pour inclure les packages de la nouvelle source logicielle et à installer les nouveaux packages à partir de la nouvelle source logicielle que vous venez d'ajouter, donc c'est plus pratique et moins déroutant que sudo apt updateet sudo apt upgradesont des commandes distinctes.

Il est également moins déroutant de séparer sudo apt updateet sudo apt upgradeparce que lorsque vous exécutez sudo apt updateavec succès, vous avez confirmé que vous disposez d'une connectivité Internet. S'il y a un problème lors de l'exécution sudo apt upgradeultérieure, le problème est plus susceptible d'être un problème de gestion de package qu'un problème de connectivité Internet, et les résultats de sudo apt upgradefourniront des indices pour diagnostiquer et résoudre le problème.

Karel
la source
5

L'histoire de la différence entre updateet upgradeest en fait assez cool.

Il y a très longtemps - environ 2000 ans environ, des années avant l'existence d'Ubuntu -, la bande passante et l'espace disque étaient beaucoup plus limités ... bien que vastes par rapport au milieu des années 90. Le haut débit ne faisait que commencer et la connexion par ligne commutée était toujours un moyen essentiel de se connecter. Les gros disques ne faisaient encore que quelques centaines de Mo. Apt était brillant et nouveau, radical et révolutionnaire, construit sur le dessus de dpkg.

La base de données apt, quand on y pense, est une merveille: c'est une base de données précise de la minute de tous les logiciels de tous les référentiels connus. Il est suffisamment détaillé pour pouvoir calculer les dépendances et identifier les mises à niveau disponibles, mais suffisamment petit pour transmettre sur les modems d'accès à distance de l'époque et pour stocker sur les petits disques de l'époque. La mise à jour de votre base de données par téléphone peut prendre quelques minutes avec une bonne connexion. Bien que cela soit long maintenant, la recherche manuelle des mises à jour des packages (avant apt) pourrait consommer des heures .

À l'époque, les distributions étaient construites différemment - pas d'intégration continue, pas de test de fumée (enfin, pas beaucoup de tests du tout!), Les fermes de construction ne faisaient que commencer. Les mises à niveau ont dû être annulées plus souvent que maintenant. De nombreux utilisateurs ont choisi de ne pas mettre à niveau certains packages pour diverses raisons, ou de ne sélectionner que certaines mises à niveau aujourd'hui (pour tester manuellement) et d'autres mises à niveau demain.

Au cours des 15 ou si les années suivantes, les outils ont pas beaucoup changé, ce qui est la raison pour laquelle nous avons encore séparé updateet upgradeactions. Le flux de travail des utilisateurs a évolué à mesure que la fiabilité des distributions s'est améliorée, et une grande partie de la gestion des sources / mises à jour / mises à niveau qui était autrefois manuelle a été lentement cachée derrière des couches d'automatisation ( software-updater, unattended-upgrades).

La modernisation des outils de progiciel est l'une des raisons pour lesquelles Snaps et AppImage et Flatpack sont récemment apparus, mais c'est le chapitre suivant.

user535733
la source
2

Ils font des choses séparées pour plusieurs raisons.

Un exemple est une question que j'ai postée et à laquelle j'ai répondu moi-même: comment supprimer les PPA à l'aide de l'interface graphique? . Sur cet écran, nous voulons supprimer les PPA et non mettre à niveau le logiciel:

Supprimer PPA.png

Après avoir supprimé un PPA, le logiciel GUI s'exécute automatiquement sudo apt update. Si vous deviez supprimer un PPA de la ligne de commande, vous devez l'exécuter sudo apt update après avoir supprimé un PPA de la liste des sources.

Sans apt updatefonction séparée , il n'y a aucun moyen de supprimer un PPA !.


Un autre exemple est que vous devez exécuter à sudo apt updatepartir de la ligne de commande pour actualiser les sources. Ensuite, vous pouvez découvrir ce qui pourrait être mis à niveau sans réellement mettre à niveau:

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

En regardant la sortie, vous pourriez décider d'avoir un paquet donné "épinglé" ou "retenu" et non mis à niveau la prochaine fois que `sudo apt upgrade" est exécuté. S'il y avait un seul processus "update / upgrade" vous perdriez ces capacités .

Sans un élément séparé, apt updatevous ne pouvez pas voir ce qui serait amélioré!

WinEunuuchs2Unix
la source
Le deuxième paragraphe est faux. yumet dnfexécuter automatiquement l'équivalent d'une mise à jour lors des opérations pertinentes. Par exemple, l'équivalent de apt list --upgradableis yum check-update, qui met à jour la liste des packages si elle n'a pas été mise à jour récemment. Il est certainement possible que cela fonctionne, comme on peut le voir dans d'autres gestionnaires de packages.
muru
@muru Il est basé sur cette réponse de 238 votes positifs qui dit que vous devez exécuter sudo apt updateaprès avoir supprimé un référentiel.
WinEunuuchs2Unix
la deuxième section --- séparée, alors.
muru
Maintenant que vous le mentionnez, c'est également faux. Comme le montre l'exemple de yum/ dnfagain, l'opération de mise à jour est automatique, donc une source désactivée est automatiquement supprimée de l'opération suivante. Encore une fois, quelque chose qui est tout à fait possible.
muru
@muru Aussi, sur mon système au moins, ni yumni dnfinstallés. L'installation de l'un d'eux pour remplacer un apt updateaugmenterait les frais généraux et le temps d'apprentissage du système.
WinEunuuchs2Unix
0

On pourrait se demander pourquoi télécharger le programme à partir du référentiel officiel d'Ubuntu aptpuis l'installer? Quelle différence cela ferait-il si vous le téléchargez d'abord, puis l'installez plutôt que de le télécharger et de l'installer en une seule opération?

Eh bien, après avoir lu les commentaires et réfléchi à ce sujet, je comprends que cela est dû à la philosophie Unix , une philosophie modulaire qui dit essentiellement "Chaque programme fait une chose": téléchargez d'abord, puis installez --- chaque action avec son propre programme dédié .

user9303970
la source
0

Dans aucune distribution, il y a une chose mise à jour-mise à niveau de commande, si elle est là, ce ne sont que des alias prédéfinis autant que je suppose. Ces alias peuvent également être facilement définis sur Ubuntu, en modifiant le ~ / .bashrc.

La mise à jour est utilisée pour resynchroniser les référentiels et corriger les problèmes qui s'y trouvent. Ensuite, lorsque vous mettez à niveau, vous mettez à niveau vos packages installés. Mais lorsque vous effectuez une mise à niveau à distance, vous effectuez une mise à niveau complète. Dans Arch linux, ils mettent l'accent sur une mise à niveau complète avec Syu. Vous pouvez faire de même dans Ubuntu. Dans la mise à niveau complète, vous résolvez réellement tout problème de dépendance au niveau du système, qui peut survenir lors d'une mise à niveau partielle.

J'espère que cela aide. Veuillez excuser le texte brut comme écrit sur le téléphone.

Arijit Chatterjee
la source
2
yumet dnffaire automatiquement l'équivalent d'un updatesur la plupart des opérations si les données mises en cache sont assez anciennes. Voir, par exemple, la discussion sur la modification de ce comportement dans dnf: lwn.net/Articles/750334
muru