Update webmin from repository if a package is available

This commit is contained in:
Jamie Cameron
2023-08-05 12:28:06 -07:00
parent 1c48f3761e
commit 1fb3bfa6ef
4 changed files with 47 additions and 10 deletions

View File

@@ -56,6 +56,10 @@ if (!$skip_upgrade) {
elsif ($mode ne "sun-pkg") {
push(@opts, [ 2, $text{'upgrade_ftp'} ]);
}
($repotype, $repover) = &get_webmin_repo_version();
if ($repotype) {
push(@opts, [ 6, &text('upgrade_repo', uc($repotype)) ]);
}
print &ui_table_row($text{'upgrade_src'},
&ui_radio_table("source", $opts[$#opts]->[0], \@opts));

View File

@@ -481,6 +481,7 @@ upgrade_ftp=Latest version from www.webmin.com
upgrade_cup=Latest version from Caldera's <tt>cupdate</tt> tool
upgrade_emerge=Latest version from Emerge repository
upgrade_delete=Delete old version's directory after upgrade?
upgrade_repo=Latest version from $1 repository
upgrade_ok=Upgrade Webmin
upgrade_err1=Failed to upgrade from $1
upgrade_err2=Failed to upgrade from uploaded file

View File

@@ -5,7 +5,23 @@
require './webmin-lib.pl';
&foreign_require("proc", "proc-lib.pl");
&foreign_require("acl", "acl-lib.pl");
&ReadParseMime();
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
&ReadParse();
}
else {
&ReadParseMime();
}
if ($in{'source'} == 3) {
# Get the latest version from Caldera with cupdate
&redirect("/cupdate/");
return;
}
elsif ($in{'source'} == 6) {
# Upgrade from package repository
&redirect("/package-updates/update.cgi?u=webmin");
return;
}
$| = 1;
$theme_no_table = 1;
@@ -137,10 +153,6 @@ elsif ($in{'source'} == 5) {
$full = $version.($release ? "-$release" : "");
}
}
elsif ($in{'source'} == 3) {
# Get the latest version from Caldera with cupdate
&redirect("/cupdate/");
}
elsif ($in{'source'} == 4) {
# Just run the command emerge webmin
&error_setup(&text('upgrade_err4'));

View File

@@ -1288,8 +1288,15 @@ if (&foreign_available($module_name) && !$gconfig{'nowebminup'} &&
$config{'last_version_release'} &&
$config{'last_version_release'} >= 2;
my $full = &get_webmin_full_version();
if ($config{'last_version_full'} &&
&compare_version_numbers($config{'last_version_full'}, $full) > 0) {
my $compver = $config{'last_version_full'};
my ($repotype, $repover) = &get_webmin_repo_version();
my $source = 2;
if ($repotype) {
$compver = $repover;
$source = 6;
}
if ($compver &&
&compare_version_numbers($compver, $full) > 0) {
# New version is out there .. offer to upgrade
my $mode = &get_install_type();
my $checksig = 0;
@@ -1306,9 +1313,8 @@ if (&foreign_available($module_name) && !$gconfig{'nowebminup'} &&
'target="_blank" data-link-external="after"').".";
# $release_notes_link = "" if ($minor_release);
push(@notifs,
&ui_form_start("@{[&get_webprefix()]}/webmin/upgrade.cgi",
"form-data").
&ui_hidden("source", 2).
&ui_form_start("@{[&get_webprefix()]}/webmin/upgrade.cgi").
&ui_hidden("source", $source).
&ui_hidden("sig", $checksig).
&ui_hidden("mode", $mode).
&text('notif_upgrade', $config{'last_version_full'}, $full).
@@ -2716,4 +2722,18 @@ if ($os =~ /rocky/i && $basever >= 8) {
return ". $link" if ($link);
}
# get_webmin_repo_version()
# If Webmin was installed from a repository like APT or YUM, return the repo
# type and the new version number
sub get_webmin_repo_version
{
return () if (!&foreign_check("package-updates"));
&foreign_require("package-updates");
return () if (!&package_updates::supports_updates_available());
my @updates = &package_updates::updates_available();
my ($wpkg) = grep { $_->{'name'} eq 'webmin' } @updates;
return () if (!$wpkg);
return ($wpkg->{'system'}, $wpkg->{'version'});
}
1;