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。
我尝试 运行 Ubuntu 19.10 上的厨师食谱,它在 Ubuntu 18.04.3 上按预期工作。在两个 Ubuntu 版本上,我使用 this website.
上提供的软件包安装了 chef 15.4.45-1execute '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。