Обновление Ubuntu LTS 14.04 до 16.04

Обновляем Ubuntu 14.04 до 16.04 на сервере с почтой, сайтами и прочей чепухой.

Бекап! Бекап и еще раз бекап! Если его нет, то дальше даже не читать!

И еще хорошо бы сохранить отдельно источники пакетов - файл /etc/apt/sources.list - может пригодиться, так как по умолчанию при обновлении все сторонние репозитарии будут отключены.
Если у вас есть какие то старинные компонеты, которые хотят старинный php, то нужно сохранить и его конфиг. Обычно он лежит где-то в /etc/php/5.0/php.ini поищите вокруг или заранее посмотрите со стороны сервера где он. Здесь рассказка как поставить сразу два php, один модулем, второй cgi-bin. Если такие извращения не предполагаются, то и конфиг сохранять без надобности.

Подключаемся по SSH, хотя через это могут быть проблемы, если удобно, то конечно лучше работать на системе напрямую, у меня серверы стоят в жопе мира, там шумно и неудобно, я делал по SSH.

Что бы не забивать пароль каждый раз сразу делаем:

sudo su

Первым делом нужно обновить все пакеты:

apt-get update && apt-get dist-upgrade

Ставим менеджер обновлений, на самом деле он наверняка уже стоит, и система нам об этом скажет:

apt-get install update-manager-core

В файле конфигурации менеджера обновлений /etc/update-manager/release-upgrades проверяем наличие и если нет, то добавляем снизу строку:

 Prompt = LTS

Удаляем старые пакеты и убиваем старый кеш пакетов:

apt-get clean && apt-get autoremove

На этом месте перезагружаем что бы не было лишних неожиданностей.

reboot

Снова идем по SSH, снова забираем права суперюзера и запускаем обновление:

sudo su 
do-release-upgrade

Сервер ругнется на обновление по SSH и запустит еще один на 1022 порту, на случай если этот SSH нужно будет остановить. Возможно такое бывает, но у меня всегда все проходило гладко. Соглашаемся.

Дальше мы получим сообщение об отключении сторонних источников (помните, мы файлик сохранили), об изменениях, я, на всякий случай, сохраняю список неподдерживаемых и удаляемых пакетов, если что-то перестанет работать, то разобраться будет сильно проще. Дальше очень внимательно читаем вопросы и вдумчиво отвечаем:  если стоит в системе много всякого, то при обновлении будут попытки снести старые конфиги, смотрим внимательно.

По окончании перезагружаем, проверяем работоспособность и, если что то не работает, смотрим логи, выясняем что сдохло и почему. У меня после замены MySQL не запускался, с ошибкой:

 [ERROR] unknown variable 'table_cache=64'

 Это просто: я оставил старый конфиг, переменная изменилась, стала table_open_cache, поправил в конфиге, скомандовал:

apt-get --fix-broken install
service apache2 restart

...и почти всё взлетело. Почти... Не взлетели старые вебы, которые не понимают php7, специально для них скомпилировал php5, это тема для отдельного рассказа.

Если что-то отказывается ехать, то вот несколько команд, которые могут помочь разобраться в неочевидном, ну и логи смотрим, да:

journalctl -xe
apachectl configtest
systemctl status apache2.service

Смотрим, исправляем ошибки и все получится!