tsh*_*ang 38 64bit debian 32bit
我有一个在 64 位处理器上运行的 32 位系统。如何在不重新安装的情况下将其转换为全 64 位?我在某处看到它是可行的,因为新的 Multiarch 框架。
Res*_*uum 10
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
Run Code Online (Sandbox Code Playgroud)
你的一些软件包是 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'}`
Run Code Online (Sandbox Code Playgroud)
但事实证明这是一个坏主意:有些包在 amd64 中不可用(例如 libc6-i686),apt-get 会混淆,并且两个版本都会安装很多包。aptitude 方面的大量手工工作需要完成。
更多的困难:一些必要的包可以被替换,所以你总是会安装二进制文件以进行安装,但是一些包必须被删除并重新安装,例如我在使用 tar 时遇到了这个问题。我在另一个系统上获取了软件包,通过提取软件包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。
将备份的目录、文件复制回来,大功告成。
这种方法的一个缺点是:您的所有软件包(包括库)都将被标记为手动安装,因此当没有软件包不再依赖它们时,它们不会被卸载。
这里的其他答案表明,虽然这在理论上是可能的,但它非常复杂,可能不值得付出努力。但是,如果您保持$HOME相同,您可以进行全新安装并使该过程相对轻松。
一般流程将是
备份已安装的软件包列表和自动安装的软件包列表。
dpkg --get-selections '*' > package.list
apt-mark showauto >auto.list
Run Code Online (Sandbox Code Playgroud)
请注意,您可能还想从使用multiarch安装的任何包名称中删除架构:
dpkg --get-selections '*' | sed -e 's/:\(i386\|amd64\)//' > package.list
Run Code Online (Sandbox Code Playgroud)如果您/home是单独的分区,请确保在安装过程中不要对其进行格式化。如果它不在单独的分区上,请进行备份以便以后恢复:
tar cvzf home_backup.tgz $HOME/
Run Code Online (Sandbox Code Playgroud)安装新系统后,安装缺少的软件包
sudo dpkg --set-selections < package.list
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-mark auto $(cat auto.list)
Run Code Online (Sandbox Code Playgroud)恢复您的 $HOME。复制 tgz 文件并将其解压缩到您的 $HOME 目录中:
tar xvzf home_backup.tgz
Run Code Online (Sandbox Code Playgroud)您可能还想查看Mint 提供的工具来简化此操作。它们也应该都可以安装在 Ubuntu 上。
小智 -1
我对此事缺乏经验,但我确实相信,当您说从 32 转换到 64 应该能够使用多架构时,您是正确的。不过,我对这个新系统的支持程度持谨慎态度。
这是我读过的讨论此事的文档之一,也许这会对您有所帮助: https: //wiki.ubuntu.com/MultiarchSpec
请注意第三个用户故事。这是围绕同一主题的另一个链接: https: //help.ubuntu.com/community/MultiArch
尽管 Debian 和 Ubunutu 之间可能略有不同,但这是一个核心功能。我想象 Ubuntu 和 Debian 会密切合作,在 Ubuntu 退出并做自己喜欢的事情之前让这个结构真正发挥作用。
祝你好运!
| 归档时间: |
|
| 查看次数: |
38263 次 |
| 最近记录: |