У нас есть экземпляр 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 и скопируйте файлы конфигурации небольшими партиями, чтобы увидеть, не сломается ли что-нибудь.
Если первый способ не работает, второй будет ужасно запутанным и отнимет много времени, но, возможно, вы сможете сохранить ваши настройки.