【发布时间】:2010-09-16 07:15:16
【问题描述】:
我正在考虑从旧的 AMD64 迁移到新的 32 位 Intel 双核。安装不是问题,但我可以转移所有已安装的应用程序吗?我没去过 到目前为止,除了迁移到类似平台和文件系统的地方之外,能够在 Google 上找到任何东西。我不会更改文件系统,但平台会有所不同。 Gentoo 中“世界”文件的行中有什么东西吗?
【问题讨论】:
我正在考虑从旧的 AMD64 迁移到新的 32 位 Intel 双核。安装不是问题,但我可以转移所有已安装的应用程序吗?我没去过 到目前为止,除了迁移到类似平台和文件系统的地方之外,能够在 Google 上找到任何东西。我不会更改文件系统,但平台会有所不同。 Gentoo 中“世界”文件的行中有什么东西吗?
【问题讨论】:
您可以轻松保存软件包列表:查看“man dpkg”并搜索 --set-selections 和 --get-selections。
它的基本原理是保存包列表:
dpkg --get-selections > package_list
要在另一个系统上恢复该列表:
cat package_list | sudo dpkg --set-selections && sudo apt-get dselect-upgrade
跨架构移动意味着会有一些包不可用。它们将被忽略;例如,ia32-libs 将无法安装在 32 位系统上。如果您从 x86-64 迁移到 x86,该选择将被忽略。
【讨论】:
sudo dselect update 也可能是必需的。没有,我在运行apt-get dselect-upgrade 时遇到这些错误:dpkg: warning: package not in database at line ... 请参阅askubuntu.com/questions/727067/…
有趣的是,我在这里使用 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
【讨论】:
对于您使用 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 位,因此某些软件包可能不兼容。在运行上面的脚本之前,我会为 '64' grep packages.txt 并在需要时找到替代方案。
2) 您从源代码安装的任何内容,您都必须记下并再次从源代码安装。
祝你好运!
【讨论】:
我不确定这是否是一个答案,但我刚刚发现命令 aptitude-create-state-bundle 的存在。是的,这是一个命令。查看手册页。
【讨论】:
如果(像我一样)您在搞砸系统之前没有这样做,您可以启动到 live-cd 或其他安装,然后使用 chroot 获取此信息。
sudo chroot /path/to/old/system /bin/bash
然后跳dpkg --get-selections 跳舞,您可以使用生成的文件来设置您的新系统。
【讨论】:
这是我通常用来解决类似问题的方法(多次迁移到新笔记本电脑)。
除了这个问题的其他答案还有两个,这也会移动你的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
此外,您可以使用相同的方法定期将您的主目录和system-selections(如上所述)备份到远程存储。因此,如果您的笔记本电脑损坏/被盗,构建类似系统的速度非常快。
【讨论】:
我能想到的最佳方法是备份当前系统上已安装软件包的列表,然后使用该列表设置要在新系统上安装的软件包。关于如何备份和恢复您的包选择的一般说明:
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。
【讨论】: