[pve-devel] [PATCH pve-manager] api2: network : check if ifupdown2 is proxmox version

Alexandre DERUMIER aderumier at odiso.com
Sat Jan 11 20:26:08 CET 2020


hmm, I mean, seems a bit expensive.. Could we just ship a "flag file"
with ifupdown2 and just check if that does exist? E.g.:
die "..." if ! -e /usr/share/doc/ifupdown2/.proxmox-build;

>>Or, do we actually need the PVE build? Doesn't it just have to be recent enough?

we really need to proxmox patches,at least
0001-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch
&&
0004-don-t-remove-bridge-is-tap-veth-are-still-plugged.patch

or this will break vm networking on reload (and I think this is exactly the user problem on the forum)
That's why I have use a die and not just a warning.


>>Maybe check the version? Not that we switch to upstream in Debian 11 Bullseye
>>and forget this ^^ We could now check for major version part >= 2, that wouldn't
>>be to hard. We get: "ifupdown2:2.0.1-1+pve1"

This is the problem with check version, if bullseye upgrade ifupdown2 to an bigger version and we forgot about it...
I really think we should have a proxmox flag somewhere.

why not put a comment in ifupdown2 python directly (/usr/share/ifupdown2/ifupdown2, for example), and read it ?
Like this, if something override it, we can be sure it's not proxmox version ?


----- Mail original -----
De: "Thomas Lamprecht" <t.lamprecht at proxmox.com>
À: "pve-devel" <pve-devel at pve.proxmox.com>, "aderumier" <aderumier at odiso.com>
Envoyé: Samedi 11 Janvier 2020 17:21:24
Objet: Re: [pve-devel] [PATCH pve-manager] api2: network : check if ifupdown2 is proxmox version

On 1/11/20 1:41 PM, Alexandre Derumier wrote: 
> 1 user forgot to add proxmox repo, and have installed debian version. 
> https://forum.proxmox.com/threads/bridge-cant-be-found-and-vm-failed-to-start.63138/ 
> 
> Signed-off-by: Alexandre Derumier <aderumier at odiso.com> 
> --- 
> PVE/API2/Network.pm | 5 +++++ 
> 1 file changed, 5 insertions(+) 
> 
> diff --git a/PVE/API2/Network.pm b/PVE/API2/Network.pm 
> index 01da0de1..94349998 100644 
> --- a/PVE/API2/Network.pm 
> +++ b/PVE/API2/Network.pm 
> @@ -575,6 +575,11 @@ __PACKAGE__->register_method({ 
> 
> die "you need ifupdown2 to reload networking\n" if !-e '/usr/share/ifupdown2'; 
> 
> + PVE::Tools::run_command(['ifreload', '-V'], outfunc => sub { 
> + my $line = shift; 
> + die "you need ifupdown2 package from proxmox repository" if $line !~ m/pve/; 
> + }); 
> + 
> if (-x '/usr/bin/ovs-vsctl') { 
> my $ovs_configured = sub { 
> my $ifaces = shift; 
> 

hmm, I mean, seems a bit expensive.. Could we just ship a "flag file" 
with ifupdown2 and just check if that does exist? E.g.: 
die "..." if ! -e /usr/share/doc/ifupdown2/.proxmox-build; 

Or, do we actually need the PVE build? Doesn't it just have to be recent enough? 
Maybe check the version? Not that we switch to upstream in Debian 11 Bullseye 
and forget this ^^ We could now check for major version part >= 2, that wouldn't 
be to hard. We get: "ifupdown2:2.0.1-1+pve1" 

So would something like: 

----8<---- 
diff --git a/PVE/API2/Network.pm b/PVE/API2/Network.pm 
index 2d201c0e..d692023b 100644 
--- a/PVE/API2/Network.pm 
+++ b/PVE/API2/Network.pm 
@@ -526,6 +526,25 @@ __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*$/; 
+ 
+ my ($major, $minor, $extra, $pve) = split(/\.|-/, $1); 
+ # ignore pve for now 
+ return $major * 100000 + $minor * 1000 + $extra * 10; 
+} 
+ 
+sub assert_ifupdown2_installed { 
+ die "you need ifupdown2 to reload networking\n" if !-e '/usr/share/ifupdown2'; 
+ 
+ my $v = ifupdown2_version; 
+ 
+ die "ifupdown2 version to old (< 2), do you installed from Proxmox repositories?\n" 
+ if $v < 2 * 100000; 
+} 
+ 
__PACKAGE__->register_method({ 
name => 'reload_network_config', 
path => '', 
@@ -554,7 +573,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 { 
--- 

work to for you? 


I mean, a nice big warning if no working and current Proxmox VE/MG repo is 
setup is on my todo since a bit, that would help against this too.. 



More information about the pve-devel mailing list