如何将“ dpkg --get-selections”过滤为仅存储库中可用的软件包?


9

我想获得一个安装在一个系统上的软件包列表,然后将它们全部安装在另一个系统上。

我知道这dpkg --get-selections可以给我列出所有可以安装到dpkg --set-selections目标系统上的软件包的列表。但是,有些已安装的软件包是我在本地构建的(例如使用checkinstall),无法从存储库中获得。dpkg --set-selections当无法在存储库中找到这些软件包时,该过程将失败。

那么,有什么方法可以过滤生成的列表dpkg --get-selections,使其仅包含当前存储库中当前安装版本可用的软件包?

Answers:


9

我相信这些天软件中心具有在计算机之间进行同步的功能。如果该程序可以正确处理丢失的程序包,则可以解决您的问题。

这里的问题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

这将显示进度并将其写入文件:total=$(dpkg --get-selections '*'|wc -l); i=0; dpkg --get-selections '*' | while read line; do i=$(($i+1)); apt-cache policy $(echo "$line" | cut -f1 ) | grep -q 'http://' && echo "$i/$total $line"; echo $line>>/var/tmp/dpkg-selection.list; done
rubo77 '19

-4

使用以下命令

dpkg --get-selections > installed-software

它将在您的主目录中创建一个名为installed-software的文件

在新系统上

dpkg --set-selections < installed-software

这将读取选择并安装


3
我认为您没有读过这个问题。
瑞安·汤普森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.