Re: [pve-devel] Roadmap - improved SDN support
Hi, thanks for sharing the links... -- Thomas Naumann Abteilung Netze und Kommunikation Otto-von-Guericke Universität Magdeburg Universitätsrechenzentrum Universitätsplatz 2 39106 Magdeburg fon: +49 391 67-58563 email: thomas.naum...@ovgu.de On Thu, 2019-07-11 at 10:25 +0200, Thomas Lamprecht wrote: > Hi, > > On 7/11/19 6:11 AM, Naumann, Thomas wrote: > > Hi, > > > > at datacenter of university we are working on a saas-platform to > > automaticly deploy VMs, container, networks, services via web-gui > > for > > students and employies. So, we are searching for a technicly basis > > for > > this project. > > Because "Proxmox" runs several Clusters in our datacenter and does > > a > > great jobs we wonder if it could be a basis for this project. We > > known > > there is also "Openstack" but I think it might be some kind of > > overkill. > > What do you think about that? > > > > proxmox.com has some testimonials from universities using Proxmox VE > in a lab course or similar, see (especially the first two, I'd > guess): > > https://www.proxmox.com/en/proxmox-ve/testimonials/category/edu-gov > > Also, as Proxmox VE has a REST api which allows nowadays build a > cluster, > create & manage VMs and CTs, you should not have big problems in > integrating > and adapting it into your own platform. > > https://pve.proxmox.com/pve-docs/api-viewer/index.html > > cheers, > Thomas > ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [PATCH qemu-server] use new pcie port hardware
On 7/8/19 11:25 AM, Dominik Csapak wrote: > with qemu 4.0 we can make use of the new pcie-root-ports with settings > for the width/speed which can resolve issues with some hardware combinations > when negioating link speed > > so we add a new q35 cfg that we include with machine types >= 4.0 > to preserve live migration of machines without passthrough but q35 > > for details about the link speeds see: > > pcie: Enhanced link speed and width support > https://lists.gnu.org/archive/html/qemu-devel/2018-12/msg02827.html > > Signed-off-by: Dominik Csapak > --- > i would like to get this into 6.0 before release, else we either cannot do > this > until qemu 4.0.1/4.1 or have some situations where live migration is not > possible > > an alternative would be to only do this change when we do pci(e) passthrough > which would minimize the impact on live migration, but makes the code a bit > more complicated > applied, but I only skimmed the new config so I'd be great to get another cross-check of it soon... > Makefile | 1 + > PVE/QemuServer.pm | 9 +++ > PVE/QemuServer/USB.pm | 6 +- > pve-q35-4.0.cfg | 161 ++ > 4 files changed, 172 insertions(+), 5 deletions(-) > create mode 100644 pve-q35-4.0.cfg > > diff --git a/Makefile b/Makefile > index 8274060..6e8fc78 100644 > --- a/Makefile > +++ b/Makefile > @@ -77,6 +77,7 @@ install: ${PKGSOURCES} > install -d ${DESTDIR}/usr/share/${PACKAGE} > install -m 0644 pve-usb.cfg ${DESTDIR}/usr/share/${PACKAGE} > install -m 0644 pve-q35.cfg ${DESTDIR}/usr/share/${PACKAGE} > + install -m 0644 pve-q35-4.0.cfg ${DESTDIR}/usr/share/${PACKAGE} > install -m 0644 -D qm.bash-completion ${DESTDIR}/${BASHCOMPLDIR}/qm > install -m 0644 -D qmrestore.bash-completion > ${DESTDIR}/${BASHCOMPLDIR}/qmrestore > install -m 0644 -D qm.zsh-completion ${DESTDIR}/${ZSHCOMPLDIR}/_qm > diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm > index 5ef92a3..9f29927 100644 > --- a/PVE/QemuServer.pm > +++ b/PVE/QemuServer.pm > @@ -3628,6 +3628,15 @@ sub config_to_command { > push @$cmd, '-drive', > "if=pflash,unit=1,format=$format,id=drive-efidisk0,file=$path"; > } > > +# load q35 config > +if ($q35) { > + # we use different pcie-port hardware for qemu >= 4.0 for passthrough > + if (qemu_machine_feature_enabled($machine_type, $kvmver, 4, 0)) { > + push @$devices, '-readconfig', > '/usr/share/qemu-server/pve-q35-4.0.cfg'; > + } else { > + push @$devices, '-readconfig', '/usr/share/qemu-server/pve-q35.cfg'; > + } > +} > > # add usb controllers > my @usbcontrollers = PVE::QemuServer::USB::get_usb_controllers($conf, > $bridges, $arch, $machine_type, $usbdesc->{format}, $MAX_USB_DEVICES); > diff --git a/PVE/QemuServer/USB.pm b/PVE/QemuServer/USB.pm > index 9eaaccc..a2097b9 100644 > --- a/PVE/QemuServer/USB.pm > +++ b/PVE/QemuServer/USB.pm > @@ -42,11 +42,7 @@ sub get_usb_controllers { > if ($arch eq 'aarch64') { > $pciaddr = print_pci_addr('ehci', $bridges, $arch, $machine); > push @$devices, '-device', "usb-ehci,id=ehci$pciaddr"; > -} elsif ($machine =~ /q35/) { # FIXME: combine this and > machine_type_is_q35 > - # the q35 chipset support native usb2, so we enable usb controller > - # by default for this machine type > -push @$devices, '-readconfig', '/usr/share/qemu-server/pve-q35.cfg'; > -} else { > +} elsif ($machine !~ /q35/) { # FIXME: combine this and > machine_type_is_q35 > $pciaddr = print_pci_addr("piix3", $bridges, $arch, $machine); > push @$devices, '-device', "piix3-usb-uhci,id=uhci$pciaddr.0x2"; > > diff --git a/pve-q35-4.0.cfg b/pve-q35-4.0.cfg > new file mode 100644 > index 000..9a294bd > --- /dev/null > +++ b/pve-q35-4.0.cfg > @@ -0,0 +1,161 @@ > +[device "ehci"] > + driver = "ich9-usb-ehci1" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1d.7" > + > +[device "uhci-1"] > + driver = "ich9-usb-uhci1" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1d.0" > + masterbus = "ehci.0" > + firstport = "0" > + > +[device "uhci-2"] > + driver = "ich9-usb-uhci2" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1d.1" > + masterbus = "ehci.0" > + firstport = "2" > + > +[device "uhci-3"] > + driver = "ich9-usb-uhci3" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1d.2" > + masterbus = "ehci.0" > + firstport = "4" > + > +[device "ehci-2"] > + driver = "ich9-usb-ehci2" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1a.7" > + > +[device "uhci-4"] > + driver = "ich9-usb-uhci4" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1a.0" > + masterbus = "ehci-2.0" > + firstport = "0" > + > +[device "uhci-5"] > + driver = "ich9-usb-uhci5" > + multifunction = "on" > + bus = "pcie.0" > + addr = "1a.1" > + masterbus = "ehci-2.0" > + firstport = "2" > + > +[device "uhci-6"] >
[pve-devel] [PATCH v2 lvm] fix #2184: filter lvs from guests
Signed-off-by: Oguz Bektas --- v1 -> v2: * use format-patch flags --no-signature and --no-numbered ...01-filter-zvols-and-lvs-from-guests.patch} | 21 +-- ...002-enable-issue_discards-by-default.patch | 11 -- patch => 0003-disable-init-scripts.patch} | 14 ++--- patchdir/series | 5 +++-- 4 files changed, 23 insertions(+), 28 deletions(-) rename patchdir/{0001-filter-zvols-and-PVE-VG-by-default.patch => 0001-filter-zvols-and-lvs-from-guests.patch} (53%) rename patchdir/{0006-disable-init-scripts.patch => 0003-disable-init-scripts.patch} (74%) diff --git a/patchdir/0001-filter-zvols-and-PVE-VG-by-default.patch b/patchdir/0001-filter-zvols-and-lvs-from-guests.patch similarity index 53% rename from patchdir/0001-filter-zvols-and-PVE-VG-by-default.patch rename to patchdir/0001-filter-zvols-and-lvs-from-guests.patch index 5ebe494..bab1f44 100644 --- a/patchdir/0001-filter-zvols-and-PVE-VG-by-default.patch +++ b/patchdir/0001-filter-zvols-and-lvs-from-guests.patch @@ -1,30 +1,29 @@ -From 65e9206964c546842ccd8cc8c7885b4feb66c429 Mon Sep 17 00:00:00 2001 +From 3d331953abde0c9d70b3741bbcc38d36cd0a55b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Fri, 17 Mar 2017 11:59:25 +0100 -Subject: [PATCH 1/6] filter zvols and PVE VG by default +Subject: [PATCH] filter zvols and lvs from guests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Grünbichler +Signed-off-by: Oguz Bektas --- - conf/example.conf.in | 3 +++ - 1 file changed, 3 insertions(+) + conf/example.conf.in | 4 + 1 file changed, 4 insertions(+) diff --git a/conf/example.conf.in b/conf/example.conf.in -index 736b4bd..1a8a67b 100644 +index 0204f4b5a..cd921e10e 100644 --- a/conf/example.conf.in +++ b/conf/example.conf.in -@@ -125,6 +125,9 @@ devices { +@@ -124,6 +124,10 @@ devices { + # as the combination might produce unexpected results (test changes.) # Run vgscan after changing the filter to regenerate the cache. - # See the use_lvmetad comment for a special case regarding filters. # + # Do not scan ZFS zvols (to avoid problems on ZFS zvols snapshots) -+ global_filter = [ "r|/dev/zd.*|", "r|/dev/mapper/pve-.*|" ] ++ # Also do not scan LVM disks created by guests ++ global_filter = [ "r|/dev/zd.*|", "r|/dev/mapper/pve-.*|" "r|/dev/mapper/.*-vm--[0-9]+--disk--[0-9]+|"] + # Example # Accept every block device: # filter = [ "a|.*/|" ] --- -2.14.1 - diff --git a/patchdir/0002-enable-issue_discards-by-default.patch b/patchdir/0002-enable-issue_discards-by-default.patch index ac66732..8f69989 100644 --- a/patchdir/0002-enable-issue_discards-by-default.patch +++ b/patchdir/0002-enable-issue_discards-by-default.patch @@ -1,7 +1,7 @@ -From 829981232ec0ec4e8b2cae15d3fb940907feb28f Mon Sep 17 00:00:00 2001 +From a49c621f30b9d72f0439e9cf8fe7a605af7f438e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Fri, 17 Mar 2017 11:59:54 +0100 -Subject: [PATCH 2/6] enable issue_discards by default +Subject: [PATCH] enable issue_discards by default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -12,10 +12,10 @@ Signed-off-by: Fabian Grünbichler 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/example.conf.in b/conf/example.conf.in -index 1a8a67b..56b0795 100644 +index cd921e10e..3ec9e4038 100644 --- a/conf/example.conf.in +++ b/conf/example.conf.in -@@ -301,7 +301,7 @@ devices { +@@ -286,7 +286,7 @@ devices { # benefit from discards, but SSDs and thinly provisioned LUNs # generally do. If enabled, discards will only be issued if both the # storage and kernel provide support. @@ -24,6 +24,3 @@ index 1a8a67b..56b0795 100644 # Configuration option devices/allow_changes_with_duplicate_pvs. # Allow VG modification while a PV appears on multiple devices. --- -2.14.1 - diff --git a/patchdir/0006-disable-init-scripts.patch b/patchdir/0003-disable-init-scripts.patch similarity index 74% rename from patchdir/0006-disable-init-scripts.patch rename to patchdir/0003-disable-init-scripts.patch index 2456578..0982680 100644 --- a/patchdir/0006-disable-init-scripts.patch +++ b/patchdir/0003-disable-init-scripts.patch @@ -1,21 +1,21 @@ -From 39b527272533a3138ffc7f4988235176eb889d03 Mon Sep 17 00:00:00 2001 +From 808b192f09f93acd32d91a7eec6185e38db176d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Mon, 9 Oct 2017 13:05:31 +0200 -Subject: [PATCH 6/6] disable init scripts +Subject: [PATCH] disable init scripts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Grünbichler --- - debian/rules | 3 --- - 1 file changed, 3 deletions(-) + debian/rules | 4 + 1 file changed, 4 deletions(-) diff
[pve-devel] applied: [PATCH manager] gui: ceph configdb: fix store load
On 7/11/19 2:52 PM, Dominik Csapak wrote: > instead of using API2Request, use the proper grid store load > > Signed-off-by: Dominik Csapak > --- > www/manager6/ceph/Config.js | 30 +++--- > 1 file changed, 7 insertions(+), 23 deletions(-) > code looks much nicer now too, applied, thanks! ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [PATCH docs] make changelog single source of version
On 7/5/19 11:44 AM, Thomas Lamprecht wrote: > Signed-off-by: Thomas Lamprecht > --- > Makefile| 12 ++-- > pve-doc-generator.mk.in | 4 +--- > 2 files changed, 7 insertions(+), 9 deletions(-) > > diff --git a/Makefile b/Makefile > index 4399d37..53cf77b 100644 > --- a/Makefile > +++ b/Makefile > @@ -1,3 +1,5 @@ > +include /usr/share/dpkg/pkg-info.mk > + > # overwriting below ensures that we can build without full PVE installed > DGDIR=. > ASCIIDOC_PVE=./asciidoc-pve > @@ -6,16 +8,13 @@ GEN_PACKAGE=pve-doc-generator > DOC_PACKAGE=pve-docs > MEDIAWIKI_PACKAGE=pve-docs-mediawiki > > -# also update debian/changelog > -PKGREL=2 > - > GITVERSION:=$(shell git rev-parse HEAD) > > ARCH:=$(shell dpkg-architecture -qDEB_BUILD_ARCH) > > -GEN_DEB=${GEN_PACKAGE}_${DOCRELEASE}-${PKGREL}_${ARCH}.deb > -DOC_DEB=${DOC_PACKAGE}_${DOCRELEASE}-${PKGREL}_all.deb > -MEDIAWIKI_DEB=${MEDIAWIKI_PACKAGE}_${DOCRELEASE}-${PKGREL}_all.deb > +GEN_DEB=${GEN_PACKAGE}_${DEB_VERSION_UPSTREAM_REVISION}_${ARCH}.deb > +DOC_DEB=${DOC_PACKAGE}_${DEB_VERSION_UPSTREAM_REVISION}_all.deb > +MEDIAWIKI_DEB=${MEDIAWIKI_PACKAGE}_${DEB_VERSION_UPSTREAM_REVISION}_all.deb > > export SOURCE_DATE_EPOCH ?= $(shell dpkg-parsechangelog -STimestamp) > SOURCE_DATE_HUMAN := $(shell date -d "@${SOURCE_DATE_EPOCH}") > @@ -34,6 +33,7 @@ ADOC_SOURCES_GUESS=$(filter-out %-synopsis.adoc %-opts.adoc > %-table.adoc, $(wild > > pve-doc-generator.mk: .pve-doc-depends pve-doc-generator.mk.in > cat pve-doc-generator.mk.in .pve-doc-depends > $@.tmp > + sed -i "s/@RELEASE@$$/${DEB_VERSION_UPSTREAM}/" $@.tmp > mv $@.tmp $@ > > -include ./pve-doc-generator.mk > diff --git a/pve-doc-generator.mk.in b/pve-doc-generator.mk.in > index e4678a7..d0be25a 100644 > --- a/pve-doc-generator.mk.in > +++ b/pve-doc-generator.mk.in > @@ -1,6 +1,4 @@ > -# also update debian/changelog > -# FIXME: depend on dpkg-dev and use $(DEB_VERSION_UPSTREAM) here? > -DOCRELEASE=6.0 > +DOCRELEASE=@RELEASE@ > > DGDIR?=/usr/share/pve-doc-generator > > due to lack of opposing review and frustration with changing the version number in multiple places: applied ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH lvm] fix #2184: filter lvs from guests
On 7/11/19 3:34 PM, Oguz Bektas wrote: > adds another pattern "r|/dev/mapper/.*-vm--[0-9]+--disk--[0-9]+|" to > global_filter in the default configuration, in light of this issue[0] > > [0]: https://forum.proxmox.com/threads/random-migration-errors.53454/ > Looks OK, but does not applies, i.e., the recent "backport: udev: do not overwrite ID_MODEL in rules" commit's touching patchdir/series conflicts with yours.. Can you rebase, and possibly try to use the "--no-signature" and "--no-numbered" git format-patch option switches, which makes those patches a bit more stable. > Signed-off-by: Oguz Bektas > --- > ...01-filter-zvols-and-lvs-from-guests.patch} | 20 ++- > ...002-enable-issue_discards-by-default.patch | 10 +- > patch => 0003-disable-init-scripts.patch} | 15 +++--- > patchdir/series | 4 ++-- > 4 files changed, 26 insertions(+), 23 deletions(-) > rename patchdir/{0001-filter-zvols-and-PVE-VG-by-default.patch => > 0001-filter-zvols-and-lvs-from-guests.patch} (53%) > rename patchdir/{0006-disable-init-scripts.patch => > 0003-disable-init-scripts.patch} (73%) > > diff --git a/patchdir/0001-filter-zvols-and-PVE-VG-by-default.patch > b/patchdir/0001-filter-zvols-and-lvs-from-guests.patch > similarity index 53% > rename from patchdir/0001-filter-zvols-and-PVE-VG-by-default.patch > rename to patchdir/0001-filter-zvols-and-lvs-from-guests.patch > index 5ebe494..17aeb04 100644 > --- a/patchdir/0001-filter-zvols-and-PVE-VG-by-default.patch > +++ b/patchdir/0001-filter-zvols-and-lvs-from-guests.patch > @@ -1,30 +1,32 @@ > -From 65e9206964c546842ccd8cc8c7885b4feb66c429 Mon Sep 17 00:00:00 2001 > +From 3d331953abde0c9d70b3741bbcc38d36cd0a55b4 Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= > Date: Fri, 17 Mar 2017 11:59:25 +0100 > -Subject: [PATCH 1/6] filter zvols and PVE VG by default > +Subject: [PATCH 1/3] filter zvols and lvs from guests > MIME-Version: 1.0 > Content-Type: text/plain; charset=UTF-8 > Content-Transfer-Encoding: 8bit > > Signed-off-by: Fabian Grünbichler > +Signed-off-by: Oguz Bektas > --- > - conf/example.conf.in | 3 +++ > - 1 file changed, 3 insertions(+) > + conf/example.conf.in | 4 > + 1 file changed, 4 insertions(+) > > diff --git a/conf/example.conf.in b/conf/example.conf.in > -index 736b4bd..1a8a67b 100644 > +index 0204f4b5a..cd921e10e 100644 > --- a/conf/example.conf.in > +++ b/conf/example.conf.in > -@@ -125,6 +125,9 @@ devices { > +@@ -124,6 +124,10 @@ devices { > + # as the combination might produce unexpected results (test changes.) > # Run vgscan after changing the filter to regenerate the cache. > - # See the use_lvmetad comment for a special case regarding filters. > # > +# Do not scan ZFS zvols (to avoid problems on ZFS zvols snapshots) > -+global_filter = [ "r|/dev/zd.*|", "r|/dev/mapper/pve-.*|" ] > ++# Also do not scan LVM disks created by guests > ++global_filter = [ "r|/dev/zd.*|", "r|/dev/mapper/pve-.*|" > "r|/dev/mapper/.*-vm--[0-9]+--disk--[0-9]+|"] > + > # Example > # Accept every block device: > # filter = [ "a|.*/|" ] > -- > -2.14.1 > +2.20.1 > > diff --git a/patchdir/0002-enable-issue_discards-by-default.patch > b/patchdir/0002-enable-issue_discards-by-default.patch > index ac66732..a957589 100644 > --- a/patchdir/0002-enable-issue_discards-by-default.patch > +++ b/patchdir/0002-enable-issue_discards-by-default.patch > @@ -1,7 +1,7 @@ > -From 829981232ec0ec4e8b2cae15d3fb940907feb28f Mon Sep 17 00:00:00 2001 > +From a49c621f30b9d72f0439e9cf8fe7a605af7f438e Mon Sep 17 00:00:00 2001 > From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= > Date: Fri, 17 Mar 2017 11:59:54 +0100 > -Subject: [PATCH 2/6] enable issue_discards by default > +Subject: [PATCH 2/3] enable issue_discards by default > MIME-Version: 1.0 > Content-Type: text/plain; charset=UTF-8 > Content-Transfer-Encoding: 8bit > @@ -12,10 +12,10 @@ Signed-off-by: Fabian Grünbichler > > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/conf/example.conf.in b/conf/example.conf.in > -index 1a8a67b..56b0795 100644 > +index cd921e10e..3ec9e4038 100644 > --- a/conf/example.conf.in > +++ b/conf/example.conf.in > -@@ -301,7 +301,7 @@ devices { > +@@ -286,7 +286,7 @@ devices { > # benefit from discards, but SSDs and thinly provisioned LUNs > # generally do. If enabled, discards will only be issued if both the > # storage and kernel provide support. > @@ -25,5 +25,5 @@ index 1a8a67b..56b0795 100644 > # Configuration option devices/allow_changes_with_duplicate_pvs. > # Allow VG modification while a PV appears on multiple devices. > -- > -2.14.1 > +2.20.1 > > diff --git a/patchdir/0006-disable-init-scripts.patch > b/patchdir/0003-disable-init-scripts.patch > similarity index 73% > rename from patchdir/0006-disable-init-scripts.patch > rename to patchdir/0003-disable-init-scripts.patch
[pve-devel] applied: [PATCH i18n] update turkish translation
On 7/11/19 4:18 PM, Oguz Bektas wrote: > Signed-off-by: Oguz Bektas > --- > tr.po | 210 +- > 1 file changed, 92 insertions(+), 118 deletions(-) > applied, thanks! ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [PATCH kernel-meta 0/3] efiboot helper mount namespace
On 7/11/19 11:22 AM, Fabian Grünbichler wrote: > based on Thomas idea, but simplified (e.g., no extra 'internal-only' > command), and extended to the zz-pve-efiboot hook script as well. I'd not call "re-execing all and then needing to look that no re-exec loop develops in a slightly racy way" simpler ;-) but it all works and makes sharing the concept with the kernel hook really easier than my POC, so applied, thanks! > > Fabian Grünbichler (3): > efiboot: add new mount namespace helper > zz-pve-efiboot: re-exec in mount namespace > pve-efiboot-tool: initialize in mount namespace > > bin/pve-efiboot-tool | 1 + > efiboot/functions | 9 + > efiboot/zz-pve-efiboot | 2 ++ > 3 files changed, 12 insertions(+) > ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [PATCH docs] boot/zfs: add docs for pve-efiboot-tool
On 7/11/19 1:32 PM, Fabian Grünbichler wrote: > Signed-off-by: Fabian Grünbichler > --- > local-zfs.adoc | 6 ++ > system-booting.adoc | 36 +++- > 2 files changed, 37 insertions(+), 5 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 storage 1/3] Diskmanage: change parttype uuid detection
On 7/11/19 4:32 PM, Fabian Grünbichler wrote: > s/for/foreach > > here and more below.. > > (according to our style guide, although this file in particular already > has lots of 'for's :-P) the style guide should be massaged to allow both, as for and foreach are both OK (and unofficially blessed by our head of style guide Wolfgang a bit ago in a offline discussion ;) ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH storage] Diskmanage: add flag for encrypted osds
assuming the different approach compared to the bluestore variable is to avoid false negatives for OSDs encrypted in some other way, this looks good to me. On Thu, Jul 11, 2019 at 12:52:44PM +0200, Dominik Csapak wrote: > we can only do this here, since the ceph cluster is not aware of > osd encryption, only the local node is (via ceph-volume and lv tags) > > this way, we are able to show an 'encrypted' flag in the disk gui at least > > Signed-off-by: Dominik Csapak > --- > this patch is intended to be commited on top of my last series > about the parttype uuid changes, if that is not commited > i can rebase and send this patch again (if desired) > > PVE/Diskmanage.pm | 6 ++ > 1 file changed, 6 insertions(+) > > diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm > index 8230aad..9b9d007 100644 > --- a/PVE/Diskmanage.pm > +++ b/PVE/Diskmanage.pm > @@ -295,6 +295,9 @@ sub get_ceph_volume_infos { > if (($type eq 'block' || $type eq 'data') && $fields->[2] =~ > m/ceph.osd_id=([^,]+)/) { > $result->{$dev}->{osdid} = $1; > $result->{$dev}->{bluestore} = ($type eq 'block'); > + if ($fields->[2] =~ m/ceph\.encrypted=1/) { > + $result->{$dev}->{encrypted} = 1; > + } > } else { > # undef++ becomes '1' (see `perldoc perlop`: Auto-increment) > $result->{$dev}->{$type}++; > @@ -585,6 +588,7 @@ sub get_disks { > > my $osdid = -1; > my $bluestore = 0; > + my $osdencrypted; > > my $journal_count = 0; > my $db_count = 0; > @@ -641,6 +645,7 @@ sub get_disks { > if (defined($ceph_volume->{osdid})) { > $osdid = $ceph_volume->{osdid}; > $bluestore = 1 if $ceph_volume->{bluestore}; > + $osdencrypted = $ceph_volume->{encrypted}; > } > } > > @@ -659,6 +664,7 @@ sub get_disks { > $disklist->{$dev}->{osdid} = $osdid; > $disklist->{$dev}->{journals} = $journal_count if $journal_count; > $disklist->{$dev}->{bluestore} = $bluestore if $osdid != -1; > + $disklist->{$dev}->{osdencrypted} = $osdencrypted if > defined($osdencrypted); > $disklist->{$dev}->{db} = $db_count if $db_count; > $disklist->{$dev}->{wal} = $wal_count if $wal_count; > }); > -- > 2.20.1 > > > ___ > pve-devel mailing list > pve-devel@pve.proxmox.com > https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH storage 1/3] Diskmanage: change parttype uuid detection
some style/naming stuff inline, with one exception. rest of the series looks good. On Thu, Jul 11, 2019 at 12:49:16PM +0200, Dominik Csapak wrote: > previously ceph included a udev rule to populate > /dev/disk/by-parttypeuuid/ > > but not anymore, so we now use 'lsblk --json -o path,parttype' to > get a mapping between parttype uuid and partition > > fix the test by simulating empty lsblk output > > Signed-off-by: Dominik Csapak > --- > PVE/Diskmanage.pm | 108 -- > test/disklist_test.pm | 9 +++- > 2 files changed, 79 insertions(+), 38 deletions(-) > > diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm > index 0deb1a6..8230aad 100644 > --- a/PVE/Diskmanage.pm > +++ b/PVE/Diskmanage.pm > @@ -6,6 +6,7 @@ use PVE::ProcFSTools; > use Data::Dumper; > use Cwd qw(abs_path); > use Fcntl ':mode'; > +use JSON; > > use PVE::Tools qw(extract_param run_command file_get_contents > file_read_firstline dir_glob_regex dir_glob_foreach trim); > > @@ -15,6 +16,7 @@ my $SGDISK = "/sbin/sgdisk"; > my $PVS = "/sbin/pvs"; > my $LVS = "/sbin/lvs"; > my $UDEVADM = "/bin/udevadm"; > +my $LSBLK = "/bin/lsblk"; > > sub verify_blockdev_path { > my ($rel_path) = @_; > @@ -154,7 +156,38 @@ sub get_smart_data { > return $smartdata; > } > > +sub get_lsblk_info() { I'd name this less general, unless you plan on including other information as well? > +my $cmd = [$LSBLK, '--json', '-o', 'path,parttype']; > +my $output = ""; > +my $res = {}; > +eval { > + run_command($cmd, outfunc => sub { > + $output .= "$_\n"; > + }); > +}; > +warn "$@\n" if $@; at this point $output might be an empty string, in which case we can just return an empty list. not very likely to happen, but for certain errors lsblk just prints an error message on stderr and nothing on stdout. this is the only thing that IMHO must really be cleared up, as it can cause unnecessary and confusing warnings from decode_json. > +my $list = []; > +eval { > + $list = decode_json($output); > + $list = $list->{blockdevices}; # pull out the device list > +}; > +warn "$@\n" if $@; now $list is either [] (decode_json failed or no blockdevices found) undef (json does not contain blockdevices key) a list of blockdevices since you don't use $list much, why not something like my $parsed = eval { json_decode($output) }; warn "$@\n" if $@; my $list = $parsed->{blockdevices} // []; much more readable IMHO. > + > +for my $dev (@$list) { s/for/foreach here and more below.. (according to our style guide, although this file in particular already has lots of 'for's :-P) > + next if !($dev->{parttype}); > + my $type = $dev->{parttype}; > + my $path = $dev->{path}; > + if (!$res->{$type}) { > + $res->{$type} = []; > + } > + push @{$res->{$type}}, $path; this could also be shortened somewhat: next if !($dev->{parttype}); my $type = $dev->{parttype}; $res->{$type} = [] if !defined($res->{type}); push @{$res->{$type}}, $dev->{path}; > +} > + > +return $res; > +} > + > sub get_zfs_devices { > +my ($lsblk) = @_; I'd rename this parameter - it's not important where this information comes from, but what it is - a mapping from (part)uuids to device paths > my $list = {}; > > return {} if ! -x $ZPOOL; > @@ -176,19 +209,24 @@ sub get_zfs_devices { > # because maybe zfs tools are not installed > warn "$@\n" if $@; > > -my $applezfsuuid = "6a898cc3-1dd2-11b2-99a6-080020736631"; > -my $bsdzfsuuid = "516e7cba-6ecf-11d6-8ff8-00022d09712b"; > +my $uuids = [ > + "6a898cc3-1dd2-11b2-99a6-080020736631", # apple > + "516e7cba-6ecf-11d6-8ff8-00022d09712b", # bsd > +]; > > -dir_glob_foreach('/dev/disk/by-parttypeuuid', > "($applezfsuuid|$bsdzfsuuid)\..+", sub { > - my ($entry) = @_; > - my $real_dev = abs_path("/dev/disk/by-parttypeuuid/$entry"); > - $list->{$real_dev} = 1; > -}); > +for my $uuid (@$uuids) { > + if ($lsblk->{$uuid}) { > + for my $dev (@{$lsblk->{$uuid}}) { > + $list->{$dev} = 1; > + } > + } > +} this code is a prime candidate for refactoring into its own sub, e.g. (untested, and not very pretty variable names): my $get_devices_by_partuuid = sub { my ($uuid_device_map, $partuuids, $res) = @_; my $res = {} if !defined($res); foreach my $uuid (@$partuuids) { map { $res->{$_} = 1 } @{$uuid_device_map->{$uuid}}; } return $res; } and now all the get_foo subs can just call this with their list of target uuids (and partially filled $res). > > return $list; also, the return variable is called $list here (while it is a hash), but $___hash or $___list on the caller side depending on storage.. > } > > sub get_lvm_devices { > +my ($lsblk) = @_; > my $list = {}; > eval { > run_command([$PVS,
[pve-devel] [PATCH i18n] update turkish translation
Signed-off-by: Oguz Bektas --- tr.po | 210 +- 1 file changed, 92 insertions(+), 118 deletions(-) diff --git a/tr.po b/tr.po index 202535b..0d59b8a 100644 --- a/tr.po +++ b/tr.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: proxmox translations\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: Thu Jul 4 16:18:05 2019\n" -"PO-Revision-Date: 2019-04-10 14:09+0200\n" +"PO-Revision-Date: 2019-07-11 16:18+0200\n" "Last-Translator: Oguz Bektas \n" "Language-Team: Turkish\n" "Language: tr\n" @@ -16,7 +16,7 @@ msgstr "" "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" +"X-Generator: Poedit 2.2.1\n" #: pve-manager/www/manager6/lxc/MPEdit.js:213 msgid "/some/path" @@ -81,7 +81,7 @@ msgstr "Aktif" #: pve-manager/www/manager6/dc/AuthEdit.js:36 #: pve-manager/www/manager6/dc/AuthView.js:66 msgid "Active Directory Server" -msgstr "" +msgstr "Active Directory Sunucusu" #: proxmox-widget-toolkit/Utils.js:410 #: proxmox-widget-toolkit/window/Edit.js:253 pmg-gui/js/ActionList.js:102 @@ -127,6 +127,8 @@ msgid "" "Additional monitors are recommended. They can be created at any time in the " "Monitor tab." msgstr "" +"İlave monitörler tavsiye edilir. İstenen bir zamanda Monitor sekmesinden " +"yaratabilirsiniz." #: pmg-gui/js/UserBlackWhiteList.js:34 pmg-gui/js/UserBlackWhiteList.js:195 #: pve-manager/www/manager6/ceph/ServiceList.js:287 @@ -161,7 +163,7 @@ msgstr "Gelişmiş" #: pve-manager/www/manager6/lxc/Config.js:290 #: pve-manager/www/manager6/qemu/Config.js:320 msgid "Alias" -msgstr "" +msgstr "Takma ad" #: pve-manager/www/manager6/dc/Backup.js:33 #: pve-manager/www/manager6/dc/Backup.js:148 @@ -185,7 +187,7 @@ msgstr "Ayrılan" #: pmg-gui/js/SpamQuarantineOptions.js:66 #: pmg-gui/js/VirusQuarantineOptions.js:17 msgid "Allow HREFs" -msgstr "" +msgstr "HREF'lere izin ver" #: proxmox-widget-toolkit/Toolkit.js:91 proxmox-widget-toolkit/Toolkit.js:99 #: proxmox-widget-toolkit/Toolkit.js:107 @@ -206,11 +208,11 @@ msgstr "" #: pmg-gui/js/Utils.js:431 msgid "Archive Filter" -msgstr "" +msgstr "Arşiv filtresi" #: pve-manager/www/manager6/qemu/HardwareView.js:427 msgid "Are you sure you want to detach entry {0}" -msgstr "{0} kaydını kaldırmak istediğinizden emin misiniz" +msgstr "{0} kaydını kaldırmak istediğinizden emin misiniz?" #: pve-manager/www/manager6/StateProvider.js:184 msgid "Are you sure you want to navigate away from this page?" @@ -227,11 +229,11 @@ msgstr "Bu sayfadan ayrılmak istediğinize emin misiniz?" #: pve-manager/www/manager6/qemu/HardwareView.js:425 #: pve-manager/www/manager6/qemu/SnapshotTree.js:194 msgid "Are you sure you want to remove entry {0}" -msgstr "{0} kaydını kaldırmak istediğinizden emin misiniz" +msgstr "{0} kaydını kaldırmak istediğinizden emin misiniz?" #: pve-manager/www/manager6/dc/ACLView.js:158 msgid "Are you sure you want to remove this entry" -msgstr "Bu kaydı kaldırmak istediğinize emin misiniz" +msgstr "Bu kaydı kaldırmak istediğinize emin misiniz?" #: pmg-gui/js/UserBlackWhiteList.js:177 msgid "Are you sure you want to remove {0} entries" @@ -377,7 +379,7 @@ msgstr "Blok boyutu" #: pmg-gui/js/VirusDetectorOptions.js:11 msgid "Block encrypted archives" -msgstr "" +msgstr "Blok şifrelenmiş arşivler" #: pmg-gui/js/Utils.js:515 msgid "Body" @@ -472,17 +474,17 @@ msgstr "" #: pve-manager/www/manager6/lxc/ResourceEdit.js:29 #: pve-manager/www/manager6/qemu/CreateWizard.js:170 msgid "CPU" -msgstr "" +msgstr "İşlemci" #: pve-manager/www/manager6/lxc/ResourceEdit.js:65 #: pve-manager/www/manager6/qemu/ProcessorEdit.js:136 msgid "CPU limit" -msgstr "CPU limiti" +msgstr "İşlemci limiti" #: pve-manager/www/manager6/lxc/ResourceEdit.js:75 #: pve-manager/www/manager6/qemu/ProcessorEdit.js:146 msgid "CPU units" -msgstr "CPU üniteleri" +msgstr "İşlemci üniteleri" #: pmg-gui/js/ServerStatus.js:116 pmg-gui/js/ServerStatus.js:119 #: pve-manager/www/manager6/data/ResourceStore.js:167 @@ -498,12 +500,12 @@ msgstr "CPU üniteleri" #: pve-manager/www/manager6/qemu/Summary.js:75 #: pve-manager/www/manager6/qemu/Summary.js:78 msgid "CPU usage" -msgstr "CPU kullanımı" +msgstr "İşlemci kullanımı" #: pve-manager/www/manager6/Utils.js:826 #: pve-manager/www/manager6/node/StatusView.js:95 msgid "CPU(s)" -msgstr "CPU(lar)" +msgstr "İşlemci(ler)" #: pve-manager/www/manager6/ha/Resources.js:138 msgid "CRM State" @@ -565,7 +567,7 @@ msgstr "Değişiklik günlüğü" #: pmg-gui/js/SpamDetectorStatus.js:23 msgid "Channel" -msgstr "" +msgstr "Kanal" #: pmg-gui/js/Subscription.js:163 #: pve-manager/www/manager6/node/Subscription.js:167 @@ -598,19 +600,19 @@ msgstr "Kullanıcı adını sil" #: pmg-gui/js/MailTracker.js:378 msgid "Client" -msgstr "" +msgstr "İstemci" #: pmg-gui/js/MailProxyOptions.js:57 msgid "Client Connection Count Limit" -msgstr ""
[pve-devel] [PATCH lvm] fix #2184: filter lvs from guests
adds another pattern "r|/dev/mapper/.*-vm--[0-9]+--disk--[0-9]+|" to global_filter in the default configuration, in light of this issue[0] [0]: https://forum.proxmox.com/threads/random-migration-errors.53454/ Signed-off-by: Oguz Bektas --- ...01-filter-zvols-and-lvs-from-guests.patch} | 20 ++- ...002-enable-issue_discards-by-default.patch | 10 +- patch => 0003-disable-init-scripts.patch} | 15 +++--- patchdir/series | 4 ++-- 4 files changed, 26 insertions(+), 23 deletions(-) rename patchdir/{0001-filter-zvols-and-PVE-VG-by-default.patch => 0001-filter-zvols-and-lvs-from-guests.patch} (53%) rename patchdir/{0006-disable-init-scripts.patch => 0003-disable-init-scripts.patch} (73%) diff --git a/patchdir/0001-filter-zvols-and-PVE-VG-by-default.patch b/patchdir/0001-filter-zvols-and-lvs-from-guests.patch similarity index 53% rename from patchdir/0001-filter-zvols-and-PVE-VG-by-default.patch rename to patchdir/0001-filter-zvols-and-lvs-from-guests.patch index 5ebe494..17aeb04 100644 --- a/patchdir/0001-filter-zvols-and-PVE-VG-by-default.patch +++ b/patchdir/0001-filter-zvols-and-lvs-from-guests.patch @@ -1,30 +1,32 @@ -From 65e9206964c546842ccd8cc8c7885b4feb66c429 Mon Sep 17 00:00:00 2001 +From 3d331953abde0c9d70b3741bbcc38d36cd0a55b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Fri, 17 Mar 2017 11:59:25 +0100 -Subject: [PATCH 1/6] filter zvols and PVE VG by default +Subject: [PATCH 1/3] filter zvols and lvs from guests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fabian Grünbichler +Signed-off-by: Oguz Bektas --- - conf/example.conf.in | 3 +++ - 1 file changed, 3 insertions(+) + conf/example.conf.in | 4 + 1 file changed, 4 insertions(+) diff --git a/conf/example.conf.in b/conf/example.conf.in -index 736b4bd..1a8a67b 100644 +index 0204f4b5a..cd921e10e 100644 --- a/conf/example.conf.in +++ b/conf/example.conf.in -@@ -125,6 +125,9 @@ devices { +@@ -124,6 +124,10 @@ devices { + # as the combination might produce unexpected results (test changes.) # Run vgscan after changing the filter to regenerate the cache. - # See the use_lvmetad comment for a special case regarding filters. # + # Do not scan ZFS zvols (to avoid problems on ZFS zvols snapshots) -+ global_filter = [ "r|/dev/zd.*|", "r|/dev/mapper/pve-.*|" ] ++ # Also do not scan LVM disks created by guests ++ global_filter = [ "r|/dev/zd.*|", "r|/dev/mapper/pve-.*|" "r|/dev/mapper/.*-vm--[0-9]+--disk--[0-9]+|"] + # Example # Accept every block device: # filter = [ "a|.*/|" ] -- -2.14.1 +2.20.1 diff --git a/patchdir/0002-enable-issue_discards-by-default.patch b/patchdir/0002-enable-issue_discards-by-default.patch index ac66732..a957589 100644 --- a/patchdir/0002-enable-issue_discards-by-default.patch +++ b/patchdir/0002-enable-issue_discards-by-default.patch @@ -1,7 +1,7 @@ -From 829981232ec0ec4e8b2cae15d3fb940907feb28f Mon Sep 17 00:00:00 2001 +From a49c621f30b9d72f0439e9cf8fe7a605af7f438e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Fri, 17 Mar 2017 11:59:54 +0100 -Subject: [PATCH 2/6] enable issue_discards by default +Subject: [PATCH 2/3] enable issue_discards by default MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @@ -12,10 +12,10 @@ Signed-off-by: Fabian Grünbichler 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/example.conf.in b/conf/example.conf.in -index 1a8a67b..56b0795 100644 +index cd921e10e..3ec9e4038 100644 --- a/conf/example.conf.in +++ b/conf/example.conf.in -@@ -301,7 +301,7 @@ devices { +@@ -286,7 +286,7 @@ devices { # benefit from discards, but SSDs and thinly provisioned LUNs # generally do. If enabled, discards will only be issued if both the # storage and kernel provide support. @@ -25,5 +25,5 @@ index 1a8a67b..56b0795 100644 # Configuration option devices/allow_changes_with_duplicate_pvs. # Allow VG modification while a PV appears on multiple devices. -- -2.14.1 +2.20.1 diff --git a/patchdir/0006-disable-init-scripts.patch b/patchdir/0003-disable-init-scripts.patch similarity index 73% rename from patchdir/0006-disable-init-scripts.patch rename to patchdir/0003-disable-init-scripts.patch index 2456578..98d587f 100644 --- a/patchdir/0006-disable-init-scripts.patch +++ b/patchdir/0003-disable-init-scripts.patch @@ -1,21 +1,21 @@ -From 39b527272533a3138ffc7f4988235176eb889d03 Mon Sep 17 00:00:00 2001 +From 808b192f09f93acd32d91a7eec6185e38db176d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Mon, 9 Oct 2017 13:05:31 +0200 -Subject: [PATCH 6/6] disable init scripts +Subject: [PATCH 3/3] disable init scripts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding:
Re: [pve-devel] [PATCH v2 widget-toolkit 1/2] KVComboBox: add setComboItems function
On Thu, Jul 11, 2019 at 03:00:07PM +0200, Dominik Csapak wrote: > is there a 2/2 also ? 2/2 was the manager patch, sorry for confusion > > looks good except the one nit inline > > On 7/11/19 2:54 PM, Oguz Bektas wrote: > > this allows to change the comboItems of a KVComboBox on the run > > > > Signed-off-by: Oguz Bektas > > --- > > > > no changes, added for convenience > > > > form/KVComboBox.js | 7 +++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/form/KVComboBox.js b/form/KVComboBox.js > > index 0970fcf..5e76f6f 100644 > > --- a/form/KVComboBox.js > > +++ b/form/KVComboBox.js > > @@ -71,5 +71,12 @@ Ext.define('Proxmox.form.KVComboBox', { > > } > > me.callParent(); > > +}, > > + > > +setComboItems: function(items) { > > + var me = this; > > + > > + me.getStore().setData(items); > > } > > + > > this empty line seems unnecessary > > > }); > > > > ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH widget-toolkit] override Ext.Components 'validIdRe' to include '@'
we use itemIds with '@' already in the ceph dashboard, and in non-debug modeit works (as expected) but throws an error while using ext-all-debug.js so override it to include the '@' the regex was in place because in html4 the 'id' tag could only consist letters ofthe mentioned regex, this was lifted in html5 though[0] 0: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id Signed-off-by: Dominik Csapak --- Toolkit.js | 6 ++ 1 file changed, 6 insertions(+) diff --git a/Toolkit.js b/Toolkit.js index abdeb64..6956a8e 100644 --- a/Toolkit.js +++ b/Toolkit.js @@ -439,6 +439,12 @@ Ext.define(null, { }); +// add '@' to the valid id +Ext.define('Proxmox.validIdReOverride', { +override: 'Ext.Component', +validIdRe: /^[a-z_][a-z0-9\-_\@]*$/i, +}); + // force alert boxes to be rendered with an Error Icon // since Ext.Msg is an object and not a prototype, we need to override it // after the framework has been initiated -- 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] [PATCH v3 manager 2/2] filter unusable lxc mountoptions for rootfs
On Thu, Jul 11, 2019 at 03:08:30PM +0200, Oguz Bektas wrote: > disable nodev and noexec per thomas' suggestion[0]. > > [0]: https://pve.proxmox.com/pipermail/pve-devel/2019-July/037994.html > > Signed-off-by: Oguz Bektas > --- > v2 -> v3: > * change from 'field' to 'var field' to avoid assigning 'window.field' i mean 'filtered' > > www/manager6/lxc/MPEdit.js | 8 > 1 file changed, 8 insertions(+) > > diff --git a/www/manager6/lxc/MPEdit.js b/www/manager6/lxc/MPEdit.js > index 7689340d..8851c5fc 100644 > --- a/www/manager6/lxc/MPEdit.js > +++ b/www/manager6/lxc/MPEdit.js > @@ -58,6 +58,14 @@ Ext.define('PVE.lxc.MountPointInputPanel', { > if (mp.mountoptions) { > mp.mountoptions = mp.mountoptions.split(';'); > } > + > + if (this.confid === 'rootfs') { > + var field = me.down('field[name=mountoptions]'); > + var forbidden = ['nodev', 'noexec']; > + var filtered = field.comboItems.filter(e => > !forbidden.includes(e[0])); > + field.setComboItems(filtered); > + } > + > me.setValues(mp); > }, > > -- > 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 widget-toolkit 1/2] KVComboBox: add setComboItems function
this allows to change the comboItems of a KVComboBox on the run Signed-off-by: Oguz Bektas --- no changes, added for convenience form/KVComboBox.js | 7 +++ 1 file changed, 7 insertions(+) diff --git a/form/KVComboBox.js b/form/KVComboBox.js index 0970fcf..5e76f6f 100644 --- a/form/KVComboBox.js +++ b/form/KVComboBox.js @@ -71,5 +71,12 @@ Ext.define('Proxmox.form.KVComboBox', { } me.callParent(); +}, + +setComboItems: function(items) { + var me = this; + + me.getStore().setData(items); } + }); -- 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 manager 2/2] filter unusable lxc mountoptions for rootfs
disable nodev and noexec per thomas' suggestion[0]. [0]: https://pve.proxmox.com/pipermail/pve-devel/2019-July/037994.html Signed-off-by: Oguz Bektas --- v2 -> v3: * change from 'field' to 'var field' to avoid assigning 'window.field' www/manager6/lxc/MPEdit.js | 8 1 file changed, 8 insertions(+) diff --git a/www/manager6/lxc/MPEdit.js b/www/manager6/lxc/MPEdit.js index 7689340d..8851c5fc 100644 --- a/www/manager6/lxc/MPEdit.js +++ b/www/manager6/lxc/MPEdit.js @@ -58,6 +58,14 @@ Ext.define('PVE.lxc.MountPointInputPanel', { if (mp.mountoptions) { mp.mountoptions = mp.mountoptions.split(';'); } + + if (this.confid === 'rootfs') { + var field = me.down('field[name=mountoptions]'); + var forbidden = ['nodev', 'noexec']; + var filtered = field.comboItems.filter(e => !forbidden.includes(e[0])); + field.setComboItems(filtered); + } + me.setValues(mp); }, -- 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] [PATCH v2 manager] filter unusable lxc mountoptions for rootfs
still ok but i now saw something i did not see before, comment inline On 7/11/19 2:53 PM, Oguz Bektas wrote: disable nodev and noexec per thomas' suggestion[0]. [0]: https://pve.proxmox.com/pipermail/pve-devel/2019-July/037994.html Signed-off-by: Oguz Bektas --- v1 -> v2: * define 'field' only in if branch to avoid unnecessary .down * remove unintentional whitespace www/manager6/lxc/MPEdit.js | 8 1 file changed, 8 insertions(+) diff --git a/www/manager6/lxc/MPEdit.js b/www/manager6/lxc/MPEdit.js index 7689340d..59651712 100644 --- a/www/manager6/lxc/MPEdit.js +++ b/www/manager6/lxc/MPEdit.js @@ -58,6 +58,14 @@ Ext.define('PVE.lxc.MountPointInputPanel', { if (mp.mountoptions) { mp.mountoptions = mp.mountoptions.split(';'); } + + if (this.confid === 'rootfs') { + var field = me.down('field[name=mountoptions]'); + var forbidden = ['nodev', 'noexec']; + filtered = field.comboItems.filter(e => !forbidden.includes(e[0])); it seems this should be 'var filtered' else this gets assigned to 'window.filtered' (in a browser at least) + field.setComboItems(filtered); + } + me.setValues(mp); }, ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH v2 widget-toolkit 1/2] KVComboBox: add setComboItems function
On 7/11/19 3:00 PM, Dominik Csapak wrote: > is there a 2/2 also ? > > looks good except the one nit inline > > On 7/11/19 2:54 PM, Oguz Bektas wrote: >> this allows to change the comboItems of a KVComboBox on the run >> >> Signed-off-by: Oguz Bektas >> --- >> >> no changes, added for convenience >> >> form/KVComboBox.js | 7 +++ >> 1 file changed, 7 insertions(+) >> >> diff --git a/form/KVComboBox.js b/form/KVComboBox.js >> index 0970fcf..5e76f6f 100644 >> --- a/form/KVComboBox.js >> +++ b/form/KVComboBox.js >> @@ -71,5 +71,12 @@ Ext.define('Proxmox.form.KVComboBox', { >> } >> me.callParent(); >> + }, >> + >> + setComboItems: function(items) { >> + var me = this; >> + >> + me.getStore().setData(items); >> } >> + > > this empty line seems unnecessary saw your mail to late, sorry, got already applied.. > >> }); >> > ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] [PATCH v2 widget-toolkit 1/2] KVComboBox: add setComboItems function
is there a 2/2 also ? looks good except the one nit inline On 7/11/19 2:54 PM, Oguz Bektas wrote: this allows to change the comboItems of a KVComboBox on the run Signed-off-by: Oguz Bektas --- no changes, added for convenience form/KVComboBox.js | 7 +++ 1 file changed, 7 insertions(+) diff --git a/form/KVComboBox.js b/form/KVComboBox.js index 0970fcf..5e76f6f 100644 --- a/form/KVComboBox.js +++ b/form/KVComboBox.js @@ -71,5 +71,12 @@ Ext.define('Proxmox.form.KVComboBox', { } me.callParent(); +}, + +setComboItems: function(items) { + var me = this; + + me.getStore().setData(items); } + this empty line seems unnecessary }); ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [PATCH kernel] fix #327: downgrade dependency on grub-*
On 7/11/19 2:25 PM, Fabian Grünbichler wrote: > from Depends to Recommends, since we now have an alternate bootloader > setup for some scenarios. both our installer and Debian's default setup > still install Grub by default anyway, but this allows removal without > hacks in case such an alternate bootloader is used on the system. > > Signed-off-by: Fabian Grünbichler > --- > debian/control.in | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/debian/control.in b/debian/control.in > index ed01c62..bb7867e 100644 > --- a/debian/control.in > +++ b/debian/control.in > @@ -62,7 +62,7 @@ Provides: linux-image, >linux-image-2.6, > Suggests: pve-firmware, > Depends: busybox, > - grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub-efi-arm64, > initramfs-tools, > +Recommends: grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub-efi-arm64, > Description: The Proxmox PVE Kernel Image > This package contains the linux kernel and initial ramdisk used for booting > applied, thanks! ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [PATCH widget-toolkit] override Ext.Components 'validIdRe' to include '@'
On 7/11/19 2:10 PM, Dominik Csapak wrote: > we use itemIds with '@' already in the ceph dashboard, and in > non-debug modeit works (as expected) but throws an error > while using ext-all-debug.js so override it to include the '@' > > the regex was in place because in html4 the 'id' tag could only consist > letters ofthe mentioned regex, this was lifted in html5 though[0] > > 0: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id > > Signed-off-by: Dominik Csapak > --- > Toolkit.js | 6 ++ > 1 file changed, 6 insertions(+) > > diff --git a/Toolkit.js b/Toolkit.js > index abdeb64..6956a8e 100644 > --- a/Toolkit.js > +++ b/Toolkit.js > @@ -439,6 +439,12 @@ Ext.define(null, { > > }); > > +// add '@' to the valid id > +Ext.define('Proxmox.validIdReOverride', { > +override: 'Ext.Component', > +validIdRe: /^[a-z_][a-z0-9\-_\@]*$/i, > +}); > + > // force alert boxes to be rendered with an Error Icon > // since Ext.Msg is an object and not a prototype, we need to override it > // after the framework has been initiated > applied, thanks! ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH v2 manager] filter unusable lxc mountoptions for rootfs
disable nodev and noexec per thomas' suggestion[0]. [0]: https://pve.proxmox.com/pipermail/pve-devel/2019-July/037994.html Signed-off-by: Oguz Bektas --- v1 -> v2: * define 'field' only in if branch to avoid unnecessary .down * remove unintentional whitespace www/manager6/lxc/MPEdit.js | 8 1 file changed, 8 insertions(+) diff --git a/www/manager6/lxc/MPEdit.js b/www/manager6/lxc/MPEdit.js index 7689340d..59651712 100644 --- a/www/manager6/lxc/MPEdit.js +++ b/www/manager6/lxc/MPEdit.js @@ -58,6 +58,14 @@ Ext.define('PVE.lxc.MountPointInputPanel', { if (mp.mountoptions) { mp.mountoptions = mp.mountoptions.split(';'); } + + if (this.confid === 'rootfs') { + var field = me.down('field[name=mountoptions]'); + var forbidden = ['nodev', 'noexec']; + filtered = field.comboItems.filter(e => !forbidden.includes(e[0])); + field.setComboItems(filtered); + } + me.setValues(mp); }, -- 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 v2 widget-toolkit 1/2] KVComboBox: add setComboItems function
this allows to change the comboItems of a KVComboBox on the run Signed-off-by: Oguz Bektas --- no changes, added for convenience form/KVComboBox.js | 7 +++ 1 file changed, 7 insertions(+) diff --git a/form/KVComboBox.js b/form/KVComboBox.js index 0970fcf..5e76f6f 100644 --- a/form/KVComboBox.js +++ b/form/KVComboBox.js @@ -71,5 +71,12 @@ Ext.define('Proxmox.form.KVComboBox', { } me.callParent(); +}, + +setComboItems: function(items) { + var me = this; + + me.getStore().setData(items); } + }); -- 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 manager] gui: ceph configdb: fix store load
instead of using API2Request, use the proper grid store load Signed-off-by: Dominik Csapak --- www/manager6/ceph/Config.js | 30 +++--- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/www/manager6/ceph/Config.js b/www/manager6/ceph/Config.js index 21b3c776..790f04c2 100644 --- a/www/manager6/ceph/Config.js +++ b/www/manager6/ceph/Config.js @@ -3,20 +3,10 @@ Ext.define('PVE.node.CephConfigDb', { alias: 'widget.pveNodeCephConfigDb', border: false, -load: function() { - var me = this; - - Proxmox.Utils.API2Request({ - url: me.url, - waitMsgTarget: me, - failure: function(response, opts) { - console.log(response); - }, - success: function(response, opts) { - var data = response.result.data; - me.getStore().setData(data); - } - }); +store: { + proxy: { + type: 'proxmox' + } }, columns: [ @@ -63,18 +53,12 @@ Ext.define('PVE.node.CephConfigDb', { throw "no node name specified"; } - Ext.apply(me, { - url: '/nodes/' + nodename + '/ceph/configdb', - listeners: { - activate: function() { - me.load(); - } - } - }); + me.store.proxy.url = '/api2/json/nodes/' + nodename + '/ceph/configdb'; me.callParent(); - me.load(); + Proxmox.Utils.monStoreErrors(me, me.getStore()); + me.getStore().load(); } }); Ext.define('PVE.node.CephConfig', { -- 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 manager 1/2] ceph: add osd scrub api call
On 7/10/19 3:13 PM, Dominik Csapak wrote: > can be called to (deep) scrub a specific osd > > Signed-off-by: Dominik Csapak > --- > is there a better permission we could use? (since we do not know the > storage name?) > PVE/API2/Ceph/OSD.pm | 45 > 1 file changed, 45 insertions(+) > > diff --git a/PVE/API2/Ceph/OSD.pm b/PVE/API2/Ceph/OSD.pm > index 85197107..0582d538 100644 > --- a/PVE/API2/Ceph/OSD.pm > +++ b/PVE/API2/Ceph/OSD.pm > @@ -650,4 +650,49 @@ __PACKAGE__->register_method ({ > return undef; > }}); > > +__PACKAGE__->register_method ({ > +name => 'scrub', > +path => '{osdid}/scrub', > +method => 'POST', > +description => "Instruct the OSD to scrub.", > +proxyto => 'node', > +protected => 1, > +permissions => { > + check => ['perm', '/', [ 'Sys.Modify' ]], > +}, > +parameters => { > + additionalProperties => 0, > + properties => { > + node => get_standard_option('pve-node'), > + osdid => { > + description => 'OSD ID', > + type => 'integer', > + }, > + deep => { > + description => 'If set, instructs a deep scrub instead of a > normal one.', > + type => 'boolean', > + optional => 1, > + default => 0, > + }, > + }, > +}, > +returns => { type => "null" }, > +code => sub { > + my ($param) = @_; > + > + PVE::Ceph::Tools::check_ceph_inited(); > + > + my $osdid = $param->{osdid}; > + my $deep = $param->{deep} // 0; > + > + my $rados = PVE::RADOS->new(); > + > + my $osdstat = &$get_osd_status($rados, $osdid); # osd exists? > + my $prefix = $deep ? 'osd deep-scrub' : 'osd scrub'; > + > + $rados->mon_command({ prefix => $prefix, who => $osdid }); > + > + return undef; > +}}); > + > 1; > applied, thanks! ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [PATCH manager 2/2] gui: ceph osd: rewrite osd panel and add scrub button
On 7/10/19 3:13 PM, Dominik Csapak wrote: > this rewrite of the osd panel converts it to a static declaration of > the layout with a controller/viewmodel logic > > while doing this, add icons to buttons, and add a scrub/deep scrub entry > > Signed-off-by: Dominik Csapak > --- > i guess it would be easiest to review the result and not the diff, > since it is simply a big rewrite of the whole component.. > applied, thanks! Followed up with re-adding the "Used %" column, removing the viewmodel notify call (not necessary, and in debug mode this can result into uncaught exceptions due to nested calls to it by the scheduler). Also reworked the columns of the OSD and Pool panel in general, but that work was not really connected to your refactoring (it was already ugly before ;) ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] [PATCH kernel] fix #327: downgrade dependency on grub-*
from Depends to Recommends, since we now have an alternate bootloader setup for some scenarios. both our installer and Debian's default setup still install Grub by default anyway, but this allows removal without hacks in case such an alternate bootloader is used on the system. Signed-off-by: Fabian Grünbichler --- debian/control.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control.in b/debian/control.in index ed01c62..bb7867e 100644 --- a/debian/control.in +++ b/debian/control.in @@ -62,7 +62,7 @@ Provides: linux-image, linux-image-2.6, Suggests: pve-firmware, Depends: busybox, - grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub-efi-arm64, initramfs-tools, +Recommends: grub-pc | grub-efi-amd64 | grub-efi-ia32 | grub-efi-arm64, Description: The Proxmox PVE Kernel Image This package contains the linux kernel and initial ramdisk used for booting -- 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 widget-toolkit] override Ext.Components 'validIdRe' to include '@'
we use itemIds with '@' already in the ceph dashboard, and in non-debug modeit works (as expected) but throws an error while using ext-all-debug.js so override it to include the '@' the regex was in place because in html4 the 'id' tag could only consist letters ofthe mentioned regex, this was lifted in html5 though[0] 0: https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/id Signed-off-by: Dominik Csapak --- Toolkit.js | 6 ++ 1 file changed, 6 insertions(+) diff --git a/Toolkit.js b/Toolkit.js index abdeb64..6956a8e 100644 --- a/Toolkit.js +++ b/Toolkit.js @@ -439,6 +439,12 @@ Ext.define(null, { }); +// add '@' to the valid id +Ext.define('Proxmox.validIdReOverride', { +override: 'Ext.Component', +validIdRe: /^[a-z_][a-z0-9\-_\@]*$/i, +}); + // force alert boxes to be rendered with an Error Icon // since Ext.Msg is an object and not a prototype, we need to override it // after the framework has been initiated -- 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 docs] boot/zfs: add docs for pve-efiboot-tool
Signed-off-by: Fabian Grünbichler --- local-zfs.adoc | 6 ++ system-booting.adoc | 36 +++- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/local-zfs.adoc b/local-zfs.adoc index d4500da..2a5086e 100644 --- a/local-zfs.adoc +++ b/local-zfs.adoc @@ -256,6 +256,12 @@ can be used as cache. sgdisk -R sgdisk -G zpool replace -f + pve-efiboot-tool format + pve-efiboot-tool init + +NOTE: `ESP` stands for EFI System Partition, which is setup as partition #2 on +bootable disks setup by the {pve} installer since version 5.4. For details, see +xref:sysboot_systemd_boot_setup[Setting up a new partition for use as synced ESP]. Activate E-Mail Notification diff --git a/system-booting.adoc b/system-booting.adoc index 4fad044..28507a2 100644 --- a/system-booting.adoc +++ b/system-booting.adoc @@ -141,17 +141,43 @@ options " > /mnt/esp/loader/entries/preferred.conf cat /etc/kernel/cmdline >> /mnt/esp/loader/entries/preferred.conf +[[sysboot_systemd_boot_setup]] +.Setting up a new partition for use as synced ESP + +To format and initialize a partition as synced ESP, e.g., after replacing a +failed vdev in an rpool, or when converting an existing system that pre-dates +the sync mechanism, `pve-efiboot-tool` from `pve-kernel-helpers` can be used. + +WARNING: the `format` command will format the ``, make sure to pass +in the right device/partition! + +For example, to format an empty partition `/dev/sda2` as ESP, run the following: + + +pve-efiboot-tool format /dev/sda2 + + +To setup an existing, unmounted ESP located on `/dev/sda2` for inclusion in +{pve}'s synchronization mechanism, use the following: + + +pve-efiboot-tool init /dev/sda2 + + +Afterwards `/etc/kernel/pve-efiboot-uuids` should contain a new line with the +UUID of the newly added partition. The `init` command will also automatically +trigger a refresh of all configured ESPs. [[sysboot_systemd_boot_refresh]] .Updating the configuration on all ESPs -To copy and configure all bootable kernels and keep all ESPs in sync you just -need to run the kernel hook script `/etc/kernel/postinst.d/zz-pve-efiboot`. +To copy and configure all bootable kernels and keep all ESPs listed in +`/etc/kernel/pve-efiboot-uuids` in sync you just need to run `pve-efiboot-tool +refresh`. (The equivalent to running `update-grub` on Systems being booted with `grub`). -This is necessary should you make changes to the kernel commandline, or if you -want to add another ESP (e.g. when replacing a failed disk in a redundant ZFS -pool). +This is necessary should you make changes to the kernel commandline, or want to +sync all kernels and initrds after regenerating the latter. [[sysboot_edit_kernel_cmdline]] Editing the kernel commandline -- 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 storage] Diskmanage: add flag for encrypted osds
we can only do this here, since the ceph cluster is not aware of osd encryption, only the local node is (via ceph-volume and lv tags) this way, we are able to show an 'encrypted' flag in the disk gui at least Signed-off-by: Dominik Csapak --- this patch is intended to be commited on top of my last series about the parttype uuid changes, if that is not commited i can rebase and send this patch again (if desired) PVE/Diskmanage.pm | 6 ++ 1 file changed, 6 insertions(+) diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm index 8230aad..9b9d007 100644 --- a/PVE/Diskmanage.pm +++ b/PVE/Diskmanage.pm @@ -295,6 +295,9 @@ sub get_ceph_volume_infos { if (($type eq 'block' || $type eq 'data') && $fields->[2] =~ m/ceph.osd_id=([^,]+)/) { $result->{$dev}->{osdid} = $1; $result->{$dev}->{bluestore} = ($type eq 'block'); + if ($fields->[2] =~ m/ceph\.encrypted=1/) { + $result->{$dev}->{encrypted} = 1; + } } else { # undef++ becomes '1' (see `perldoc perlop`: Auto-increment) $result->{$dev}->{$type}++; @@ -585,6 +588,7 @@ sub get_disks { my $osdid = -1; my $bluestore = 0; + my $osdencrypted; my $journal_count = 0; my $db_count = 0; @@ -641,6 +645,7 @@ sub get_disks { if (defined($ceph_volume->{osdid})) { $osdid = $ceph_volume->{osdid}; $bluestore = 1 if $ceph_volume->{bluestore}; + $osdencrypted = $ceph_volume->{encrypted}; } } @@ -659,6 +664,7 @@ sub get_disks { $disklist->{$dev}->{osdid} = $osdid; $disklist->{$dev}->{journals} = $journal_count if $journal_count; $disklist->{$dev}->{bluestore} = $bluestore if $osdid != -1; + $disklist->{$dev}->{osdencrypted} = $osdencrypted if defined($osdencrypted); $disklist->{$dev}->{db} = $db_count if $db_count; $disklist->{$dev}->{wal} = $wal_count if $wal_count; }); -- 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 storage 2/3] Diskmanage: add test for lsblk by simulating zfs disk
Signed-off-by: Dominik Csapak --- test/disk_tests/usages/disklist | 1 + test/disk_tests/usages/disklist_expected.json | 15 +++ test/disk_tests/usages/lsblk | 7 +++ test/disk_tests/usages/partlist | 2 ++ test/disk_tests/usages/sdm/device/vendor | 1 + test/disk_tests/usages/sdm/queue/rotational | 1 + test/disk_tests/usages/sdm/size | 1 + test/disk_tests/usages/sdm_udevadm| 12 8 files changed, 40 insertions(+) create mode 100644 test/disk_tests/usages/lsblk create mode 100644 test/disk_tests/usages/sdm/device/vendor create mode 100644 test/disk_tests/usages/sdm/queue/rotational create mode 100644 test/disk_tests/usages/sdm/size create mode 100644 test/disk_tests/usages/sdm_udevadm diff --git a/test/disk_tests/usages/disklist b/test/disk_tests/usages/disklist index ef443ed..92c3622 100644 --- a/test/disk_tests/usages/disklist +++ b/test/disk_tests/usages/disklist @@ -10,3 +10,4 @@ sdi sdj sdk sdl +sdm diff --git a/test/disk_tests/usages/disklist_expected.json b/test/disk_tests/usages/disklist_expected.json index 610e80f..137385d 100644 --- a/test/disk_tests/usages/disklist_expected.json +++ b/test/disk_tests/usages/disklist_expected.json @@ -183,5 +183,20 @@ "rpm" : 0, "type" : "hdd", "osdid" : -1 +}, +"sdm" : { + "serial" : "SERIAL1", + "vendor" : "ATA", + "wwn" : "0x", + "devpath" : "/dev/sdm", + "model" : "MODEL1", + "used" : "ZFS", + "wearout" : "N/A", + "health" : "UNKNOWN", + "gpt" : 1, + "size" : 1536000, + "rpm" : 0, + "type" : "hdd", + "osdid" : -1 } } diff --git a/test/disk_tests/usages/lsblk b/test/disk_tests/usages/lsblk new file mode 100644 index 000..cbb18b9 --- /dev/null +++ b/test/disk_tests/usages/lsblk @@ -0,0 +1,7 @@ +{ + "blockdevices": [ + {"path":"/dev/sdm", "parttype":null}, + {"path":"/dev/sdm1", "parttype":"6a898cc3-1dd2-11b2-99a6-080020736631"}, + {"path":"/dev/sdm9", "parttype":"6a945a3b-1dd2-11b2-99a6-080020736631"} + ] +} diff --git a/test/disk_tests/usages/partlist b/test/disk_tests/usages/partlist index 8dcdefc..9fd750f 100644 --- a/test/disk_tests/usages/partlist +++ b/test/disk_tests/usages/partlist @@ -1,2 +1,4 @@ sde1 sdf1 +sdm1 +sdm9 diff --git a/test/disk_tests/usages/sdm/device/vendor b/test/disk_tests/usages/sdm/device/vendor new file mode 100644 index 000..531030d --- /dev/null +++ b/test/disk_tests/usages/sdm/device/vendor @@ -0,0 +1 @@ +ATA diff --git a/test/disk_tests/usages/sdm/queue/rotational b/test/disk_tests/usages/sdm/queue/rotational new file mode 100644 index 000..d00491f --- /dev/null +++ b/test/disk_tests/usages/sdm/queue/rotational @@ -0,0 +1 @@ +1 diff --git a/test/disk_tests/usages/sdm/size b/test/disk_tests/usages/sdm/size new file mode 100644 index 000..13de30f --- /dev/null +++ b/test/disk_tests/usages/sdm/size @@ -0,0 +1 @@ +3000 diff --git a/test/disk_tests/usages/sdm_udevadm b/test/disk_tests/usages/sdm_udevadm new file mode 100644 index 000..9317b9f --- /dev/null +++ b/test/disk_tests/usages/sdm_udevadm @@ -0,0 +1,12 @@ +E: DEVNAME=/dev/sdm +E: DEVTYPE=disk +E: ID_ATA_ROTATION_RATE_RPM=0 +E: ID_BUS=ata +E: ID_MODEL=MODEL1 +E: ID_PART_TABLE_TYPE=gpt +E: ID_PART_TABLE_UUID=8417b93f-eff9-4e8f-8d84-dc2e77fc07a2 +E: ID_SERIAL=SERIAL1 +E: ID_SERIAL_SHORT=SERIAL1 +E: ID_TYPE=disk +E: ID_WWN=0x +E: ID_WWN_WITH_EXTENSION=0x -- 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 storage 3/3] Diskmanage: fix usage test for sdd
sdd1 and sdd2 were listed in the zfs output but were not included in the partlist, so the zfs detection test was wrong now it is correct and more in line with the real world Signed-off-by: Dominik Csapak --- test/disk_tests/usages/disklist_expected.json | 1 + test/disk_tests/usages/partlist | 2 ++ 2 files changed, 3 insertions(+) diff --git a/test/disk_tests/usages/disklist_expected.json b/test/disk_tests/usages/disklist_expected.json index 137385d..b179cd6 100644 --- a/test/disk_tests/usages/disklist_expected.json +++ b/test/disk_tests/usages/disklist_expected.json @@ -85,6 +85,7 @@ "type" : "hdd", "osdid" : -1, "serial" : "SERIAL1", + "used": "ZFS", "vendor" : "ATA", "wwn" : "0x", "devpath" : "/dev/sdd" diff --git a/test/disk_tests/usages/partlist b/test/disk_tests/usages/partlist index 9fd750f..43c1f68 100644 --- a/test/disk_tests/usages/partlist +++ b/test/disk_tests/usages/partlist @@ -1,3 +1,5 @@ +sdd1 +sdd2 sde1 sdf1 sdm1 -- 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 storage 1/3] Diskmanage: change parttype uuid detection
previously ceph included a udev rule to populate /dev/disk/by-parttypeuuid/ but not anymore, so we now use 'lsblk --json -o path,parttype' to get a mapping between parttype uuid and partition fix the test by simulating empty lsblk output Signed-off-by: Dominik Csapak --- PVE/Diskmanage.pm | 108 -- test/disklist_test.pm | 9 +++- 2 files changed, 79 insertions(+), 38 deletions(-) diff --git a/PVE/Diskmanage.pm b/PVE/Diskmanage.pm index 0deb1a6..8230aad 100644 --- a/PVE/Diskmanage.pm +++ b/PVE/Diskmanage.pm @@ -6,6 +6,7 @@ use PVE::ProcFSTools; use Data::Dumper; use Cwd qw(abs_path); use Fcntl ':mode'; +use JSON; use PVE::Tools qw(extract_param run_command file_get_contents file_read_firstline dir_glob_regex dir_glob_foreach trim); @@ -15,6 +16,7 @@ my $SGDISK = "/sbin/sgdisk"; my $PVS = "/sbin/pvs"; my $LVS = "/sbin/lvs"; my $UDEVADM = "/bin/udevadm"; +my $LSBLK = "/bin/lsblk"; sub verify_blockdev_path { my ($rel_path) = @_; @@ -154,7 +156,38 @@ sub get_smart_data { return $smartdata; } +sub get_lsblk_info() { +my $cmd = [$LSBLK, '--json', '-o', 'path,parttype']; +my $output = ""; +my $res = {}; +eval { + run_command($cmd, outfunc => sub { + $output .= "$_\n"; + }); +}; +warn "$@\n" if $@; +my $list = []; +eval { + $list = decode_json($output); + $list = $list->{blockdevices}; # pull out the device list +}; +warn "$@\n" if $@; + +for my $dev (@$list) { + next if !($dev->{parttype}); + my $type = $dev->{parttype}; + my $path = $dev->{path}; + if (!$res->{$type}) { + $res->{$type} = []; + } + push @{$res->{$type}}, $path; +} + +return $res; +} + sub get_zfs_devices { +my ($lsblk) = @_; my $list = {}; return {} if ! -x $ZPOOL; @@ -176,19 +209,24 @@ sub get_zfs_devices { # because maybe zfs tools are not installed warn "$@\n" if $@; -my $applezfsuuid = "6a898cc3-1dd2-11b2-99a6-080020736631"; -my $bsdzfsuuid = "516e7cba-6ecf-11d6-8ff8-00022d09712b"; +my $uuids = [ + "6a898cc3-1dd2-11b2-99a6-080020736631", # apple + "516e7cba-6ecf-11d6-8ff8-00022d09712b", # bsd +]; -dir_glob_foreach('/dev/disk/by-parttypeuuid', "($applezfsuuid|$bsdzfsuuid)\..+", sub { - my ($entry) = @_; - my $real_dev = abs_path("/dev/disk/by-parttypeuuid/$entry"); - $list->{$real_dev} = 1; -}); +for my $uuid (@$uuids) { + if ($lsblk->{$uuid}) { + for my $dev (@{$lsblk->{$uuid}}) { + $list->{$dev} = 1; + } + } +} return $list; } sub get_lvm_devices { +my ($lsblk) = @_; my $list = {}; eval { run_command([$PVS, '--noheadings', '--readonly', '-o', 'pv_name'], outfunc => sub{ @@ -205,39 +243,35 @@ sub get_lvm_devices { warn "$@\n" if $@; my $lvmuuid = "e6d6d379-f507-44c2-a23c-238f2a3df928"; - -dir_glob_foreach('/dev/disk/by-parttypeuuid', "$lvmuuid\..+", sub { - my ($entry) = @_; - my $real_dev = abs_path("/dev/disk/by-parttypeuuid/$entry"); - $list->{$real_dev} = 1; -}); +if ($lsblk->{$lvmuuid}) { + for my $dev (@{$lsblk->{$lvmuuid}}) { + $list->{$dev} = 1; + } +} return $list; } sub get_ceph_journals { -my $journalhash = {}; - -my $journal_uuid = '45b0969e-9b03-4f30-b4c6-b4b80ceff106'; -my $db_uuid = '30cd0809-c2b2-499c-8879-2d6b78529876'; -my $wal_uuid = '5ce17fce-4087-4169-b7ff-056cc58473f9'; -my $block_uuid = 'cafecafe-9b03-4f30-b4c6-b4b80ceff106'; - -dir_glob_foreach('/dev/disk/by-parttypeuuid', "($journal_uuid|$db_uuid|$wal_uuid|$block_uuid)\..+", sub { - my ($entry, $type) = @_; - my $real_dev = abs_path("/dev/disk/by-parttypeuuid/$entry"); - if ($type eq $journal_uuid) { - $journalhash->{$real_dev} = 1; - } elsif ($type eq $db_uuid) { - $journalhash->{$real_dev} = 2; - } elsif ($type eq $wal_uuid) { - $journalhash->{$real_dev} = 3; - } elsif ($type eq $block_uuid) { - $journalhash->{$real_dev} = 4; +my ($lsblk) = @_; +my $list = {}; + +my $uuids = [ + '45b0969e-9b03-4f30-b4c6-b4b80ceff106', # journal + '30cd0809-c2b2-499c-8879-2d6b78529876', # db + '5ce17fce-4087-4169-b7ff-056cc58473f9', # wal + 'cafecafe-9b03-4f30-b4c6-b4b80ceff106', # block +]; + +for my $uuid (@$uuids) { + if ($lsblk->{$uuid}) { + for my $dev (@{$lsblk->{$uuid}}) { + $list->{$dev} = 1; + } } -}); +} -return $journalhash; +return $list; } # reads the lv_tags and matches them with the devices @@ -442,12 +476,14 @@ sub get_disks { return $mounted->{$dev}; }; -my $journalhash = get_ceph_journals(); +my $lsblkinfo = get_lsblk_info(); + +my $journalhash =
[pve-devel] [PATCH kernel-meta 3/3] pve-efiboot-tool: initialize in mount namespace
by re-executing the whole 'pve-efiboot-tool init' command inside a new mount namespace Co-Developed-By: Thomas Lamprecht Signed-off-by: Fabian Grünbichler --- bin/pve-efiboot-tool | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/pve-efiboot-tool b/bin/pve-efiboot-tool index 6bbf679..abaaf00 100755 --- a/bin/pve-efiboot-tool +++ b/bin/pve-efiboot-tool @@ -189,6 +189,7 @@ case "$1" in exit 0 ;; 'init') + reexec_in_mountns "$@" shift if [ -z "$1" ]; then warn "E: is mandatory." -- 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 kernel-meta 2/3] zz-pve-efiboot: re-exec in mount namespace
to avoid affecting the running system negatively, e.g. because the target paths for mounting the ESPs have been modified via symlinks or similar attacks. Signed-off-by: Fabian Grünbichler --- efiboot/zz-pve-efiboot | 2 ++ 1 file changed, 2 insertions(+) diff --git a/efiboot/zz-pve-efiboot b/efiboot/zz-pve-efiboot index 954dbec..32dfe99 100755 --- a/efiboot/zz-pve-efiboot +++ b/efiboot/zz-pve-efiboot @@ -151,10 +151,12 @@ case $0:$mode in # Also run if we have no DEB_MAINT_PARAMS, in order to work with old # kernel packages. */postinst.d/*:|*/postinst.d/*:configure) + reexec_in_mountns "$@" BOOT_KVERS="$(boot_kernel_list "$@")" update_esps ;; */postrm.d/*:|*/postrm.d/*:remove) + reexec_in_mountns "$@" # no newly installed kernel BOOT_KVERS="$(boot_kernel_list)" update_esps -- 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 kernel-meta 0/3] efiboot helper mount namespace
based on Thomas idea, but simplified (e.g., no extra 'internal-only' command), and extended to the zz-pve-efiboot hook script as well. Fabian Grünbichler (3): efiboot: add new mount namespace helper zz-pve-efiboot: re-exec in mount namespace pve-efiboot-tool: initialize in mount namespace bin/pve-efiboot-tool | 1 + efiboot/functions | 9 + efiboot/zz-pve-efiboot | 2 ++ 3 files changed, 12 insertions(+) -- 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 kernel-meta 1/3] efiboot: add new mount namespace helper
to re-execute the currently running script in an unshared mount name space. Co-Developed-By: Thomas Lamprecht Signed-off-by: Fabian Grünbichler --- Not sure whether we want to keep the echo here, or just in pve-efiboot-tool? efiboot/functions | 9 + 1 file changed, 9 insertions(+) diff --git a/efiboot/functions b/efiboot/functions index cb6cd62..79062d8 100755 --- a/efiboot/functions +++ b/efiboot/functions @@ -63,3 +63,12 @@ boot_kernel_list() { warn() { echo "$@" 1>&2 } + +reexec_in_mountns() { + if [ -z "$PVE_EFIBOOT_UNSHARED" ]; then + export PVE_EFIBOOT_UNSHARED=1 + echo "Re-executing '$0' in new private mount namespace.." + unshare --mount --propagation private "$0" "$@" + exit 0 + fi +} -- 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] [RFC proxmox-ve/kernel-meta 00/15] ESP sync improvements
On Wed, Jul 10, 2019 at 09:04:39PM +0200, Thomas Lamprecht wrote: > On 7/10/19 6:12 PM, Thomas Lamprecht wrote: > > On 7/10/19 5:04 PM, Fabian Grünbichler wrote: > >> - mktemp or something fancier for mountpoint directory creation, instead > >> of easy-to-guess hardcoded ones > > > > We could just use a mount namespace, e.g., with > > # unshare --mount > > > > Then the outside would not see our mounts, at least unpriv. users.. > > E.g., something like the following: yes, that looks like it should work and DTRT ;) I'll send a patch based on it that also integrates it into zz-pve-efiboot. > > 8< > diff --git a/bin/pveesptool b/bin/pveesptool > index 6bbf679..e4b3928 100755 > --- a/bin/pveesptool > +++ b/bin/pveesptool > @@ -92,6 +92,28 @@ format() { > exit 0 > } > > +do_esp_install() { > + part="$1" > + UUID="$2" > + > + esp_mp="/var/tmp/espmounts/$UUID" > + > + mkdir -p "$esp_mp" > + echo "Mounting '$part' on '$esp_mp'." > + mount -t vfat "$part" "$esp_mp" > + > + echo "Installing systemd-boot.." > + mkdir -p "$esp_mp/$PMX_ESP_DIR" > + bootctl --path "$esp_mp" install > + > + echo "Configuring systemd-boot.." > + echo "timeout 3" > "$esp_mp/$PMX_LOADER_CONF.tmp" > + echo "default proxmox-*" >> "$esp_mp/$PMX_LOADER_CONF.tmp" > + mv "$esp_mp/$PMX_LOADER_CONF.tmp" "$esp_mp/$PMX_LOADER_CONF" > + echo "Unmounting '$part'." > + umount "$part" > +} > + > init() { > part="$1" > > @@ -112,22 +134,8 @@ init() { > exit 1 > fi > > - esp_mp="/var/tmp/espmounts/$UUID" > - > - mkdir -p "$esp_mp" > - echo "Mounting '$part' on '$esp_mp'." > - mount -t vfat "$part" "$esp_mp" > - > - echo "Installing systemd-boot.." > - mkdir -p "$esp_mp/$PMX_ESP_DIR" > - bootctl --path "$esp_mp" install > - > - echo "Configuring systemd-boot.." > - echo "timeout 3" > "$esp_mp/$PMX_LOADER_CONF.tmp" > - echo "default proxmox-*" >> "$esp_mp/$PMX_LOADER_CONF.tmp" > - mv "$esp_mp/$PMX_LOADER_CONF.tmp" "$esp_mp/$PMX_LOADER_CONF" > - echo "Unmounting '$part'." > - umount "$part" > + echo "Do real ESP initialization in mount namespace.." > + unshare --mount --propagation private "$0" "do-esp-install" "$part" > "$UUID" > > echo "Adding '$part' to list of synced ESPs.." > if [ -e "$ESP_LIST" ]; then > @@ -199,6 +207,16 @@ case "$1" in > init "$@" > exit 0 > ;; > + 'do-esp-install') > + shift > + if [ -z "$1" ] || [ -z "$2" ]; then > + warn "E: and are mandatory." > + warn "" > + exit 1 > + fi > + do_esp_install "$@" > + exit 0 > + ;; > 'refresh') > shift > refresh > -- > ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
Re: [pve-devel] Roadmap - improved SDN support
Hi, On 7/11/19 6:11 AM, Naumann, Thomas wrote: > Hi, > > at datacenter of university we are working on a saas-platform to > automaticly deploy VMs, container, networks, services via web-gui for > students and employies. So, we are searching for a technicly basis for > this project. > Because "Proxmox" runs several Clusters in our datacenter and does a > great jobs we wonder if it could be a basis for this project. We known > there is also "Openstack" but I think it might be some kind of > overkill. > What do you think about that? > proxmox.com has some testimonials from universities using Proxmox VE in a lab course or similar, see (especially the first two, I'd guess): https://www.proxmox.com/en/proxmox-ve/testimonials/category/edu-gov Also, as Proxmox VE has a REST api which allows nowadays build a cluster, create & manage VMs and CTs, you should not have big problems in integrating and adapting it into your own platform. https://pve.proxmox.com/pve-docs/api-viewer/index.html cheers, Thomas ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
[pve-devel] applied: [RFC storage] pvesm import: allow to pass a tcp:// as file
applied with minor fixup On Thu, Jun 27, 2019 at 04:16:09PM +0200, Thomas Lamprecht wrote: > To allow getting closer to finally drop "pvecm mtunnel". > Code parts taken from pipe_socket_to_command > > Signed-off-by: Thomas Lamprecht > --- > PVE/CLI/pvesm.pm | 34 +- > PVE/Storage.pm | 10 -- > 2 files changed, 37 insertions(+), 7 deletions(-) > > diff --git a/PVE/CLI/pvesm.pm b/PVE/CLI/pvesm.pm > index 0432450..330d748 100755 > --- a/PVE/CLI/pvesm.pm > +++ b/PVE/CLI/pvesm.pm > @@ -269,7 +269,9 @@ __PACKAGE__->register_method ({ > enum => $KNOWN_EXPORT_FORMATS, > }, > filename => { > - description => "Source file name", > + description => "Source file name. For '-' stdin is used, the " . > + "tcp:// format allows to use a TCP connection as > input. " . > + "Else, the file is treated as common file.", > type => 'string', > }, > base => { > @@ -304,6 +306,36 @@ __PACKAGE__->register_method ({ > my $infh; > if ($filename eq '-') { > $infh = \*STDIN; > + } elsif ($filename =~ m!^tcp://((.+)(/\d+)?)$!) { Used ([^/]+) as (.+) always ate up the (/\d+) part breaking it when there was actually a CIDR in there. > + my ($cidr, $ip, $subnet) = ($1, $2, $3); > + if ($subnet) { # got real CIDR notation, not just IP > + $ip = PVE::Cluster::get_local_migration_ip($cidr); > + } > + my $family = PVE::Tools::get_host_address_family($ip); > + my $port = PVE::Tools::next_migrate_port($family, $ip); > + > + my $sock_params = { > + Listen => 1, > + ReuseAddr => 1, > + Proto => ::IPPROTO_TCP, > + GetAddrInfoFlags => 0, > + LocalAddr => $ip, > + LocalPort => $port, > + }; > + my $socket = IO::Socket::IP->new(%$sock_params) > + or die "failed to open socket: $!\n"; > + > + print "$ip\n$port\n"; # tell remote where to connect > + *STDOUT->flush(); > + > + my $prev_alarm = alarm 0; > + local $SIG{ALRM} = sub { die "timed out waiting for client\n" }; > + alarm 30; > + my $client = $socket->accept; # Wait for a client > + alarm $prev_alarm; > + close($socket); > + > + $infh = \*$client; > } else { > sysopen($infh, $filename, O_RDONLY) > or die "open($filename): $!\n"; > diff --git a/PVE/Storage.pm b/PVE/Storage.pm > index 0ce942a..5925c69 100755 > --- a/PVE/Storage.pm > +++ b/PVE/Storage.pm > @@ -590,17 +590,15 @@ sub storage_migrate { > die "cannot migrate from storage type '$scfg->{type}' to > '$tcfg->{type}'\n" if !@formats; > my $format = $formats[0]; > > -my @insecurecmd; > +my $import_fn = '-'; # let pvesm import read from stdin per default > if ($insecure) { > - @insecurecmd = ('pvecm', 'mtunnel', '-run-command', 1); > - if (my $network = $target_sshinfo->{network}) { > - push @insecurecmd, '-migration_network', $network; > - } > + my $net = $target_sshinfo->{network} // $target_sshinfo->{ip}; > + $import_fn = "tcp://$net"; > } > > $with_snapshots = $with_snapshots ? 1 : 0; # sanitize for passing as cli > parameter > my $send = ['pvesm', 'export', $volid, $format, '-', '-with-snapshots', > $with_snapshots]; > -my $recv = [@$ssh, @insecurecmd, '--', 'pvesm', 'import', $volid, > $format, '-', '-with-snapshots', $with_snapshots]; > +my $recv = [@$ssh, '--', 'pvesm', 'import', $volid, $format, $import_fn, > '-with-snapshots', $with_snapshots]; > if (defined($snapshot)) { > push @$send, '-snapshot', $snapshot > } > -- > 2.20.1 ___ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel