# Files: # /usr/local/bin/fpkg # /var/fpkg/INDEX_<version>_<ft-
phost>
# ----------------------------------------
# Please rewrite for your environment. my $ftphost =
"ftp.jp.freebsd.org";
# ----------------------------------------
my $indexdir = "/var/fpkg"; my $indexprefix = "INDEX_"; my $uid =
$<;
my $usage = <<EOF; Usage: fpkg [list|info] package name
fpkg [search|allsearch] package name [-v|-vv]
fpkg [update] EOF
chomp (my $arch = `uname -m`); chomp (my $osver = `uname -r | tr
"[A-Z]" "[a-z]"`);
if ( $^O !~ /freebsd/i ) { print "Error: This script runs on
FreeBSD only.0; exit 1; } if ( $#ARGV == -1 ) { print $usage; ex-
it 1; }
my $mode = shift; my $vflag = 0; my @pkgnames; for (my $i=0;
$i<=$#ARGV; $i++) { if ($ARGV[$i] =~ /^-v$/) {
$vflag = 1; } elsif ($ARGV[$i] =~
/^-vv$/) { $vflag = 2; } else {
push(@pkgnames,$ARGV[$i]); } }
if( ! eval "&$mode" ) { print $usage; exit 1; }
# ----------------------------------------
# # Display a list of files in package (list) # Intalled package
only # sub list { # [-x] option ... use regular expres-
sion system "pkg_info -x -L @pkgnames"; exit; }
# # Display a package information (info) # Intalled package only
# sub info { # [-x] option ... use regular expression
system "pkg_info -x @pkgnames"; exit; }
# # Install package from ftp server (install) # No need to speci-
fy version of package # Version auto recognition # sub install {
if ($uid != 0) { print "Error: This script should be exe-
cuted by root.0; exit 1; }
my @urls; foreach(@pkgnames) {
push(@urls,"ftp://$ftphost/pub/FreeB-
SD/ports/$arch/packages-$osver/Latest/$_.tbz"); }
system "pkg_add -v @urls";
# ex. # ftp://ftp.jp.FreeBSD.org/pub/FreeB-
SD/ports/packages/INDEX # ftp://ftp.jp.FreeB-
SD.org/pub/FreeBSD/ports/i386/packages-6-stable/INDEX my
$url = "ftp://$ftphost/pub/FreeBSD/ports/$arch/packages-$os-
ver/INDEX";
system "ftp -o $indexpath $url";
if ($?) { print "failed: fpkg update0;
exit 1; } else { print
"completed: fpkg update0; } exit; }
# # Package name search on package list (search) # sub search {
if ( ! @pkgnames ) { print $usage; exit 1; }
my $indexpath = $indexdir . "/" . $indexprefix . $osver .
"_" . $ftphost; if ( ! -e $indexpath ) { print "Error:
You need to execute
my $searchkey = join("|",@pkgnames); open(IN,$in-
dexpath); while(<IN>){ chomp;
my ($name,$ports,undef,$desc,undef,undef,un-
def,undef,undef,$www,undef,undef) = split(//,$_);
if ( $name =~ /$searchkey/i ) {
if( $vflag == 1 ) {
print "$name ($ports) - $desc0;
} elsif ( $vflag == 2 ) {
print "[ $name ]0orts:
$ports0esc: $desc0ww: $www0; } else {
print "$name0;
} } }
close(IN); exit; }
# # All text search on package list (allsearch) # sub allsearch {
if ( ! @pkgnames ) { print $usage; exit 1; }
my $indexpath = $indexdir . "/" . $indexprefix . $osver .
"_" . $ftphost; if ( ! -e $indexpath ) { print "Error:
You need to execute
my $searchkey = join("|",@pkgnames); open(IN,$in-
dexpath); while(<IN>){ chomp;
my ($name,$ports,undef,$desc,undef,undef,un-
def,undef,undef,$www,undef,undef) = split(//,$_);
if ( $_ =~ /$searchkey/i ) {
if( $vflag == 1 ) {
print "$name ($ports) - $desc0;
} elsif ( $vflag == 2 ) {
print "[ $name ]0orts:
Man(1) output converted with
man2html