Dlaczego w ogóle istnieje oddzielenie aktualizacji od aktualizacji?

12

Rozumiem apt, że polecenie update, aktualizuje listę dostępnych pakietów, ale nie aktualizuje oprogramowania, które zostało już zainstalowane z tych pakietów.

Rozumiem również, że upgradeaktualizuje oprogramowanie, które już zainstalowałem, z pakietu, który zaktualizowałem updatezgodnie z powyższym opisem.

Jaki był powód, dla którego programiści Ubuntu / Debian dokonali tego podziału updatei upgradezamiast tego pracowali z jednym poleceniem, aby wykonać oba zadania?

Jest to raczej pytanie dotyczące filozofii architektury deweloperów Ubuntu.

użytkownik9303970
źródło
Jeśli mam zainstalować wiele aplikacji (i grupuję je, więc jedno polecenie dla jednej grupy, następne polecenie dla następnej itd.), Dlaczego miałbym chcieć pobrać repo dla każdej grupy - oddzielając repo.update i kolejne kroki instalacji Mogę zaoszczędzić przepustowość. Gdybym chciał, aby polecenie wykonało jedno i drugie, mógłbym napisać skrypt lub aliastak. Sposób uniksowy to jedno polecenie, które i tak robi tylko jedną rzecz, więc oddzielanie lepiej pasuje do sposobu uniksowego, jeśli argumenty „teologiczne / filozoficzne” też są dla ciebie rzeczą.
guiverc
podobnie, jeśli pójdę apt dist-upgradei naciśniesz „n”, aby anulować, to zmień zdanie, oszczędzę przepustowość, ponieważ nie „zaktualizuje się” w celu ponownego wykonania apt dist-upgradepolecenia ... Nawet jeśli aktualizacja „dist-upgrade” zrobiła aktualizację automatycznie istnieją powody, by „aktualizować”, które nie obejmują „instalacji”, „aktualizacji” lub „aktualizacji”, więc polecenie „aktualizacja” i tak by istniało.
guiverc
Mam twierdził , że podział nie powinien istnieć z punktu widzenia użytkownika, i że działanie apt updatepowinno wystarczy uruchomić automatycznie w razie potrzeby.
Robie Basak,

Odpowiedzi:

7

Uaktualnienie to nie jedyny czas, który może być potrzebny apt-get update, i nie chcę uaktualniać za każdym razem, po prostu chcę zaktualizować listy pakietów.

apt-get upgradeDziała dobrze może zależeć apt-get updateprowadzony jest nie tak dawno temu, ale wtedy, że jest prawdą apt-get removei apt-get installjak dobrze! Czy to wszystko powinno oznaczać apt-get update? Oczywiście nie! Jeśli chodzi o efektywność zasobów i czystość projektu, jeśli operacja jest wspólna dla wielu innych operacji, należy ją uwzględnić.

I odwrotnie, biorąc pod uwagę to apt-get removei apt-get installmoże również zależeć od apt-get updatetego, czy ostatnio został pomyślnie zakończony, czy ma to sens apt-get upgradedla każdego uruchomienia apt-get update? Nie, znowu, ponieważ to, co zamierzam zrobić, może być sprzeczne z tym apt-get upgrade, co zrobię.

muru
źródło
6

Za każdym razem, gdy zmieniasz źródła oprogramowania, musisz uruchomić polecenie sudo apt update, aby odświeżyć listę dostępnego oprogramowania. Następnie możesz wyszukać dostępne pakiety w nowo dodanym źródle oprogramowania i / lub je zainstalować.

Ta komenda sudo apt upgradejest terminalowym odpowiednikiem aktualizacji listy zainstalowanych pakietów za pomocą aplikacji Software Updater. Różni się to od zwykłego przepływu pracy polegającego na dodawaniu nowego źródła oprogramowania, aktualizowaniu listy dostępnego oprogramowania w celu uwzględnienia pakietów z nowego źródła oprogramowania i instalowaniu nowych pakietów z nowo dodanego źródła oprogramowania, więc jest to wygodniejsze i mniej mylące to sudo apt updatei sudo apt upgradesą osobnymi poleceniami.

Jest to także mniej mylące, aby oddzielić sudo apt updatei sudo apt upgradedlatego po uruchomieniu sudo apt updatez powodzeniem zostały potwierdzone, że masz połączenie z Internetem. Jeśli wystąpi problem podczas sudo apt upgradepóźniejszego uruchomienia , bardziej prawdopodobne jest, że będzie to problem z zarządzaniem pakietami niż problem z połączeniem internetowym, a wyniki sudo apt upgradezapewnią wskazówki do diagnozowania i rozwiązywania problemu.

Karel
źródło
5

Historia różnicy między updatei upgradejest całkiem fajna.

Dawno, dawno temu - powiedzmy około 2000 lat, zanim istniało Ubuntu - przepustowość i miejsce na dysku były znacznie bardziej ograniczone ... choć ekspansywne w porównaniu do połowy lat 90. Internet szerokopasmowy dopiero się zaczynał, a połączenie telefoniczne było nadal ważnym sposobem na uzyskanie dostępu do Internetu. Wielkie dyski nadal miały zaledwie kilkaset MB. Apt był błyszczący i nowy, radykalny i rewolucyjny, zbudowany na dpkg.

Gdy się nad tym zastanowić, baza danych apt jest cudem: jest to najdokładniejsza baza danych wszystkich programów ze wszystkich znanych repozytoriów. Jest wystarczająco szczegółowy, aby obliczyć zależności i zidentyfikować dostępne aktualizacje, ale wystarczająco mały, aby przesyłać przez modemy dial-up czasu i przechowywać na małych dyskach czasu. Aktualizacja bazy danych przez telefon może zająć kilka minut w przypadku dobrego połączenia. Choć to już dawno, ręczne wyszukiwanie aktualizacji pakietów (przed apt) może zająć wiele godzin .

W tamtym czasie dystrybucje były budowane inaczej - bez ciągłej integracji, bez testów dymu (no cóż, niewiele testów!), Dopiero zaczynały się budować farmy. Uaktualnienia musiały być cofane częściej niż teraz. Wielu użytkowników zdecydowało się nie aktualizować niektórych pakietów z różnych powodów lub wybrać tylko niektóre aktualizacje dzisiaj (w celu przetestowania ręcznie), a inne aktualizacje jutro.

W ciągu kolejnych 15 lat lub tak, że narzędzia nie zmieniły się znacznie, dlatego wciąż mamy oddzielne updatei upgradedziałania. Przepływ pracy użytkownika ewoluował wraz z poprawą niezawodności dystrybucji, a znaczna część zarządzania źródłami / aktualizacjami / aktualizacjami, które wcześniej były ręczne, została powoli ukryta za warstwami automatyzacji ( software-updater, unattended-upgrades).

Modernizacja narzędzi pakietu oprogramowania jest jednym z powodów, dla których ostatnio pojawiły się Snaps oraz AppImage i Flatpack, ale to kolejny rozdział.

użytkownik535733
źródło
2

Robią osobne rzeczy z wielu powodów.

Jednym z przykładów jest pytanie, które opublikowałem i na które odpowiedziałem sam: Jak można usunąć PPA za pomocą GUI? . Na tym ekranie chcemy usunąć umowy PPA, a nie uaktualnić oprogramowania:

Usuń PPA.png

Po usunięciu PPA oprogramowanie GUI uruchamia się automatycznie sudo apt update. Jeśli chcesz usunąć PPA z wiersza poleceń, musisz uruchomić sudo apt update po usunięciu PPA z listy źródeł.

Bez osobnej apt updatefunkcji nie można usunąć PPA !.


Innym przykładem jest uruchomienie sudo apt updatez wiersza poleceń, aby odświeżyć źródła. Następnie możesz dowiedzieć się, co można zaktualizować bez faktycznej aktualizacji:

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

Patrząc na dane wyjściowe, możesz zdecydować, że dany pakiet zostanie „przypięty” lub „wstrzymany” i nie zostanie zaktualizowany przy następnym uruchomieniu programu „sudo apt upgrade”. Gdyby istniał pojedynczy proces „aktualizacji / aktualizacji”, utraciłbyś tę zdolność .

Bez osobnego apt updatenie widać, co by było ulepszone!

WinEunuuchs2Unix
źródło
Drugi akapit jest fałszywy. yumi dnfautomatycznie uruchom odpowiednik aktualizacji podczas wykonywania odpowiednich operacji. Na przykład odpowiednik apt list --upgradableto yum check-update, który aktualizuje listę pakietów, jeśli nie była ostatnio aktualizowana. Z pewnością jest to możliwe, jak widać w innych menedżerach pakietów.
mur
@muru Opiera się na odpowiedzi 238 głosującej, która mówi, że musisz uruchomić sudo apt updatepo usunięciu repozytorium.
WinEunuuchs2Unix
druga --- oddzielna sekcja.
mur
Teraz, kiedy o tym wspominasz, jest to również fałsz. Jak widać na przykładzie yum/ dnfponownie, operacja aktualizacji jest automatyczna, więc wyłączone źródło jest automatycznie usuwane z następnej operacji. Znów coś, co jest całkowicie możliwe.
mur
@muru Ponadto, przynajmniej w moim systemie, ani yumnie dnfsą zainstalowane. Zainstalowanie jednego z nich w celu zastąpienia apt updatezwiększyłoby narzut systemu i czas nauki.
WinEunuuchs2Unix
0

Można zapytać, dlaczego pobrać program z formalnego repozytorium Ubuntu, a aptnastępnie go zainstalować? Jaką różnicę by to zrobiło, gdyby najpierw go pobrać, a następnie zainstalować, zamiast pobierać i instalować w jednej operacji?

Dobrze po przeczytaniu komentarzy i myśli więcej o tym rozumiem, że jest to spowodowane tym filozofii Unix , wykorzystując modułowy filozofia mówi, że w zasadzie „Każdy program ma jedno”: Najpierw pobierz, a następnie zainstalować --- każda akcja z własnym programem dedykowanym .

użytkownik9303970
źródło
0

W żadnej dystrybucji nie ma jednej komendy aktualizacja-aktualizacja, jeśli tam jest, to nic innego jak predefiniowane aliasy, jak zakładam. Te aliasy można łatwo ustawić również w Ubuntu, edytując ~ / .bashrc.

Aktualizacja służy do ponownej synchronizacji repozytoriów i naprawiania wszelkich problemów. Następnie, podczas aktualizacji, faktycznie aktualizujesz zainstalowane pakiety. Ale kiedy Dist-Upgrade, aktualizujesz w całości. W Arch Linux, kładą nacisk na pełną aktualizację z Syu. Możesz zrobić to samo w Ubuntu. W przypadku pełnej aktualizacji faktycznie rozwiązuje się wszelkie problemy związane z zależnościami, które mogą wynikać z częściowej aktualizacji.

Mam nadzieję, że to pomoże. Proszę wybaczyć surowy tekst jako pisanie na telefonie.

Arijit Chatterjee
źródło
2
yumi dnfautomatycznie wykonaj odpowiednik updatewiększości operacji, jeśli buforowane dane są wystarczająco stare. Zobacz na przykład dyskusję na temat zmiany tego zachowania w dnf
muru