Debugging execution error with vcsrepo

372 views
Skip to first unread message

Patrick Gibson

unread,
Dec 21, 2013, 9:33:45 PM12/21/13
to puppet...@googlegroups.com
I'm using the vcsrepo module to clone a git repo as a particular user, and I'm getting a puzzling error:

Debug: Executing '/usr/bin/su myuser -c "/usr/local/bin/git clone g...@git.myhostname.com:repos/myrepo.git /home/myuser/myrepo"'
Error: Execution of '/usr/bin/su myuser -c "/usr/local/bin/git clone g...@git.myhostname.com:repos/myrepo.git /home/myuser/myrepo"' returned 127: su: /usr/local/bin/git clone g...@git.myhostname.com:repos/myrepo.git /home/myuser/myrepo: No such file or directory

When I copy and paste the exact command and run it, it works fine. I can't figure out what would be complaining about "No such file or directory". Every executable and path mentioned in the command exists. 

My relevant classes look like this:

class sshd {
  file { "/etc/ssh/sshd_config":
    source => "puppet:///modules/sshd/sshd_config",
    notify => Service["sshd"]
  }

  file { "/etc/ssh/ssh_config":
    source => "puppet:///modules/sshd/ssh_config",
    notify => Service["sshd"]
  }

  service { "sshd":
    ensure => "running",
  }
}

class myuser {
  file { "/home/myuser/.ssh":
    ensure => "directory",
    mode   => "0700",
    owner  => "myuser",
    group  => "myuser",
  }

  file { "/home/myuser/.ssh/known_hosts":
    source => "puppet:///modules/myuser/.ssh/known_hosts",
    owner  => "myuser",
    group  => "myuser",
  }

  file { "/home/myuser/.ssh/id_rsa":
    source => "puppet:///modules/myuser/.ssh/id_rsa",
    mode   => "0600",
    owner  => "myuser",
    group  => "myuser",
  }

  vcsrepo { "/home/myuser/myrepo":
    require  => Class["sshd"],
    ensure   => present,
    provider => git,
    source   => 'g...@git.myhostname.com:repos/myrepo.git',
    revision => 'master',
    user     => 'myuser'
  }
}

Any pointers?

Patrick Gibson

unread,
Dec 21, 2013, 9:52:36 PM12/21/13
to puppet...@googlegroups.com
(I should mention this is on FreeBSD 9.2.)

Patrick Gibson

unread,
Dec 23, 2013, 3:12:40 PM12/23/13
to puppet...@googlegroups.com
If I manually clone the repo, I get a similarly puzzling error:

Error: /Stage[main]/myuser/Vcsrepo[/home/myuser/myrepo]: Could not evaluate: Execution of '/usr/bin/su myuser -c "/usr/local/bin/git config remote.origin.url"' returned 127: -su: /usr/local/bin/git config remote.origin.url: No such file or directory



On Saturday, 21 December 2013 18:33:45 UTC-8, Patrick Gibson wrote:

Patrick Gibson

unread,
Dec 24, 2013, 3:09:10 PM12/24/13
to puppet...@googlegroups.com
Does anyone have any advice on simulating the environment and conditions under which processes are run by Puppet? I'd really like to get the bottom of this, as other commands I'm running via other classes are working fine.

Thanks,

Patrick

Felix Frank

unread,
Dec 25, 2013, 10:47:39 AM12/25/13
to puppet...@googlegroups.com
Hi,

for what it's worth - the error seems to indicate that su considers
"/usr/local/bin/git config remote.origin.url" to be the name of an
executable file that contains a space.

I cannot fathom why this is inflicting you now, though.

jcbollinger

unread,
Jan 2, 2014, 10:24:34 AM1/2/14
to puppet...@googlegroups.com


On Wednesday, December 25, 2013 9:47:39 AM UTC-6, Felix.Frank wrote:
Hi,

for what it's worth - the error seems to indicate that su considers
"/usr/local/bin/git config remote.origin.url" to be the name of an
executable file that contains a space.


I agree that it looks like the whole command argument is being interpreted as a file name, but unless the su in question is very different from GNU su, that mistake is probably being committed by whatever shell su starts, not by su itself.  It is the shell's job to parse the command.  That distinction could be very important to tracing down the error.

According to its docs, GNU su uses the shell specified in the target user's passwd entry, falling back to /bin/sh if none is specified.  If the target user in this case has some weird shell configured, then perhaps it parses commands unfavorably.  On the other hand, if the user's shell is anything from the Bourne family (e.g. bash or zsh) then I would be inclined to guess that there is a problem related to the IFS environment variable.  On the third hand, [t]csh always splits words at blanks and tabs, so the problem I hypothesize should not occur if that's the configured shell.

I cannot speak directly to the environment Puppet provides to the su command, but in general Puppet provides a minimal environment to commands it spawns.


John

Bas van Meurs

unread,
May 30, 2014, 4:33:31 AM5/30/14
to puppet...@googlegroups.com
I've just encountered and fixed the exact same error message.

The repo (and the .git directory in it) contained files not owned by the user specfied in the vcsrepo command. Ensure the ownership of the directory before vcsrepo-ing it:

  file { "/home/myuser/myrepo":
    ensure  => directory,
    recurse => true,
    owner => 'myrepo',
    mode => 0774,
  }

  vcsrepo { "/home/myuser/myrepo":
    require  => [Class["sshd"], File['/home/myuser/myrepo']],
    ensure   => present,
    provider => git,
    source   => 'g...@git.myhostname.com:repos/myrepo.git',
    revision => 'master',
    user     => 'myuser'
  }


Op maandag 23 december 2013 21:12:40 UTC+1 schreef Patrick Gibson:
Reply all
Reply to author
Forward
0 new messages