我知道您可以在Chef配方中运行'execute'模块,它包含一个cwd和user参数,允许您在当前工作目录中以该用户身份运行命令。这就是我在代码中所做的:
execute 'rpmdev-setuptree' do
user 'rpmbuild'
cwd '/home/rpmbuild'
live_stream true
action :run
end
我一直在以root身份执行此命令的不同变体或显式更改目录(即执行'cd / home / rpmbuild&& rpmdev-setuptree),但这不起作用。无论我做什么,Chef似乎都决定在/ root目录中运行此命令。为什么会这样?请注意,我一直在做:
execute 'cd /home/rpmbuild && rpmdev-setuptree' do
user 'rpmbuild'
cwd '/home/rpmbuild'
live_stream true
action :run
end
或
execute 'sudo su - rpmbuild && rpmdev-setuptree' do
user 'root'
cwd '/home/rpmbuild'
live_stream true
action :run
end
有人能告诉我为什么会这样吗?我正在尝试在/ home / rpmbuild目录中运行rpmdev-setuptree,以便它构建路径,但它始终在/ root目录中运行此命令。
输出在我运行的代码段之间有所不同,有些代码在没有输出的情况下完成。但是当我尝试单独使用rpmdev-setuptree时我没注意到它会:
[execute] touch: cannot touch ‘/root/.rpmmacros’: Permission denied
grep: /root/.rpmmacros: No such file or directory
/bin/rpmdev-setuptree: line 43: [: -lt: unary operator expected
grep: /root/.rpmmacros: No such file or directory
/bin/rpmdev-setuptree: line 57: [: -lt: unary operator expected
grep: /root/.rpmmacros: No such file or directory
/bin/rpmdev-setuptree: line 75: [: -lt: unary operator expected
mkdir: cannot create directory ‘/root/rpmbuild’: Permission denied
mkdir: cannot create directory ‘/root/rpmbuild’: Permission denied
mkdir: cannot create directory ‘/root/rpmbuild’: Permission denied
mkdir: cannot create directory ‘/root/rpmbuild’: Permission denied
mkdir: cannot create directory ‘/root/rpmbuild’: Permission denied
答案 0 :(得分:1)
您确定问题是工作目录而不是rpmdev-setuptree
正在尝试使用$HOME
吗?出于各种不太好的原因,我们在以其他用户身份运行时不会自动设置$HOME
,因此您可能还需要添加environment 'HOME' => '/home/rpmbuild'
。