将手动安装的软件列表从一台服务器复制到另一台相同版本的服务器

将手动安装的软件列表从一台服务器复制到另一台相同版本的服务器

我有 2 台服务器,假设服务器1服务器2

服务器1很久以前由某人配置,它有多个包,并且我们的应用程序对这些包有太多依赖。所以我想在新服务器中维护同一套包即 Server2以确保我们的应用程序顺利运行。

我使用下面的命令列出所有软件包服务器1

 dpkg --get-selections > ~/Package.list

其中给出了所有软件包列表

accountsservice                                 install
acpid                                           install
adduser                                         install
amd64-microcode                                 install
...
...

我将上述包裹清单复印一份服务器2并尝试使用命令安装这些软件包

sudo dpkg --set-selections < ~/Package.list

但它说

dpkg: warning: package not in status nor available database at line 2: acpid
dpkg: warning: package not in status nor available database at line 4: amd64-microcode
dpkg: warning: package not in status nor available database at line 12: apt-transport-https
dpkg: warning: package not in status nor available database at line 14: apt-xapian-index
...
...

还有其他方法可以在两个服务器中维护相同的软件包吗?

两者都是相同的操作系统,但版本不同(服务器 1:Ubuntu 14.04 和服务器 2:Ubuntu 20.04),我只想要用户安装的软件包

更新:

apt list --installed

上述命令显示类似

accountsservice/trusty-updates,now 0.6.35-0ubuntu7.3 amd64 [installed]
acpid/trusty,now 1:2.0.21-1ubuntu2 amd64 [installed]
adduser/trusty,now 3.113+nmu3ubuntu3 all [installed]
amd64-microcode/trusty-updates,now 3.20180524.1~ubuntu0.14.04.2+really20130710.1ubuntu1 amd64 [installed,automatic]
apache2/trusty-updates,trusty-security,now 2.4.7-1ubuntu4.22 amd64 [installed]
...

它显示带有版本的包,我是否可以保存此输出的结果并运行服务器2这样我就可以拥有相同版本的相同包。

答案1

dpkg 列表包含所有应用程序,但只会安装不同的应用程序。通常最好编辑掉旧内核。

从旧安装

dpkg --get-selections > ~/my-packages

从新安装开始:

sudo apt-get -y update
sudo apt-get dselect-upgrade
#IF you get this error:
dpkg: warning: package not in database
sudo apt-get install dselect
sudo dselect 
   -> Update
   -> Install

您可以使用 aptitude 获取您可能需要安装的所有手动安装的软件包的表格列表:

aptitude search '~i!~M'

顶级应用程序:

aptitude --disable-columns -F 'no_dependents %p' search '~i!~M!~R(~i)'

但您可能需要将安装添加到每一行。

如何列出所有已安装的软件包

此外还介绍如何列出您安装的应用程序。

如何列出所有已安装的软件包

答案2

如果这是我的系统,我会这样做:

用户安装的软件包由 apt-marking 进行跟踪(请参阅man apt-mark)。

然而,有一个小问题:Ubuntu 安装程序 apt-marks一切在 Ubuntu 的常规安装中手动安装。这是一项安全措施,这样人们就不会错误地卸载他们的桌面。

所以它(有点)是简单的减法:所有手动包的列表减去库存安装包的列表。

  1. 获取 14.04 系统上标记为“manual”的软件包列表。

    apt-mark showmanual > server1
    
  2. 启动一个安装了全新 Ubuntu 14.04 的虚拟机,并执行相同的操作。

    apt-mark showmanual > fresh
    
  3. 比较两个文件。

    diff --suppress-common-lines fresh server1
    
  4. 逐行检查生成的简短列表。您必须剔除内核软件包、调查已删除、重命名或以其他方式更改的软件包、添加不再属于常规安装的软件包等。没有简单或自动化的方法来执行此操作。

相关内容