support for it got added to Proxmox repositories, so there is no need to use
custom logic and manual fetching for this anymore.

Signed-off-by: Fabian Grünbichler <[email protected]>
---

Notes:
    requires versioned depends on proxmox-widget-toolkit.

 src/PMG/API2/APT.pm | 108 +++++++-------------------------------------
 1 file changed, 16 insertions(+), 92 deletions(-)

diff --git a/src/PMG/API2/APT.pm b/src/PMG/API2/APT.pm
index 7fc7c29..1cd5f3d 100644
--- a/src/PMG/API2/APT.pm
+++ b/src/PMG/API2/APT.pm
@@ -85,32 +85,6 @@ my $get_pkgfile = sub {
     return undef;
 };
 
-my $get_changelog_url =sub {
-    my ($pkgname, $info, $pkgver, $origin, $component) = @_;
-
-    my $changelog_url;
-    my $base = dirname($info->{FileName});
-    if ($origin && $base) {
-       $pkgver =~ s/^\d+://; # strip epoch
-       my $srcpkg = $info->{SourcePkg} || $pkgname;
-       if ($origin eq 'Debian') {
-           $base =~ s!pool/updates/!pool/!; # for security channel
-           $changelog_url = "http://packages.debian.org/changelogs/$base/"; .
-               "${srcpkg}_${pkgver}/changelog";
-       } elsif ($origin eq 'Proxmox') {
-           if ($component eq 'pmg-enterprise') {
-               $changelog_url = 
"https://enterprise.proxmox.com/debian/pmg/$base/"; .
-                   "${pkgname}_${pkgver}.changelog";
-           } else {
-               $changelog_url = 
"http://download.proxmox.com/debian/pmg/$base/"; .
-                   "${pkgname}_${pkgver}.changelog";
-           }
-       }
-    }
-
-    return $changelog_url;
-};
-
 my $assemble_pkginfo = sub {
     my ($pkgname, $info, $current_ver, $candidate_ver)  = @_;
 
@@ -122,10 +96,6 @@ my $assemble_pkginfo = sub {
 
     if (my $pkgfile = &$get_pkgfile($candidate_ver)) {
        $data->{Origin} = $pkgfile->{Origin};
-       if (my $changelog_url = &$get_changelog_url($pkgname, $info, 
$candidate_ver->{VerStr},
-                                                   $pkgfile->{Origin}, 
$pkgfile->{Component})) {
-           $data->{ChangeLogUrl} = $changelog_url;
-       }
     }
 
     if (my $desc = $info->{LongDesc}) {
@@ -402,74 +372,28 @@ __PACKAGE__->register_method({
 
        my $pkgname = $param->{name};
 
-       my $cache = &$get_apt_cache();
-       my $policy = $cache->policy;
-       my $p = $cache->{$pkgname} || die "no such package '$pkgname'\n";
-       my $pkgrecords = $cache->packages();
-
-       my $ver;
-       if ($param->{version}) {
-           if (my $available = $p->{VersionList}) {
-               for my $v (@$available) {
-                   if ($v->{VerStr} eq $param->{version}) {
-                       $ver = $v;
-                       last;
-                   }
-               }
-           }
-           die "package '$pkgname' version '$param->{version}' is not 
available\n" if !$ver;
+       my $cmd = ['apt-get', 'changelog', '-qq'];
+       if (my $version = $param->{version}) {
+           push @$cmd, "$pkgname=$version";
        } else {
-           $ver = $policy->candidate($p) || die "no installation candidate for 
package '$pkgname'\n";
+           push @$cmd, "$pkgname";
        }
 
-       my $info = $pkgrecords->lookup($pkgname);
+       my $output = "";
 
-       my $pkgfile = &$get_pkgfile($ver);
-       my $url;
-
-       die "changelog for '${pkgname}_$ver->{VerStr}' not available\n"
-           if !($pkgfile && ($url = &$get_changelog_url($pkgname, $info, 
$ver->{VerStr}, $pkgfile->{Origin}, $pkgfile->{Component})));
-
-       my $data = "";
-
-       my $pmg_cfg = PMG::Config->new();
-       my $proxy = $pmg_cfg->get('admin', 'http_proxy');
-
-       my $ua = LWP::UserAgent->new;
-       $ua->agent("PMG/1.0");
-       $ua->timeout(10);
-       $ua->max_size(1024*1024);
-       $ua->ssl_opts(verify_hostname => 0); # don't care for changelogs
-
-       if ($proxy) {
-           $ua->proxy(['http', 'https'], $proxy);
-       } else {
-           $ua->env_proxy;
-       }
-
-       my $username;
-       my $pw;
-
-       if ($pkgfile->{Origin} eq 'Proxmox' && $pkgfile->{Component} eq 
'pmg-enterprise') {
-           my $info = PMG::API2::Subscription::read_etc_subscription();
-           if ($info->{status} eq 'active') {
-               $username = $info->{key};
-               $pw = PMG::Utils::get_hwaddress();
-               $ua->credentials("enterprise.proxmox.com:443", 
'pmg-enterprise-repository',
-                                $username, $pw);
-           }
-       }
-
-       syslog('info', "GET $url\n");
-       my $response = $ua->get($url);
+       my $rc = PVE::Tools::run_command(
+           $cmd,
+           timeout => 10,
+           logfunc => sub {
+               my $line = shift;
+               $output .= "$line\n";
+           },
+           noerr => 1,
+       );
 
-        if ($response->is_success) {
-            $data = $response->decoded_content;
-        } else {
-           PVE::Exception::raise($response->message, code => $response->code);
-        }
+       $output .= "RC: $rc" if $rc != 0;
 
-       return $data;
+       return $output;
     }});
 
 __PACKAGE__->register_method({
-- 
2.39.2



_______________________________________________
pve-devel mailing list
[email protected]
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to