Почему вообще существует разделение обновлений и модернизаций?

Почему вообще существует разделение обновлений и модернизаций?

Я понимаю, что в apt, команда updateобновляет список доступных пакетов, но она не обновляет программное обеспечение, которое уже было установлено из этих пакетов.

Я также понимаю, что upgradeобновляет любое программное обеспечение, которое я уже установил из пакета, с помощью которого я обновил его, updateкак описано выше.

По какой причине разработчики Ubuntu/Debian решили провести такое разделение updateи upgradeвместо этого использовать одну команду для выполнения обеих задач?

Это скорее вопрос архитектурной философии разработчиков Ubuntu.

решение1

История разницы между updateи upgradeна самом деле довольно интересна.

Давным-давно — скажем, около 2000 года, за годы до появления Ubuntu — пропускная способность и дисковое пространство были гораздо более ограниченными... хотя и обширными по сравнению с серединой 1990-х. Широкополосный доступ только начинался, и коммутируемый доступ все еще был жизненно важным способом выхода в Интернет. Большие диски все еще были всего в несколько сотен МБ. Apt был блестящим и новым, радикальным и революционным, построенным на основе dpkg.

База данных apt, если задуматься, — это чудо: это точная до минуты база данныхвсепрограммное обеспечение отвсеизвестные репозитории. Он достаточно подробный, чтобы apt мог вычислить зависимости и определить доступные обновления, но при этом достаточно мал, чтобы передавать его по модемам dial-up того времени и хранить на небольших дисках того времени. Обновление базы данных по телефону может занятьминутчерез хорошее соединение. Хотя это уже долго, поиск обновлений пакетов вручную (до apt) мог занятьчасы.

В то время дистрибутивы создавались по-другому — никакой непрерывной интеграции, никакого дымового тестирования (ну, вообще не так много тестирования!), фермы сборки только начинали работу. Обновления приходилось откатывать чаще, чем сейчас. Многие пользователи предпочиталинетобновить определенные пакеты по разным причинам или выбрать только определенные обновления сегодня (для ручного тестирования), а другие обновления — завтра.

В течение последующих 15 лет или около того,инструментыне сильно изменились, поэтому у нас все еще есть отдельные updateи upgradeдействия.рабочий процесс пользователяразвивалась по мере повышения надежности дистрибутивов, и большая часть управления исходным кодом/обновлениями/модернизациями, которая раньше выполнялась вручную, постепенно скрывалась за уровнями автоматизации ( software-updater, unattended-upgrades).

Модернизация инструментов для работы с программными пакетами — одна из причин недавнего появления Snaps, AppImage и Flatpak, но это уже следующая глава.

решение2

Обновление — это не единственный случай, когда вам может потребоваться обновление apt-get update, и я не хочу выполнять его каждый раз, когда мне просто нужно обновить списки пакетов.

Работающая apt-get upgradeскважина может зависеть от того, apt-get updateбыла ли она запущена не так давно, но тогда это справедливо и для apt-get removeи apt-get installтакже! Должны ли все это подразумевать apt-get update? Конечно, нет! Как простой вопрос эффективности ресурсов и чистоты проектирования, если операция является общей для нескольких других операций, ее следует вынести за скобки.

Наоборот, учитывая, что apt-get removeи apt-get installтакже может зависеть от apt-get updateнедавнего запуска для успешного завершения, имеет ли смысл apt-get upgradeдля каждого запуска apt-get update? Нет, опять же, поскольку то, что я намереваюсь сделать, может вступать в противоречие с тем, что apt-get upgradeбудет сделано.

решение3

Всякий раз, когда вы меняете источники программного обеспечения, вы должны запустить команду sudo apt update, чтобы обновить список доступного программного обеспечения. Затем вы можете выполнить поиск доступных пакетов в новом источнике программного обеспечения, который вы только что добавили, и/или установить их.

Команда sudo apt upgradeявляется эквивалентом терминала обновления списка установленных пакетов с помощью приложения Software Updater. Это отличается от обычного рабочего процесса добавления нового источника программного обеспечения, обновления списка доступного программного обеспечения для включения пакетов из нового источника программного обеспечения и установки нового пакета(ов) из нового источника программного обеспечения, который вы только что добавили, поэтому это более удобно и менее запутанно, sudo apt updateи sudo apt upgradeэто отдельные команды.

Также менее запутанным является разделение sudo apt updateи sudo apt upgradeпотому, что при успешном запуске sudo apt updateвы подтверждаете, что у вас есть подключение к Интернету. Если при sudo apt upgradeпоследующем запуске возникнет проблема, проблема, скорее всего, будет связана с управлением пакетами, а не с подключением к Интернету, и результаты sudo apt upgradeдадут подсказки для диагностики и решения проблемы.

решение4

Можно спросить, зачем скачивать программу из официального репозитория Ubuntu, а aptпотом устанавливать? Какая разница, если сначала скачать, а потом установить, а не скачивать и устанавливать за одну операцию?

Ну, прочитав комментарии и подумав об этом больше, я понял, что это связано сФилософия Unix, амодульныйфилософия, которая по сути гласит: «Каждая программа делает одно дело»: сначала загрузка, затем установка — каждое действие со своей собственной выделенной программой.

Связанный контент