В данной статье я вкратце опишу процесс обновления Ubuntu со сменой архитектуры системы с i386 на amd64. Следует заметить, что данная статья не приводит абсолютно подробных инструкций - только приблизительные рекомендации. Поэтому Вам нужно обладать точными знаниями того, зачем и почему Вы это делаете, а также к каким последствиям могут привести Ваши действия.

Если Вы не понимаете, о чем идет речь в данной статье, НЕ ПРЕДПРИНИМАЙТЕ ОПИСАННЫХ ЗДЕСЬ ДЕЙСТВИЙ!
И еще раз: Вам потребуются глубокие знания об устройстве системы, решении проблем и многом другом. Вы все еще хотите продолжить? Тогда читайте далее.
Данное трюкачество окажется значительно проще, если Вы заранее запасетесь срезом репозитория amd64. Очень хорошей идеей будет скоприровать его на жесткий диск и прописать в /etc/apt/sources.list

Шаг 0: Список пакетов

Сохраните список всех установленных на вашей машине пакетов, например, такой командой:

dpkg --get-selections | grep -v deinstall | awk '{ print $1; }' > ~/pkglist.txt

Будет очень хорошей идеей заранее скачать 64-битные версии всех этих пакетов и поместить их в удобное для Вас место (пусть это будет ~/pkgs). Помните: пакетная система Вам сейчас не помошник!

Шаг 1: Ядро

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

Внимание: следующая команда необратимо сломает работу высокоуровневых пакетных инструментов, и восстановлена она будет лишь в самом конце. В Ваших руках останется только dpkg.
На 32битной версии 16.04.2 после установки 64битного ядра пакетная система не страдает!
  • Установите ядро из консоли командой:
dpkg -i --force-all linux-image*.deb
  • Так как пакетная система сломана, все операции по конфигурированию ядра прийдется выполнять вручную. Запустите команду
mkinitramfs -o /boot/initrd.img-NEW //версия//

, где вместо версия подставьте версию только что установленного ядра - для нашего примера это будет 2.6.32-22-generic.

  • Теперь нужно получить возможность загружаться с выбранным нами ядром. Можете сделать это вручную, а можете использовать скрипт
update-grub
  • Перезагрузите систему, используя только что установленное ядро. Если Вы все сделали правильно, система должна загрузиться как ни в чем не бывало.
Вы можете возразить - как же так, разве может 32-битная система работать под управлением 64-битного ядра? Я отвечу - может, и прекрасно работает. У такой конфигурации даже есть специальное название - химера

Шаг 2: Установка статически собранного Shell

Установите статически собранный интерпретатор командной строки. Я рекомендую busybox, так как он включает в себя все необходимые утилиты (которые в случае с, например, bash, прийдется тоже собирать статически, да и вдобавок они заменят пока еще работоспособные 32-битные утилиты, имеющиеся в нашей системе), к тому же, в репозитории уже есть готовый пакет busybox-static (в нашем примере это будет http://packages.ubuntu.com/lucid/busybox-static). Это нужно для того, чтобы впоследствии перезагрузиться, используя его в качестве init, таким образом, снимая все зависимости от предыдущей, 32-битной системы.

Обратите внимание: команды, встроенные в busybox, будут иметь приоритет над утилитами, имеющимися в системе. Поэтому, например, dpkg -i *.deb вызовет встроенную утилиту. Если Вам необходимо вызвать системный dpkg, указывайте это явно: /usr/bin/dpkg -i *.deb
При некоторых условиях dpkg встроенный в busybox может незначительно портить файл /var/lib/dpkg/status. Будьте готовы отредактировать его и исправить ошибки!

Шаг 3: Загрузка необходимых пакетов

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

ia32-libs
lib32asound2
lib32gcc1
lib32ncurses5
lib32stdc++6
lib32z1
libc6-i386

Поищите (http://packages.ubuntu.com/search?searchon=names&keywords=lib32) и скачайте их все (как минимум, те, оригинальные версии которых установлены в Вашей системе) и все их зависимости. Пакеты, названия которых оканчиваются на -dev и -dbg, скачивать не надо!

Скачайте также пакеты, содержащие все необходимые утилиты и 64-битные версии библиотек:

apt
binutils
bzip2
coreutils
cpio
debianutils
dpkg
ed
gcc-4.X-base (gcc обновляется достаточно часто - используйте последнюю версию пакета)
libacl1
libasound2
libattr1
libbz2-1.0
libc6
libdb4.4
libgcc1
libgdbm3
libgpmg1
libncurses5
libreadline5
libselinux1
libsepol1
libstdc++6
make
ncurses-bin
patch
perl-base
perl
sed

А также все их зависимости.

Шаг 4: Перезагрузка

Перезагрузите систему, задав в качестве init busybox. Для этого обычно достаточно указать ядру параметр init=/bin/busybox в файле /boot/grub/grub.cfg или непосредственно в командной строке GRUB2. Вы оказались в 64-битной системе, поздравляю =) Но до окончания необходимо проделать еще много работы.

Шаг 5: Установка библиотек совместимости

Установите пакет libc6-i686:

dpkg --force-all -i libc6-i386_*_amd64.deb

Установите все остальные пакеты:

dpkg --force-all -i lib32*_amd64.deb

Установите пакет libc6-amd64. После этого уже не будет пути к отступлению:

dpkg --force-all -i libc6_*_amd64.deb

Шаг 6: Установка системных утилит

Установите оставшиеся пакеты, загруженные на шаге 3, все тем же

dpkg --force-all -i *_amd64.deb

Шаг 7: Обновляем список пакетов APT

Запускайте

apt-get update

, смотрите на выводимые ошибки и исправляйте те из них, которые говорят «библиотека не найдена», «Wrong ELFCLASS» (неправильная разрядность библиотеки) и сообщают о недостаче чего-либо еще (например, python и его модулей, необходимых для работы apt-get).

Шаг 8: Поднимаем систему

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

Если Вы воспользовались моим советом и сделали локальную копию репозитория, это будет не сложнее, чем
for pkg in `cat ~/pkglist.txt`; do
  find ~/pkgs -iname \*${pkg}\*.deb -type f -exec dpkg --force-all -i {} \; ;
done

Шаг 9: Перезагрузка

Перезагрузитесь в Вашу новую (или лучше сказать, старую новую?) 64-битную систему. Если у Вас есть доступ в Интернет - можете обновиться командами

apt-get update
apt-get upgrade

На этом все!