) {
if (/file:\s+(\S.*\S)\s+pkg:\s+(\S+)\-(\S+)/ && $1 eq $file) {
push(@pkgs, $2);
push(@vers, $3);
}
}
close(DUMP);
return 0 if (!@pkgs);
%file = ( );
$file{'packages'} = join(' ', @pkgs);
$file{'versions'} = join(' ', @vers);
$file{'path'} = $file;
my @st = stat($file);
$file{'type'} = -l $files ? 3 :
-d $files ? 1 : 0;
$file{'user'} = getpwuid($st[4]);
$file{'group'} = getgrgid($st[5]);
$file{'mode'} = sprintf "%o", $st[2] & 07777;
$file{'size'} = $st[7];
$file{'link'} = readlink($file);
return 1;
}
# delete_package(package, [&options], version)
# Attempt to remove some package
sub delete_package
{
my ($name, $opts, $ver) = @_;
my $out = &backquote_logged("pkgin -y remove ".quotemeta($name)." 2>&1");
return $? ? $out : undef;
}
# delete_packages(&packages, [&options], &versions)
# Attempt to remove multiple packages at once
sub delete_packages
{
my ($names, $opts, $vers) = @_;
my $out = &backquote_logged("pkgin -y remove ".
join(" ", map { quotemeta($name) } @$names)." 2>&1");
return $? ? $out : undef;
}
###### Update system functions
sub list_update_system_commands
{
return ("pkgin");
}
# update_system_install([package], [&in], [no-force])
# Install some package with apt
sub update_system_install
{
my $update = $_[0] || $in{'update'};
my $in = $_[1];
my $force = !$_[2];
my @rv;
# Build and show command to run
$update = join(" ", map { quotemeta($_) } split(/\s+/, $update));
my $cmd = "pkgin -y install ".$update;
print &text('pkgsrc_install', "$cmd"),"\n";
print "";
&additional_log('exec', undef, $cmd);
# Run it
&open_execute_command(CMD, "$cmd", 2);
while() {
if (/installing\s+(\S+)\-(\d\S*)/i) {
# New package
push(@rv, $1);
}
print &html_escape("$_");
}
close(CMD);
print "\n";
if ($?) { print "$text{'pkg_failed'}\n"; }
else { print "$text{'pkg_ok'}
\n"; }
return @rv;
}
# update_system_search(text)
# Returns a list of packages matching some search
sub update_system_search
{
my ($text) = @_;
$text =~ s/\.\*/%/g;
$text =~ s/\./?/g;
my $sql = "select * from remote_pkg";
if ($text) {
$sql .= " where pkgname like '%$text%' or ".
"comment like '%$text%'";
}
my @out = &execute_pkgin_sql($sql);
my @rv;
foreach my $r (@out) {
push(@rv, { 'name' => $r->{'pkgname'},
'version' => $r->{'pkgvers'},
'desc' => $r->{'comment'} });
}
return @rv;
}
# update_system_available()
# Returns a list of package names and versions that are available from PKGSRC
sub update_system_available
{
return &update_system_search(undef);
}
# update_system_updates()
# Returns a list of available package updates
sub update_system_updates
{
my $sql = "select remote_pkg.pkgname,remote_pkg.pkgvers ".
"from remote_pkg,local_pkg ".
"where remote_pkg.pkgname = local_pkg.pkgname ".
"and remote_pkg.pkgvers != local_pkg.pkgvers";
my @out = &execute_pkgin_sql($sql);
my @rv;
foreach my $r (@out) {
push(@rv, { 'name' => $r->{'pkgname'},
'version' => $r->{'pkgvers'},
'desc' => $r->{'comment'} });
}
return @rv;
}
# update_system_resolve(name)
# Converts a standard package name like apache, sendmail or squid into
# the name used by ports.
sub update_system_resolve
{
local ($name) = @_;
return $name eq "apache" ? "apache ap24-.*" :
$name eq "dhcpd" ? "isc-dhcpd" :
$name eq "mysql" ? "mysql-server mysql-client" :
$name eq "postgresql" ? "postgresql94-client postgresql94-server" :
$name eq "openldap" ? "openldap-server openldap-client" :
$name;
}
1;