如何使用 Ruby 脚本安装 ClamAV,并在同一脚本中进行配置?

Posted

技术标签:

【中文标题】如何使用 Ruby 脚本安装 ClamAV,并在同一脚本中进行配置?【英文标题】:How to install ClamAV using Ruby script with configuration in same script? 【发布时间】:2016-12-06 15:15:10 【问题描述】:

我正在使用 Amazon opsworks 并努力通过单个脚本使其工作,我创建了一个名为 clamav.rb 的脚本。脚本内容为:

yum_package 'clamav' do
  action :install
end

yum_package 'clamav-update' do
  action :install
end

file_names = ['/etc/freshclam.conf']

file_names.each do |file_name|

text = File.read(file_name)

 replace = text.gsub("Example", "#Example")

  # To merely print the contents of the file, use:

  puts replace

  # To write changes to the file, use:

  File.open(file_name, "w") |file| file.puts replace 

end

execute "Run Freshclam" do

  command "/usr/bin/freshclam"

end

当我执行上面的脚本时,它卡住了一个错误:

[2016-08-01T13:02:36+00:00] ERROR: Running exception handlers
[2016-08-01T13:02:36+00:00] ERROR: Exception handlers complete
[2016-08-01T13:02:36+00:00] FATAL: Stacktrace dumped to /var/lib/aws/opsworks/cache.stage2/chef-stacktrace.out
[2016-08-01T13:02:36+00:00] ERROR: No such file or directory - /etc/freshclam.conf
[2016-08-01T13:02:36+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

但是当我将脚本分成两部分时,它运行得非常好,例如为 yum 包创建单独的脚本并为配置更改单独创建。

【问题讨论】:

【参考方案1】:

您被 Chef 的两遍加载模型所困扰。在代码中的那个时候,还没有安装包。查看https://coderanger.net/two-pass/ 了解更多详细信息,但要解决您的实际问题,请使用line 食谱,该食谱具有用于在文件中进行此类搜索和替换的资源,它将为您正确处理排序。

【讨论】:

我是新手,能否请您简要介绍一下步骤 不,请查看 line cookbook 的自述文件,它解释了如何使用其资源。【参考方案2】:

我解决了这个问题,下面是解决方法

代码:用这个替换了我的旧代码

File.open('/etc/freshclam.conf', "r") 做 |aFile| 如果一个文件 text = File.read('/etc/freshclam.conf') replace = text.gsub("Example", "#Example") # 要仅打印文件的内容,请使用: 放替换 # 要将更改写入文件,请使用: File.open('/etc/freshclam.conf', "w") |file| file.puts 替换

否则 提出“无法打开文件!” 结束

结束

【讨论】:

以上是关于如何使用 Ruby 脚本安装 ClamAV,并在同一脚本中进行配置?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 CENTOS 上安装 PHP clamav [关闭]

如何从ruby脚本中安装rubygem并在之后需要这个gem?

如何使用ClamAV扫描病毒

GSheet的Google应用程序脚本-在B列上查找今天的日期,并在同一行的C列上写当前时间

clamav 杀毒软件安装及使用配置

ClamAV病毒软件的安装和使用