[pve-devel] [PATCH v3 docs 2/5] Add cluster create screenshot
Signed-off-by: Stefan Reiter --- images/screenshot/gui-cluster-create.png | Bin 0 -> 18124 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/screenshot/gui-cluster-create.png diff --git a/images/screenshot/gui-cluster-create.png b/images/screenshot/gui-cluster-create.png new file mode 100644 index ..9015a51662f9ae99197676feebd46fc83c43ad20 GIT binary patch literal 18124 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
Re: [pve-devel] [PATCH i18n] Add hebrew translation
On 23.08.19 11:27, Dominic Jäger wrote: > Contributed-by: Condless > Signed-off-by: Dominic Jäger > --- > Looks good according to Google Translate. I got a issue when trying to update the po files with this applied: # make update ... snip ... he: he.po:523:14: invalid control sequence he.po:1405:12: invalid control sequence he.po:2535:19: invalid control sequence he.po:2664: end-of-line within string he.po:2932:13: invalid control sequence he.po:3017:20: invalid control sequence he.po:3667:39: invalid control sequence he.po:3668: end-of-line within string he.po:4176:14: invalid control sequence he.po:4270: end-of-line within string he.po:4435:19: invalid control sequence he.po:4534:19: invalid control sequence he.po:5300:26: invalid control sequence he.po:5822:20: invalid control sequence The underlying issue of this seems to come from the fact that Hebrew is read from right to left, and thus a backslash is used instead of a slash (make sense). So far so good, the backslashes just need to be escaped else "msgmerge" thinks "\א" is a escape code. Can you do this, check that make update works and re-check if the \ gets still displayed correctly in the Webinterface? Thanks! > > Makefile |2 +- > he.po| 6156 ++ > 2 files changed, 6157 insertions(+), 1 deletion(-) > create mode 100644 he.po > > diff --git a/Makefile b/Makefile > index 0e47f00..442081f 100644 > --- a/Makefile > +++ b/Makefile > @@ -1,6 +1,6 @@ > include /usr/share/dpkg/pkg-info.mk > > -LINGUAS=de it fr ja es sv ru tr zh_CN zh_TW da ca pl sl nb nn pt_BR eu fa gl > hu > +LINGUAS=de it fr ja es sv ru tr zh_CN zh_TW da ca pl sl nb nn pt_BR eu fa gl > hu he > > PVE_I18N_DEB=pve-i18n_${DEB_VERSION_UPSTREAM_REVISION}_all.deb > PMG_I18N_DEB=pmg-i18n_${DEB_VERSION_UPSTREAM_REVISION}_all.deb > diff --git a/he.po b/he.po > new file mode 100644 > index 000..80f2a66 > --- /dev/null > +++ b/he.po > @@ -0,0 +1,6156 @@ > +# Copyright (C) 2013-2016 Proxmox Server Solutions GmbH > +# This file is distributed under the same license as the pve-manager package. > +# Proxmox Support Team , 2013-2016. > +# > +msgid "" > +msgstr "" > +"Project-Id-Version: proxmox translations\n" > +"Report-Msgid-Bugs-To: \n" > +"POT-Creation-Date: Mon Jul 15 21:48:07 2019\n" > +"PO-Revision-Date: 2019-06-13 11:09+0200\n" > +"Last-Translator: Condless Team \n" > +"Language-Team: Hebrew\n" > +"Language: he\n" > +"MIME-Version: 1.0\n" > +"Content-Type: text/plain; charset=UTF-8\n" > +"Content-Transfer-Encoding: 8bit\n" > +"Plural-Forms: nplurals=2; plural=(n != 1);\n" > +"X-Generator: Poedit 1.8.11\n" > + > snip ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH common 2/2] Cleanup to make style consistent
Signed-off-by: Fabian Ebner --- src/PVE/SectionConfig.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PVE/SectionConfig.pm b/src/PVE/SectionConfig.pm index a760459..394aae6 100644 --- a/src/PVE/SectionConfig.pm +++ b/src/PVE/SectionConfig.pm @@ -334,7 +334,7 @@ sub parse_config { } } - while ($line = &$nextline()) { + while ($line = $nextline->()) { next if $ignore; # skip $errprefix = "file $filename line $lineno"; -- 2.20.1 ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH common 1/2] Fix 2339: Handle multiple blank lines correctly
It turns out that the line number counting was also broken (even on files without multiple blanks), since the body of the while inside the nextline subroutine would not be executed for a blank. I guess the subroutine was intended to skip comments and blanks, but since we use blanks to recognize the end of a section, I changed it to only skip comments. Signed-off-by: Fabian Ebner --- Changes from v1: * fix line number counting * style src/PVE/SectionConfig.pm | 9 ++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/PVE/SectionConfig.pm b/src/PVE/SectionConfig.pm index dcecce6..a760459 100644 --- a/src/PVE/SectionConfig.pm +++ b/src/PVE/SectionConfig.pm @@ -302,13 +302,16 @@ sub parse_config { my $lineno = 0; my @lines = split(/\n/, $raw); my $nextline = sub { - while (my $line = shift @lines) { + while (defined(my $line = shift @lines)) { $lineno++; - return $line if $line !~ /^\s*(?:#|$)/; + return $line if ($line !~ /^\s*#/); } }; -while (my $line = &$nextline()) { +while (@lines) { + my $line = $nextline->(); + next if !$line; + my $errprefix = "file $filename line $lineno"; my ($type, $sectionId, $errmsg, $config) = $class->parse_section_header($line); -- 2.20.1 ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] ifupdown2 pve package missing in buster/proxmox6 repo
On 28.08.19 08:58, Thomas Lamprecht wrote: > Hi, > > On 27.08.19 16:28, Alexandre DERUMIER wrote: >> Hi, >> >> the ifupdown2 pve package is missing from buster/proxmox6 repo. >> >> Could you add it ? > > yes, as we had the same version as Debian Buster it seemed I missed to > re-upload it.. > > I'd then already update to 1.2.8 or? > > Currently in the process of rebasing the extra/pve patches on top of it. > > It seems that the > "pve/0002-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch" > can be replaced by setting a default "bridge-ports-condone-regex" in > ifupdown2/addon/bridge.py , the rest applied just fine. > > I'll do some quick test and then upload it if all seems to work. > > Or did you already took a look at the 1.2.8-1 release? :) 1.2.8 seemed OK, but did only basic checks, it's now available on pvetest if you want to take a look at it. ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH manager] pve5to6: Add warning for some Gluster versions
After Fabian had sent his patch [0] we actually thought that this patch for pve5to6 would be obsolete. Upgrades as well as fresh installs worked flawlessly in my tests. Consequently, I removed the hint from the upgrade documentation [1] and marked the bug [2] as fixed. Before writing you this, I tested everything again and, unfortunately, something (or maybe multiple things) seems to be broken now. 1) On a fully updated PVE 6 with glusterfs-server 5.5-3 from Debian. Adding the upstream Gluster repos and then apt install glusterfs-server (no full-upgrade yet) makes problems. systemctl start glusterd does not work anymore. Some gluser related packages remain upgradeable libgfapi0/unknown 6.5-1 amd64 [upgradable from: 5.5-3] libgfchangelog0/unknown 6.5-1 amd64 [upgradable from: 5.5-3] libgfrpc0/unknown 6.5-1 amd64 [upgradable from: 5.5-3] libgfxdr0/unknown 6.5-1 amd64 [upgradable from: 5.5-3] libglusterfs-dev/unknown 6.5-1 amd64 [upgradable from: 5.5-3] libglusterfs0/unknown 6.5-1 amd64 [upgradable from: 5.5-3] After apt full-upgrade systemctl start glusterd works perfect. I assume some dependency should be for a newer version? 2) On a fully updated (no-subscription) PVE 5 with only glusterfs-common & client (no glusterfs-server) 6.5-1 from upstream Gluster the upgrade to PVE 6 works with only a warning Preparing to unpack .../00-glusterfs-common_6.5-1_amd64.deb ... Unpacking glusterfs-common (6.5-1) over (6.5-1) ... dpkg: warning: unable to delete old directory '/etc/glusterfs': Directory not empty 3) On a fully updated (no-subscription) PVE 5 with glusterfs-common, client _and_ glusterfs-server 6.5-1 from upstream Gluster the upgrade to PVE 6 aborts because dpkg throws multiple errors Preparing to unpack .../00-glusterfs-common_6.5-1_amd64.deb ... Unpacking glusterfs-common (6.5-1) over (6.5-1) ... dpkg: error processing archive /tmp/apt-dpkg-install-dr5AeK/00-glusterfs-common_6.5-1_amd64.deb (--unpack): trying to overwrite '/usr/share/glusterfs/scripts/eventsdash.py', which is also in package glusterfs-server 6.5-1 Selecting previously unselected package libglusterfs0:amd64. dpkg: regarding .../01-libglusterfs0_6.5-1_amd64.deb containing libglusterfs0:amd64: glusterfs-common conflicts with libglusterfs0 libglusterfs0:amd64 (version 6.5-1) is to be installed. dpkg: error processing archive /tmp/apt-dpkg-install-dr5AeK/01-libglusterfs0_6.5-1_amd64.deb (--unpack): conflicting packages - not installing libglusterfs0:amd64 Selecting previously unselected package libgfxdr0:amd64. Preparing to unpack .../02-libgfxdr0_6.5-1_amd64.deb ... Unpacking libgfxdr0:amd64 (6.5-1) ... dpkg: error processing archive /tmp/apt-dpkg-install-dr5AeK/02-libgfxdr0_6.5-1_amd64.deb (--unpack): trying to overwrite '/usr/lib/x86_64-linux-gnu/libgfxdr.so.0.0.1', which is also in package glusterfs-common 6.5-1 dpkg-deb: error: paste subprocess was killed by signal (Broken pipe) Selecting previously unselected package libgfrpc0:amd64. Preparing to unpack .../03-libgfrpc0_6.5-1_amd64.deb ... Unpacking libgfrpc0:amd64 (6.5-1) ... dpkg: error processing archive /tmp/apt-dpkg-install-dr5AeK/03-libgfrpc0_6.5-1_amd64.deb (--unpack): trying to overwrite '/usr/lib/x86_64-linux-gnu/libgfrpc.so.0.0.1', which is also in package glusterfs-common 6.5-1 dpkg-deb: error: paste subprocess was killed by signal (Broken pipe) Selecting previously unselected package libgfapi0:amd64. Preparing to unpack .../04-libgfapi0_6.5-1_amd64.deb ... Unpacking libgfapi0:amd64 (6.5-1) ... dpkg: error processing archive /tmp/apt-dpkg-install-dr5AeK/04-libgfapi0_6.5-1_amd64.deb (--unpack): trying to overwrite '/usr/lib/x86_64-linux-gnu/libgfapi.so.0.0.0', which is also in package glusterfs-common 6.5-1 dpkg-deb: error: paste subprocess was killed by signal (Broken pipe) Selecting previously unselected package libgfchangelog0:amd64. Preparing to unpack .../05-libgfchangelog0_6.5-1_amd64.deb ... Unpacking libgfchangelog0:amd64 (6.5-1) ... dpkg: error processing archive /tmp/apt-dpkg-install-dr5AeK/05-libgfchangelog0_6.5-1_amd64.deb (--unpack): trying to overwrite '/usr/lib/x86_64-linux-gnu/libgfchangelog.so.0.0.1', which is also in package glusterfs-common 6.5-1 dpkg-deb: error: paste subprocess was killed by signal (Broken pipe) Selecting previously unselected package libncurses6:amd64. Preparing to unpack .../06-libncurses6_6.1+20181013-2_amd64.deb ... Unpacking libncurses6:amd64 (6.1+20181013-2) ... Selecting previously unselected package liburcu6:amd64. Preparing to unpack .../07-liburcu6_0.10.2-1_amd64.deb ... Unpacking liburcu6:amd64 (0.10.2-1) ... Selecting previously unselected package python3-jwt. Preparing to unpack .../08-python3-jwt_1.7.0-2_all.deb ... Unpacking python3-jwt (1.7.0-2) ... Preparing to unpack .../09-libaio1_0.3.112-3_amd64.deb ... Unpacking libaio1:amd64 (0.3.112-3) over (0.3.110-3) ... Preparing to unpack .../10-libnl-route-3-200_3.4.0-1_amd64.deb ... Unpacking libnl-route-3-200:amd64 (3.4.
[pve-devel] applied: [PATCH i18n] Add hebrew translation
On 23.08.19 11:27, Dominic Jäger wrote: > Contributed-by: Condless > Signed-off-by: Dominic Jäger > --- > Looks good according to Google Translate. > > Makefile |2 +- > he.po| 6156 ++ > 2 files changed, 6157 insertions(+), 1 deletion(-) > create mode 100644 he.po > > diff --git a/Makefile b/Makefile > index 0e47f00..442081f 100644 > --- a/Makefile > +++ b/Makefile > @@ -1,6 +1,6 @@ > include /usr/share/dpkg/pkg-info.mk > > -LINGUAS=de it fr ja es sv ru tr zh_CN zh_TW da ca pl sl nb nn pt_BR eu fa gl > hu > +LINGUAS=de it fr ja es sv ru tr zh_CN zh_TW da ca pl sl nb nn pt_BR eu fa gl > hu he > > PVE_I18N_DEB=pve-i18n_${DEB_VERSION_UPSTREAM_REVISION}_all.deb > PMG_I18N_DEB=pmg-i18n_${DEB_VERSION_UPSTREAM_REVISION}_all.deb applied this with the new he.po Eitan from Condless sent me directly. Thanks to both of you! ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] ifupdown2 pve package missing in buster/proxmox6 repo
>>1.2.8 seemed OK, but did only basic checks, it's now available on pvetest >>if you want to take a look at it. Yes sure. I was planning to update to 1.2.8, but you have been faster than me ;) - Mail original - De: "Thomas Lamprecht" À: "pve-devel" , "aderumier" Envoyé: Mercredi 28 Août 2019 12:05:05 Objet: Re: [pve-devel] ifupdown2 pve package missing in buster/proxmox6 repo On 28.08.19 08:58, Thomas Lamprecht wrote: > Hi, > > On 27.08.19 16:28, Alexandre DERUMIER wrote: >> Hi, >> >> the ifupdown2 pve package is missing from buster/proxmox6 repo. >> >> Could you add it ? > > yes, as we had the same version as Debian Buster it seemed I missed to > re-upload it.. > > I'd then already update to 1.2.8 or? > > Currently in the process of rebasing the extra/pve patches on top of it. > > It seems that the > "pve/0002-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch" > can be replaced by setting a default "bridge-ports-condone-regex" in > ifupdown2/addon/bridge.py , the rest applied just fine. > > I'll do some quick test and then upload it if all seems to work. > > Or did you already took a look at the 1.2.8-1 release? :) 1.2.8 seemed OK, but did only basic checks, it's now available on pvetest if you want to take a look at it. ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH ifupdown2] fix bridge_port_condone_regex default value
--- ...-veth-fwpr-interfaces-from-bridge-on.patch | 22 +++ 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/debian/patches/pve/0001-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch b/debian/patches/pve/0001-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch index 5ac9fbc..01a0a90 100644 --- a/debian/patches/pve/0001-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch +++ b/debian/patches/pve/0001-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch @@ -1,4 +1,4 @@ -From Mon Sep 17 00:00:00 2001 +From f01a763647fa21b6192a94f184dd7d9d772b4e9e Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Wed, 16 May 2018 02:11:45 +0200 Subject: [PATCH] don't remove (tap|veth|fwpr) interfaces from bridge on ifup @@ -7,12 +7,13 @@ Subject: [PATCH] don't remove (tap|veth|fwpr) interfaces from bridge on ifup as proxmox don't defined them in /etc/network/interfaces Signed-off-by: Thomas Lamprecht +Signed-off-by: Alexandre Derumier --- - ifupdown2/addons/bridge.py | 1 + - 1 file changed, 1 insertion(+) + ifupdown2/addons/bridge.py | 4 + 1 file changed, 4 insertions(+) diff --git a/ifupdown2/addons/bridge.py b/ifupdown2/addons/bridge.py -index 3e5fd78..f40e2e7 100644 +index 3e5fd78..bd597d7 100644 --- a/ifupdown2/addons/bridge.py +++ b/ifupdown2/addons/bridge.py @@ -79,6 +79,7 @@ class bridge(moduleBase): @@ -23,3 +24,16 @@ index 3e5fd78..f40e2e7 100644 'example' : [ 'bridge-ports-condone-regex ^[a-zA-Z0-9]+_v[0-9]{1,4}$']}, 'bridge-stp' : {'help': 'bridge-stp yes/no', +@@ -912,6 +913,9 @@ class bridge(moduleBase): + # up a compiled regex to be used in a match later. This way we try to avoid + # a race condition where an (possibly VM) interface is created after this + # function has been called but before the bridgeports are validated. ++if not bridge_port_condone_regex: ++bridge_port_condone_regex = self.get_attr_default_value('bridge-ports-condone-regex') ++ + if bridge_port_condone_regex: + if get_string: + return bridge_port_condone_regex +-- +2.20.1 + -- 2.20.1 ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] ifupdown2 pve package missing in buster/proxmox6 repo
>>It seems that the >>"pve/0002-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch" >>can be replaced by setting a default "bridge-ports-condone-regex" in >>ifupdown2/addon/bridge.py , the rest applied just fine. I just sent a small fix because the default value was not used. Others patches are working fine - Mail original - De: "Thomas Lamprecht" À: "pve-devel" , "aderumier" Envoyé: Mercredi 28 Août 2019 08:58:57 Objet: Re: [pve-devel] ifupdown2 pve package missing in buster/proxmox6 repo Hi, On 27.08.19 16:28, Alexandre DERUMIER wrote: > Hi, > > the ifupdown2 pve package is missing from buster/proxmox6 repo. > > Could you add it ? yes, as we had the same version as Debian Buster it seemed I missed to re-upload it.. I'd then already update to 1.2.8 or? Currently in the process of rebasing the extra/pve patches on top of it. It seems that the "pve/0002-don-t-remove-tap-veth-fwpr-interfaces-from-bridge-on.patch" can be replaced by setting a default "bridge-ports-condone-regex" in ifupdown2/addon/bridge.py , the rest applied just fine. I'll do some quick test and then upload it if all seems to work. Or did you already took a look at the 1.2.8-1 release? :) ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH qemu-server] Fix #2343 Add USB3 support for Spice USB redirection
If USB3 is enabled for a USB port of host type spice add a USB3 controller and use it. To not break live migration this is only enabled for qemu 4.1 and higher. Signed-off-by: Aaron Lauterer --- PVE/QemuServer.pm | 4 ++-- PVE/QemuServer/USB.pm | 22 -- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 6e3b19e..375a34b 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -3701,7 +3701,7 @@ sub config_to_command { } # add usb controllers -my @usbcontrollers = PVE::QemuServer::USB::get_usb_controllers($conf, $bridges, $arch, $machine_type, $usbdesc->{format}, $MAX_USB_DEVICES); +my @usbcontrollers = PVE::QemuServer::USB::get_usb_controllers($conf, $bridges, $arch, $machine_type, $kvmver, $usbdesc->{format}, $MAX_USB_DEVICES); push @$devices, @usbcontrollers if @usbcontrollers; my $vga = parse_vga($conf->{vga}); @@ -3808,7 +3808,7 @@ sub config_to_command { } # usb devices -my @usbdevices = PVE::QemuServer::USB::get_usb_devices($conf, $usbdesc->{format}, $MAX_USB_DEVICES); +my @usbdevices = PVE::QemuServer::USB::get_usb_devices($conf, $usbdesc->{format}, $MAX_USB_DEVICES, $machine_type, $kvmver); push @$devices, @usbdevices if @usbdevices; # serial devices for (my $i = 0; $i < $MAX_SERIAL_PORTS; $i++) { diff --git a/PVE/QemuServer/USB.pm b/PVE/QemuServer/USB.pm index a2097b9..316eb09 100644 --- a/PVE/QemuServer/USB.pm +++ b/PVE/QemuServer/USB.pm @@ -3,6 +3,7 @@ package PVE::QemuServer::USB; use strict; use warnings; use PVE::QemuServer::PCI qw(print_pci_addr); +use PVE::QemuServer; use PVE::JSONSchema; use base 'Exporter'; @@ -34,7 +35,7 @@ sub parse_usb_device { } sub get_usb_controllers { -my ($conf, $bridges, $arch, $machine, $format, $max_usb_devices) = @_; +my ($conf, $bridges, $arch, $machine, $kvmver, $format, $max_usb_devices) = @_; my $devices = []; my $pciaddr = ""; @@ -50,7 +51,10 @@ sub get_usb_controllers { for (my $i = 0; $i < $max_usb_devices; $i++) { next if !$conf->{"usb$i"}; my $d = eval { PVE::JSONSchema::parse_property_string($format,$conf->{"usb$i"}) }; - next if !$d || $d->{usb3}; # do not add usb2 controller if we have only usb3 devices + + # don't add usb2 controller if usb3 device unless it's for spice and + # qemu version < 4.1 - for live migration + next if !$d || ($d->{usb3} && ($d->{host} ne "spice" || PVE::QemuServer::qemu_machine_feature_enabled($machine, $kvmver, 4, 1))); $use_usb2 = 1; } # include usb device config @@ -63,7 +67,10 @@ sub get_usb_controllers { for (my $i = 0; $i < $max_usb_devices; $i++) { next if !$conf->{"usb$i"}; my $d = eval { PVE::JSONSchema::parse_property_string($format,$conf->{"usb$i"}) }; - next if !$d || !$d->{usb3}; + + # don't add usb3 controller if usb3 device is for spice and qemu version + # < 4.1 - for live migrations + next if !$d || !$d->{usb3} || ($d->{host} eq 'spice' && !PVE::QemuServer::qemu_machine_feature_enabled($machine, $kvmver, 4, 1)); $use_usb3 = 1; } @@ -74,7 +81,7 @@ sub get_usb_controllers { } sub get_usb_devices { -my ($conf, $format, $max_usb_devices) = @_; +my ($conf, $format, $max_usb_devices, $machine, $kvmver) = @_; my $devices = []; @@ -87,9 +94,12 @@ sub get_usb_devices { my $hostdevice = parse_usb_device($d->{host}); $hostdevice->{usb3} = $d->{usb3}; if (defined($hostdevice->{spice}) && $hostdevice->{spice}) { - # usb redir support for spice, currently no usb3 + # usb redir support for spice, usb3 available with qemu 4.1 + my $bus = 'ehci'; + $bus = 'xhci' if PVE::QemuServer::qemu_machine_feature_enabled($machine, $kvmver, 4, 1) && $hostdevice->{usb3}; + push @$devices, '-chardev', "spicevmc,id=usbredirchardev$i,name=usbredir"; - push @$devices, '-device', "usb-redir,chardev=usbredirchardev$i,id=usbredirdev$i,bus=ehci.0"; + push @$devices, '-device', "usb-redir,chardev=usbredirchardev$i,id=usbredirdev$i,bus=$bus.0"; } else { push @$devices, '-device', print_usbdevice_full($conf, "usb$i", $hostdevice); } -- 2.20.1 ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [PATCH ifupdown2] fix bridge_port_condone_regex default value
On 28.08.19 16:05, Alexandre Derumier wrote: > --- > ...-veth-fwpr-interfaces-from-bridge-on.patch | 22 +++ > 1 file changed, 18 insertions(+), 4 deletions(-) > applied, thanks! ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH qemu-server] Fix #2343 Add USB3 support for Spice USB redirection
In a discussion with Stefan we came to the conclusion / realization that all the checks for $kvmver and $machine may not be necessary. This patch is most likely not correct the way it is now. More feedback is welcome :) On 8/28/19 4:26 PM, Aaron Lauterer wrote: If USB3 is enabled for a USB port of host type spice add a USB3 controller and use it. To not break live migration this is only enabled for qemu 4.1 and higher. Signed-off-by: Aaron Lauterer --- PVE/QemuServer.pm | 4 ++-- PVE/QemuServer/USB.pm | 22 -- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 6e3b19e..375a34b 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -3701,7 +3701,7 @@ sub config_to_command { } # add usb controllers -my @usbcontrollers = PVE::QemuServer::USB::get_usb_controllers($conf, $bridges, $arch, $machine_type, $usbdesc->{format}, $MAX_USB_DEVICES); +my @usbcontrollers = PVE::QemuServer::USB::get_usb_controllers($conf, $bridges, $arch, $machine_type, $kvmver, $usbdesc->{format}, $MAX_USB_DEVICES); push @$devices, @usbcontrollers if @usbcontrollers; my $vga = parse_vga($conf->{vga}); @@ -3808,7 +3808,7 @@ sub config_to_command { } # usb devices -my @usbdevices = PVE::QemuServer::USB::get_usb_devices($conf, $usbdesc->{format}, $MAX_USB_DEVICES); +my @usbdevices = PVE::QemuServer::USB::get_usb_devices($conf, $usbdesc->{format}, $MAX_USB_DEVICES, $machine_type, $kvmver); push @$devices, @usbdevices if @usbdevices; # serial devices for (my $i = 0; $i < $MAX_SERIAL_PORTS; $i++) { diff --git a/PVE/QemuServer/USB.pm b/PVE/QemuServer/USB.pm index a2097b9..316eb09 100644 --- a/PVE/QemuServer/USB.pm +++ b/PVE/QemuServer/USB.pm @@ -3,6 +3,7 @@ package PVE::QemuServer::USB; use strict; use warnings; use PVE::QemuServer::PCI qw(print_pci_addr); +use PVE::QemuServer; use PVE::JSONSchema; use base 'Exporter'; @@ -34,7 +35,7 @@ sub parse_usb_device { } sub get_usb_controllers { -my ($conf, $bridges, $arch, $machine, $format, $max_usb_devices) = @_; +my ($conf, $bridges, $arch, $machine, $kvmver, $format, $max_usb_devices) = @_; my $devices = []; my $pciaddr = ""; @@ -50,7 +51,10 @@ sub get_usb_controllers { for (my $i = 0; $i < $max_usb_devices; $i++) { next if !$conf->{"usb$i"}; my $d = eval { PVE::JSONSchema::parse_property_string($format,$conf->{"usb$i"}) }; - next if !$d || $d->{usb3}; # do not add usb2 controller if we have only usb3 devices + + # don't add usb2 controller if usb3 device unless it's for spice and + # qemu version < 4.1 - for live migration + next if !$d || ($d->{usb3} && ($d->{host} ne "spice" || PVE::QemuServer::qemu_machine_feature_enabled($machine, $kvmver, 4, 1))); $use_usb2 = 1; } # include usb device config @@ -63,7 +67,10 @@ sub get_usb_controllers { for (my $i = 0; $i < $max_usb_devices; $i++) { next if !$conf->{"usb$i"}; my $d = eval { PVE::JSONSchema::parse_property_string($format,$conf->{"usb$i"}) }; - next if !$d || !$d->{usb3}; + + # don't add usb3 controller if usb3 device is for spice and qemu version + # < 4.1 - for live migrations + next if !$d || !$d->{usb3} || ($d->{host} eq 'spice' && !PVE::QemuServer::qemu_machine_feature_enabled($machine, $kvmver, 4, 1)); $use_usb3 = 1; } @@ -74,7 +81,7 @@ sub get_usb_controllers { } sub get_usb_devices { -my ($conf, $format, $max_usb_devices) = @_; +my ($conf, $format, $max_usb_devices, $machine, $kvmver) = @_; my $devices = []; @@ -87,9 +94,12 @@ sub get_usb_devices { my $hostdevice = parse_usb_device($d->{host}); $hostdevice->{usb3} = $d->{usb3}; if (defined($hostdevice->{spice}) && $hostdevice->{spice}) { - # usb redir support for spice, currently no usb3 + # usb redir support for spice, usb3 available with qemu 4.1 + my $bus = 'ehci'; + $bus = 'xhci' if PVE::QemuServer::qemu_machine_feature_enabled($machine, $kvmver, 4, 1) && $hostdevice->{usb3}; + push @$devices, '-chardev', "spicevmc,id=usbredirchardev$i,name=usbredir"; - push @$devices, '-device', "usb-redir,chardev=usbredirchardev$i,id=usbredirdev$i,bus=ehci.0"; + push @$devices, '-device', "usb-redir,chardev=usbredirchardev$i,id=usbredirdev$i,bus=$bus.0"; } else { push @$devices, '-device', print_usbdevice_full($conf, "usb$i", $hostdevice); } ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH docs] pve-network: add short section explaining Open vSwitch
On 27.08.19 16:31, Aaron Lauterer wrote: > On 8/27/19 12:27 PM, Christian Ebner wrote: >> Signed-off-by: Christian Ebner >> +see the https://pve.proxmox.com/wiki/Open_vSwitch[Open vSwitch wiki page] >> for >> +further details. >> + >> +OVS Bridge >> +^^ >> + >> +Just like a Linux virtual bridge, this will create a new OVS virtual bridge, >> +allowing to attach raw ethernet devices and virtual interfaces such as OVS >> bonds >> +or OVS IntPorts. > > # remove the whole sentence? or phrase it differently? something like the > following? > > The OVS virtual bridge is the base to which raw ethernet devices and virtual > interfaces such as ... can be attached to. > > # should we call it "is the switch to"? sounds weird though. I'd use "is the network device" instead > >> +On creation, you can directly assing raw ethernet devices to attatch to the >> +bridge ports and assing an IP address to the bridge. even if this would be change completely, FYI: s/assing/assign/ s/attatch/attach/ > > On creation you can define the raw ethernet devices attached to the OVS > bridge in the 'bridge_ports' field. You can configure IP addresses and > gateways on the bridge if needed. I'd change the second sentence to: "You can configure IP addresses and gateways also on the bridge directly if needed." (minus potential grammar erros, but I'd like to underline that those IPs are then directly on the bridge and that it can be done independently of the other stuff) > > # no comma? phrase it a bit differently for better understanding. though I am > not really happy about my suggestion either. It something, and I'd rather have something not 100% matching to a writing guide than no content at all. We got some great feedback over the current stat of pve-docs, and that while it's grammar/style can surely be improved, so I'd like to try to not bike-shed this to much... > >> +In contrast to Linux virtual bridges, OVS bridges can carry multiple VLANs >> over >> +a sinlge bridge. > > # this is not true. by now Linux bridges can be set to VLAN aware and thus > reduce the use cases for the OVS quite a bit. With vlan-aware on you cannot do any VXLANs anymore, AFAIK, which OVS still can. But yes, in general that comment is not the full truth so maybe just omit it for now.. ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH docs] pve-network: add short section explaining Open vSwitch
On 8/28/19 9:42 AM, Thomas Lamprecht wrote: On 27.08.19 16:31, Aaron Lauterer wrote: On 8/27/19 12:27 PM, Christian Ebner wrote: Signed-off-by: Christian Ebner +In contrast to Linux virtual bridges, OVS bridges can carry multiple VLANs over +a sinlge bridge. # this is not true. by now Linux bridges can be set to VLAN aware and thus reduce the use cases for the OVS quite a bit. With vlan-aware on you cannot do any VXLANs anymore, AFAIK, which OVS still can. But yes, in general that comment is not the full truth so maybe just omit it for now.. What if we put a subsection "Open vSwitch vs. Linux bridges" / "Comparison to Linux bridges" at the beginning of the OVS section? I think one or two paragraphs there could help people a lot to decide if they even need OVS. Talking about the features and use cases. In which situations the Linux Bridge is not enough anymore and OVS is needed. ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH docs] pve-network: add short section explaining Open vSwitch
On 28.08.19 10:10, Aaron Lauterer wrote: > > > On 8/28/19 9:42 AM, Thomas Lamprecht wrote: >> On 27.08.19 16:31, Aaron Lauterer wrote: >>> On 8/27/19 12:27 PM, Christian Ebner wrote: Signed-off-by: Christian Ebner >>> +In contrast to Linux virtual bridges, OVS bridges can carry multiple VLANs over +a sinlge bridge. >>> >>> # this is not true. by now Linux bridges can be set to VLAN aware and thus >>> reduce the use cases for the OVS quite a bit. >> >> With vlan-aware on you cannot do any VXLANs anymore, AFAIK, which OVS still >> can. >> But yes, in general that comment is not the full truth so maybe just omit it >> for now.. >> > > What if we put a subsection "Open vSwitch vs. Linux bridges" / "Comparison to > Linux bridges" at the beginning of the OVS section? > > I think one or two paragraphs there could help people a lot to decide if they > even need OVS. Talking about the features and use cases. In which situations > the Linux Bridge is not enough anymore and OVS is needed. Sounds good to me. Would then need to be updated from time to time, though, as Linux Bridges have seen quite some improvements over time I'd guess there's more to come in future kernel releases. ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [PATCH container] don't leave fstrim lock if mount_all fails
On 26.08.19 16:06, Oguz Bektas wrote: > when a container has a mountpoint which can't be mounted for some reason, > mount_all dies and the fstrim lock stays. prevent this by moving the call into > eval, warn if any error occurs. applied, but added a little bit information here about the unmount_all case: Still try to unmount all already mounted MPs so that nothing blocking remains left > > Signed-off-by: Oguz Bektas > --- > src/PVE/CLI/pct.pm | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/src/PVE/CLI/pct.pm b/src/PVE/CLI/pct.pm > index 8807633..35ad72f 100755 > --- a/src/PVE/CLI/pct.pm > +++ b/src/PVE/CLI/pct.pm > @@ -774,9 +774,9 @@ __PACKAGE__->register_method ({ > > my $storecfg = PVE::Storage::config(); > my $conf = PVE::LXC::Config->set_lock($vmid, 'fstrim'); > - PVE::LXC::mount_all($vmid, $storecfg, $conf); > eval { > my $path = ""; > + PVE::LXC::mount_all($vmid, $storecfg, $conf); > PVE::LXC::Config->foreach_mountpoint($conf, sub { > my ($name, $mp) = @_; > $path = $mp->{mp}; > @@ -784,6 +784,7 @@ __PACKAGE__->register_method ({ > PVE::Tools::run_command($cmd); > }); > }; > + warn $@ if $@; > > PVE::LXC::umount_all($vmid, $storecfg, $conf, 0); > PVE::LXC::Config->remove_lock($vmid, 'fstrim'); > ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH v3 docs 1/5] Mention GUI for creating a cluster and adding nodes
Signed-off-by: Stefan Reiter --- Sorry for missing 2/2 on previous patch series, had some trouble with the mailing list not accepting my mails. v3: * Changed "Add Node" section to allow better image placement v2: * Changed some wording to remove "you"s and made sections clearer. Big thanks to Aaron for the helpful review. * Do not remove [[pvecm_create_cluster]] tag pvecm.adoc | 78 +- 1 file changed, 59 insertions(+), 19 deletions(-) diff --git a/pvecm.adoc b/pvecm.adoc index e986a75..c41e691 100644 --- a/pvecm.adoc +++ b/pvecm.adoc @@ -108,20 +108,31 @@ recommend to reference nodes by their IP addresses in the cluster configuration. Create the Cluster -- -Login via `ssh` to the first {pve} node. Use a unique name for your cluster. -This name cannot be changed later. The cluster name follows the same rules as -node names. +Use a unique name for your cluster. This name cannot be changed later. The +cluster name follows the same rules as node names. + +Create via Web GUI +~~ + +Under __Datacenter -> Cluster__, click on *Create Cluster*. Enter the cluster +name and select a network connection from the dropdown to serve as the main +cluster network (Link 0). It defaults to the IP resolved via the node's +hostname. + +To add a second link as fallback, you can select the 'Advanced' checkbox and +choose an additional network interface (Link 1, see also +xref:pvecm_redundancy[Corosync Redundancy]). + +Create via Command Line +~~~ + +Login via `ssh` to the first {pve} node and run the following command: hp1# pvecm create CLUSTERNAME -NOTE: It is possible to create multiple clusters in the same physical or logical -network. Use unique cluster names if you do so. To avoid human confusion, it is -also recommended to choose different names even if clusters do not share the -cluster network. - -To check the state of your cluster use: +To check the state of the new cluster use: hp1# pvecm status @@ -131,9 +142,9 @@ Multiple Clusters In Same Network ~ It is possible to create multiple clusters in the same physical or logical -network. Each such cluster must have a unique name, this does not only helps -admins to distinguish on which cluster they currently operate, it is also -required to avoid possible clashes in the cluster communication stack. +network. Each such cluster must have a unique name to avoid possible clashes in +the cluster communication stack. This also helps avoid human confusion by making +clusters clearly distinguishable. While the bandwidth requirement of a corosync cluster is relatively low, the latency of packages and the package per second (PPS) rate is the limiting @@ -145,6 +156,37 @@ infrastructure for bigger clusters. Adding Nodes to the Cluster --- +CAUTION: A node that is about to be added to the cluster cannot hold any guests. +All existing configuration in `/etc/pve` is overwritten when joining a cluster, +since guest IDs could be conflicting. As a workaround create a backup of the +guest (`vzdump`) and restore it as a different ID after the node has been added +to the cluster. + +Add Node via GUI + + +Login to the web interface on an existing cluster node. Under __Datacenter -> +Cluster__, click the button *Join Information* at the top. Then, click on the +button *Copy Information*. Alternatively, copy the string from the 'Information' +field manually. + +Next, login to the web interface on the node you want to add. +Under __Datacenter -> Cluster__, click on *Join Cluster*. Fill in the +'Information' field with the text you copied earlier. + +For security reasons, the cluster password has to be entered manually. + +NOTE: To enter all required data manually, you can disable the 'Assisted Join' +checkbox. + +After clicking on *Join* the node will immediately be added to the cluster. You +might need to reload the web page and re-login with the cluster credentials. + +Confirm that your node is visible under __Datacenter -> Cluster__. + +Add Node via Command Line +~ + Login via `ssh` to the node you want to add. @@ -154,11 +196,6 @@ Login via `ssh` to the node you want to add. For `IP-ADDRESS-CLUSTER` use the IP or hostname of an existing cluster node. An IP address is recommended (see xref:pvecm_corosync_addresses[Link Address Types]). -CAUTION: A new node cannot hold any VMs, because you would get -conflicts about identical VM IDs. Also, all existing configuration in -`/etc/pve` is overwritten when you join a new node to the cluster. To -workaround, use `vzdump` to backup and restore to a different VMID after -adding the node to the cluster. To check the state of the cluster use: @@ -229,6 +266,8 @@ pvecm add IP-ADDRESS-CLUSTER -link0 LOCAL-IP-ADDRESS-LINK0 If you want to use the built-in xref:pvecm_redundancy[redundancy
[pve-devel] [PATCH v3 docs 5/5] Add screenshot references to cluster GUI section
Signed-off-by: Stefan Reiter --- pvecm.adoc | 6 ++ 1 file changed, 6 insertions(+) diff --git a/pvecm.adoc b/pvecm.adoc index c41e691..7bccaa7 100644 --- a/pvecm.adoc +++ b/pvecm.adoc @@ -114,6 +114,8 @@ cluster name follows the same rules as node names. Create via Web GUI ~~ +[thumbnail="screenshot/gui-cluster-create.png"] + Under __Datacenter -> Cluster__, click on *Create Cluster*. Enter the cluster name and select a network connection from the dropdown to serve as the main cluster network (Link 0). It defaults to the IP resolved via the node's @@ -165,11 +167,15 @@ to the cluster. Add Node via GUI +[thumbnail="screenshot/gui-cluster-join-information.png"] + Login to the web interface on an existing cluster node. Under __Datacenter -> Cluster__, click the button *Join Information* at the top. Then, click on the button *Copy Information*. Alternatively, copy the string from the 'Information' field manually. +[thumbnail="screenshot/gui-cluster-join.png"] + Next, login to the web interface on the node you want to add. Under __Datacenter -> Cluster__, click on *Join Cluster*. Fill in the 'Information' field with the text you copied earlier. -- 2.20.1 ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH v3 docs 4/5] Add cluster join screenshot
Signed-off-by: Stefan Reiter --- images/screenshot/gui-cluster-join.png | Bin 0 -> 61710 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/screenshot/gui-cluster-join.png diff --git a/images/screenshot/gui-cluster-join.png b/images/screenshot/gui-cluster-join.png new file mode 100644 index ..71bea4a9068efd53d307b786989cad667cf9aeff GIT binary patch literal 61710 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
[pve-devel] [PATCH v3 docs 3/5] Add cluster join information screenshot
Signed-off-by: Stefan Reiter --- .../screenshot/gui-cluster-join-information.png | Bin 0 -> 53366 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 images/screenshot/gui-cluster-join-information.png diff --git a/images/screenshot/gui-cluster-join-information.png b/images/screenshot/gui-cluster-join-information.png new file mode 100644 index ..7ecb9030eb6607b85d37756af000bb899b8acef2 GIT binary patch literal 53366 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