]> git.proxmox.com Git - pve-manager-legacy.git/commitdiff
network reload: check if recent enough PVE ifupdown2 version is present
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 14 Jan 2020 10:00:25 +0000 (11:00 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 14 Jan 2020 10:00:26 +0000 (11:00 +0100)
We need a recent version *and* our patches on top of the vanilla
ifupdown2:
0001-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch
0004-don-t-remove-bridge-is-tap-veth-are-still-plugged.patch

So check for at least 1.2.8 and the pve string in the version output.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
PVE/API2/Network.pm

index 20e377813fd25e483b6d10774e0112a1c9cefc39..49a38746aa725bed2ced0b7cc5e426d66c31c907 100644 (file)
@@ -538,6 +538,23 @@ __PACKAGE__->register_method({
        return $ifaces->{$param->{iface}};
    }});
 
+sub ifupdown2_version {
+    my $v;
+    PVE::Tools::run_command(['ifreload', '-V'], outfunc => sub { $v //= shift });
+    return if !defined($v) || $v !~ /^\s*ifupdown2:(\S+)\s*$/;
+    $v = $1;
+    my ($major, $minor, $extra, $pve) = split(/\.|-/, $v);
+    my $is_pve = defined($pve) && $pve =~ /pve/;
+
+    return ($major * 100000 + $minor * 1000 + $extra * 10, $is_pve, $v);
+}
+sub assert_ifupdown2_installed {
+    die "you need ifupdown2 to reload network configuration\n" if ! -e '/usr/share/ifupdown2';
+    my ($v, $pve, $v_str) = ifupdown2_version();
+    die "incompatible 'ifupdown2' package version '$v_str'! Did you installed from Proxmox repositories?\n"
+        if $v < (1*100000 + 2*1000 + 8*10) || !$pve;
+}
+
 __PACKAGE__->register_method({
     name => 'reload_network_config',
     path => '',
@@ -566,7 +583,7 @@ __PACKAGE__->register_method({
        my $current_config_file = "/etc/network/interfaces";
        my $new_config_file = "/etc/network/interfaces.new";
 
-       die "you need ifupdown2 to reload networking\n" if !-e '/usr/share/ifupdown2';
+       assert_ifupdown2_installed();
 
        if (-x '/usr/bin/ovs-vsctl') {
            my $ovs_configured = sub {