代码之家  ›  专栏  ›  技术社区  ›  ryekayo

在测试厨房中以特定用户身份运行命令

  •  0
  • ryekayo  · 技术社区  · 7 年前

    我知道您可以在Chef recipes中运行“execute”模块,它包含一个cwd和用户参数,允许您在当前工作目录中以该用户的身份运行命令。这就是我在代码中所做的:

    execute 'rpmdev-setuptree' do
       user 'rpmbuild'
       cwd '/home/rpmbuild'
       live_stream true
       action :run
    end
    

    我一直在以root用户身份执行此命令或显式更改目录(即执行“cd/home/rpmbuild&rpmdev setuptree”),但这不起作用。Chef似乎下定决心,无论我做什么,都要在/根目录下运行此命令。为什么会这样?请注意,我一直在做:

    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
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   coderanger    7 年前

    您确定问题是工作目录而不是 rpmdev-setuptree 正在尝试使用 $HOME 为了什么?由于各种不太好的原因,我们不会自动设置 $主页 当以其他用户身份运行时,可能需要添加 environment 'HOME' => '/home/rpmbuild'