Forum: CFEngine Help
Subject: Cfengine isn't discovering all of your Solaris packages? This is why.
Author: [email protected]
Link to topic: https://cfengine.com/forum/read.php?3,23948,23948#msg-23948
Last week, I worked with Eystein Stenberg and Diego Zamboni on an issue where a
certain number of Solaris packages were not being discovered by the Cfengine
package manager. In the cfengine_stdlib.cf standard library, a body exists
for dealing with Solaris packages:
Unmodified, you'll find this:
body package_method solaris (pkgname, spoolfile, adminfile)
{
package_changes => "individual";
package_file_repositories => {
"/var/cfengine/inputs/config-solaris/PKGS" };
package_list_command => "/usr/bin/pkginfo -l";
package_multiline_start => "\s*PKGINST:\s+[^\s]+";
package_list_name_regex => "\s*PKGINST:\s+([^\s]+)";
package_list_version_regex => "\s*VERSION:\s+([^\s]+)";
package_list_arch_regex => "\s*ARCH:\s+([^\s]+)";
package_installed_regex =>
"\s*STATUS:\s*(completely|partially)\s+installed.*";
package_name_convention => "$(name)";
package_add_command => "/usr/sbin/pkgadd -n -a $(adminfile) -d
$(spoolfile)";
package_delete_command => "/usr/sbin/pkgrm -n -a $(adminfile)";
package_verify_command => "/usr/bin/pkginfo";
}
I noticed that several of our "internally built" packages were not being
discovered. This was due to whitespace not being gobbled up by the following:
package_multiline_start => "\s*PKGINST:\s+[^\s]+";
package_list_name_regex => "\s*PKGINST:\s+([^\s]+)";
package_list_version_regex => "\s*VERSION:\s+([^\s]+)";
So in short, add a .* to the end of these statements like so:
package_multiline_start => "\s*PKGINST:\s+[^\s]+.*";
package_list_name_regex => "\s*PKGINST:\s+([^\s]+).*";
package_list_version_regex => "\s*VERSION:\s+([^\s]+).*";
This may help the Cfengine package parser pick up packages that it didn't
detect before. This is my full Solaris package template:
body package_method solaris (pkgname, spoolfile, adminfile)
{
package_changes => "individual";
package_list_command => "/usr/bin/pkginfo -l";
package_multiline_start => "\s*PKGINST:\s+[^\s]+.*";
package_list_name_regex => "\s*PKGINST:\s+([^\s]+).*";
package_list_version_regex => "\s*VERSION:\s+([^\s]+).*";
package_list_arch_regex => "\s*ARCH:\s+([^\s]+).*";
package_installed_regex =>
"\s*STATUS:\s*(completely|partially)\s+installed.*";
package_name_convention => "$(name)";
package_add_command => "/usr/sbin/pkgadd -n -a $(adminfile) -d
$(spoolfile)";
package_delete_command => "/usr/sbin/pkgrm -n -a $(adminfile)";
package_verify_command => "/usr/bin/pkginfo";
}
Hope this helps someone else running into an issue with internally built
Solaris packages not being detected in their promises.
Cheers
Mike
_______________________________________________
Help-cfengine mailing list
[email protected]
https://cfengine.org/mailman/listinfo/help-cfengine