我想获取一个系统上安装的软件包列表,并将它们全部安装在另一个系统上。
我知道这可以给我一个所有已安装包的列表,我可以在目标系统上将其dpkg --get-selections
导入。但是,有些已安装的包是我在本地自己构建的(例如使用 checkinstall),并且无法从存储库中找到。当无法在存储库中找到这些包时,该过程将失败。dpkg --set-selections
dpkg --set-selections
那么有没有办法可以过滤生成的列表,dpkg --get-selections
以便它只包含当前安装的版本在我当前的存储库中可用吗?
答案1
我相信软件中心现在有一项功能,可以在计算机之间同步。如果该功能可以正确处理丢失的软件包,那么它就可以解决您的问题。
这里的问题是dpkg
无法识别存储库,只能识别已安装的软件包。您可以通过运行 来查看存储库中是否有软件包apt-cache policy $package
。如果您在 中看到存储库Version Table
,则表示该软件包可用。
那么,这个怎么样?虽然很慢,但应该可以工作:
dpkg --get-selections '*' \
| while read line; do
apt-cache policy $(echo "$line" | cut -f1 ) \
| grep -q 'http://' \
&& echo "$line"
done
答案2
使用以下命令
dpkg --get-selections > installed-software
它将在你的主目录中创建一个名为installed-software的文件
在新系统上
dpkg --set-selections < installed-software
这将读取选择并安装