Содержание
В данной статье я вкратце опишу процесс обновления Ubuntu со сменой архитектуры системы с i386 на amd64. Следует заметить, что данная статья не приводит абсолютно подробных инструкций - только приблизительные рекомендации. Поэтому Вам нужно обладать точными знаниями того, зачем и почему Вы это делаете, а также к каким последствиям могут привести Ваши действия.
Шаг 0: Список пакетов
Сохраните список всех установленных на вашей машине пакетов, например, такой командой:
dpkg --get-selections | grep -v deinstall | awk '{ print $1; }' > ~/pkglist.txt
Будет очень хорошей идеей заранее скачать 64-битные версии всех этих пакетов и поместить их в удобное для Вас место (пусть это будет ~/pkgs). Помните: пакетная система Вам сейчас не помошник!
Шаг 1: Ядро
Одним из ключевых компонентов системы является ядро. Поэтому в первую очередь необходимо установить именно новое ядро. Вы можете собрать его сами - или взять готовое из репозитория. Второй вариант проще, поэтому я рекомендую использовать его.
- Найдите и загрузите ядро той же версии, что и в текущей версии вашей Ubuntu, но для архитектуры amd64. Например, для lucid это будет http://packages.ubuntu.com/lucid/amd64/linux-image-2.6.32-22-generic/download
- Установите ядро из консоли командой:
dpkg -i --force-all linux-image*.deb
- Так как пакетная система сломана, все операции по конфигурированию ядра прийдется выполнять вручную. Запустите команду
mkinitramfs -o /boot/initrd.img-NEW //версия//
, где вместо версия подставьте версию только что установленного ядра - для нашего примера это будет 2.6.32-22-generic.
- Теперь нужно получить возможность загружаться с выбранным нами ядром. Можете сделать это вручную, а можете использовать скрипт
update-grub
- Перезагрузите систему, используя только что установленное ядро. Если Вы все сделали правильно, система должна загрузиться как ни в чем не бывало.
Шаг 2: Установка статически собранного Shell
Установите статически собранный интерпретатор командной строки. Я рекомендую busybox, так как он включает в себя все необходимые утилиты (которые в случае с, например, bash, прийдется тоже собирать статически, да и вдобавок они заменят пока еще работоспособные 32-битные утилиты, имеющиеся в нашей системе), к тому же, в репозитории уже есть готовый пакет busybox-static (в нашем примере это будет http://packages.ubuntu.com/lucid/busybox-static). Это нужно для того, чтобы впоследствии перезагрузиться, используя его в качестве init, таким образом, снимая все зависимости от предыдущей, 32-битной системы.
Шаг 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
На этом все!