#!/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=) { chop($x); ($param,$value)=split(/=/,$x); $self->{"params"}->{$param}=$value; } close(F); return(($self->{"params"}->{"PKG"}?1:undef)); } # # Exit Block # 1; # # POD Block # =head1 NAME Solaris::Package - Perl module to obtain basic Solaris Package Info =head1 SYNOPSIS use Solaris::Package; $x=Solaris::Package::new(-directory => "/tmp/install", -file => "SUNWm64.u"); =head1 DESCRIPTION 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. =head1 CONSTRUCTOR METHOD =over 4 =item $pkg=Solaris::Package::new(-directory => $dir, -file => $pkgDir); 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. =back =head1 OBJECT METHODS =over 4 =item pkg() =item name() =item desc() =item pkVersion() =item arch() =item email() =item hotline() =item vendor() =item basedir() =item pstamp() =item instdate() =item patchList() 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. =back =over 4 =item pkgInfo() 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. =back =over 4 =item paramDump() Returns a hash table with every parameter in the pkginfo file and every corresponding value =back =head1 AUTHOR Chris Josephes, chrisj@onvoy.com =head1 SEE ALSO The pkginfo(4) manpage.