我正在考虑从旧的 AMD64 转移到一款新的 Intel 双核处理器,该处理器是 32 位的。安装不是问题,但我能否转移所有已安装的应用程序?到目前为止,在谷歌上我没有找到任何关于迁移至不同平台和文件系统的信息,只有类似平台和文件系统的迁移信息。我不会更改文件系统,但平台将是不同的。在 Gentoo 中是否有类似 "World" 文件的东西?
您可以轻松保存软件包列表:查看“man dpkg”,搜索--set-selections和--get-selections选项。
基本上,要保存软件包列表:
dpkg --get-selections > package_list
要在另一个系统上恢复该列表:
cat package_list | sudo dpkg --set-selections && sudo apt-get dselect-upgrade
跨架构移动意味着某些软件包不可用。它们将被忽略;例如,在32位系统上无法安装ia32-libs
。如果您从x86-64移动到x86,则将忽略该选择。
有趣的是,我一直将SO作为一个howto存储库(写一个问题,然后选择自己的答案),但在我写自己的答案的时间里,竟然被别人抢先了三次!
无论如何,这是我的建议:
使用dpkg的--get-selections和--set-selections选项来捕获和选择当前安装的软件包。
首先,在旧系统上导出当前软件包列表:
sudo dpkg --get-selections > mypackages.txt
然后选择此列表作为要在新系统上安装的软件包:
sudo dpkg --set-selections < mypackages.txt
为了节省下载时间,您可以将apt缓存目录复制过去:/var/cache/apt
最后,告诉apt下载并安装所选的软件包:
sudo apt-get dselect-upgrade
如果你(像我一样)在系统出问题之前没有做过这个操作,那么你可以使用live-cd或其他安装介质引导系统,并使用chroot命令来获取此信息。
sudo chroot /path/to/old/system /bin/bash
然后执行 dpkg --get-selections
命令,你可以使用生成的文件来设置你的新系统。
我不确定这是否是一个答案,但我刚刚发现了aptitude-create-state-bundle命令的存在。没错,就是一个命令。请查看man页面。
这是我通常解决类似问题(多次迁移到新笔记本电脑)的方法。
除了其他答案中提到的方法外,还有两个补充:这将移动您的update-alternatives
和debconf
设置,这些设置往往需要很长时间才能意识到它们没有被转移。
在旧系统上备份:
sudo apt-get install dselect debconf-utils
mkdir system-selections
update-alternatives --get-selections > system-selections/alternatives-selections
dpkg --get-selections '*' > system-selections/dpkg-selections
sudo debconf-get-selections > system-selections/debconf-selections
将配置目录复制到新系统 ("scp -r oldsystem:system-selections ~
"):
sudo apt-get install dselect debconf-utils
sudo dselect update
sudo dpkg --set-selections < system-selections/dpkg-selections
sudo debconf-set-selections < system-selections/debconf-selections
sudo apt-get -u dselect-upgrade
sudo update-alternatives --set-selections < system-selections/alternatives-selections
此外,您可以使用相同的方法定期备份您的主目录和上面提到的系统选择
到远程存储。因此,在笔记本电脑损坏/丢失的情况下,构建类似的系统非常快速。
如果您想记录已安装的所有使用apt-get安装的内容,请运行以下命令:
dpkg -l|awk '/^ii\s*(.*)\s*/ {print $2}'|packages.txt
#!/bin/sh
for p in $(cat packages.txt); do apt-get install $p; done
注意事项:
1)由于您从64位转换为32位,某些软件包可能不兼容。在运行上述脚本之前,请在packages.txt中使用grep查找“64”,并在需要时查找替代方案。
2)您安装的任何源代码,都需要记录下来并再次从源代码安装。
祝好运!
sudo apt-get install dselect
dpkg --get-selections | grep -v deinstall > ubuntu-files
sudo apt-get update
sudo apt-get dist-upgrade
dpkg --set-selections < ubuntu-files
sudo dselect
这将打开一个dselect会话。键入“I”,并允许dselect安装在您的ubuntu-files文档中列出的所有软件包。完成后,键入“Q”并按ENTER键退出dselect。
sudo dselect update
。如果没有执行此命令,在运行apt-get dselect-upgrade
时会出现以下错误:dpkg: warning: package not in database at line ...
详见 http://askubuntu.com/questions/727067/package-not-in-database-when-restoring-with-dpkg-set-selections - Bathz