Обновляем 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 installservice apache2 restart
...и почти всё взлетело. Почти... Не взлетели старые вебы, которые не понимают php7, специально для них скомпилировал php5, это тема для отдельного рассказа.
Если что-то отказывается ехать, то вот несколько команд, которые могут помочь разобраться в неочевидном, ну и логи смотрим, да:
journalctl -xe
apachectl configtest
systemctl status apache2.service
Смотрим, исправляем ошибки и все получится!