proxmox-backup-client: 3.3.2 -> 3.4.2

- The one patch previously pulled from the AUR packaging is now
  vendored, due to not being updated (yet) there and needing a refresh.
- A new patch is introduced to revert a commit with very much
  upstream-specific change in the `h2` crate, which is not applicable
  here.

Also closes #412778.

Backport reason: There have been a few bug fixes and especially the
credentials-from-systemd/env feature is nice. Otherwise there haven't
been any changes to the client side.

Signed-off-by: Christoph Heiss <christoph@c8h4.io>
(cherry picked from commit 6881e4cdab)
This commit is contained in:
Christoph Heiss
2025-06-06 11:41:38 +02:00
parent 6fbe752293
commit d2a57e0daf
7 changed files with 1139 additions and 486 deletions

View File

@@ -1,19 +1,19 @@
From 15345a1ca0a52f2e977361002fe984609704ec90 Mon Sep 17 00:00:00 2001
From fe701cc514b479ca01d18d7f1ab1da6acbc93273 Mon Sep 17 00:00:00 2001
From: Christoph Heiss <christoph@c8h4.io>
Date: Tue, 24 Dec 2024 17:40:48 +0100
Subject: [PATCH 1/3] cargo: re-route dependencies not available on crates.io
Date: Thu, 5 Jun 2025 11:26:24 +0200
Subject: [PATCH 1/5] cargo: re-route dependencies not available on crates.io
to git repos
Signed-off-by: Christoph Heiss <christoph@c8h4.io>
---
Cargo.toml | 147 ++++++++++-------------------------------------------
1 file changed, 26 insertions(+), 121 deletions(-)
Cargo.toml | 146 ++++++++++-------------------------------------------
1 file changed, 27 insertions(+), 119 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index 9354fb17..d2014429 100644
index d38321e3..99d712da 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -42,8 +42,6 @@ members = [
@@ -41,8 +41,6 @@ members = [
"proxmox-backup-banner",
"proxmox-backup-client",
@@ -22,23 +22,7 @@ index 9354fb17..d2014429 100644
"pxar-bin",
]
@@ -112,7 +110,6 @@ pbs-tools = { path = "pbs-tools" }
# regular crates
anyhow = "1.0"
async-trait = "0.1.56"
-apt-pkg-native = "0.3.2"
base64 = "0.13"
bitflags = "2.4"
bytes = "1.0"
@@ -126,7 +123,6 @@ flate2 = "1.0"
foreign-types = "0.3"
futures = "0.3"
h2 = { version = "0.4", features = [ "stream" ] }
-handlebars = "3.0"
hex = "0.4.3"
http = "0.2"
hyper = { version = "0.14", features = [ "full" ] }
@@ -162,139 +158,48 @@ xdg = "2.2"
@@ -160,138 +158,48 @@ xdg = "2.2"
zstd = { version = "0.12", features = [ "bindgen" ] }
zstd-safe = "6.0"
@@ -55,7 +39,6 @@ index 9354fb17..d2014429 100644
-futures.workspace = true
-h2.workspace = true
-hex.workspace = true
-http.workspace = true
-hyper.workspace = true
-libc.workspace = true
-log.workspace = true
@@ -116,13 +99,13 @@ index 9354fb17..d2014429 100644
-proxmox-time.workspace = true
-proxmox-uuid.workspace = true
-proxmox-worker-task.workspace = true
-pbs-api-types.workspace = true
-
-# in their respective repo
-proxmox-acme.workspace = true
-pxar.workspace = true
-
-# proxmox-backup workspace/internal crates
-pbs-api-types.workspace = true
-pbs-buildcfg.workspace = true
-pbs-client.workspace = true
-pbs-config.workspace = true
@@ -136,7 +119,9 @@ index 9354fb17..d2014429 100644
# Local path overrides
# NOTE: You must run `cargo update` after changing this for it to take effect!
[patch.crates-io]
-#pbs-api-types = { path = "../proxmox/pbs-api-types" }
+pbs-api-types = { path = "../proxmox/pbs-api-types" }
#proxmox-acme = { path = "../proxmox/proxmox-acme" }
#proxmox-apt = { path = "../proxmox/proxmox-apt" }
-#proxmox-apt-api-types = { path = "../proxmox/proxmox-apt-api-types" }
-#proxmox-async = { path = "../proxmox/proxmox-async" }
@@ -196,7 +181,6 @@ index 9354fb17..d2014429 100644
+proxmox-uuid = { path = "../proxmox/proxmox-uuid" }
+proxmox-worker-task = { path = "../proxmox/proxmox-worker-task" }
#proxmox-acme = { path = "../proxmox/proxmox-acme" }
-#pathpatterns = {path = "../pathpatterns" }
-#pxar = { path = "../pxar" }
+pathpatterns = {path = "../pathpatterns" }
@@ -205,5 +189,5 @@ index 9354fb17..d2014429 100644
[features]
default = []
--
2.47.0
2.49.0

View File

@@ -1,7 +1,7 @@
From fbfbc075c7451cda415fc5678cf5bce8bb11dc78 Mon Sep 17 00:00:00 2001
From b71b5bab3fadc663d322e3ef2faa8f098423fb03 Mon Sep 17 00:00:00 2001
From: Christoph Heiss <christoph@c8h4.io>
Date: Tue, 24 Dec 2024 17:22:35 +0100
Subject: [PATCH 2/3] docs: Add target path fixup variable
Subject: [PATCH 2/5] docs: add target path fixup variable
Signed-off-by: Christoph Heiss <christoph@c8h4.io>
---
@@ -9,10 +9,10 @@ Signed-off-by: Christoph Heiss <christoph@c8h4.io>
1 file changed, 1 insertion(+)
diff --git a/docs/Makefile b/docs/Makefile
index 66da6037..a9939131 100644
index c57cbbc2..fa00729e 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -92,6 +92,7 @@ API_VIEWER_FILES := \
@@ -94,6 +94,7 @@ API_VIEWER_FILES := \
SPHINXOPTS = -E
SPHINXBUILD = sphinx-build
BUILDDIR = output
@@ -21,5 +21,5 @@ index 66da6037..a9939131 100644
ifeq ($(BUILD_MODE), release)
COMPILEDIR := ../target/$(DEB_HOST_RUST_TYPE)/release
--
2.47.0
2.49.0

View File

@@ -1,7 +1,7 @@
From 3fc7e2ab65ad6a8af360fafa84b97f551fa1b619 Mon Sep 17 00:00:00 2001
From 88f8ac1e5d158ad0a46177b813fd7557cc5e3fbe Mon Sep 17 00:00:00 2001
From: Christoph Heiss <christoph@c8h4.io>
Date: Tue, 24 Dec 2024 17:35:40 +0100
Subject: [PATCH 3/3] cargo: use local patched h2 dependency
Subject: [PATCH 3/5] cargo: use local patched h2 dependency
Signed-off-by: Christoph Heiss <christoph@c8h4.io>
---
@@ -9,7 +9,7 @@ Signed-off-by: Christoph Heiss <christoph@c8h4.io>
1 file changed, 2 insertions(+)
diff --git a/Cargo.toml b/Cargo.toml
index d2014429..54f951c8 100644
index 99d712da..091696f1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -201,6 +201,8 @@ proxmox-worker-task = { path = "../proxmox/proxmox-worker-task" }
@@ -22,5 +22,5 @@ index d2014429..54f951c8 100644
default = []
#valgrind = ["valgrind_request"]
--
2.47.0
2.49.0

View File

@@ -0,0 +1,83 @@
From 846d0b9c8f62340cb0703c59d16414b05a15382a Mon Sep 17 00:00:00 2001
From: Thomas Lamprecht <thomas@lamprecht.org>
Date: Tue, 29 Nov 2022 17:20:28 +0100
Subject: [PATCH 4/5] docs: drop all but client man pages
Signed-off-by: Thomas Lamprecht <thomas@lamprecht.org>
Signed-off-by: Christoph Heiss <christoph@c8h4.io>
---
docs/Makefile | 19 -------------------
docs/conf.py | 24 ------------------------
2 files changed, 43 deletions(-)
diff --git a/docs/Makefile b/docs/Makefile
index fa00729e..53a420b5 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -1,27 +1,8 @@
include ../defines.mk
GENERATED_SYNOPSIS := \
- config/acl/roles.rst \
- config/datastore/config.rst \
- config/domains/config.rst \
- config/media-pool/config.rst \
- config/notifications-priv/config.rst \
- config/notifications/config.rst \
- config/remote/config.rst \
- config/sync/config.rst \
- config/tape-job/config.rst \
- config/tape/config.rst \
- config/user/config.rst \
- config/verification/config.rst \
- config/prune/config.rst \
- pmt/synopsis.rst \
- pmtx/synopsis.rst \
proxmox-backup-client/catalog-shell-synopsis.rst \
proxmox-backup-client/synopsis.rst \
- proxmox-backup-debug/synopsis.rst \
- proxmox-backup-manager/synopsis.rst \
- proxmox-file-restore/synopsis.rst \
- proxmox-tape/synopsis.rst \
pxar/synopsis.rst \
MAN1_PAGES := \
diff --git a/docs/conf.py b/docs/conf.py
index a7fa1079..345a0170 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -93,31 +93,7 @@ rst_epilog += f"\n.. |pbs-copyright| replace:: Copyright (C) {copyright}"
man_pages = [
# CLI
('proxmox-backup-client/man1', 'proxmox-backup-client', 'Command line tool for Backup and Restore', [author], 1),
- ('proxmox-backup-manager/man1', 'proxmox-backup-manager', 'Command line tool to manage and configure the backup server.', [author], 1),
- ('proxmox-backup-debug/man1', 'proxmox-backup-debug', 'Debugging command line tool for Backup and Restore', [author], 1),
- ('proxmox-backup-proxy/man1', 'proxmox-backup-proxy', 'Proxmox Backup Public API Server', [author], 1),
- ('proxmox-backup/man1', 'proxmox-backup', 'Proxmox Backup Local API Server', [author], 1),
- ('proxmox-file-restore/man1', 'proxmox-file-restore', 'CLI tool for restoring files and directories from Proxmox Backup Server archives', [author], 1),
- ('proxmox-tape/man1', 'proxmox-tape', 'Proxmox Tape Backup CLI Tool', [author], 1),
('pxar/man1', 'pxar', 'Proxmox File Archive CLI Tool', [author], 1),
- ('pmt/man1', 'pmt', 'Control Linux Tape Devices', [author], 1),
- ('pmtx/man1', 'pmtx', 'Control SCSI media changer devices (tape autoloaders)', [author], 1),
- ('pbs2to3/man1', 'pbs2to3', 'Proxmox Backup Server upgrade checker script for 2.4+ to current 3.x major upgrades', [author], 1),
- # configs
- ('config/acl/man5', 'acl.cfg', 'Access Control Configuration', [author], 5),
- ('config/datastore/man5', 'datastore.cfg', 'Datastore Configuration', [author], 5),
- ('config/domains/man5', 'domains.cfg', 'Realm Configuration', [author], 5),
- ('config/media-pool/man5', 'media-pool.cfg', 'Media Pool Configuration', [author], 5),
- ('config/node/man5', 'proxmox-backup.node.cfg', 'Proxmox Backup Server - Node Configuration', [author], 5),
- ('config/remote/man5', 'remote.cfg', 'Remote Server Configuration', [author], 5),
- ('config/sync/man5', 'sync.cfg', 'Synchronization Job Configuration', [author], 5),
- ('config/tape-job/man5', 'tape-job.cfg', 'Tape Job Configuration', [author], 5),
- ('config/tape/man5', 'tape.cfg', 'Tape Drive and Changer Configuration', [author], 5),
- ('config/user/man5', 'user.cfg', 'User Configuration', [author], 5),
- ('config/verification/man5', 'verification.cfg', 'Verification Job Configuration', [author], 5),
- ('config/prune/man5', 'prune.cfg', 'Prune Job Configuration', [author], 5),
- ('config/notifications/man5', 'notifications.cfg', 'Notification target/matcher configuration', [author], 5),
- ('config/notifications-priv/man5', 'notifications-priv.cfg', 'Notification target secrets', [author], 5),
]
--
2.49.0

View File

@@ -0,0 +1,198 @@
From b1a06f6a63a63410f89bd0d2968a6fdb7ce2352d Mon Sep 17 00:00:00 2001
From: Christoph Heiss <christoph@c8h4.io>
Date: Thu, 5 Jun 2025 12:01:10 +0200
Subject: [PATCH 5/5] Revert "h2: switch to legacy feature"
This reverts commit 168ed370263e84a6235968c615b856b9280debe1.
It's a Proxmox-specific workaround (see also the commit description
itself) and does not apply here.
Signed-off-by: Christoph Heiss <christoph@c8h4.io>
---
Cargo.toml | 2 +-
examples/h2client.rs | 6 +++---
examples/h2s-client.rs | 6 +++---
pbs-client/src/backup_writer.rs | 8 ++++----
pbs-client/src/http_client.rs | 12 +++++-------
pbs-client/src/pipe_to_stream.rs | 2 +-
6 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/Cargo.toml b/Cargo.toml
index 091696f1..063f62f8 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -122,7 +122,7 @@ env_logger = "0.11"
flate2 = "1.0"
foreign-types = "0.3"
futures = "0.3"
-h2 = { version = "0.4", features = [ "legacy", "stream" ] }
+h2 = { version = "0.4", features = [ "stream" ] }
handlebars = "3.0"
hex = "0.4.3"
hickory-resolver = { version = "0.24.1", default-features = false, features = [ "system-config", "tokio-runtime" ] }
diff --git a/examples/h2client.rs b/examples/h2client.rs
index e44c43fa..1dcb4498 100644
--- a/examples/h2client.rs
+++ b/examples/h2client.rs
@@ -10,7 +10,7 @@ use tokio::net::TcpStream;
// Simple H2 client to test H2 download speed using h2server.rs
struct Process {
- body: h2::legacy::RecvStream,
+ body: h2::RecvStream,
trailers: bool,
bytes: usize,
}
@@ -50,7 +50,7 @@ impl Future for Process {
}
fn send_request(
- mut client: h2::legacy::client::SendRequest<bytes::Bytes>,
+ mut client: h2::client::SendRequest<bytes::Bytes>,
) -> impl Future<Output = Result<usize, Error>> {
println!("sending request");
@@ -78,7 +78,7 @@ async fn run() -> Result<(), Error> {
let conn = TcpStream::connect(std::net::SocketAddr::from(([127, 0, 0, 1], 8008))).await?;
conn.set_nodelay(true).unwrap();
- let (client, h2) = h2::legacy::client::Builder::new()
+ let (client, h2) = h2::client::Builder::new()
.initial_connection_window_size(1024 * 1024 * 1024)
.initial_window_size(1024 * 1024 * 1024)
.max_frame_size(4 * 1024 * 1024)
diff --git a/examples/h2s-client.rs b/examples/h2s-client.rs
index 86b3a931..a12b5a48 100644
--- a/examples/h2s-client.rs
+++ b/examples/h2s-client.rs
@@ -10,7 +10,7 @@ use tokio::net::TcpStream;
// Simple H2 client to test H2 download speed using h2s-server.rs
struct Process {
- body: h2::legacy::RecvStream,
+ body: h2::RecvStream,
trailers: bool,
bytes: usize,
}
@@ -50,7 +50,7 @@ impl Future for Process {
}
fn send_request(
- mut client: h2::legacy::client::SendRequest<bytes::Bytes>,
+ mut client: h2::client::SendRequest<bytes::Bytes>,
) -> impl Future<Output = Result<usize, Error>> {
println!("sending request");
@@ -94,7 +94,7 @@ async fn run() -> Result<(), Error> {
.await
.map_err(|err| format_err!("connect failed - {}", err))?;
- let (client, h2) = h2::legacy::client::Builder::new()
+ let (client, h2) = h2::client::Builder::new()
.initial_connection_window_size(1024 * 1024 * 1024)
.initial_window_size(1024 * 1024 * 1024)
.max_frame_size(4 * 1024 * 1024)
diff --git a/pbs-client/src/backup_writer.rs b/pbs-client/src/backup_writer.rs
index 32542506..1253ef56 100644
--- a/pbs-client/src/backup_writer.rs
+++ b/pbs-client/src/backup_writer.rs
@@ -56,7 +56,7 @@ pub struct UploadOptions {
}
struct ChunkUploadResponse {
- future: h2::legacy::client::ResponseFuture,
+ future: h2::client::ResponseFuture,
size: usize,
}
@@ -143,7 +143,7 @@ impl BackupWriter {
param: Option<Value>,
content_type: &str,
data: Vec<u8>,
- ) -> Result<h2::legacy::client::ResponseFuture, Error> {
+ ) -> Result<h2::client::ResponseFuture, Error> {
let request =
H2Client::request_builder("localhost", method, path, param, Some(content_type))
.unwrap();
@@ -514,7 +514,7 @@ impl BackupWriter {
}
fn response_queue() -> (
- mpsc::Sender<h2::legacy::client::ResponseFuture>,
+ mpsc::Sender<h2::client::ResponseFuture>,
oneshot::Receiver<Result<(), Error>>,
) {
let (verify_queue_tx, verify_queue_rx) = mpsc::channel(100);
@@ -537,7 +537,7 @@ impl BackupWriter {
tokio::spawn(
ReceiverStream::new(verify_queue_rx)
.map(Ok::<_, Error>)
- .try_for_each(move |response: h2::legacy::client::ResponseFuture| {
+ .try_for_each(move |response: h2::client::ResponseFuture| {
response
.map_err(Error::from)
.and_then(H2Client::h2api_response)
diff --git a/pbs-client/src/http_client.rs b/pbs-client/src/http_client.rs
index c95def07..8f6f8b41 100644
--- a/pbs-client/src/http_client.rs
+++ b/pbs-client/src/http_client.rs
@@ -863,7 +863,7 @@ impl HttpClient {
let max_window_size = (1 << 31) - 2;
- let (h2, connection) = h2::legacy::client::Builder::new()
+ let (h2, connection) = h2::client::Builder::new()
.initial_connection_window_size(max_window_size)
.initial_window_size(max_window_size)
.max_frame_size(4 * 1024 * 1024)
@@ -1008,11 +1008,11 @@ impl Drop for HttpClient {
#[derive(Clone)]
pub struct H2Client {
- h2: h2::legacy::client::SendRequest<bytes::Bytes>,
+ h2: h2::client::SendRequest<bytes::Bytes>,
}
impl H2Client {
- pub fn new(h2: h2::legacy::client::SendRequest<bytes::Bytes>) -> Self {
+ pub fn new(h2: h2::client::SendRequest<bytes::Bytes>) -> Self {
Self { h2 }
}
@@ -1092,7 +1092,7 @@ impl H2Client {
&self,
request: Request<()>,
data: Option<bytes::Bytes>,
- ) -> impl Future<Output = Result<h2::legacy::client::ResponseFuture, Error>> {
+ ) -> impl Future<Output = Result<h2::client::ResponseFuture, Error>> {
self.h2
.clone()
.ready()
@@ -1109,9 +1109,7 @@ impl H2Client {
})
}
- pub async fn h2api_response(
- response: Response<h2::legacy::RecvStream>,
- ) -> Result<Value, Error> {
+ pub async fn h2api_response(response: Response<h2::RecvStream>) -> Result<Value, Error> {
let status = response.status();
let (_head, mut body) = response.into_parts();
diff --git a/pbs-client/src/pipe_to_stream.rs b/pbs-client/src/pipe_to_stream.rs
index 3fc942d3..ae689851 100644
--- a/pbs-client/src/pipe_to_stream.rs
+++ b/pbs-client/src/pipe_to_stream.rs
@@ -8,7 +8,7 @@ use std::task::{Context, Poll};
use anyhow::{format_err, Error};
use bytes::Bytes;
use futures::{ready, Future};
-use h2::legacy::SendStream;
+use h2::SendStream;
pub struct PipeToSendStream {
body_tx: SendStream<Bytes>,
--
2.49.0

File diff suppressed because it is too large Load Diff

View File

@@ -21,20 +21,20 @@
let
pname = "proxmox-backup-client";
version = "3.3.2";
version = "3.4.2";
proxmox-backup_src = fetchgit {
url = "git://git.proxmox.com/git/proxmox-backup.git";
tag = "v${version}";
rev = "37f1949335cad801f7cdaa0173cc114590a37e4e";
name = "proxmox-backup";
hash = "sha256-0piUftzuK9e8KbOe+bc3SXWa0DlnEgk5iNGWGn4fw7Y=";
hash = "sha256-OW6GG/4IcEw8XOSSB5EoN+jyoOaL0ZtavJahnKOuAqI=";
};
proxmox_src = fetchgit {
url = "git://git.proxmox.com/git/proxmox.git";
rev = "df6b705f564ff145faa14770db6493bc5da8cab3";
rev = "e47fdf411be61b15382bc3baa3064f1e7cb03fa2";
name = "proxmox";
hash = "sha256-6fQVK+G5FMPy+29hScMkvQ+MQQryYs8f8oooq1YGXbg=";
hash = "sha256-jSU00D75sx40VS8rgF+D6h120FMaD1Jfq4e8l+8D5BQ=";
};
proxmox-fuse_src = fetchgit {
@@ -63,11 +63,9 @@ let
name = "h2";
owner = "hyperium";
repo = "h2";
rev = "v0.4.7";
hash = "sha256-GcO4321Jqt1w7jbvQKd0GXIjptyz+tlN2SuxHoBJ/9k=";
rev = "v0.4.10";
hash = "sha256-PasHCbU466ByHIbDQpMMgzjg2dMRveOButHeVSknSEQ=";
};
aurPatchCommit = "6f83f58d54bc7186211d0cfa637c652b13e0dfee";
in
rustPlatform.buildRustPackage {
@@ -85,7 +83,7 @@ rustPlatform.buildRustPackage {
sourceRoot = proxmox-backup_src.name;
# These patches are essentially un-upstreamable, due to being "workarounds" related to the
# project structure.
# project structure and upstream/Debian-specific packaging.
cargoPatches = [
# A lot of Rust crates `proxmox-backup-client` depends on are only available through git (or
# Debian packages). This patch redirects all these dependencies to a local, relative path, which
@@ -94,17 +92,16 @@ rustPlatform.buildRustPackage {
# `make docs` assumes that the binaries are located under `target/{debug,release}`, but due
# to how `buildRustPackage` works, they get put under `target/$RUSTC_TARGET/{debug,release}`.
# This patch simply fixes that up.
./0002-docs-Add-target-path-fixup-variable.patch
./0002-docs-add-target-path-fixup-variable.patch
# Need to use a patched version of the `h2` crate (with a downgraded dependency, see also postPatch).
# This overrides it in the Cargo.toml as needed.
./0003-cargo-use-local-patched-h2-dependency.patch
# This patch prevents the generation of the man-pages for other components inside the repo,
# which would require them too be built too. Thus avoid wasting resources and just skip them.
(fetchpatch {
name = "0002-docs-drop-all-but-client-man-pages.patch";
url = "https://aur.archlinux.org/cgit/aur.git/plain/0002-docs-drop-all-but-client-man-pages.patch?h=proxmox-backup-client&id=${aurPatchCommit}";
hash = "sha256-AlIGfJZGaZl2NBVfuFxpDL6bgyvXA2Wcz7UWSrnQa24=";
})
./0004-docs-drop-all-but-client-man-pages.patch
# Upstream uses a patched version of the h2 crate (see [0]), which does not apply here.
# [0] https://git.proxmox.com/?p=debcargo-conf.git;a=blob;f=src/h2/debian/patches/add-legacy.patch;h=0913da317
./0005-Revert-h2-switch-to-legacy-feature.patch
];
postPatch = ''