Опыт обновления очень старой неподдерживаемой Ubuntu (12.10 Quantal до 14.04 LTS Trusty)

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

В общем, сегодня я начал собирать домашний бэкап-сервер (AMD AM1, miniITX, корпус на 6 HDD), для теста загрузился с неё (кстати, забавно — на столе валялись только БП, материнка, много меньше этого БП и… всё), проверил систему, собрал и решил обновить до 14.04, благо, она достаточно стабильна.

Опаньки. Во-первых, apt-get update вообще нормально не завёлся. Тонна 404-х ошибок. Ковырялся я, ковырялся, и наткнулся в итоге на что-то типа

# do-release-upgrade

Проверка наличия новой версии Ubuntu
Ваша версия  Ubuntu больше не поддерживается.
Traceback (most recent call last):
  File "/usr/bin/do-release-upgrade", line 92, in <module>
    "%(url)s\n") % { 'url' : url }
ValueError: unsupported format character '?' (0xa) at index 55


Дальше я, наверное, час плясал, экспериментировал и обновлялся. Все ошибки и эксперименты уже и не вспомню, так что выкладываю ключевые элементы процесса :)

Установка Linux, демотиватор


0. Стандартная подготовка


Отключаем нафиг все сторонние репозитории. Это обязательное действие для каждого обновления Ubuntu. Хотя и без отключения часто прокатывает, но если не хочется рисковать и натыкаться на непонятные проблемы зависимостей пакетов — нафиг.

1. Оживляем репозиторий


Рецепт нашёл тут. Все сводится к замене всех путей в файле /etc/apt/sources.list с _http://ru.archive.ubuntu.com/ на _http://old-releases.ubuntu.com/.

После этого делаем:

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


После этого quantal превращается в raring.

2. Штатное обновление raring до saucy


Тут ждал следующий облом:

# do-release-upgrade

...

Проверка наличия нового релиза Ubuntu 

...

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 
0: ordinal not in range(128) 


Вроде, решение привычное и плохо, что я сразу его не вспомнил. Нужно отключить русскую локаль:

# LANG=C do-release-upgrade -d 

Фигушки. Вид ошибки немного меняется, но суть та же. Что-то ему юникодное попадается. После десятка минут гугления не выдержал и полез заниматься print-debug'ом инсталляционных скриптов. И что же? У меня в /etc/apt/sources.list.d были файлы со сторонними источниками, которые я отключил не стирая, а комментируя строки. А в них — старые комментарии от древнего обновления на русском! Убрал их — и готово, raring согласился обновиться до saucy. Обновляемся, перезагружаемся и видим, наконец, штатное уже предложение обновиться по-настоящему :D

Welcome to Ubuntu 13.10 (GNU/Linux 3.11.0-26-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

Your Ubuntu release is not supported anymore.
For upgrade information, please visit:
http://www.ubuntu.com/releaseendoflife

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


3. Окончательное обновление до текущей версии

Снова не забываем отключить русский.

export LANG=C
export LC_ALL=C
do-release-upgrade

А дальше — всё как всегда, всё как обычно.

2 комментария

avatar
Примечание. Для старого quantal:

do-release-upgrade
The program 'do-release-upgrade' is currently not installed. You can install it by typing:
apt-get install ubuntu-release-upgrader-core
avatar
Если при выполнении do-release-upgrade выпадет «ImportError: No module named apt», то:

apt-get install python-apt
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.