Puppet 用于配置管理,那么软件更新等等呢?

Puppet 用于配置管理,那么软件更新等等呢?

我了解 Puppet 如何帮助设置服务器等,但你会使用 Puppet 来做类似的事情吗:

apt-get update && apt-get upgrade

我感觉答案是否定的,如果是这样的话,您建议采用什么样的自动化流程来完成这些任务?

假设我正在设置一个新的实例(代理)来连接到 Puppet,我该如何将我想在服务器上运行的多个命令打包在一起,以便在连接到 Puppet Master 之前做好准备?我希望我可以将所有命令写在一个文件中,然后以某种方式运行这个文件。

例如:

  1. apt-get 更新 && apt-get 升级
  2. 安装 ruby​​ 和其他库
  3. 基本服务器封锁等等

答案1

嗯,特别是对于 APT,您可以配置许多日常工作,例如更新。只需查看/etc/cron.daily/apt您可以配置的变量列表,然后查看手册页以apt.conf了解如何操作。您最感兴趣的是这些:

#  APT::Periodic::Update-Package-Lists "0";
#  - Do "apt-get update" automatically every n-days (0=disable)
#    
#  APT::Periodic::Download-Upgradeable-Packages "0";
#  - Do "apt-get upgrade --download-only" every n-days (0=disable)
#
#  APT::Periodic::Download-Upgradeable-Packages-Debdelta "1";
#  - Use debdelta-upgrade to download updates if available (0=disable)
#
#  APT::Periodic::Unattended-Upgrade "0";
#  - Run the "unattended-upgrade" security upgrade script 
#    every n-days (0=disabled)
#    Requires the package "unattended-upgrades" and will write
#    a log in /var/log/unattended-upgrades

至于升级系统,请使用包unattended-upgrades

话虽如此,我更喜欢使用 Puppet 来控制哪些包必须保留在ensure => latest或 中ensure => version,以及控制各种源列表和包的 pin 号。

我想,可以使用如下配置:

cron { 'upgrade': command => 'apt-get update && apt-get upgrade' }

现在你提到做事调用 puppet 代理。你的意思是在第一次运行 puppet 代理之前吗?如果是这样,那么解决方案如下领班可能会对你有用。

在这里,我通过 Ganeti 管理我的虚拟主机,我们通过 Ganeti 的 instance-debootstrap 安装 puppet。我们还有一个小脚本,用于在旧服务器上安装 puppet。

最后,除非已经安装了自动化解决方案,否则无法使用自动化解决方案在现有服务器上安装 Puppet。我们自己的偏好是先安装 puppet,然后通过它分发其他任何东西。

答案2

我一直用cron-apt用于无人值守的自动更新。配置起来有点麻烦,但一旦设置好,它就可以正常工作。如果您将其与 sSMTP 配对,则可以通过电子邮件获得自动更新和/或通知。

在您的情况下,您可以使用 Puppet 来控制 cron-apt、sSMTP 和 crontab 配置文件。

这是我的标准设置...适当调整。

答案3

Puppet 使用声明性语言,你可以用它根据所需的配置指定事情应该如何进行,然后方法过去实现这一点的办法由 puppet 来解决。因此,它不太适合不时地运行任意命令。

让 puppet 确保软件包已安装非常简单,但对于定期更新,我建议您让 puppet 在 root 的 cron 中添加一行以$ apt-get update && apt-get upgrade定期执行。如果您想对应用哪些软件包进行细粒度控制,那么您可以考虑运行自己的 apt 存储库。

相关内容