Обновление Ubuntu 12.04 до 14.04 через ssh

При обновлении с версии 12.04 до 14.04 можно столкнуться с рядом проблем.

Проблема первая:

The program ‘do-release-upgrade’ is currently not installed.  You can install it by typing:
apt-get install update-manager-core

Решается установкой пакета update-manager-core.

root@test:/home/user# apt-get install update-manager-core

Проблема вторая:

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0x* in position *: ordinal not in range(128)

Решается установкой кодировки en_US.UTF-8, с последующей, если необходимо, установкой кодировки ru_RU.UTF-8.

root@test:/home/user# locale-gen en_US.UTF-8
Generating locales…
  en_US.UTF-8… up-to-date
Generation complete.
root@test:/home/user# export LANG=en_US.UTF-8
root@test:/home/user# export LANG=C.UTF-8
root@test:/home/user# localedef ru_RU.UTF-8 -i ru_RU -fUTF-8
root@test:/home/user# locale-gen
root@test:/home/user# export LANG=ru_RU.UTF-8

Третья проблема заключается в переполнении раздела /boot из-за большого количества старых ядер. Решается удалением всех старых ядер, кроме последних двух.

Автоматический способ:

root@test:/home/user# apt-get purge $(dpkg -l ‘linux-*’ | sed ‘/^ii/!d;/'»$(uname -r | sed «s/\(.*\)-\([^0-9]\+\)/\1/»)»‘/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d’ | head -n -1)
root@test:/home/user# apt-get autoremove

Ну или если предыдущий способ вызывает сомнения, то можно удалить конкретные версии ядер. Ниже приведен пример для 32-битной системы с четырьмя ядрами. У 64-битных систем название пакетов с ядрами будет без «-pae» на конце.

root@test:/home/user# dpkg -l | grep linux-image
ii  linux-image-2.6.32-38-generic-pae    2.6.32-38                             Linux kernel image for version 2.6.32 on 32 bit x86 SMP
ii  linux-image-2.6.32-39-generic-pae    2.6.32-39                             Linux kernel image for version 2.6.32 on 32 bit x86 SMP
ii  linux-image-2.6.32-40-generic-pae    2.6.32-40                             Linux kernel image for version 2.6.32 on 32 bit x86 SMP
ii  linux-image-generic-pae             2.6.32-41                             Generic Linux kernel image
root@test:/home/user# apt-get purge linux-image-2.6.32-38-generic-pae linux-image-2.6.32-38-generic-pae
root@test:/home/user# apt-get autoremove

Т.к. мы работаем через ssh, то для предотвращения сбоев в обновлении в случае временного разрыва интернет соединения будем использовать программу screen. Установим ее:

root@test:/home/user# apt-get install screen

Теперь можно начать обновление.

root@test:/home/user# screen -m -S do-release-upgrade_session do-release-upgrade

В случае потери ssh-сессии и с последующим повторным подключением, вернуться к процессу обновления можно следующей командой:

root@test:/home/user# screen -r do-release-upgrade_session