在多台计算机之间同步apt-get安装


11

有没有办法在多台PC之间同步我的安装(和删除)?

最好使用保管箱-因为我已经使用它来保持文件同步。

我想到了apt-get installapt-get remove命令的别名,该命令将参数存储到文件中(一个用于安装,一个用于删除),另一个命令读取文件中的所有条目并执行相应的命令。这是现实的方法吗?

Answers:


7

您可以使用puppet创建配置文件来指定应安装的软件包,还可以使用Dropbox而不是puppetmaster服务器在计算机之间同步puppet配置,以及执行cron作业以定期运行puppet并实现任何配置更改。


对于少数机器来说,这是一个好主意。在较大的环境中,您绝对应该有一个puppetmaster。在我工作的地方,我们管理着数以千计的伪装机器。
Ed Manet

9

我不知道是否有更好的方法(可能有),但是根据您需要的规模,您可以对部分机器使用aptitude的搜索功能。它使您可以搜索与模式匹配的软件包。因此,aptitude search '~i'为您提供了所有已安装的软件包

但是,我们需要更进一步。软件包管理器喜欢知道您直接请求了哪些软件包,以及由于其他软件包而被拉入了哪些软件包。没有这些信息,丑陋的事情就会发生。因此,我们可以扩展该搜索模式来选择未自动安装的软件包:aptitude search '!~M ~i'

Aptitude参考手册中详细介绍了搜索功能。

现在,您具有要安装的软件包列表。您可以根据需要通过将-F标志传递给该命令来格式化输出,例如-F'%p'以获得仅包含程序包名称的列表。


例如,您可以在计算机1上运行此命令:

aptitude -F "%c %p" --disable-columns search '!~M ~i' | awk -F " " '{ print "apt-get -y install " $2 }' > aptshell.sh

然后将新创建的aptshell.sh文件复制到计算机2上,并在计算机2上使用此命令在此处运行该文件:

sudo sh aptshell.sh

然后,以原始机器2作为新机器1,并将原始机器1作为新机器2重复该过程。现在,每台计算机都具有以前仅在另一台计算机上的所有软件包。


包括版本将非常有用...例如,机器1可能保留了版本,而机器2应该反映出这一点
Rondo

例如,aptitude -F“%c%p%V” --disable-columns搜索'!〜M〜i'| awk -F“”'{打印“ apt-get -y install” $ 2“ =” $ 3}“> aptshell.sh
Rondo

2

这是一个古老的问题,但是由于没有人说过,您可以使用dpkg和cron来做一些事情。设置一个cron作业,以dpkg的get-selections和set-selections命令执行一些巧妙的操作。

dpkg --set-selections < ~/Dropbox/selections.dpkg


dpkg --get-selections > ~/Dropbox/selections.dpkg

这不是一个建议的解决方案,您必须找出某种方法来确保每当在两台计算机上进行更改时都对selections.dpkg进行更新...


2

Ubuntu软件中心具有一项功能,可在多台计算机之间同步已安装的软件包。它使用您的Ubuntu One帐户保存软件包。只需选择File > Sync Between Computers...并使用您的Ubuntu One帐户登录。

将软件包与Ubuntu软件中心同步

当前,它的功能受到某种程度的限制,例如,它仅支持默认软件包(不支持ppas),并且您必须手动选择要安装的软件包(这可以看作是一项积极的功能)。有关详细说明,请参阅本文


-2

您将无法使用保管箱来同步软件包安装。

Synaptic确实有一种保存软件包下载列表的方法,但是我不确定它可以处理“所有已安装的软件包”的情况,而不仅仅是“这是我这次要下载的软件包”的情况。


-1(因为您的假设不正确),问题描述了一个实现过程,该过程使用安装/删除列表,他只是在询问是否存在现实的实现,每个问题描述下拉框仅是用于交换同步列表的媒介
若奥·平托
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.