#!/usr/bin/perl use strict; use warnings; use POSIX; use Getopt::Long; use PVE::API2::APT; my $pkgarray = PVE::API2::APT->versions({ node => 'localhost'}); my $pkglist = {}; foreach my $pkg (@$pkgarray) { $pkglist->{$pkg->{Package}} = $pkg; } sub print_status { my ($pkg) = @_; my $pkginfo = $pkglist->{$pkg}; if (!$pkginfo) { print "$pkg: unknown package - internal error\n"; return; } my $version = "not correctly installed"; if ($pkginfo->{OldVersion} && $pkginfo->{CurrentState} eq 'Installed') { $version = $pkginfo->{OldVersion}; } elsif ($pkginfo->{CurrentState} eq 'ConfigFiles') { $version = 'residual config'; } if ($pkginfo->{RunningKernel}) { print "$pkg: $version (running kernel: $pkginfo->{RunningKernel})\n"; } elsif ($pkginfo->{ManagerVersion}) { print "$pkg: $version (running version: $pkginfo->{ManagerVersion})\n"; } else { print "$pkg: $version\n"; } } sub print_usage { my $msg = shift; print STDERR "ERROR: $msg\n" if $msg; print STDERR "USAGE: pveversion [--verbose]\n"; } my $opt_verbose; if (!GetOptions ('verbose' => \$opt_verbose)) { print_usage (); exit (-1); } if (scalar (@ARGV) != 0) { print_usage (); exit (-1); } my $ver = PVE::pvecfg::package() . '/' . PVE::pvecfg::version_text(); my (undef, undef, $kver) = POSIX::uname(); if (!$opt_verbose) { print "$ver (running kernel: $kver)\n"; exit (0); } foreach my $pkg (@$pkgarray) { print_status($pkg->{Package}); } exit 0; __END__ =head1 NAME pveversion - Proxmox VE version info =head1 SYNOPSIS pveversion [--verbose] =head1 DESCRIPTION Print version information for Proxmox VE packages.