У мене є 32-розрядна система, яка працює на 64-бітному процесорі. Як перетворити його на все 64-бітне без повторної установки? Я десь бачив, що це можливо в результаті нових рамок Multiarch .
У мене є 32-розрядна система, яка працює на 64-бітному процесорі. Як перетворити його на все 64-бітне без повторної установки? Я десь бачив, що це можливо в результаті нових рамок Multiarch .
Відповіді:
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:/
, тому бінарні файли знову доступні. Промийте та повторіть, і scp
ed файли будуть перезаписані.
Що б я зробив замість цього
Коли я перемикав системи, я робив наступне:
Резервне копіювання /home
, /etc
(і , можливо /var
, /usr/local
деякі інші файли , які ви змінили, /root
..., YMMV).
Отримайте список встановлених пакетів dpkg --get-selections > packagelist
та скопіюйте отриманий файл packagelist
також.
Потім зробіть чисту перевстановлення Debian, створіть всіх користувачів знову, можливо, ролі тощо.
Перевстановіть усі пакети за допомогою dpkg --set-selections < packagelist; apt-get -f install
.
Скопіюйте резервні копії каталогів, файлів, і ви здебільшого готові.
Недолік цього підходу: усі ваші пакунки, включаючи бібліотеки, будуть позначені як встановлені вручну, тому їх не буде видалено, коли жоден пакет більше не залежить від них.
apt-mark showauto
експортувати автоматично встановлений список та apt-mark auto
позначити їх у новій інсталяції.
x86_64
, і не байдуже, якщо мої системні пакети не використовують оптимально 64-бітний процесор ? Я також працюю 32-бітної ОС. Я думаю, я вважав, що мій процесор був 32-розрядним, коли я вперше зробив установку :(
Інші відповіді тут показують, що хоча це теоретично можливо, це дуже складно і, мабуть, не варто докладати зусиль. Однак ви можете зробити чисту установку і зробити процес відносно безболісним, якщо ви будете тримати $HOME
те ж саме.
Загальний процес буде
Створіть резервну копію списку встановлених пакетів та списку автоматично встановлених пакетів.
dpkg --get-selections '*' > package.list
apt-mark showauto >auto.list
Зауважте, що ви також можете видалити архітектуру з будь-яких імен пакунків, встановлених за допомогою мультиарха :
dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
Якщо ваш /home
окремий розділ, просто переконайтеся, що не форматувати його під час встановлення. Якщо він не знаходиться на окремому розділі, створіть резервну копію, яку можна відновити згодом:
tar cvzf home_backup.tgz $HOME/
Після встановлення нової системи встановіть відсутні пакети
sudo dpkg --set-selections < package.list
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-mark auto $(cat auto.list)
Відновіть $ HOME. Скопіюйте файл tgz і витягніть його у каталог $ HOME:
tar xvzf home_backup.tgz
Можливо, ви також хочете ознайомитися з інструментами, які надає Монетний двір, щоб зробити це простіше. Усі вони також можуть бути встановлені на Ubuntu.
Теоретично це можливо, але, ймовірно, зрадницько. Debian multiarch на даний момент підтримує багатоархівні вкладки, але не бінарні файли. Так ось це.
Система в першу чергу розуміє власну архітектуру dpkg-architecture
(що насправді є сценарієм perl, але вона витягує інформацію про арку і відображає її), яка також стверджує, що може встановити архітектуру.
Приблизним буде такий процес:
libgcc1
)dpkg-architecture -aamd64
для зміщення арки (зауважте, вона може скаржитися на GCC)dpkg
та залежностіapt-get
ядро (Примітка, воно може скаржитися на ЛОТ)apt-get
Ці кроки засновані на тому, що мені відомо про дизайн Debian, який використовував його майже виключно серед дистрибутивів Linux протягом останніх 12 років (включаючи використання debtakeover
раніше) та підхід, який я б застосував. Тому вважайте це на свій страх і ризик . Ваша система може стати непридатною будь-який час після спроби кроку 4. Можливо, буде альтернатива крокам 4 і 5 debbootstrap
.
Найголовніше, я настійно пропоную спробувати це на VM, перш ніж робити це на будь-якому, що вас хвилює.
Удачі, і хай Сила буде з тобою .
Не відповідь на запитання, але може бути важко оновити всі пакети з x86 до amd64, але ви можете принаймні легко встановити пакет ядра amd64, що принаймні дозволить вам запускати 64-бітні програми та віртуальні машини та контейнери ( що може бути достатньо для того, що вам потрібно).
Просто встановіть пакет amd64 linux-image за допомогою dpkg -i --force-architecture
.
--force-architecture
не потрібен, і ядро amd64 можна встановити через apt на i386.
Існує досить багато посібників, але навряд чи можна показати, чого насправді очікувати. Я пишу це на ноутбуці Debian Wheezy, що я щойно закінчив оновлення з 32 біт до 64, і це справді працює.
Я дотримувався цих інструкцій, і вони були дійсно точними щодо того, що ви насправді зіткнетеся:
http://blog.zugschlus.de/archives/972-How-to-amd64-an-i386-Debian-installation-with-multiarch.html
Рекомендація полягає в тому, щоб система постійно працювала над усім процесом, не перезавантажуйте, якщо ви не впевнені, що все перенесли і що все, що було видалено, було встановлено знову (особливо необхідні пакети), або якщо система не запуститься знову.
Дотримуючись ідеї за допомогою 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
циклу.
У мене мало досвіду з цим питанням, але я вважаю, що ви правильні, коли ви говорите, що перетворення з 32 на 64 повинно бути здатним за допомогою багатосхилого. Я хоч би був обережним, наскільки добре підтримується ця нова система.
Ось один із прочитаних нами документів, які обговорювали цю проблему, можливо, це вам допоможе: https://wiki.ubuntu.com/MultiarchSpec
Помітьте треті Історії користувачів. Ось ще одне посилання на цю ж тему: https://help.ubuntu.com/community/MultiArch
Навіть незважаючи на те, що Debian і Ubunutu може бути різним, це головна особливість. Як би я міг уявити, що Ubuntu та Debian будуть тісно співпрацювати над тим, щоб ця структура функціонувала на місцях, перш ніж Ubuntu відірветься і зробить щось, що їм подобається.
Удачі!