Thanks for the insight. I've been investigating a bit deeper and found that this is likely an issue with the build of apache I'm using.
I've run into the same problem with a "squid version" facter script and found that, in the affected hosts, the squid binary had been compiled with the --enable-ssl --with-openssl=/usr/local/ssl flags. The directory specified in the --with-openssl option is not correct, which makes the execution fail when invoking in a non-interactive shell. I could not verify the compile flags for apache, but it's likely a similar scenario. Curiously enough, Facter::Util::Resolution.exec doesn't seem to like shell contructs like ';' and '.' (sourcing a script). I've found that sourcing the .profile file ('. /home/apache/.profile /usr/bin/squid -v') in a non-interactive shell makes it possible to execute the binaries, since it sets all the environment variables that are present in an interactive shell, but running it inside Facter::Util::Resolution.exec has no result (the command aborts with no output). The 'VAR=value some_command' trick won't work either. I'm running facter 1.5.8, could this be a bug or am I misinterpreting something? On Thursday, August 16, 2012 3:43:57 PM UTC+2, jcbollinger wrote: > > > > On Wednesday, August 15, 2012 4:12:52 AM UTC-5, André Fernandes wrote: >> >> I'm currently running a puppet master-client setup and using facter to >> gather information on the client hosts. >> However, I've run into a problem when trying to get the deployed apache >> version for some of the hosts. >> >> My custom fact script is as follows: >> >> Facter.add("apache_version") do >> setcode do >> if File.exist? '/bin/httpd' >> Facter::Util::Resolution.exec('/bin/httpd -v | >> /usr/local/bin/grep version | /usr/bin/cut -d: -f2 | /usr/bin/tr -d " "') >> end >> end >> end >> >> For some of the hosts, the /bin/httpd invocation will give the following >> error: ld.so.1: httpd: fatal: libssl.so.0.9.8: open failed: No such file or >> directory >> This same command runs without issues on a regular (bash) shell. >> >> This is usually indicative of a bad/missing LD_LIBRARY_PATH environment >> variable. > > > > That makes sense if you in fact rely on LD_LIBRARY_PATH. I would not > expect the system's httpd to do so. In any case, that premise should be > easy to test. > > > >> It seems that the Facter::Util::Resolution.exec invocation will spawn a >> new /usr/bin/sh shell session, with very few environment variables set >> (LD_LIBRARY_PATH is not one of them). >> Cross-checking with working hosts shows no differences, I inclusively >> have a different facter script that reports the output of 'env' and it's >> similar for both working and non-working hosts. >> > > > So it sounds like you're saying the LD_LIBRARY_PATH was a red herring. > Good. Nobody ought to be relying on LD_LIBRARY_PATH anyway, at least not > in production. > > > >> >> Has anyone had a similar issue, or has any idea of how to investigate >> further/work around the problem. Is there a way to explicitly set >> environment variables on Facter::Util::Resolution.exec invocations? >> > > > If the problem is not in fact (no pun intended) LD_LIBRARY_PATH, as you > seem to have shown, then I don't see the point. Nevertheless, since > Facter::Util::Resolution.exec is running the given command via the shell > (as is evident because pipes are recognized) you should be able to use the > standard mechanism of defining variables before the command: > > Facter::Util::Resolution.exec('myvar=needed_value do_something --switch1') > > >> I suspect that the cause for the different behaviours may not be caused >> by puppet/facter, but by some environmental (OS, shell, apache) issue. >> > > I concur. For example, it could be a security issue. The puppet agent > must run as a privileged user, but facter may drop privilege. Odd > permissions on the directory containing libssl might then cause httpd to be > unable to find it. Alternatively, you might get a similar effect if > SELinux (in enforcing mode) prevented facter from reading the needed > directory or file, whether or not facter drops privilege. > > > John > > -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To view this discussion on the web visit https://groups.google.com/d/msg/puppet-users/-/cB_v0ZK32woJ. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.