NAME
FreeBSD::Pkgs - Reads the FreeBSD installed packaged DB.
VERSION
Version 0.2.0
SYNOPSIS
The following example prints out the package information.
use FreeBSD::Pkgs;
$pkgdb=FreeBSD::Pkgs->new;
$pkgdb->parseInstalled;
while(my ($name, $pkg) = each %{$pkgdb->{packages}}){
print $name."\nComment=".$pkg->{comment}."\n";
#prints the packages that require it
if (defined($pkg->{requiredby})){
my $requiredbyInt=0;
while (defined($pkg->{requiredby}[$requiredbyInt])){
print $name." required by ".$pkg->{requiredby}[$requiredbyInt]."\n";
$requiredbyInt++;
}
}
#if the extract-in-place option is set, print it
if (defined($pkg->{contents}{extract-in-place})){
print $name." is set to extract in place\n";
}
#if the extract-in-place option is set, print it
if (defined($pkg->{contents}{preserve})){
print $name." is set to preserve the old file\n";
}
#print the mtree
if (defined($pkg->{contents}{mtree})){
print $name." the mtree for this package is '".$pkg->{contents}{mtree}."'\n";
}
#print installed files and associated info
if (defined($pkg->{contents}{files})){
my @files=keys(%{$pkg->{contents}{files}});
my $filesInt=0;
while (defined($files[$filesInt])){
print $name." installs ".$files[$filesInt]." md5='".
$pkg->{contents}{files}{$files[$filesInt]}{MD5}."' ";
#prints the the group if there is a specific one for the file
if (defined($pkg->{contents}{files}{$files[$filesInt]}{group})) {
print " group='".$pkg->{contents}{files}{$files[$filesInt]}{group}."'";
}
#prints the the user if there is a specific one for the file
if (defined($pkg->{contents}{files}{$files[$filesInt]}{user})) {
print " user='".$pkg->{contents}{files}{$files[$filesInt]}{user}."'";
}
#prints the the mode if there is a specific one for the file
if (defined($pkg->{contents}{files}{$mfiles[$filesInt]}{mode})) {
print " mode='".$pkg->{contents}{files}{$files[$filesInt]}{mode}."'";
}
#prints the directory if it is not relative to the base
if (defined($pkg->{contents}{files}{$mfiles[$filesInt]}{cwd})) {
print " cwd='".$pkg->{contents}{files}{$files[$filesInt]}{cwd}."'";
}
#print if the file is set to be ignored
if (defined($pkg->{contents}{files}{$mfiles[$filesInt]}{ignore})) {
print " ignore='".$pkg->{contents}{files}{$files[$filesInt]}{ignore}."'";
}
#print if the file is set to be ignored
if (defined($pkg->{contents}{files}{$mfiles[$filesInt]}{ignore_inst})) {
print " ignore_inst='".$pkg->{contents}{files}{$files[$filesInt]}{ignore_inst}."'";
}
print "\n";
$filesInt++;
}
}
#prints the conflict information
my $conflictInt=0;
while (defined($pkg->{contents}{conflict}[$conflictInt])){
print $name." conflicts with ".$pkg->{contents}{conflict}[$conflictInt]."\n";
$conflictInt++;
}
#print dirrm stuff
my $dirrmInt=0;
while (defined($pkg->{contents}{dirrm}[$dirrmInt])){
print $name." conflicts with ".$pkg->{contents}{dirrm}[$dirrmInt]."\n";
$dirrmInt++;
}
print "\n";
}
FUNCTIONS
new
#creates a new object with the default settings
my $pkgdb=FreeBSD::Pkgs->new;
#creates a new package with the a specified pkgdb dir
my $pkgdb=FreeBSD::Pkgs->new({pkgdb=>'/var/db/pkg'});
#if this is true there is a error
if($pkgdb->error){
warn('Error:'.$pkgdb->error.': '.$pkgdb->errorString);
}
arguement keys
- pkgdb
-
If this key is defined, it uses this dir to use for the package db.
The same environmental variables as used by the package tools are respected.
parseContents
This parses the '+CONTENTS' file for a package. The only required is a string containing the contents of the file to be parsed.
args hash
files
A boolean controlling if file information is parsed or not.
my %contents=$pkgdb->parseContents($contentString, %args);
if($pkgdb->error){
warn('Error:'.$pkgdb->error.': '.$pkgdb->errorString);
}
parseInstalled
This reads all installed packages. The returned value is a boolean.
args hash
files
A boolean controlling if file information is parsed or not.
This will be passed to parseInstalledPkg and then parseContents.
$pkgdb->parseInstalled(%args);
#checks to see if it completed successfully
if($pkgdb->{error}){
print 'Error: '.$pkgdb->{error}."\n";
}
#checks to make sure it completed successfully using a if statement
if($pkgdb->parseInstalled(%args)){
print 'Error: '.$pkgdb->{error}."\n";
}
parseInstalledPkg
This parses the specified installed package.
args hash
files
A boolean controlling if file information is parsed or not.
This will be passed to parseContents.
my %pkg=$pkgdb->parseInstalledPkg($pkgname, %args);
if($error){
print "Error!\n";
}
Package Hash
This hash is contained in $pkgdb->{packages} or returned by $pkgdb-parseInstalledPkg. Each of it's key is name of a installed package and a hash. See the information below for key values of that hash.
- comment
-
This holds the package comment.
- contents
-
This contains a hash that contains the parsed contents of the '+CONTENTS' file. For additional information on this hash see the section '+CONTENTS Hash'.
- desc
-
This holds the description of the package.
- requiredby
-
This contains a array holding the a list of packages that require this package.
+CONTENTS Hash
This has is either contained in $pkgdb->{packages}{<packagename>}{contents} or returned by $pkgdb->parseContents.
- cwd
-
This is a string that contains the prefix for the package.
- mtree
-
This is a string that contains the mtree file to use for the package.
- requiredby
-
This is a array that contains a list of packages that requires this package.
- srcdir
-
See pkg_create(1) for @srcdir, as I can't think of a decent description.
- unexec
-
This is a array that contains the unexec lines.
- exec
-
This is a array that contains the exec lines.
- dirrm
-
This is a array of directories to remove.
- conflicts
-
This is a array that holds a list of conflicting packages.
- deps
-
This contains another hash. See the section 'deps Hash' for more information.
- comment
-
This is a array that contains comments that this module was not sure what to do with.
- files
-
This is a hash that contains information on the installed files. See the section 'files Hash' for more information.
deps Hash
This is a hash contained in $pkgdb->{<package>}{contents}{deps}{<pkgdep>}.
- origin
-
This is the ports origin location, if one is given.
files Hash
This is a hash that contains information on the installed files. See the section 'files Hash' for more information. This is a hash contained in $pkgdb->{<package>}{contents}{files}{<file>}. The keys of the hash are the name of the files.
- MD5
-
This is the MD5 sum of the file.
- cwd
-
This is the cwd for the file if it is not set to the base one.
- ignore_inst
-
This is defined if the ignore_inst flag is set to.
- ignore
-
This is defined if the ignore flag is set to.
- mode
-
This is defined if a specific mode is set for a file.
- group
-
This is defined if a specific group is set for a file.
- owner
-
This is defined if a specific owner is set for a file.
NOTES
- @noinst
-
These lines in the '+CONTENTS' file are not currently handled.
- @exec
-
The handling of these lines are going to be changed in the near future.
- @unexec
-
The handling of these lines are going to be changed in the near future.
- @display
-
Currently not handled in this version of.
- memory
-
It is generally uses atleast twice the amount of ram as the size of the pkgdb.
ERROR CODES/HANDLING
Error handling is provided by Error::Helper.
1
PKG_DBDIR does not exist.
2
Could not open PKG_DBDIR.
3
The named dir entry in PKG_DBDIR is not a directory.
4
Could not open the specified required by file.
5
Could not open the specified comment file.
6
Could not open the specified description file.
7
Could not open the specified contents file.
8
A line matching /^\@comment DEPORIGIN:/ was found, no previous depedencies have been found.
9
A line matching /^\@comment MD5:/ was found, no previous files have been found.
10
Unable to make sense of the specified '+CONTENTS' line.
11
/^\@cwd/ matched twice in a '+CONTENTS' file.
AUTHOR
Zane C. Bowers-Hadley, <vvelox at vvelox.net>
BUGS
Please report any bugs or feature requests to bug-freebsd-pkgs at rt.cpan.org
, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=FreeBSD-Pkgs. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc FreeBSD::Pkgs
You can also look for information at:
RT: CPAN's request tracker
AnnoCPAN: Annotated CPAN documentation
CPAN Ratings
Search CPAN
ACKNOWLEDGEMENTS
Peter V. Vereshagin, #69658, notified me about a pointless warning for the portupgrade DB file
COPYRIGHT & LICENSE
Copyright 2012 Zane C. Bowers-Hadley, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.