public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Andrei Perepiolkin <andrei.perepiolkin@open-e.com>
To: "Max R. Carrara" <m.carrara@proxmox.com>, pve-devel@lists.proxmox.com
Subject: Re: [pve-devel] [RFC pve-storage/proxmox-widget-toolkit/pve-manager master v2 00/10] GUI Support for Custom Storage Plugins
Date: Tue, 10 Feb 2026 15:57:46 -0500	[thread overview]
Message-ID: <32e444a7-f273-4b3d-b91c-c76c1828d86d@open-e.com> (raw)
In-Reply-To: <DFJY3XE0PWEX.29JFVO9N9OLED@proxmox.com>

Hi Max,


I finally got myself to test code and Im stuck on making deb packages:

For pve-storage error looks like:

........

make[3]: Entering directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0/PVE'
make[3]: Nothing to be done for 'clean'.
make[3]: Leaving directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0/PVE'
make -C udev-rbd clean
make[3]: Entering directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0/udev-rbd'
make[3]: Nothing to be done for 'clean'.
make[3]: Leaving directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0/udev-rbd'
make[2]: Leaving directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0'
    dh_clean
make[1]: Leaving directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0'
  debian/rules binary
make[1]: Entering directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0'
dh binary
    dh_update_autotools_config
    dh_autoreconf
    dh_auto_configure
    dh_auto_build
         make -j16 "INSTALL=install --strip-program=true"
make[2]: Entering directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0'
    dh_auto_test
         make -j16 test
make[2]: Entering directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0'
perl -I. -T -e "use PVE::CLI::pvesm; PVE::CLI::pvesm->verify_api();"
400 internal error - unable to verify schema
properties.control_port.type: value 'int' does not have a value in the 
enumeration 'string, object, coderef, array, boolean, number, integer, 
null, any'
properties.data_port.type: value 'int' does not have a value in the 
enumeration 'string, object, coderef, array, boolean, number, integer, 
null, any'
properties.luns_per_target.type: value 'int' does not have a value in 
the enumeration 'string, object, coderef, array, boolean, number, 
integer, null, any'
make[2]: *** [Makefile:16: test] Error 255
make[2]: Leaving directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0'
dh_auto_test: error: make -j16 test returned exit code 2
make[1]: *** [debian/rules:13: binary] Error 255
make[1]: Leaving directory 
'/root/build/pve-storage/libpve-storage-perl-9.1.0'
dpkg-buildpackage: error: debian/rules binary subprocess returned exit 
status 2
make: *** [Makefile:31: libpve-storage-perl_9.1.0_all.deb] Error 2



For pve-manager:

.....

test -z "${PVE_DOC_INSTANTVIEW}" || man -l pvesr.1
Note: Writing pvenode.1
test -z "${PVE_DOC_INSTANTVIEW}" || man -l pvenode.1
Can't locate PVE/API2/Plugins/Storage.pm in @INC (you may need to 
install the PVE::API2::Plugins::Storage module) (@INC entries checked: 
.. . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.40.1 
/usr/local/share/perl/5.40.1 /usr/lib/x86_64-linux-gnu/perl5/5.40 
/usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base 
/usr/lib/x86_64-linux-gnu/perl/5.40 /usr/share/perl/5.40 
/usr/local/lib/site_perl) at ../PVE/API2/Plugins.pm line 8.
BEGIN failed--compilation aborted at ../PVE/API2/Plugins.pm line 8.
Compilation failed in require at ../PVE/API2.pm line 20.
BEGIN failed--compilation aborted at ../PVE/API2.pm line 20.
Compilation failed in require at ../PVE/Service/pveproxy.pm line 13.
BEGIN failed--compilation aborted at ../PVE/Service/pveproxy.pm line 13.
Compilation failed in require at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
Can't locate PVE/API2/Plugins/Storage.pm in @INC (you may need to 
install the PVE::API2::Plugins::Storage module) (@INC entries checked: 
.. . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.40.1 
/usr/local/share/perl/5.40.1 /usr/lib/x86_64-linux-gnu/perl5/5.40 
/usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base 
/usr/lib/x86_64-linux-gnu/perl/5.40 /usr/share/perl/5.40 
/usr/local/lib/site_perl) at ../PVE/API2/Plugins.pm line 8.
BEGIN failed--compilation aborted at ../PVE/API2/Plugins.pm line 8.
Compilation failed in require at ../PVE/API2.pm line 20.
BEGIN failed--compilation aborted at ../PVE/API2.pm line 20.
Compilation failed in require at ../PVE/CLI/pvesh.pm line 16.
BEGIN failed--compilation aborted at ../PVE/CLI/pvesh.pm line 16.
Compilation failed in require at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
make[3]: *** [/usr/share/pve-doc-generator/pve-doc-generator.mk:38: 
pveproxy.8-synopsis.adoc] Error 2
make[3]: *** Waiting for unfinished jobs....
make[3]: *** [/usr/share/pve-doc-generator/pve-doc-generator.mk:34: 
pvesh.1-synopsis.adoc] Error 2
Note: Writing vzdump.1
test -z "${PVE_DOC_INSTANTVIEW}" || man -l vzdump.1
Can't locate PVE/API2/Plugins/Storage.pm in @INC (you may need to 
install the PVE::API2::Plugins::Storage module) (@INC entries checked: 
.. . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.40.1 
/usr/local/share/perl/5.40.1 /usr/lib/x86_64-linux-gnu/perl5/5.40 
/usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base 
/usr/lib/x86_64-linux-gnu/perl/5.40 /usr/share/perl/5.40 
/usr/local/lib/site_perl) at ../PVE/API2/Plugins.pm line 8.
BEGIN failed--compilation aborted at ../PVE/API2/Plugins.pm line 8.
Compilation failed in require at ../PVE/API2.pm line 20.
BEGIN failed--compilation aborted at ../PVE/API2.pm line 20.
Compilation failed in require at ../PVE/Service/pvedaemon.pm line 8.
BEGIN failed--compilation aborted at ../PVE/Service/pvedaemon.pm line 8.
Compilation failed in require at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
make[3]: *** [/usr/share/pve-doc-generator/pve-doc-generator.mk:38: 
pvedaemon.8-synopsis.adoc] Error 2
Note: Writing pveceph.1
test -z "${PVE_DOC_INSTANTVIEW}" || man -l pveceph.1
make[3]: Leaving directory '/root/build/pve-manager/pve-manager-9.1.5/bin'
make[2]: *** [Makefile:16: all] Error 2
make[2]: Leaving directory '/root/build/pve-manager/pve-manager-9.1.5'
dh_auto_build: error: make -j16 "INSTALL=install --strip-program=true" 
returned exit code 2
make[1]: *** [debian/rules:7: build] Error 2
make[1]: Leaving directory '/root/build/pve-manager/pve-manager-9.1.5'
dpkg-buildpackage: error: debian/rules build subprocess returned exit 
status 2
make: *** [Makefile:42: pve-manager_9.1.5_all.deb] Error 2



I've managed to make deb package for proxmox-widget-toolkit.

My strategy is to:
1. apply your patches to code in repositories
2. make deb packages
3. install deb packages on system and test it

May be you can recommend something or point me to the guide regarding 
making deb packages with applied patches.
Ive installed dev repositories according to 
https://pve.proxmox.com/wiki/Developer_Documentation

But I think Im mising something related to linkage or something else

Im building packages on proxmox 9.1 updated to 9.5


Best regards,

Andrei

On 1/9/26 04:19, Max R. Carrara wrote:
> On Thu Jan 8, 2026 at 11:48 PM CET, Andrei Perepiolkin wrote: >> Hi Max, >> >> >> I like your idea of extending Proxmox with the 
capability to >> render a UI for adding and editing custom storage 
plugins. >> >> I'm curious — was your patch approved or merged? >> >> >> 
Best regards, >> >> Andrei Perepiolkin > > Hello Andrei! > > I'm very 
glad you like it! The RFC is still awaiting comments / > feedback / 
review, mostly because it is / was holiday season. > > However, if you'd 
like to see this merged or iterated on faster, I'd > highly appreciate 
any feedback and/or testing! :) > > If you want to try it out for 
yourself, let me know if you need any > help applying or building the 
patches. It should work with any third- > party plugin out of the box, 
including yours. > > Best regards, Max > >> >> On 11/21/25 11:58, Max R. 
Carrara wrote: >>> GUI Support for Custom Storage Plugins - v2 >>> 
=========================================== >>> >>> This is a complete 
refresh of my previous RFC that aims to be >>> much less greenfield-y 
and instead tries to reuse as much >>> existing code as possible while 
remaining as forward-compatible >>> as possible. >>> >>> Normally I 
would provide a more detailed changelog under each >>> patch, but since 
so much has changed since rfc-v1, I'll instead >>> sum up the biggest 
changes here: >>> >>> - The API routes are changed to be a little more 
flexible—routes >>> regarding views etc. are completely omitted. See 
patches #01 and >>> #08 for more information. >>> >>> - The schemas of 
plugins are returned as part of their metadata. >>> A "schema" for a 
storage plugin in this context is simply a >>> hashmap consisting of the 
plugin's properties' JSON schemas. See >>> patch #02 for a complete and 
detailed explanation. >>> >>> - Existing UI code concerned with building 
the fields of ACME >>> DNS challenge plugins is factored out, made more 
generic and >>> also receives some additional features so that it can be 
used in >>> different places. See patches #05 and #06 for details. >>> 
 >>> - Instead of making separate versions of all of the storage- >>> 
related UI components (panels etc.), only one new input panel is >>> 
added, while the remaining necessary functionality is integrated >>> 
into the existing code. See patch #09 for further details. >>> >>> >>> 
The Result ---------- >>> >>> Instead of having to provide a separate 
"view definition", >>> storage entries for custom storage plugins can 
now be created >>> and edited in the UI *without* needing to provide any 
extra UI / >>> layouting hints. >>> >>> So, if one now installs 
something like the SSHFS example plugin >>> [sshfs-plugin], the 
resulting UI is about ~80% there in terms of >>> look and feel compared 
to the forms of built-in plugins: >>> >>> - Default values are displayed 
as grey text inside fields - >>> Descriptions of properties are provided 
as little pop-up quips >>> when hovering over a field - "fixed" 
properties are >>> automatically taken into account and made read-only 
when editing >>> a storage entry - "sensitive" properties are 
automatically >>> treated as password fields - Optional / non-optional 
properties >>> are handled - The min- / maxLength of strings and the 
min- / >>> maximum of numeric fields is taken into account in the UI - 
The >>> "Backup Retention" tab is automatically masked / unmasked >>> 
depending on whether the storage plugin supports backups or not >>> >>> 
This is mostly everything that I managed to squeeze out of the >>> 
existing SectionConfig schemas / data. >>> >>> Additionally, something 
that's neat is that the `title` key of >>> every property is now used as 
its field's label in the UI. That >>> means we can provide labels for 
all of our built-in properties >>> while third-party developers may 
provide theirs for their own >>> properties. As a quick example, this is 
what that would look >>> like for the SSHFS plugin [sshfs-plugin]: >>> 
 >>> sub properties { return { 'remote-path' => { description => >>> 
"Path on the remote filesystem used for SSHFS. Must be >>> absolute.", 
type => 'string', format => 'pve-storage-path', >>> title => 'Remote 
Path', }, 'sshfs-private-key' => { description >>> => "The private key 
to use for SSHFS.", type => 'string', title >>> => 'Private Key', }, }; 
} >>> >>> >>> This becomes even more flexible for third-party devs once 
we >>> switch over to property isolation—something the code in this RFC 
 >>> should be 100% forward-compatible with. Then they wouldn't be >>> 
bound to our provided labels. >>> >>> In terms of overall looks, the 
remaining 20% consist of some >>> polish on the frontend for the most 
part, but honestly, that can >>> be done once this RFC becomes an actual 
series. I felt that this >>> was in an adequate enough state to publish 
for now—please let me >>> know what you think if you give this RFC a 
spin, I'd appreciate >>> it! >>> >>> Previous Versions ----------------- 
 >>> >>> rfc-v1: https://lore.proxmox.com/pve- >>> 
devel/20250908180058.530119-1-m.carrara@proxmox.com/ >>> >>> References 
---------- >>> >>> [sshfs-plugin]: 
https://git.proxmox.com/?p=pve-storage-plugin- >>> 
examples.git;a=tree;f=plugin- >>> 
sshfs;h=c7543808f7226209650d1b8b6e449392bc1f0d2d;hb=refs/heads/ >>> 
master >>> >>> Summary of Changes ------------------ >>> >>> 
pve-storage: >>> >>> Max R. Carrara (5): api: plugins/storage: add 
initial routes and >>> endpoints api: plugins/storage/plugin: include 
schema in plugin >>> metadata api: plugins/storage/plugin: mark 
sensitive properties >>> in schema api: plugins/storage/plugin: factor 
plugin metadata >>> code into helper api: plugins/storage/plugin: add 
plugins' >>> 'content' to their metadata >>> >>> src/PVE/API2/Makefile | 
1 + src/PVE/API2/ >>> Plugins/Makefile | 18 +++ src/PVE/API2/Plugins/ 
 >>> Storage.pm | 54 ++++++++ src/PVE/API2/Plugins/Storage/ >>> Makefile 
| 17 +++ src/PVE/API2/Plugins/Storage/Plugin.pm | 163 >>> 
+++++++++++++++++++++++++ 5 files changed, 253 insertions(+) >>> create 
mode 100644 src/PVE/API2/Plugins/Makefile create mode >>> 100644 
src/PVE/API2/Plugins/Storage.pm create mode 100644 src/ >>> 
PVE/API2/Plugins/Storage/Makefile create mode 100644 src/PVE/ >>> 
API2/Plugins/Storage/Plugin.pm >>> >>> >>> proxmox-widget-toolkit: >>> 
 >>> Max R. Carrara (2): utils: introduce helper function >>> 
getFieldDefFromPropertySchema acme: use helper to construct >>> ExtJS 
fields from property schemas >>> >>> src/Utils.js | 106 
++++++++++++++++++++++++++++++ >>> +++++ src/window/ACMEPluginEdit.js | 
42 +++++--------- 2 files >>> changed, 119 insertions(+), 29 
deletions(-) >>> >>> >>> pve-manager: >>> >>> Max R. Carrara (3): api: 
add API routes 'plugins' and 'plugins/ >>> storage' ui: storage view: 
display error when no editor for >>> storage type exists ui: storage: 
add basic UI integration for >>> custom storage plugins >>> >>> 
PVE/API2.pm | 6 ++ PVE/API2/ >>> Makefile | 1 + PVE/API2/ >>> Plugins.pm 
| 61 +++++++++++++ www/manager6/ >>> Makefile | 1 + 
www/manager6/dc/StorageView.js >>> | 132 +++++++++++++++++++++-------- 
www/manager6/storage/ >>> Base.js | 1 + 
www/manager6/storage/CustomEdit.js | 110 ++ >>> ++++++++++++++++++++++ 7 
files changed, 278 insertions(+), 34 >>> deletions(-) create mode 100644 
PVE/API2/Plugins.pm create mode >>> 100644 
www/manager6/storage/CustomEdit.js >>> > >

      reply	other threads:[~2026-02-10 21:02 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-11-21 16:58 Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC pve-storage master v2 1/10] api: plugins/storage: add initial routes and endpoints Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC pve-storage master v2 2/10] api: plugins/storage/plugin: include schema in plugin metadata Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC pve-storage master v2 3/10] api: plugins/storage/plugin: mark sensitive properties in schema Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC pve-storage master v2 4/10] api: plugins/storage/plugin: factor plugin metadata code into helper Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC pve-storage master v2 5/10] api: plugins/storage/plugin: add plugins' 'content' to their metadata Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC proxmox-widget-toolkit master v2 6/10] utils: introduce helper function getFieldDefFromPropertySchema Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC proxmox-widget-toolkit master v2 7/10] acme: use helper to construct ExtJS fields from property schemas Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC pve-manager master v2 08/10] api: add API routes 'plugins' and 'plugins/storage' Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC pve-manager master v2 09/10] ui: storage view: display error when no editor for storage type exists Max R. Carrara
2025-11-21 16:58 ` [pve-devel] [RFC pve-manager master v2 10/10] ui: storage: add basic UI integration for custom storage plugins Max R. Carrara
2026-01-08 22:48 ` [pve-devel] [RFC pve-storage/proxmox-widget-toolkit/pve-manager master v2 00/10] GUI Support for Custom Storage Plugins Andrei Perepiolkin via pve-devel
     [not found] ` <de8deeff-b3d7-447b-8647-555dc058e10b@open-e.com>
2026-01-09  9:19   ` Max R. Carrara
2026-02-10 20:57     ` Andrei Perepiolkin [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=32e444a7-f273-4b3d-b91c-c76c1828d86d@open-e.com \
    --to=andrei.perepiolkin@open-e.com \
    --cc=m.carrara@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal