diff --git a/Makefile b/Makefile index dc6aa72f..d7470146 100644 --- a/Makefile +++ b/Makefile @@ -38,12 +38,16 @@ SUBCRATES != cargo metadata --no-deps --format-version=1 \ | grep "$$PWD/" \ | sed -e "s!.*$$PWD/!!g" -e 's/\#.*$$//g' -e 's/)$$//g' +STATIC_TARGET_DIR := target/static-build + ifeq ($(BUILD_MODE), release) CARGO_BUILD_ARGS += --release --target $(DEB_HOST_RUST_TYPE) COMPILEDIR := target/$(DEB_HOST_RUST_TYPE)/release +STATIC_COMPILEDIR := $(STATIC_TARGET_DIR)/$(DEB_HOST_RUST_TYPE)/release else CARGO_BUILD_ARGS += --target $(DEB_HOST_RUST_TYPE) COMPILEDIR := target/$(DEB_HOST_RUST_TYPE)/debug +STATIC_COMPILEDIR := $(STATIC_TARGET_DIR)/$(DEB_HOST_RUST_TYPE)/debug endif ifeq ($(valgrind), yes) @@ -55,6 +59,9 @@ CARGO ?= cargo COMPILED_BINS := \ $(addprefix $(COMPILEDIR)/,$(USR_BIN) $(USR_SBIN) $(SERVICE_BIN) $(RESTORE_BIN)) +STATIC_BIN := \ + $(addprefix $(STATIC_COMPILEDIR)/,proxmox-backup-client-static) + export DEB_VERSION DEB_VERSION_UPSTREAM SERVER_DEB=$(PACKAGE)-server_$(DEB_VERSION)_$(ARCH).deb @@ -63,10 +70,12 @@ CLIENT_DEB=$(PACKAGE)-client_$(DEB_VERSION)_$(ARCH).deb CLIENT_DBG_DEB=$(PACKAGE)-client-dbgsym_$(DEB_VERSION)_$(ARCH).deb RESTORE_DEB=proxmox-backup-file-restore_$(DEB_VERSION)_$(ARCH).deb RESTORE_DBG_DEB=proxmox-backup-file-restore-dbgsym_$(DEB_VERSION)_$(ARCH).deb +STATIC_CLIENT_DEB=$(PACKAGE)-client-static_$(DEB_VERSION)_$(ARCH).deb +STATIC_CLIENT_DBG_DEB=$(PACKAGE)-client-static-dbgsym_$(DEB_VERSION)_$(ARCH).deb DOC_DEB=$(PACKAGE)-docs_$(DEB_VERSION)_all.deb DEBS=$(SERVER_DEB) $(SERVER_DBG_DEB) $(CLIENT_DEB) $(CLIENT_DBG_DEB) \ - $(RESTORE_DEB) $(RESTORE_DBG_DEB) + $(RESTORE_DEB) $(RESTORE_DBG_DEB) $(STATIC_CLIENT_DEB) $(STATIC_CLIENT_DBG_DEB) DSC = rust-$(PACKAGE)_$(DEB_VERSION).dsc @@ -74,7 +83,7 @@ DESTDIR= tests ?= --workspace -all: $(SUBDIRS) +all: proxmox-backup-client-static $(SUBDIRS) .PHONY: $(SUBDIRS) $(SUBDIRS): @@ -198,7 +207,7 @@ $(COMPILED_BINS) $(COMPILEDIR)/dump-catalog-shell-cli $(COMPILEDIR)/docgen: .do- lint: cargo clippy -- -A clippy::all -D clippy::correctness -install: $(COMPILED_BINS) +install: $(COMPILED_BINS) $(STATIC_BIN) install -dm755 $(DESTDIR)$(BINDIR) install -dm755 $(DESTDIR)$(ZSH_COMPL_DEST) $(foreach i,$(USR_BIN), \ @@ -217,16 +226,29 @@ install: $(COMPILED_BINS) install -m4755 -o root -g root $(COMPILEDIR)/sg-tape-cmd $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/sg-tape-cmd $(foreach i,$(SERVICE_BIN), \ install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/ ;) + install -m755 $(STATIC_COMPILEDIR)/proxmox-backup-client $(DESTDIR)$(BINDIR)/proxmox-backup-client-static $(MAKE) -C www install $(MAKE) -C docs install $(MAKE) -C templates install .PHONY: upload upload: UPLOAD_DIST ?= $(DEB_DISTRIBUTION) -upload: $(SERVER_DEB) $(CLIENT_DEB) $(RESTORE_DEB) $(DOC_DEB) +upload: $(SERVER_DEB) $(CLIENT_DEB) $(RESTORE_DEB) $(DOC_DEB) $(STATIC_CLIENT_DEB) # check if working directory is clean git diff --exit-code --stat && git diff --exit-code --stat --staged tar cf - $(SERVER_DEB) $(SERVER_DBG_DEB) $(DOC_DEB) $(CLIENT_DEB) $(CLIENT_DBG_DEB) \ | ssh -X repoman@repo.proxmox.com upload --product pbs --dist $(UPLOAD_DIST) tar cf - $(CLIENT_DEB) $(CLIENT_DBG_DEB) | ssh -X repoman@repo.proxmox.com upload --product "pve,pmg,pbs-client" --dist $(UPLOAD_DIST) + tar cf - $(STATIC_CLIENT_DEB) $(STATIC_CLIENT_DBG_DEB) | ssh -X repoman@repo.proxmox.com upload --product "pbs-client" --dist $(UPLOAD_DIST) tar cf - $(RESTORE_DEB) $(RESTORE_DBG_DEB) | ssh -X repoman@repo.proxmox.com upload --product "pve" --dist $(UPLOAD_DIST) + +.PHONY: proxmox-backup-client-static +proxmox-backup-client-static: + rm -f $(STATIC_BIN) + $(MAKE) $(STATIC_BIN) + +$(STATIC_BIN): + mkdir -p $(STATIC_COMPILEDIR)/deps-stubs/ && \ + echo '!' > $(STATIC_COMPILEDIR)/deps-stubs/libsystemd.a # workaround for to greedy linkage and proxmox-systemd + $(CARGO) rustc $(CARGO_BUILD_ARGS) --package proxmox-backup-client --bin proxmox-backup-client \ + --target-dir $(STATIC_TARGET_DIR) -- -C target-feature=+crt-static -L $(STATIC_COMPILEDIR)/deps-stubs/ diff --git a/debian/control b/debian/control index 9687ebff..b8f7cfa4 100644 --- a/debian/control +++ b/debian/control @@ -205,6 +205,14 @@ Description: Proxmox Backup Client tools This package contains the Proxmox Backup client, which provides a simple command line tool to create and restore backups. +Package: proxmox-backup-client-static +Architecture: any +Depends: qrencode, ${misc:Depends}, +Conflicts: proxmox-backup-client +Description: Proxmox Backup Client tools (statically linked) + This package contains the Proxmox Backup client, which provides a + simple command line tool to create and restore backups. + Package: proxmox-backup-docs Build-Profiles: Section: doc diff --git a/debian/proxmox-backup-client-static.bash-completion b/debian/proxmox-backup-client-static.bash-completion new file mode 100644 index 00000000..f8b9b439 --- /dev/null +++ b/debian/proxmox-backup-client-static.bash-completion @@ -0,0 +1 @@ +debian/proxmox-backup-client.bc proxmox-backup-client diff --git a/debian/proxmox-backup-client-static.install b/debian/proxmox-backup-client-static.install new file mode 100644 index 00000000..f8a681d0 --- /dev/null +++ b/debian/proxmox-backup-client-static.install @@ -0,0 +1,2 @@ +usr/share/man/man1/proxmox-backup-client.1 +usr/share/zsh/vendor-completions/_proxmox-backup-client diff --git a/debian/rules b/debian/rules index a03fe11b..be7c93c2 100755 --- a/debian/rules +++ b/debian/rules @@ -47,6 +47,8 @@ override_dh_auto_install: dh_auto_install -- \ PROXY_USER=backup \ LIBDIR=/usr/lib/$(DEB_HOST_MULTIARCH) + mkdir -p debian/proxmox-backup-client-static/usr/bin + mv debian/tmp/usr/bin/proxmox-backup-client-static debian/proxmox-backup-client-static/usr/bin/proxmox-backup-client override_dh_installsystemd: dh_installsystemd -pproxmox-backup-server proxmox-backup-daily-update.timer