Currently, I am in the process of learning OpenBSD 5.1 in addition to teaching myself Perl. In particular, I want to play around with the Catalyst framework. After doing some searching, I could not find an easy way to install a list of packages generated by redirecting pkg_info's output to a text file; so, I figured this is the perfect time to try my hand at writing a Perl script to do the job for me. Yes, the script is a bit primitive, but I did learn a fair amount during its creation.
Naturally, after creating this script, I learned about 'pkg_add -l /path/to/listofpackages'. That's OK - I learned some valuable skills in Perl that I can transfer to other applications.
Naturally, after creating this script, I learned about 'pkg_add -l /path/to/listofpackages'. That's OK - I learned some valuable skills in Perl that I can transfer to other applications.
Here is how I generated my list of packages to install for the Catalyst framework on Perl 5:
# pkg_info -Q p5-Catalyst > packages.txt
Here is the code for the script (which I plan to put on GitHub):
#!/usr/bin/perl -w
# Name: pkgadder.pl
# Version: 1.0
# Revision: October 10, 2012
# By: Ramon J. Long III
# http://sysadminatlarge.blogspot.com
# This script will read in the contents of 'packages.txt'
# and use pkg_add to install each package.
# There are different ways to generate your package list.
# For exmple: `pkg_info -Q p5-Catalyst > packages.txt'
# This command will create a list of all Perl5 Catalyst packages.
# TO DO:
# Add command switch to add or remove packages.
# Add options for pkg_add and pkg_delete switches.
use strict;
use warnings;
# Open the package list to install:
open (FILE, "packages.txt") or die ("Unable to open file $!");
# Assign the file handle to an array:
my @openbsd_pkgs = <FILE>;
# Let the user know we are processing their package list:
print "Now processing the package list. This may take a while...\n";
# Iterate over each package name in the array:
foreach (@openbsd_pkgs) {
# Remove any new line characters and whitespace:
chomp ($_);
# Verbosely and interactively open the pkg_add command with progress meter
# and pipe in our current package from the array:
open my $fh, '-|', "pkg_add -v -i -m $_" or die "Can't open pipe: $!";
# Execute the command:
my @lines = <$fh>;
# Close the command handle:
close $fh or die "Can't close pipe $!";
}
# Close the file hand for packages.txt:
close (FILE);
# Name: pkgadder.pl
# Version: 1.0
# Revision: October 10, 2012
# By: Ramon J. Long III
# http://sysadminatlarge.blogspot.com
# This script will read in the contents of 'packages.txt'
# and use pkg_add to install each package.
# There are different ways to generate your package list.
# For exmple: `pkg_info -Q p5-Catalyst > packages.txt'
# This command will create a list of all Perl5 Catalyst packages.
# TO DO:
# Add command switch to add or remove packages.
# Add options for pkg_add and pkg_delete switches.
use strict;
use warnings;
# Open the package list to install:
open (FILE, "packages.txt") or die ("Unable to open file $!");
# Assign the file handle to an array:
my @openbsd_pkgs = <FILE>;
# Let the user know we are processing their package list:
print "Now processing the package list. This may take a while...\n";
# Iterate over each package name in the array:
foreach (@openbsd_pkgs) {
# Remove any new line characters and whitespace:
chomp ($_);
# Verbosely and interactively open the pkg_add command with progress meter
# and pipe in our current package from the array:
open my $fh, '-|', "pkg_add -v -i -m $_" or die "Can't open pipe: $!";
# Execute the command:
my @lines = <$fh>;
# Close the command handle:
close $fh or die "Can't close pipe $!";
}
# Close the file hand for packages.txt:
close (FILE);
# Return a true value in case this script eventually becomes a module:
1;
1;
No comments:
Post a Comment