[pve-devel] [RFC v1 pve-storage 2/2] (rfc) example: sshfs plugin: package SSHFSPlugin.pm
Max Carrara
m.carrara at proxmox.com
Fri Mar 28 18:12:09 CET 2025
Note that the Makefile this commit adds currently isn't being called
by the top-level one in the repository root.
This is because I'm not 100% sure on how to structure this yet. Since
third-party developers will most likely package their plugin as well,
a separate debian/ directory seems sensible. It contains only what's
required for the custom plugin, thus mimicking what someone would do
in a dedicated repository.
At the same time, it would be more convenient for us to just have it
within the rest of the tree, building from the same source as for
libpve-storage-perl.
Because I wanted to get some early impressions on this, everything
is built in the example/sshfs-plugin directory.
Signed-off-by: Max Carrara <m.carrara at proxmox.com>
---
example/sshfs-plugin/Makefile | 71 +++++++++++++++++++++++
example/sshfs-plugin/debian/changelog | 5 ++
example/sshfs-plugin/debian/control | 22 +++++++
example/sshfs-plugin/debian/copyright | 21 +++++++
example/sshfs-plugin/debian/rules | 26 +++++++++
example/sshfs-plugin/debian/source/format | 1 +
example/sshfs-plugin/debian/triggers | 1 +
7 files changed, 147 insertions(+)
create mode 100644 example/sshfs-plugin/Makefile
create mode 100644 example/sshfs-plugin/debian/changelog
create mode 100644 example/sshfs-plugin/debian/control
create mode 100644 example/sshfs-plugin/debian/copyright
create mode 100755 example/sshfs-plugin/debian/rules
create mode 100644 example/sshfs-plugin/debian/source/format
create mode 100644 example/sshfs-plugin/debian/triggers
diff --git a/example/sshfs-plugin/Makefile b/example/sshfs-plugin/Makefile
new file mode 100644
index 0000000..cbd0691
--- /dev/null
+++ b/example/sshfs-plugin/Makefile
@@ -0,0 +1,71 @@
+# Makes useful Debian-specific variables available
+include /usr/share/dpkg/default.mk
+
+# --- Useful variables for convenience
+
+# Note that variables can be overridden, e.g. `make install DESTDIR='./foo'`
+DESTDIR=
+PACKAGE=pve-storage-sshfs-plugin
+
+BINDIR=${DESTDIR}/usr/bin
+PERLLIBDIR=${DESTDIR}/usr/share/perl5
+MAN1DIR=${DESTDIR}/usr/share/man/man1
+MAN8DIR=${DESTDIR}/usr/share/man/man8
+CRONDAILYDIR=${DESTDIR}/etc/cron.daily
+INITDBINDIR=${DESTDIR}/etc/init.d
+SERVICEDIR=${DESTDIR}/lib/systemd/system
+BASHCOMPLDIR=${DESTDIR}/usr/share/bash-completion/completions/
+ZSHCOMPLDIR=${DESTDIR}/usr/share/zsh/vendor-completions/
+HARADIR=${DESTDIR}/usr/share/cluster
+DOCDIR=${DESTDIR}/usr/share/doc/${PACKAGE}
+PODDIR=${DESTDIR}/usr/share/doc/${PACKAGE}/pod
+USRSHARE=${DESTDIR}/usr/share/${PACKAGE}
+
+# Directory where our custom plugin has to go
+PLUGINDIR=${PERLLIBDIR}/PVE/Storage/Custom
+
+export VERSION = $(DEB_VERSION_UPSTREAM_REVISION)
+
+BUILDDIR = $(PACKAGE)-$(DEB_VERSION_UPSTREAM)
+
+DSC=$(PACKAGE)_$(DEB_VERSION).dsc
+DEB=$(PACKAGE)_$(DEB_VERSION)_$(DEB_HOST_ARCH).deb
+
+# --- Targets
+
+$(BUILDDIR):
+ rm -rf $@ $@.tmp
+ mkdir $@.tmp
+ rsync -a * $@.tmp
+ # You can add additional commands instead of this comment if you need to
+ # e.g. create additional files inside the build directory etc.
+ mv $@.tmp $@
+
+# Creates a .deb package for installation
+.PHONY: deb
+deb: $(DEB)
+$(DEB): $(BUILDDIR)
+ cd $(BUILDDIR); dpkg-buildpackage -b -us -uc
+ lintian $(DEB)
+
+# Creates a .dsc (Debian source) package
+.PHONY: dsc
+dsc:
+ rm -rf $(BUILDDIR) $(DSC)
+ $(MAKE) $(DSC)
+ lintian $(DSC)
+
+$(DSC): $(BUILDDIR)
+ cd $(BUILDDIR); dpkg-buildpackage -S -us -uc -d
+
+# Target used to place files and directories at expected locations, with expected permissions
+.PHONY: install
+install:
+ install -D -m 0644 lib/PVE/Storage/Custom/SSHFSPlugin.pm $(PLUGINDIR)/SSHFSPlugin.pm
+
+# Used to clean up your builds
+.PHONY: clean
+clean:
+ rm -f $(PACKAGE)*.tar* *.deb *.dsc *.build *.buildinfo *.changes
+ rm -rf dest $(PACKAGE)-[0-9]*/
+
diff --git a/example/sshfs-plugin/debian/changelog b/example/sshfs-plugin/debian/changelog
new file mode 100644
index 0000000..ad4df86
--- /dev/null
+++ b/example/sshfs-plugin/debian/changelog
@@ -0,0 +1,5 @@
+pve-storage-sshfs-plugin (1.0.0) UNRELEASED; urgency=medium
+
+ * Initial release.
+
+ -- Proxmox Support Team <support at proxmox.com> Thu, 27 Oct 2025 12:23:58 +0100
diff --git a/example/sshfs-plugin/debian/control b/example/sshfs-plugin/debian/control
new file mode 100644
index 0000000..5732cd6
--- /dev/null
+++ b/example/sshfs-plugin/debian/control
@@ -0,0 +1,22 @@
+Source: pve-storage-sshfs-plugin
+Section: perl
+Priority: optional
+Maintainer: Proxmox Support Team <support at proxmox.com>
+Rules-Requires-Root: no
+Build-Depends:
+ debhelper-compat (= 13),
+ libpve-storage-perl (>= 8.3.3),
+ lintian,
+ perl,
+ rsync,
+Standards-Version: 4.6.2
+
+Package: pve-storage-sshfs-plugin
+Architecture: any
+Depends:
+ ${misc:Depends},
+ ${perl:Depends},
+ libpve-storage-perl (>= 8.3.3),
+ sshfs (>= 3.7.3),
+Description: SSHFS storage plugin for Proxmox Virtual Environment.
+ Used to demonstrate plugin development.
diff --git a/example/sshfs-plugin/debian/copyright b/example/sshfs-plugin/debian/copyright
new file mode 100644
index 0000000..c26ed02
--- /dev/null
+++ b/example/sshfs-plugin/debian/copyright
@@ -0,0 +1,21 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Source: https://git.proxmox.com/?p=pve-storage.git
+
+Files:
+ *
+Copyright:
+ 2025 Proxmox Server Solutions GmbH <support at proxmox.com>
+License: AGPL-3.0+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
diff --git a/example/sshfs-plugin/debian/rules b/example/sshfs-plugin/debian/rules
new file mode 100755
index 0000000..f1d1d25
--- /dev/null
+++ b/example/sshfs-plugin/debian/rules
@@ -0,0 +1,26 @@
+#!/usr/bin/make -f
+
+# See debhelper(7) (uncomment to enable).
+# Output every command that modifies files on the build system.
+#export DH_VERBOSE = 1
+
+
+# See FEATURE AREAS in dpkg-buildflags(1).
+#export DEB_BUILD_MAINT_OPTIONS = hardening=+all
+
+# See ENVIRONMENT in dpkg-buildflags(1).
+# Package maintainers to append CFLAGS.
+#export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic
+# Package maintainers to append LDFLAGS.
+#export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
+
+
+%:
+ dh $@
+
+
+# dh_make generated override targets.
+# This is an example for Cmake (see <https://bugs.debian.org/641051>).
+#override_dh_auto_configure:
+# dh_auto_configure -- \
+# -DCMAKE_LIBRARY_PATH=$(DEB_HOST_MULTIARCH)
diff --git a/example/sshfs-plugin/debian/source/format b/example/sshfs-plugin/debian/source/format
new file mode 100644
index 0000000..89ae9db
--- /dev/null
+++ b/example/sshfs-plugin/debian/source/format
@@ -0,0 +1 @@
+3.0 (native)
diff --git a/example/sshfs-plugin/debian/triggers b/example/sshfs-plugin/debian/triggers
new file mode 100644
index 0000000..59dd688
--- /dev/null
+++ b/example/sshfs-plugin/debian/triggers
@@ -0,0 +1 @@
+activate-noawait pve-api-updates
--
2.39.5
More information about the pve-devel
mailing list