Jira (PUP-11125) WorkingDirectory is missing in puppet.service

5 views
Skip to first unread message

Vladislav Pozniak (Jira)

unread,
Jun 24, 2021, 5:10:04 AM6/24/21
to puppe...@googlegroups.com
Vladislav Pozniak created an issue
 
Puppet / Bug PUP-11125
WorkingDirectory is missing in puppet.service
Issue Type: Bug Bug
Affects Versions: PUP 7.7.0
Assignee: Unassigned
Created: 2021/06/24 2:09 AM
Priority: Normal Normal
Reporter: Vladislav Pozniak

Puppet Version: 7.7.0
OS Name/Version: CentOS 7 (with CloudLinux)

Evaluation times of maually running puppet agent -t and running automatically via service are different.

If manually, I see in reports total 25s and 5s for file category. Via service - total 120s and 90s of them for file

I made strace of puppet when running automatically and noticed that it's workdir is / and puppet somewhy recursievely reading files in all folders, for example, kernel firmware modules:

231809 12:54:12 openat(AT_FDCWD, "lib/modules/3.10.0-962.3.2.lve1.5.28.el7.x86_64/kernel/drivers/firmware", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 12

Nothing like that with manual run.

When I added parameter in /usr/lib/systemd/system/puppet.service 

WorkingDirectory=/opt/puppetlabs/puppet/bin/

evaluation time reduced notably and became also 25s in total.

Desired Behavior:

Maybe WorkingDirectory in service file should be defined and puppet agent packaged with it?

 

Actual Behavior:

My workaround is not permanent for the moment because puppet.service overwrites during puppet-agent package updates.

Add Comment Add Comment
 
This message was sent by Atlassian Jira (v8.13.2#813002-sha1:c495a97)
Atlassian logo

Josh Cooper (Jira)

unread,
Jun 28, 2021, 3:42:02 PM6/28/21
to puppe...@googlegroups.com
Josh Cooper commented on Bug PUP-11125
 
Re: WorkingDirectory is missing in puppet.service

I can repro on redhat7 using 7.7.0. It seems we scan for the facter gemspec, then scan all of /lib, then continue scanning for the ffi gemspec. This could be an issue with the facter gemspec:

17250 open("/opt/puppetlabs/puppet/lib/ruby/gems/2.7.0/specifications/facter-4.2.0.gemspec", O_RDONLY|O_CLOEXEC) = 7
17250 newfstatat(AT_FDCWD, "bin/facter", 0x7ffc2f5c9b20, AT_SYMLINK_NOFOLLOW) = -1 ENOENT (No such file or directory)
17250 openat(AT_FDCWD, "lib", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 7
17250 newfstatat(AT_FDCWD, "lib/debug", {st_mode=S_IFDIR|0755, st_size=59, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 openat(AT_FDCWD, "lib/debug", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 8
17250 newfstatat(AT_FDCWD, "lib/debug/usr", {st_mode=S_IFDIR|0755, st_size=60, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 openat(AT_FDCWD, "lib/debug/usr", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 9
17250 newfstatat(AT_FDCWD, "lib/debug/usr/bin", {st_mode=S_IFDIR|0755, st_size=6, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 openat(AT_FDCWD, "lib/debug/usr/bin", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 10
17250 newfstatat(AT_FDCWD, "lib/debug/usr/sbin", {st_mode=S_IFDIR|0755, st_size=6, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 openat(AT_FDCWD, "lib/debug/usr/sbin", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 10
17250 newfstatat(AT_FDCWD, "lib/debug/usr/lib", {st_mode=S_IFDIR|0755, st_size=6, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 openat(AT_FDCWD, "lib/debug/usr/lib", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 10
17250 newfstatat(AT_FDCWD, "lib/debug/usr/lib64", {st_mode=S_IFDIR|0755, st_size=6, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 openat(AT_FDCWD, "lib/debug/usr/lib64", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 10
17250 newfstatat(AT_FDCWD, "lib/debug/bin", {st_mode=S_IFLNK|0777, st_size=7, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 newfstatat(AT_FDCWD, "lib/debug/lib", {st_mode=S_IFLNK|0777, st_size=7, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 newfstatat(AT_FDCWD, "lib/debug/lib64", {st_mode=S_IFLNK|0777, st_size=9, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 newfstatat(AT_FDCWD, "lib/debug/sbin", {st_mode=S_IFLNK|0777, st_size=8, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 newfstatat(AT_FDCWD, "lib/systemd", {st_mode=S_IFDIR|0755, st_size=4096, ...}, AT_SYMLINK_NOFOLLOW) = 0
17250 openat(AT_FDCWD, "lib/systemd", O_RDONLY|O_CLOEXEC|O_DIRECTORY) = 8
...
17250 open("/opt/puppetlabs/puppet/lib/ruby/gems/2.7.0/specifications/ffi-1.13.1.gemspec", O_RDONLY|O_CLOEXEC) = 13
17250 open("/opt/puppetlabs/puppet/lib/ruby/gems/2.7.0/specifications/hiera-3.7.0.gemspec", O_RDONLY|O_CLOEXEC) = 13

Here's a stack trace:

	50: from /opt/puppetlabs/puppet/bin/puppet:4:in `<main>'
	49: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require'
	48: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:83:in `require'
	47: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/command_line.rb:12:in `<top (required)>'
	46: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/command_line.rb:12:in `require_relative'
	45: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet.rb:42:in `<top (required)>'
	44: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet.rb:340:in `<module:Puppet>'
	43: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet.rb:340:in `require_relative'
	42: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/runtime.rb:1:in `<top (required)>'
	41: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/runtime.rb:1:in `require_relative'
	40: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/http.rb:1:in `<top (required)>'
	39: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/http.rb:9:in `<module:Puppet>'
	38: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/http.rb:26:in `<module:HTTP>'
	37: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/http.rb:26:in `require_relative'
	36: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/http/service/file_server.rb:1:in `<top (required)>'
	35: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/http/service/file_server.rb:1:in `require_relative'
	34: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/file_serving/metadata.rb:9:in `<top (required)>'
        33: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/file_serving/metadata.rb:14:in `<class:Metadata>'
	32: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector.rb:49:in `indirects'
	31: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector.rb:49:in `new'
	30: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/indirection.rb:110:in `initialize'
	29: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/indirection.rb:121:in `set_global_setting'
	28: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/indirection.rb:180:in `validate_terminus_class'
	27: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/indirector/terminus.rb:112:in `terminus_class'
	26: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/instance_loader.rb:49:in `loaded_instance'
	25: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/concurrent/lock.rb:10:in `synchronize'
	24: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/instance_loader.rb:54:in `block in loaded_instance'
	23: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload.rb:182:in `load'
	22: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload.rb:74:in `load_file'
	21: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload.rb:110:in `get_file'
	20: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload.rb:162:in `search_directories'
	19: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/autoload.rb:135:in `gem_directories'
	18: from /opt/puppetlabs/puppet/lib/ruby/vendor_ruby/puppet/util/rubygems.rb:48:in `directories'
	17: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:813:in `stubs'
	16: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:775:in `installed_stubs'
	15: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:782:in `map_stubs'
	14: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:782:in `flat_map'
	13: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:782:in `each'
	12: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:785:in `block in map_stubs'
	11: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:770:in `gemspec_stubs_in'
	10: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:770:in `select'
	 9: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/stub_specification.rb:206:in `valid?'
	 8: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/stub_specification.rb:137:in `data'
	 7: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/stub_specification.rb:195:in `to_spec'
	 6: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:1121:in `load'
	 5: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:1121:in `eval'
	 4: from /opt/puppetlabs/puppet/lib/ruby/gems/2.7.0/specifications/facter-4.2.0.gemspec:6:in `load'
	 3: from /opt/puppetlabs/puppet/lib/ruby/gems/2.7.0/specifications/facter-4.2.0.gemspec:6:in `new'
	 2: from /opt/puppetlabs/puppet/lib/ruby/2.7.0/rubygems/specification.rb:2006:in `initialize'
	 1: from /opt/puppetlabs/puppet/lib/ruby/gems/2.7.0/specifications/facter-4.2.0.gemspec:20:in `block in load'
/opt/puppetlabs/puppet/lib/ruby/gems/2.7.0/specifications/facter-4.2.0.gemspec:20:in `[]': Interrupt

Josh Cooper (Jira)

unread,
Jun 28, 2021, 4:06:01 PM6/28/21
to puppe...@googlegroups.com
Josh Cooper commented on Bug PUP-11125

This is a bug in the facter gemspec. When the gem is activated, it will glob the following directories relative to the current working directory:

https://github.com/puppetlabs/facter/blob/88a19dc80650fd99d98844ce967eab47792e9cfc/facter.gemspec#L17-L22

Reply all
Reply to author
Forward
0 new messages