我一直在使用虚拟机(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' > 软件列表