Как правильно обновить Ubuntu через терминал?

Вы зашли в терминал и ваша Ubuntu приветствует Вас сообщением, что могут быть обновлены пакеты. Какие команды надо набрать, чтобы обновить Ubuntu из командной строки?

Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-79-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Могут быть обновлены 17 пакетов.
0 обновлений касаются безопасности системы.

Перед обновлением необходимо выполнить команду apt-get update, которая обновит информацию о пакетах, содержащихся в репозиториях, чтобы в процессе обновления получить самые последние версии пакетов. Далее существует 2 варианта обновления: dist-upgrade и upgrade. Предпочтительнее первый вариант.

Когда мне надо обновить убунту через терминал, я выполняю эти две команды:

sudo apt-get update
sudo apt-get dist-upgrade

dist-upgrade делает тоже самое, что upgrade плюс выполяет «умное» разрешения конфликтов версий пакетов. При конфликтах пакетов Ubuntu попытается обновите наиболее важные пакеты за счет менее важных. Поэтому команда dist-upgrade может установить дополнительные пакеты или удалить один из конфликтующих пакетов.

Команды upgrade и dist-upgrade не меняют версию системы, например с Ubuntu 13.04 до Ubuntu 13.10. Для этого есть отдельная команда.

do-release-upgrade

Этой командой можно обновить подсистему Linux в Windows.

На мой взгляд простым смертным имеет смысл апгрейдится только с LTS на LTS, то есть совершать переход между версиями с долгосрочной поддержкой, а выпускаются они раз в 2 года и поддерживаются 5 лет. Еще это обусловлено тем, что большинство производителей серьёзного программного обеспечения также поддерживают свои продукты для LTS версий операционных систем, например цитата из документации MongoDB:

PLATFORM SUPPORT
MongoDB only provides packages for 64-bit LTS (long-term support) Ubuntu releases. For example, 12.04 LTS (precise), 14.04 LTS (trusty), 16.04 LTS (xenial), and so on. These packages may work with other Ubuntu releases, however, they are not supported.

То есть, если вы обновитесь с Ubuntu 16.04 на 16.10 и вдруг MongoDB перестанет работать, то не факт, что даже за деньги вам помогут решить эту пробему.

В рассматриваемом случае получается периодичность выполнения команды do-release-upgrade примерно раз в 2-4 года.

Обновление с 16.04 до 18.04

В апреле 2018 года Canonical выпустила Ubuntu 18.04 LTS (кодовое имя Bionic Beaver). А это значит, что можно обновлять систему.

Однако стоит упомянуть слова Стив Лангасека, менеджера команды Ubuntu Engineering Foundations, который напоминает про принцип «Работатет — не трогай» :

Обновления между выпусками LTS не включаются по умолчанию, пока не будет выпущен первый выпуск (18.04.1), запланированный на июль. Рекомендуется, чтобы большинство пользователей LTS подождали до этого времени до обновления до 18.04.

Поэтому, до недавнего времени если запускалась команда do-release-upgrade, то она выводила сообщение, что обновлений нет.

$ sudo do-release-upgrade
Checking for a new Ubuntu release
No new release found.

Если в таком случае добавить ключ -d (версии разработки), то обновление запустится

$ sudo do-release-upgrade -d

// Пробовал обновиться 8.05.2018, не получилось, откатился назад.

Итак, время пришло. Терминал торжественно встречает фразой.

New release '18.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Поехали

do-release-upgrade

Чтение временных файлов

Проверка менеджера пакетов

Продолжить работу через SSH?

Этот сеанс запущен через ssh. Не рекомендуется выполнять обновление
через ssh, так как в случае неудачи восстановление будет очень
сложным.

Если вы продолжите, дополнительная служба ssh будет запущена на порту
«1022».
Хотите ли вы продолжить?

Продолжить [дН] 

И вот на этом моменте следует остановиться. Если у вас нет «прямого» доступа к машине, то есть риск, что обновление пройдет неудачно и вы не сможете об этом узнать по SSH. Безопаснее обновлять операционную систему, если у вас есть физический доступ к машине.

Второй момент. Система несколько раз спросит подтверждение:

Продолжить [дН] Подробности [п]

Если у вас локализованная версия Ubuntu, то прямо в терминале (не SSH) сменить раскладку не получится((, а ответ yes или y не подойдет. Поэтому стоит скопировать букву «д» в буфер обмена.

После подтверждения начинатся загрузка и установка пакетов, модификация системных файлов. В зависимости от установленного ПО мастер установки задаст вопросы вида:

Файл настройки «/etc/apache2/apache2.conf»
 ==> Изменён с момента установки (вами или сценарием).
 ==> Автор пакета предоставил обновлённую версию.
  Что нужно сделать? Есть следующие варианты:
   Y или I : установить версию, предлагаемую сопровождающим пакета
   N или O : оставить установленную на данный момент версию
      D    : показать различия между версиями
      Z    : запустить оболочку командной строки для проверки ситуации
 По умолчанию сохраняется текущая версия файла настройки.
*** apache2.conf (Y/I/N/O/D/Z) [по умолчанию N] ?

Ничего сложного. Отвечаем, дожидаемся завершения обновления.

Обновление системы завершено.

Требуется перезагрузка

Чтобы завершить обновление, требуется перезагрузка.
Если вы выберите «д», система будет перезагружена.

Перезагружаемся.

Проблемы после обновления

На вопрос Файл настройки «/etc/apache2/apache2.conf» изменён я ответил установить версию, предлагаемую сопровождающим пакета. Из-за этого apache2 не запустился.

Смотрим журнал journalctl -xe -u apache2

apachectl[1744]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

Запись сообщает, что не удалось достоверно определить полное доменное имя сервера. Добавление ServerName

echo "ServerName localhost" | sudo tee /etc/apache2/conf-available/servername.conf
sudo a2enconf servername
sudo  systemctl reload apache2

Далее. Не был включен PHP. Посмотреть что включено apache2ctl -M. Просмотр установленных модулей

ls /etc/apache2/mods-available | grep php
php7.2.conf
php7.2.load

Включаем модуль PHP 7.2

sudo a2enmod php7.2

Система не поставила PHP расширение pdo_mysql. Исправляем:

sudo apt-get install php7.2-mysql

Также не помешает ознакомиться:

Похожие записи

Команда su в Ubuntu

Чтобы не набирать постоянно sudo для повышения привилегии выполнения команды в Ubuntu можно использовать специальную команду для перевода пользователя в сессию под root-ом.
08 июня 2017 г. в Linux

Ubuntu. В разделе /boot не осталось места.

Недавно столкнулся с проблемой, что система ubuntu не может обновиться. Пишет ошибки про неудвлетворенные зависимости и не дает возможности завершится командам.

31 августа 2017 г. в Linux