警告:我没有这样做,甚至没有尝试过!

警告:我没有这样做,甚至没有尝试过!

我有一个在 64 位处理器上运行的 32 位系统。如何将其转换为全 64 位而不重新安装?我在某处看到这是可行的,因为新的多架构框架

答案1

长话短说:这是可行的,但很复杂。我在底部概述了一种替代方案。

现在是长描述,并持保留态度,因为我可能没有采取最好的路线:

这是可能的,这是我过去两个晚上所做的: 有一个维基条目描述了老式的方式没有多架构支持。它对于修复损坏的包很有帮助。

要迁移您的基础系统,做这个:

$ 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:/,因此二进制文件再次可用。冲洗并重复,scped 文件将被覆盖。

我会做什么

每当我切换系统时,我都会执行以下操作:

备份/home/etc(也许/var,,,/usr/local您更改过的其他一些文件,,/root...,YMMV)。

获取已安装软件包的列表dpkg --get-selections > packagelist并复制生成的文件packagelist

然后彻底重新安装 Debian,再次创建所有用户,也许还有角色等。

重新安装所有带有dpkg --set-selections < packagelist; apt-get -f install.

复制回备份的目录、文件,就基本完成了。

这种方法的一个缺点是:所有软件包(包括库)都将被标记为手动安装,因此当没有软件包再依赖它们时,它们将不会被卸载。

答案2

这里的其他答案表明,虽然这在理论上是可能的,但它非常复杂并且可能不值得付出努力。但是,如果您保持$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
    

您可能还想看看工具Mint 提供的功能可以让这一切变得更容易。它们也应该都可以安装在 Ubuntu 上。

答案3

理论上这是可能的,但可能是危险的。 Debian multiarch 目前支持 multiarch 库,但不支持二进制文件。所以就是这样。

该系统主要了解自己的架构dpkg-architecture(实际上是一个perl脚本,但它提取架构信息并显示它),它还声称能够架构。


警告:我没有这样做,甚至没有尝试过!


粗略的过程是:

  1. 安装所有库的多架构变体(最重要的是libgcc1
  2. 用于dpkg-architecture -aamd64移动你的拱门(注意,它可能会抱怨 GCC)
  3. 下载并暂存所有必需的组件(见下文)
  4. 强制安装 amd64 变体dpkg和依赖项
  5. 强制安装基本系统软件包的 amd64 变体,包括apt-get内核(注意,它可能会抱怨很多)
  6. 重启
  7. 大概安装系统的其余部分apt-get

这些步骤基于我对 Debian 设计的了解,在过去 12 年里,我几乎只在 Linux 发行版中使用了它(包括使用过debtakeover之前)以及我将采取的方法。所以考虑一下这个风险自负。尝试步骤 4 后,您的系统可能随时变得无法使用。请交替执行步骤 4 和 5可能debbootstrap

最重要的是,我强烈建议您先在虚拟机上尝试一下,然后再对您关心的任何内容进行操作。

祝你好运,并且愿原力与你同在

答案4

不是问题的答案,但将所有软件包从 x86 升级到 amd64 可能很困难,但您至少可以轻松安装 amd64 内核软件包,这至少允许您运行 64 位应用程序以及虚拟机和容器(这可能足以满足您的需要)。

只需安装带有 .amd64 linux-image 包即可dpkg -i --force-architecture

相关内容