安装与 32 位 Xubuntu 安装相同的 64 位软件包

安装与 32 位 Xubuntu 安装相同的 64 位软件包

我一直在使用虚拟机(Xubuntu 12.10,Windows 主机上装有 VMWare)来完成所有编程工作,我正在尝试从 32 位安装过渡到 64 位安装。我希望能够在新的 64 位 VM 中自动重新安装我在 32 位 VM 中使用的所有软件包。

阅读这些说明,我跑去sudo dpkg --get-selections获取已安装软件包的列表,但是很多软件包都有后缀:i386

有没有简单的方法来安装相应的64位包?在尝试安装之前,我可以安全地:i386用软件包列表中的类似内容替换它们吗?:x86_64

答案1

这个问题的第一个答案使用您的建议,然后处理丢失的包裹。在答案中,有些人认为这是一个坏主意。另请注意,如果选择添加了 a,:i386可能是因为某些其他包明确需要此架构的包。如果您想之前检查一下,这里有一个建议。

在您的系统中,您应该在/var/lib/apt/lists.您可以对照这些列表检查带有 :i386 的软件包列表,以确保它们同时存在于 i386 和 amd64 架构中。以下脚本是您可以执行的操作的示例

#!/bin/bash

#iterate on installed packages with a :something in their names
for package in $(
                   dpkg --get-selections | 
                   grep ":" | #comment to check all the selection
                   grep -v deinstall | 
                   cut -f1 |
                   sed s/:.*// | 
                   sort -u
                )
do
  #find all occurences in repository package lists
  grep "Package: $package$" /var/lib/apt/lists/*  2>/dev/null |
    #translation and sources are not usefull
    grep -v Translation |
    grep -v Sources |
    #put the distribution as a prefix
    sed 's/^\(.*\)_dists_\([^_]*\)\(.*\)/\2  \1\3/' |
    #put the architecture difference in the repository file name as a prefix
    sed 's/^\(.*\)-\(amd64\|i386\)_\(.*\)/\2  \1_\3/' |
    #count consecutive identical lines ignoring the architecture prefix
    uniq -c -f1 |
    #print architecture distribution and package if some line is not duplicated
    awk '$1!=2{print $2 " " $3 " " $5}'
done

在 lubuntu 安装上,这没有给我带来任何好处,而在 debian 上,这些软件包libc6-i686, libwine-bin, libwine-alsa, libwine-gl仅适用于 i386 架构

答案2

这会生成已安装软件包的列表:

aptitude 搜索 -F '%100p' '~i!~M' > 软件列表

相关内容