| sol-inst documentation | Contained in the sol-inst distribution. |
Solaris::Package - Perl module to obtain basic Solaris Package Info
use Solaris::Package; $x=Solaris::Package::new(-directory => "/tmp/install", -file => "SUNWm64.u");
Solaris::Package is a class module that reads in the information from a pkginfo file for a Solaris package. It can be spawned from a Solaris::InstallDB object, or it can be used as a standalone object.
The -directory arguement specifies what package directory to search in, the -file directory points to the directory name the package is in.
Optionally, you can specify a pointer to a Solaris::InstallDB object by using the -installDB arguement.
Two points to clarify:
This object only works on Solaris packages in the directory format, not the data stream format, so the -file arguement is really specifying a filesystem directory.
The name of a package is not necessarily the same as the name of the file of the package. The SUNWm64 example at the beginning of this documentation is an example of a package with a different directory name.
Each of these methods returns their corresponding pkginfo parameter. Note that patchList() returns an array type, with each element listing a single patch. The pkVersion() method returns the package version, and should not be confused with the version() method.
Returns a simplified output similar to the "pkginfo" command, but does not report filesystem contents. That can be achieved by using the Solaris::Contents object.
Returns a hash table with every parameter in the pkginfo file and every corresponding value
Chris Josephes, chrisj@onvoy.com
The pkginfo(4) manpage.
| sol-inst documentation | Contained in the sol-inst distribution. |
#!/usr/local/bin/perl # # Solaris::Package # Obtain package information from a Solaris system # Chris Josephes 20000929 # # # Package Definition # package Solaris::Package; use strict; use vars qw($VERSION); $VERSION=0.9; # # Constructor Method # sub new { my (@args)=@_; my ($object)={}; bless ($object); $object->_init(@args); return($object); } sub version { return($VERSION); } # # Class Methods # sub pkg { my ($self)=@_; return($self->{"params"}->{"PKG"}); } sub name { my ($self)=@_; return($self->{"params"}->{"NAME"}); } sub desc { my ($self)=@_; return($self->{"params"}->{"DESC"}); } sub pkVersion { my ($self)=@_; return($self->{"params"}->{"VERSION"}); } sub arch { my ($self)=@_; return($self->{"params"}->{"ARCH"}); } sub email { my ($self)=@_; return($self->{"params"}->{"EMAIL"}); } sub hotline { my ($self)=@_; return($self->{"params"}->{"HOTLINE"}); } sub vendor { my ($self)=@_; return($self->{"params"}->{"VENDOR"}); } sub basedir { my ($self)=@_; return($self->{"params"}->{"BASEDIR"}); } sub pstamp { my ($self)=@_; return($self->{"params"}->{"PSTAMP"}); } sub instdate { my ($self)=@_; return($self->{"params"}->{"INSTDATE"}); } sub paramDump { my ($self)=@_; return(%$self->{"params"}); } sub pkgInfo { my ($self)=@_; my ($param,$fmt); $fmt="%10s: %s\n"; foreach $param ("PKGINST","NAME","CATEGORY","ARCH","VERSION","BASEDIR", "VENDOR","DESC","PSTAMP","INSTDATE","HOTLINE") { if ($self->{"params"}->{$param}) { printf($fmt,$param,$self->{"params"}->{$param}); } } return(); } sub patchList { my ($self)=@_; my (@list); (@list)=split(/\s+/,$self->{"params"}->{"PATCHLIST"}); return(@list); } # # Hidden Class Methods # # Solaris::Package currently only accepts a package name as an arguement # however, that will change. sub _init { my ($self,@args)=@_; while (@args) { my ($x); ($x)=shift(@args); if ($x eq "-installDB") { $self->{"installDB"}=shift(@args); } elsif ($x eq "-directory") { $self->{"directory"}=shift(@args); } elsif ($x eq "-file") { $self->{"file"}=shift(@args); } } unless ($self->_readPkgInfo()) { return(undef); } return(); } sub _readPkgInfo { my ($self)=@_; my ($pdir,$pfile,$x,$param,$value); if ($self->{"directory"} && $self->{"file"}) { $pdir=$self->{"directory"}; $pfile=$self->{"file"}; } else { print("Insufficient Info to find package $self->{name}\n"); } open (F, $pdir."/".$pfile."/pkginfo") || return(undef); while ($x=<F>) { chop($x); ($param,$value)=split(/=/,$x); $self->{"params"}->{$param}=$value; } close(F); return(($self->{"params"}->{"PKG"}?1:undef)); } # # Exit Block # 1; # # POD Block #