我了解 Puppet 如何帮助设置服务器等,但你会使用 Puppet 来做类似的事情吗:
apt-get update && apt-get upgrade
我感觉答案是否定的,如果是这样的话,您建议采用什么样的自动化流程来完成这些任务?
假设我正在设置一个新的实例(代理)来连接到 Puppet,我该如何将我想在服务器上运行的多个命令打包在一起,以便在连接到 Puppet Master 之前做好准备?我希望我可以将所有命令写在一个文件中,然后以某种方式运行这个文件。
例如:
- apt-get 更新 && apt-get 升级
- 安装 ruby 和其他库
- 基本服务器封锁等等
答案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
答案3
Puppet 使用声明性语言,你可以用它根据所需的配置指定事情应该如何进行,然后方法过去实现这一点的办法由 puppet 来解决。因此,它不太适合不时地运行任意命令。
让 puppet 确保软件包已安装非常简单,但对于定期更新,我建议您让 puppet 在 root 的 cron 中添加一行以$ apt-get update && apt-get upgrade
定期执行。如果您想对应用哪些软件包进行细粒度控制,那么您可以考虑运行自己的 apt 存储库。