gpt4 book ai didi

ruby - Chef/Vagrant/Serverspec : specs ensuring that packages are installed fail, 但已安装

转载 作者:数据小太阳 更新时间:2023-10-29 08:59:58 25 4
gpt4 key购买 nike

从文档看来,使用 Serverspec 来验证软件包是否已安装应该非常简单,但我在使用 vimag 时遇到了一些有趣的问题(the_silver_searcher)。

我正在使用带有 kitchen-vagrant 插件的 Test Kitchen,并且有两个平台:ubuntu-1404centos-72。我的所有规范都通过了 Ubuntu,其中两个在 Centos 上失败了:vimag

vi

处理此安装的 Chef 代码非常简单:

打包“vim”

这是规范:

describe "Vim" do
describe package("vim") do
it { should be_installed }
end
end

同样,非常直接。但是,它在我的 Centos 构建上失败并出现以下错误:

 2) Vim Package "vim" should be installed
Failure/Error: it { should be_installed }
expected Package "vim" to be installed
/bin/sh -c rpm\ -q\ vim
package vim is not installed

然而,如果我登录到服务器,它肯定已安装:

▶ kitchen login all-centos-72
Last login: Sat Jul 2 17:53:30 2016 from 10.0.2.2
[vagrant@all-centos-72 ~]$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 10 2014 06:55:55)
[vagrant@all-centos-72 ~]$ which vim
/usr/bin/vim
[vagrant@all-centos-72 ~]$ sudo yum install -y vim
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: distro.ibiblio.org
* extras: mirror.us.leaseweb.net
* updates: mirror.eboundhost.com
Package 2:vim-enhanced-7.4.160-1.el7.x86_64 already installed and latest version
Nothing to do

广告

ag 更复杂,因为安装需要在 Centos 上从源代码构建,而在 Ubuntu 上它可以通过 apt-get 获得。这是 Recipe 的相关部分:

  bash "install Development Tools" do
code "yum -y groupinstall \"Development Tools\""
end

package %w(pcre-devel xz-devel)

target_dir = File.join("/", "usr", "local", "the_silver_searcher")

git "clone the ag repo" do
repo "https://github.com/ggreer/the_silver_searcher/"
revision "master"
destination target_dir
end

bash "install ag" do
not_if system("hash ag")

cwd target_dir
code <<-EOF
./build.sh
make install
EOF
end

这是规范:

describe "The Silver Searcher" do    
if host_inventory["platform"] == "ubuntu"
describe package("silversearcher-ag") do
it { should be_installed }
end
else
describe package("the_silver_searcher") do
it { should be_installed }
end
end
end

Centos 的失败:

 1) The Silver Searcher Package "the_silver_searcher" should be installed
Failure/Error: it { should be_installed }
expected Package "the_silver_searcher" to be installed
/bin/sh -c rpm\ -q\ the_silver_searcher
package the_silver_searcher is not installed

同样,如果我登录到 Centos VM,我可以使用 ag:

[vagrant@all-centos-72 ~]$ ag --version
ag version 0.32.0
[vagrant@all-centos-72 ~]$ which ag
/usr/local/bin/ag

如果我切换到 root 用户,这些命令也有效。

我试图通过以不同方式为 Centos 平台编写规范来欺骗系统:

  describe command("ag") do
its(:stderr) { should match /Usage: ag/ }
end

以上也不起作用,即使在登录时键入 ag(退出状态 1)确实会产生该使用内容。我最后一次尝试是:

describe file("/usr/local/bin/ag") do
it { should exist }
end

这行得通,但感觉 super hacky,好像没有必要。

有人在这里有推荐吗?这些包裹有什么我遗漏/做错了吗?我最初认为 ag 问题是唯一的 因为它是从源代码而不是包管理器安装的,但是 vim 使用包管理器安装,但仍然存在与 ag 相同的问题。

最佳答案

问题的答案分为两部分,一部分涉及 Serverspec 的工作方式,另一部分涉及各种 Linux 发行版如何处理包。

1) Serverspec 用户不应该假设任何不是由 package 资源名称字面上暗示的行为。通过系统包管理器以外的任何方式安装的应用程序将不会被拾取,并且应通过其他方式测试它们是否成功安装。正如问题中所述,这可能包括测试二进制文件是否存在。

2) 当开发人员安装了带有包管理器的应用程序时,他/她必须意识到不同 Linux 发行版上的包管理器有时(经常?)对同一个包有不同的名称。一个典型的例子是 Debian 系统上的 apache2 与 RedHat 系统上的 httpd。在问题中提到的特定情况下,vim 在 CentOS 上被识别为 vim-enhanced 即使 yum 接受 vim 作为安装时的名称(感谢@matt-schuchard 指出它们是链接的)。

还想感谢@Karen B 在对问题的评论中帮助我得出这些结论。

关于ruby - Chef/Vagrant/Serverspec : specs ensuring that packages are installed fail, 但已安装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38163142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com