Ubuntu 19.10 的主厨:损坏的食谱

Chef on Ubuntu 19.10: broken recipe

我尝试 运行 Ubuntu 19.10 上的厨师食谱,它在 Ubuntu 18.04.3 上按预期工作。在两个 Ubuntu 版本上,我使用 this website.

上提供的软件包安装了 chef 15.4.45-1
execute 'Git LFS: Install user configuration' do
  command 'git lfs install'

  user 'myusername'

  not_if 'git config --global filter.lfs.required | grep "true"', :user => 'myusername'
end

我正在使用此命令启动 Chef 客户端:sudo chef-client -z -o "recipe[my-cookbook::my-recipe]"

输出:

  * execute[Git LFS: Install user configuration] action run

    ================================================================================
    Error executing action `run` on resource 'execute[Git LFS: Install user configuration]'
    ================================================================================

    Mixlib::ShellOut::ShellCommandFailed
    ------------------------------------
    Expected process to exit with [0], but received '2'
    ---- Begin output of git lfs install ----
    STDOUT: WARNING: Error running /usr/lib/git-core/git 'config' '--global' '--replace-all' 'filter.lfs.required' 'true': 'warning: unable to access '/root/.gitconfig': Permission denied
    warning: unable to access '/root/.config/git/config': Permission denied
    error: could not lock config file /root/.gitconfig: Permission denied' 'exit status 255'
    Run `git lfs install --force` to reset git config.
    STDERR: 
    ---- End output of git lfs install ----
    Ran git lfs install returned 2

显然 chef 以 root 用户而非提供的用户 myusername.

执行了 not_if 守卫

我是不是漏掉了什么?

Chef 确实作为您的 myusername 执行了 not_if 子句。但是,这样做时,$HOME 环境变量并未更新为指向该用户的 HOME,而是保持为 /root.

因此,git 试图访问 root 主目录中的文件但失败了,因为 myusername 没有访问那里文件的权限。

要解决这个问题,您可以传递一个明确的 HOME 环境变量:

execute 'Git LFS: Install user configuration' do
  command 'git lfs install'

  user 'myusername'

  not_if 'git config --global filter.lfs.required | grep "true"', :user => 'myusername', :environment => { 'HOME' => '/home/myusername' }
end

有关有效参数的详细信息,请参阅 https://docs.chef.io/resource_common.html#arguments