我有一个在64位处理器上运行的32位系统。如何在不重新安装的情况下将其转换为全64位?我在某处看到由于新的Multiarch框架,它是可行的。
我有一个在64位处理器上运行的32位系统。如何在不重新安装的情况下将其转换为全64位?我在某处看到由于新的Multiarch框架,它是可行的。
Answers:
TL; DR:可行,但复杂。我在底部概述了一个替代方案。
现在进行详细说明,并加一点盐,因为我可能没有采取最佳方法:
这是可能的,这是我过去两晚所做的工作: 有一个Wiki条目描述了没有多体系结构支持的老式方法。这对于修复损坏的包装很有帮助。
要迁移您的基本系统,请执行以下操作:
$ 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
ed提取了文件scp -r ./* root@other_computer:/
,因此二进制文件再次可用。冲洗并重复操作,scp
ed文件将被覆盖。
我会怎么做
每当切换系统时,我都会执行以下操作:
备份/home
,/etc
(也许/var
,/usr/local
一些其他文件,你变了/root
,......,情况因人而异)。
使用获取安装包的列表,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
请注意,您可能还想从使用multiarch安装的任何软件包名称中删除体系结构:
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
您可能还想看看Mint提供的工具来简化此过程。它们都应该也可以在Ubuntu上安装。
从理论上讲这是可能的,但可能是危险的。当前的Debian multiarch支持multiarch库,但不支持二进制文件。就是这样。
该系统主要从中了解其自身的体系结构dpkg-architecture
(这实际上是一个perl脚本,但它提取并显示了arch信息),该体系结构还声称能够设置该体系结构。
粗略的过程是:
libgcc1
)dpkg-architecture -aamd64
改变你的弓(注意,这可能会抱怨GCC)dpkg
和依赖项的amd64变体apt-get
和内核)的amd64变体(注意,可能会抱怨很多)apt-get
这些步骤基于我对Debian的设计的了解,该设计在过去12年中几乎完全在Linux发行版中使用debtakeover
过(包括以前使用过的)以及我将采用的方法。因此,请您自担风险。尝试执行步骤4后,您的系统可能随时无法使用。步骤4和5的替代方法可能是debbootstrap
。
最重要的是,我强烈建议您在虚拟机上尝试此操作,然后再执行您关心的任何事情。
祝你好运,愿力量与你同在。
这不是问题的答案,但是可能很难将所有软件包从x86升级到amd64,但是您至少可以轻松地安装amd64内核软件包,这至少将允许您运行64位应用程序以及虚拟机和容器(这可能足以满足您的需求)。
只需使用安装amd64 linux-image软件包dpkg -i --force-architecture
。
--force-architecture
不需要,并且可以通过apt在i386上安装amd64内核。
那里有很多手册,但是几乎没有手册显示出真正的期望。我是在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退出并做自己喜欢的事情之前发挥作用。
祝好运!