Назад | Перейти на главную страницу

Преобразование 64-битного сервера Ubuntu в 32-битный сервер Ubuntu

У нас есть экземпляр vmware-сервера Ubuntu, который, похоже, установлен с 64-разрядной версией.

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

Есть ли надежный способ получить 32-битные версии всего и преобразовать ядро, или мне следует полностью отказаться от этой идеи?

Спасибо за помощь.


EDIT: основной целью этого экземпляра Linux было предоставление репозитория CVS. После тщательного рассмотрения мы решили перейти с CVS на git вместо того, чтобы выполнять упражнение 64-> 32-бит.

Я подозреваю, что нет простого, стабильного, надежного, автоматизированного способа, поскольку это не то, что будет требоваться достаточно часто, чтобы стоило тратить много времени на разработку и тестирование, а выполнение этого вручную, вероятно, потребует дольше, чем просто перестроить установку виртуальной машины с нуля.

Вы можете до некоторой степени ускорить перестройку, вы можете убедиться, что у вас установлены все те же пакеты, запустив

sudo dpkg --get-selections | grep '[[:space:]]install$' | \awk '{print $1}' > package_list

на старой виртуальной машине, перенос файла снова и снова

cat package_list | xargs sudo apt-get install

на новой ВМ.

Затем скопируйте старую виртуальную машину /etc/ дерево к новой машине (не как /etc - перетащите куда-нибудь на время) и используйте diff инструмент для поиска различий, которые необходимо перенести. Причина не просто массовое копирование /etc на место, могут быть небольшие отличия в конфигурации по умолчанию для некоторых 64-битных / 32-битных пакетов, которые вы, возможно, захотите хотя бы изучить, а не блистать, не зная. Для начала /etc/apt/sources.lst нужно будет отличаться. (Даже если сделать это для дублирования 32-битной установки на другую 32-битную установку, я бы все равно не просто скопировал /etc оптовая торговля - выполнение подобного различия дает вам возможность найти вещи, которые больше не актуальны и должны были быть очищены для ясности)

Как только это будет сделано, скопируйте / home, чтобы восстановить любую конфигурацию и данные пользователя, а также что-нибудь вроде /var/www если у вас есть файлы, обслуживаемые оттуда по HTTP, и так далее, и все готово.

Я использовал приведенное выше, чтобы воспроизвести одну 32-битную установку как другую 32-битную установку, но она должна работать так же хорошо между архитектурами. Вы можете обнаружить, что некоторые пакеты вызывают apt-get команда, чтобы предупредить вас о том, что пакет не найден. Некоторые из них будут 32-битными совместимыми пакетами, которые, очевидно, не будут присутствовать в 32-битном репозитории (просто удалите их из списка пакетов и перезапустите), а некоторые могут быть пакетами с явными именами 32-битных и 64-битных пакетов ( в этом случае найдите правильное имя с помощью поиска на packages.ubuntu.com, отредактируйте список пакетов и повторно запустите apt-get).

Конечно, это не будет копировать ничего, что вы не установили из репозиториев Ubuntu, поэтому вам придется переделывать что-либо подобное вручную, но в противном случае этот процесс может сэкономить вам немного времени. Кроме того, перед запуском apt-get убедитесь, что в новых виртуальных машинах sources.list включены те же репозитории, что и в старом, иначе вы получите гораздо больше проблем с не найденным пакетом из apt-get.

Лучший вариант - выполнить переустановку. В качестве примера взгляните на детали пакета binutils на моем 64-битном сервере Ubuntu:

smiller@corinne3:~$ dpkg-query -p binutils
Package: binutils
Priority: optional
Section: devel
Installed-Size: 10092
Maintainer: Ubuntu Core developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 2.20-0ubuntu2
Provides: elf-binutils
Depends: libc6 (>= 2.8), zlib1g (>= 1:1.1.4)
Suggests: binutils-doc (>= 2.20-0ubuntu2)
Conflicts: elf-binutils, gas, modutils (<< 2.4.19-1)
Size: 1660892
Description: The GNU assembler, linker and binary utilities
 The programs in this package are used to assemble, link and manipulate
 binary and object files.  They may be used in conjunction with a compiler
 and various libraries to build programs.
Original-Maintainer: Matthias Klose <doko@debian.org>

Строка «Архитектура: amd64» указывает на то, что пакет был скомпилирован как 64-разрядный двоичный файл, и что его необходимо заменить 32-разрядной версией перед загрузкой 32-разрядного ядра. При замене основных библиотек libc6 возникнут большие проблемы, так как от этих библиотек зависит очень много пакетов.

Я знаю, что в Ubuntu 64-битное не только ядро.

Я не могу сказать наверняка, что раньше не выполнял эту миграцию, но считаю, что этот план может быть лучшим. Попробуйте изменить ядро ​​на 32-битное на копии экземпляра и посмотрите, работает ли это. Затем попробуйте скопировать его на другую машину. Если это не сработает, переустановите Ubuntu и скопируйте файлы конфигурации небольшими партиями, чтобы увидеть, не сломается ли что-нибудь.

Если первый способ не работает, второй будет ужасно запутанным и отнимет много времени, но, возможно, вы сможете сохранить ваши настройки.