Як конвертувати 32-бітну (x86) систему на основі Debian в 64-бітну


36

У мене є 32-розрядна система, яка працює на 64-бітному процесорі. Як перетворити його на все 64-бітне без повторної установки? Я десь бачив, що це можливо в результаті нових рамок Multiarch .


5
Мені цікаві відповіді на це питання. У мене 32-розрядна система на 64-бітній машині (якій зараз 6+ років, але все ще триває на даний момент). Єдиною причиною, коли я використовував 32-бітну версію цього пристрою в 2007 році, було те, що я хотів запустити на ньому 32-бітні програми. З новим мультиархом, якщо я правильно розумію, 32-бітні програми легко можна встановити на 64-бітній машині. Так, було б непогано перетворити на 64 біт для хрипів, але я не знаю, наскільки це було б важко. @ Bahamat пропозиція використовувати VM звучить добре. Якщо мені вдасться успішну конверсію, я відповім тут.
Faheem Mitha


Аналогічне запитання в 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 буде заплутаний, і багато пакетів буде встановлено в обох версіях. Потрібно зробити багато ручної роботи у справі.

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

Що б я зробив замість цього

Коли я перемикав системи, я робив наступне:

Резервне копіювання /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
    

    Зауважте, що ви також можете видалити архітектуру з будь-яких імен пакунків, встановлених за допомогою мультиарха :

    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
    

Можливо, ви також хочете ознайомитися з інструментами, які надає Монетний двір, щоб зробити це простіше. Усі вони також можуть бути встановлені на Ubuntu.


4

Теоретично це можливо, але, ймовірно, зрадницько. Debian multiarch на даний момент підтримує багатоархівні вкладки, але не бінарні файли. Так ось це.

Система в першу чергу розуміє власну архітектуру dpkg-architecture(що насправді є сценарієм perl, але вона витягує інформацію про арку і відображає її), яка також стверджує, що може встановити архітектуру.


ПОПЕРЕДЖЕННЯ: Я НЕ ЗДОРОВАЄТЬСЯ НІЧОГО НІКОЛИ НЕ ДОПОМОГАЄТЬСЯ !!!


Приблизним буде такий процес:

  1. Встановіть багатоархівний варіант усіх ваших бібліотек (головне 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.

Найголовніше, я настійно пропоную спробувати це на VM, перш ніж робити це на будь-якому, що вас хвилює.

Удачі, і хай Сила буде з тобою .


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
Цікаво прочитати, що насправді стосується, але прочитавши це, я думаю, що мені краще перевстановитись. Спасибі.
Faheem Mitha

Це посилання для мене не працює - перемістився ресурс?
Toby Speight

О так, ти побачив побачення? Я писав, що в 2013 році речі часто зникають в Інтернеті через 6 років. На жаль, в Інтернеті все ще не дуже основна функція: Показ ламаних посилань, перш ніж натиснути на посилання.
nigratruo

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.