Как преобразовать 32-битную (x86) систему на основе Debian в 64-битную


36

У меня есть 32-битная система, которая работает на 64-битном процессоре. Как мне преобразовать его в полностью 64-битную версию без переустановки? Я видел где-то, что это выполнимо в результате новой платформы Multiarch .


5
Мне интересны ответы на этот вопрос. У меня 32-битная система на 64-битной машине (которой сейчас более 6 лет, но она все еще работает). Единственная причина, по которой я использовал 32-разрядную версию при первоначальной установке этой машины в 2007 году, заключалась в том, что я хотел запускать на ней 32-разрядные приложения. С новым мультиархом, если я правильно понимаю, 32-битные приложения могут быть легко установлены на 64-битной машине. Так что было бы неплохо перевести на 64-битную версию для wheezy, но я не знаю, насколько это будет сложно. Предложение @ bahamat об использовании ВМ звучит хорошо. Если я справлюсь с успешной конверсией, я отвечу здесь.
Фахим Митха


Аналогичный вопрос по AU: askubuntu.com/q/5018/178596
Уилф

Ответы:


8

TL; DR: это выполнимо, но сложно. Я обрисовал альтернативу внизу.

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

Это возможно, и вот что я делал последние две ночи: есть запись в вики, описывающая способ старой школы без поддержки мультиархии. Это полезно для исправления сломанных пакетов.

Чтобы перенести вашу базовую систему, сделайте это :

$ dpkg --print-architecture
i386
# dpkg --add-architecture amd64
$ dpkg --print-foreign-architectures
amd64
# apt-get update
# apt-get download gcc-4.6-base:amd64 libgcc1:amd64 libc6:amd64 \
          libselinux1:amd64 zlib1g:amd64 libbz2-1.0:amd64 dpkg:amd64
# dpkg -i gcc-4.6-base*.deb libgcc*.deb libc*.deb libselinux*.deb \
          libbz2*.deb zlib*.deb dpkg*.deb
$ dpkg --print-architecture
amd64
$ dpkg --print-foreign-architectures
i386

Некоторые из ваших пакетов тогда amd64, но большинство останется i386. apt-get upgradeпозаботится о некоторых пакетах, apt-get -f installисправит некоторые ошибки, но большинство пакетов останется i386. Если вы хотите с этим справиться, то пропустите хитрую часть;)

Использование dpkg --get-selections | grep :i386вернет все ваши пакеты, которые вам все равно придется перенести.

Моей следующей идеей было сделать:

# apt-get install `dpkg --get-selections \
  | grep i386 \
  | awk {'gsub(/:i386/, ":amd64"); print $1'}`

Но это оказалось плохой идеей: некоторые пакеты недоступны в amd64 (например, libc6-i686), apt-get будет сбит с толку, и в обеих версиях будет установлено много пакетов. Много ручной работы в способности должно быть сделано.

Больше трудностей: некоторые важные пакеты можно заменить, так что у вас всегда будут установлены двоичные файлы для установки, но некоторые пакеты придется удалить и установить снова, например, у меня была эта проблема с tar. Я собрал пакеты в другой системе, извлек пакеты через ar p package.deb data.tar.gz | tar zxи затем отредактировал scpизвлеченные файлы через scp -r ./* root@other_computer:/, так что двоичные файлы снова доступны. Промойте и повторите, и scpредактируемые файлы будут перезаписаны.

Что бы я сделал вместо

Когда я переключал системы, я делал следующее:

Резервное копирование /home, /etc(и , возможно /var, /usr/localнекоторые другие файлы , которые вы изменили, /root..., YMMV).

Получите список установленных пакетов dpkg --get-selections > packagelistи скопируйте полученный файл packagelist.

Затем выполните чистую переустановку Debian, снова создайте всех пользователей, возможно, роли и т. Д.

Переустановите все пакеты с помощью dpkg --set-selections < packagelist; apt-get -f install.

Скопируйте резервные копии каталогов, файлов, и вы в основном сделали.

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


1
«Что бы я сделал вместо этого» ... чувак, я был уверен, что ОП спросил без переустановки: /
Брайам

@Braiam ОП, скорее всего, хотел сделать это без переустановки. Я просто рассказывал о своем личном опыте. Альтернативный маршрут для меня проще, и, возможно, я допустил некоторые ошибки при преобразовании системы.
Residuum

6
Чтобы пометить автоматически установленные пакеты, вы могли бы использовать apt-mark showautoдля экспорта автоматически установленного списка и apt-mark autoпометить их в новой установке.
Адриен Клерк

Спасибо, что написали свой опыт. «Если вы хотите справиться с этим, то пропустите сложную часть;)« Что, если моя цель - просто иметь возможность разрабатывать программное обеспечение x86_64, и мне все равно, не будут ли мои системные пакеты оптимально использовать 64-битный процессор? ? Я также использую 32-битную ОС. Я думаю, я думал, что мой процессор был 32-разрядным, когда я впервые сделал установку :(
jberryman

7

Другие ответы здесь показывают, что, хотя это теоретически возможно, это очень сложно и, вероятно, не стоит усилий. Вы можете, однако, сделать чистую установку и сделать процесс относительно безболезненным, если вы продолжите $HOME.

Общий процесс будет

  1. Сделайте резервную копию вашего списка установленных пакетов и списка автоматически установленных пакетов.

    dpkg --get-selections '*' > package.list
    apt-mark showauto >auto.list
    

    Обратите внимание, что вы также можете удалить архитектуру из любых имен пакетов, установленных с помощью multiarch :

    dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
    
  2. Если у вас /homeотдельный раздел, просто не форматируйте его во время процесса установки. Если он не находится в отдельном разделе, создайте резервную копию, которую можно восстановить позже:

    tar cvzf home_backup.tgz $HOME/
    
  3. После того, как вы установили новую систему, установите недостающие пакеты

    sudo dpkg --set-selections < package.list 
    sudo apt-get update
    sudo apt-get dist-upgrade
    sudo apt-mark auto $(cat auto.list)
    
  4. Восстановите свой $ HOME. Скопируйте файл tgz и распакуйте его в каталог $ HOME:

    tar xvzf home_backup.tgz
    

Вы также можете взглянуть на инструменты, которые предоставляет Mint, чтобы сделать это проще. Все они должны быть установлены на Ubuntu.


4

Теоретически это возможно, но, вероятно, предательски. В настоящее время многоархивация Debian поддерживает многоархивовые библиотеки, но не двоичные файлы. Вот и все.

Система в первую очередь понимает свою собственную архитектуру dpkg-architecture(которая на самом деле является сценарием Perl, но она извлекает информацию об архитектуре и отображает ее), которая также утверждает, что может устанавливать архитектуру.


ВНИМАНИЕ: Я НЕ СДЕЛАЛ ЭТОГО, НИКОГДА НЕ ПЫТАЛСЯ ЭТОГО !!!


Грубый процесс будет:

  1. Установите вариант multiarch всех ваших библиотек (самое главное libgcc1)
  2. Используйте dpkg-architecture -aamd64для сдвига вашей арки (обратите внимание, он может жаловаться на GCC)
  3. Загрузите и подготовьте все необходимые компоненты (см. Далее)
  4. Принудительная установка варианта amd64 dpkgи зависимостей
  5. Принудительная установка amd64 вариантов основных пакетов базовой системы, в том числе apt-getи ядра (обратите внимание, что может появиться много)
  6. перезагружать
  7. Предположительно установите остальную часть системы с apt-get

Эти шаги основаны на том, что я знаю о дизайне Debian, который использовал его почти исключительно в дистрибутивах Linux за последние 12 лет (в том числе и debtakeoverраньше), и о подходе, который я выбрал бы. Так что обдумайте это на свой страх и риск . Ваша система может стать непригодной для использования в любое время после выполнения шага 4. Может быть альтернативой шагам 4 и 5 debbootstrap.

Самое главное, я настоятельно рекомендую попробовать это на ВМ, прежде чем делать это на чем-либо, что вас волнует.

Удачи, и да пребудет с тобой Сила .


3

Не ответ на вопрос, но может быть сложно обновить все пакеты с x86 до amd64, но вы можете, по крайней мере, легко установить пакет ядра amd64, который по крайней мере позволит вам запускать 64-битные приложения, а также виртуальные машины и контейнеры ( чего может хватить на то что нужно).

Просто установите пакет amd64 linux-image с помощью dpkg -i --force-architecture.


1
--force-architectureне требуется, и ядро ​​amd64 можно установить через apt на i386.
Иордания

3

Существует немало руководств, но вряд ли можно увидеть, чего на самом деле ожидать. Я пишу это на ноутбуке Debian Wheezy, который я только что закончил обновлять с 32-разрядной до 64-й версии, и он действительно работает.

Я следовал этим инструкциям, и они были очень точны в том, с чем вы столкнетесь:

http://blog.zugschlus.de/archives/972-How-to-amd64-an-i386-Debian-installation-with-multiarch.html

Рекомендуется поддерживать работу системы в течение всего процесса, не перезагружаться, если вы не уверены, что перенесли все и что все удаленное было установлено снова (особенно необходимые пакеты), иначе вы не запустите систему снова.


1
Интересно почитать, что на самом деле происходит, но, прочитав это, я думаю, мне лучше переустановиться. Спасибо.
Фахим Митха

Эта ссылка не работает для меня - ресурс переехал?
Тоби Спейт

Ах да, ты видел дату? Я писал, что в 2013 году материал часто пропадает в Интернете через 6 лет. К сожалению, в Интернете все еще нет основной функции: показ неработающих ссылок перед тем, как вы нажмете на ссылку.
Нигратруо

1

Следуя идее использования awk , я использовал:

dpkg --get-selections \               # get the list
 | grep -v deinstall \                # throw away deselected packages
 | grep ':i386' \                     # get the i386 arch packages
 | sed 's/install//g' \               # drop 'install' to get list
 | sed 's/:i386/:amd64/g' \           # replace i386 with amd64
 | while read package; do \           # iterate over the result
      apt-get -yf install $package; \ # install each one and fix dependencies
   done

Я должен был запустить его несколько раз. dpkg --get-selectionsэто просто алфавитный список, поэтому пакеты вверху, для которых требуются пакеты внизу, будут пропущены. Если вы хотите посмотреть, сколько из них устанавливается, сделайте это dpkg --get-selections | grep amd64 | wc -lвнутри whileцикла.


-1

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

Вот один из документов, которые я прочитал, в которых обсуждался этот вопрос, возможно, это вам поможет: https://wiki.ubuntu.com/MultiarchSpec

Обратите внимание на третьи истории пользователей. Вот еще одна ссылка на ту же тему: https://help.ubuntu.com/community/MultiArch

Даже если между Debian и Ubunutu это может немного отличаться, это ключевая особенность. Я полагаю, что Ubuntu и Debian будут тесно сотрудничать, чтобы заставить эту структуру функционировать на месте, прежде чем Ubuntu отойдет и сделает что-то по своему вкусу.

Удачи!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.