Compare commits
No commits in common. "master" and "v1.0.13" have entirely different histories.
114
Cargo.toml
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "proxmox-backup"
|
name = "proxmox-backup"
|
||||||
version = "2.2.3"
|
version = "1.0.13"
|
||||||
authors = [
|
authors = [
|
||||||
"Dietmar Maurer <dietmar@proxmox.com>",
|
"Dietmar Maurer <dietmar@proxmox.com>",
|
||||||
"Dominik Csapak <d.csapak@proxmox.com>",
|
"Dominik Csapak <d.csapak@proxmox.com>",
|
||||||
@ -18,135 +18,63 @@ homepage = "https://www.proxmox.com"
|
|||||||
|
|
||||||
exclude = [ "build", "debian", "tests/catar_data/test_symlink/symlink1"]
|
exclude = [ "build", "debian", "tests/catar_data/test_symlink/symlink1"]
|
||||||
|
|
||||||
[workspace]
|
|
||||||
members = [
|
|
||||||
"pbs-buildcfg",
|
|
||||||
"pbs-client",
|
|
||||||
"pbs-config",
|
|
||||||
"pbs-datastore",
|
|
||||||
"pbs-fuse-loop",
|
|
||||||
"proxmox-rest-server",
|
|
||||||
"proxmox-rrd",
|
|
||||||
"pbs-tape",
|
|
||||||
"pbs-tools",
|
|
||||||
|
|
||||||
"proxmox-backup-banner",
|
|
||||||
"proxmox-backup-client",
|
|
||||||
"proxmox-file-restore",
|
|
||||||
"proxmox-restore-daemon",
|
|
||||||
"pxar-bin",
|
|
||||||
]
|
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
name = "proxmox_backup"
|
name = "proxmox_backup"
|
||||||
path = "src/lib.rs"
|
path = "src/lib.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
apt-pkg-native = "0.3.2"
|
apt-pkg-native = "0.3.2"
|
||||||
base64 = "0.13"
|
base64 = "0.12"
|
||||||
bitflags = "1.2.1"
|
bitflags = "1.2.1"
|
||||||
bytes = "1.0"
|
bytes = "1.0"
|
||||||
cidr = "0.2.1"
|
|
||||||
crc32fast = "1"
|
crc32fast = "1"
|
||||||
endian_trait = { version = "0.6", features = ["arrays"] }
|
endian_trait = { version = "0.6", features = ["arrays"] }
|
||||||
flate2 = "1.0"
|
|
||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
thiserror = "1.0"
|
|
||||||
futures = "0.3"
|
futures = "0.3"
|
||||||
h2 = { version = "0.3", features = [ "stream" ] }
|
h2 = { version = "0.3", features = [ "stream" ] }
|
||||||
handlebars = "3.0"
|
handlebars = "3.0"
|
||||||
hex = "0.4.3"
|
|
||||||
http = "0.2"
|
http = "0.2"
|
||||||
hyper = { version = "0.14", features = [ "full" ] }
|
hyper = { version = "0.14", features = [ "full" ] }
|
||||||
lazy_static = "1.4"
|
lazy_static = "1.4"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
log = "0.4.17"
|
log = "0.4"
|
||||||
nix = "0.24"
|
nix = "0.19.1"
|
||||||
num-traits = "0.2"
|
num-traits = "0.2"
|
||||||
once_cell = "1.3.1"
|
once_cell = "1.3.1"
|
||||||
openssl = "0.10.38" # currently patched!
|
openssl = "0.10"
|
||||||
pam = "0.7"
|
pam = "0.7"
|
||||||
pam-sys = "0.5"
|
pam-sys = "0.5"
|
||||||
percent-encoding = "2.1"
|
percent-encoding = "2.1"
|
||||||
regex = "1.5.5"
|
pin-utils = "0.1.0"
|
||||||
rustyline = "9"
|
pin-project = "1.0"
|
||||||
|
pathpatterns = "0.1.2"
|
||||||
|
proxmox = { version = "0.11.0", features = [ "sortable-macro", "api-macro", "websocket" ] }
|
||||||
|
#proxmox = { git = "git://git.proxmox.com/git/proxmox", version = "0.1.2", features = [ "sortable-macro", "api-macro" ] }
|
||||||
|
#proxmox = { path = "../proxmox/proxmox", features = [ "sortable-macro", "api-macro", "websocket" ] }
|
||||||
|
proxmox-fuse = "0.1.1"
|
||||||
|
pxar = { version = "0.10.1", features = [ "tokio-io" ] }
|
||||||
|
#pxar = { path = "../pxar", features = [ "tokio-io" ] }
|
||||||
|
regex = "1.2"
|
||||||
|
rustyline = "7"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
siphasher = "0.3"
|
siphasher = "0.3"
|
||||||
syslog = "4.0"
|
syslog = "4.0"
|
||||||
tokio = { version = "1.6", features = [ "fs", "io-util", "io-std", "macros", "net", "parking_lot", "process", "rt", "rt-multi-thread", "signal", "time" ] }
|
tokio = { version = "1.0", features = [ "fs", "io-util", "macros", "net", "parking_lot", "process", "rt", "rt-multi-thread", "signal", "time" ] }
|
||||||
tokio-openssl = "0.6.1"
|
tokio-openssl = "0.6.1"
|
||||||
tokio-stream = "0.1.0"
|
tokio-stream = "0.1.0"
|
||||||
tokio-util = { version = "0.7", features = [ "codec", "io" ] }
|
tokio-util = { version = "0.6", features = [ "codec" ] }
|
||||||
tower-service = "0.3.0"
|
tower-service = "0.3.0"
|
||||||
udev = "0.4"
|
udev = ">= 0.3, <0.5"
|
||||||
url = "2.1"
|
url = "2.1"
|
||||||
#valgrind_request = { git = "https://github.com/edef1c/libvalgrind_request", version = "1.1.0", optional = true }
|
#valgrind_request = { git = "https://github.com/edef1c/libvalgrind_request", version = "1.1.0", optional = true }
|
||||||
walkdir = "2"
|
walkdir = "2"
|
||||||
|
webauthn-rs = "0.2.5"
|
||||||
xdg = "2.2"
|
xdg = "2.2"
|
||||||
|
zstd = { version = "0.4", features = [ "bindgen" ] }
|
||||||
nom = "5.1"
|
nom = "5.1"
|
||||||
crossbeam-channel = "0.5"
|
crossbeam-channel = "0.5"
|
||||||
|
|
||||||
# Used only by examples currently:
|
|
||||||
zstd = { version = "0.6", features = [ "bindgen" ] }
|
|
||||||
|
|
||||||
pathpatterns = "0.1.2"
|
|
||||||
pxar = { version = "0.10.1", features = [ "tokio-io" ] }
|
|
||||||
|
|
||||||
proxmox-http = { version = "0.6.1", features = [ "client", "http-helpers", "websocket" ] }
|
|
||||||
proxmox-io = "1"
|
|
||||||
proxmox-lang = "1.1"
|
|
||||||
proxmox-router = { version = "1.2.2", features = [ "cli" ] }
|
|
||||||
proxmox-schema = { version = "1.3.1", features = [ "api-macro" ] }
|
|
||||||
proxmox-section-config = "1"
|
|
||||||
proxmox-tfa = { version = "2", features = [ "api", "api-types" ] }
|
|
||||||
proxmox-time = "1.1.2"
|
|
||||||
proxmox-uuid = "1"
|
|
||||||
proxmox-serde = "0.1"
|
|
||||||
proxmox-shared-memory = "0.2"
|
|
||||||
proxmox-sys = { version = "0.3", features = [ "sortable-macro" ] }
|
|
||||||
proxmox-compression = "0.1"
|
|
||||||
|
|
||||||
|
|
||||||
proxmox-acme-rs = "0.4"
|
|
||||||
proxmox-apt = "0.8.0"
|
|
||||||
proxmox-async = "0.4"
|
|
||||||
proxmox-openid = "0.9.0"
|
|
||||||
|
|
||||||
pbs-api-types = { path = "pbs-api-types" }
|
|
||||||
pbs-buildcfg = { path = "pbs-buildcfg" }
|
|
||||||
pbs-client = { path = "pbs-client" }
|
|
||||||
pbs-config = { path = "pbs-config" }
|
|
||||||
pbs-datastore = { path = "pbs-datastore" }
|
|
||||||
proxmox-rest-server = { path = "proxmox-rest-server" }
|
|
||||||
proxmox-rrd = { path = "proxmox-rrd" }
|
|
||||||
pbs-tools = { path = "pbs-tools" }
|
|
||||||
pbs-tape = { path = "pbs-tape" }
|
|
||||||
|
|
||||||
# Local path overrides
|
|
||||||
# NOTE: You must run `cargo update` after changing this for it to take effect!
|
|
||||||
[patch.crates-io]
|
|
||||||
#proxmox-acme-rs = { path = "../proxmox-acme-rs" }
|
|
||||||
#proxmox-apt = { path = "../proxmox-apt" }
|
|
||||||
#proxmox-async = { path = "../proxmox/proxmox-async" }
|
|
||||||
#proxmox-compression = { path = "../proxmox/proxmox-compression" }
|
|
||||||
#proxmox-borrow = { path = "../proxmox/proxmox-borrow" }
|
|
||||||
#proxmox-fuse = { path = "../proxmox-fuse" }
|
|
||||||
#proxmox-http = { path = "../proxmox/proxmox-http" }
|
|
||||||
#proxmox-io = { path = "../proxmox/proxmox-io" }
|
|
||||||
#proxmox-lang = { path = "../proxmox/proxmox-lang" }
|
|
||||||
#proxmox-openid = { path = "../proxmox-openid-rs" }
|
|
||||||
#proxmox-router = { path = "../proxmox/proxmox-router" }
|
|
||||||
#proxmox-schema = { path = "../proxmox/proxmox-schema" }
|
|
||||||
#proxmox-section-config = { path = "../proxmox/proxmox-section-config" }
|
|
||||||
#proxmox-shared-memory = { path = "../proxmox/proxmox-shared-memory" }
|
|
||||||
#proxmox-sys = { path = "../proxmox/proxmox-sys" }
|
|
||||||
#proxmox-serde = { path = "../proxmox/proxmox-serde" }
|
|
||||||
#proxmox-tfa = { path = "../proxmox/proxmox-tfa" }
|
|
||||||
#proxmox-time = { path = "../proxmox/proxmox-time" }
|
|
||||||
#proxmox-uuid = { path = "../proxmox/proxmox-uuid" }
|
|
||||||
#pxar = { path = "../pxar" }
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
#valgrind = ["valgrind_request"]
|
#valgrind = ["valgrind_request"]
|
||||||
|
122
Makefile
@ -9,7 +9,6 @@ SUBDIRS := etc www docs
|
|||||||
# Binaries usable by users
|
# Binaries usable by users
|
||||||
USR_BIN := \
|
USR_BIN := \
|
||||||
proxmox-backup-client \
|
proxmox-backup-client \
|
||||||
proxmox-file-restore \
|
|
||||||
pxar \
|
pxar \
|
||||||
proxmox-tape \
|
proxmox-tape \
|
||||||
pmtx \
|
pmtx \
|
||||||
@ -17,8 +16,7 @@ USR_BIN := \
|
|||||||
|
|
||||||
# Binaries usable by admins
|
# Binaries usable by admins
|
||||||
USR_SBIN := \
|
USR_SBIN := \
|
||||||
proxmox-backup-manager \
|
proxmox-backup-manager
|
||||||
proxmox-backup-debug \
|
|
||||||
|
|
||||||
# Binaries for services:
|
# Binaries for services:
|
||||||
SERVICE_BIN := \
|
SERVICE_BIN := \
|
||||||
@ -27,27 +25,6 @@ SERVICE_BIN := \
|
|||||||
proxmox-backup-proxy \
|
proxmox-backup-proxy \
|
||||||
proxmox-daily-update
|
proxmox-daily-update
|
||||||
|
|
||||||
# Single file restore daemon
|
|
||||||
RESTORE_BIN := \
|
|
||||||
proxmox-restore-daemon
|
|
||||||
|
|
||||||
SUBCRATES := \
|
|
||||||
pbs-api-types \
|
|
||||||
pbs-buildcfg \
|
|
||||||
pbs-client \
|
|
||||||
pbs-config \
|
|
||||||
pbs-datastore \
|
|
||||||
pbs-fuse-loop \
|
|
||||||
proxmox-rest-server \
|
|
||||||
proxmox-rrd \
|
|
||||||
pbs-tape \
|
|
||||||
pbs-tools \
|
|
||||||
proxmox-backup-banner \
|
|
||||||
proxmox-backup-client \
|
|
||||||
proxmox-file-restore \
|
|
||||||
proxmox-restore-daemon \
|
|
||||||
pxar-bin
|
|
||||||
|
|
||||||
ifeq ($(BUILD_MODE), release)
|
ifeq ($(BUILD_MODE), release)
|
||||||
CARGO_BUILD_ARGS += --release
|
CARGO_BUILD_ARGS += --release
|
||||||
COMPILEDIR := target/release
|
COMPILEDIR := target/release
|
||||||
@ -62,7 +39,7 @@ endif
|
|||||||
CARGO ?= cargo
|
CARGO ?= cargo
|
||||||
|
|
||||||
COMPILED_BINS := \
|
COMPILED_BINS := \
|
||||||
$(addprefix $(COMPILEDIR)/,$(USR_BIN) $(USR_SBIN) $(SERVICE_BIN) $(RESTORE_BIN))
|
$(addprefix $(COMPILEDIR)/,$(USR_BIN) $(USR_SBIN) $(SERVICE_BIN))
|
||||||
|
|
||||||
export DEB_VERSION DEB_VERSION_UPSTREAM
|
export DEB_VERSION DEB_VERSION_UPSTREAM
|
||||||
|
|
||||||
@ -70,20 +47,15 @@ SERVER_DEB=${PACKAGE}-server_${DEB_VERSION}_${ARCH}.deb
|
|||||||
SERVER_DBG_DEB=${PACKAGE}-server-dbgsym_${DEB_VERSION}_${ARCH}.deb
|
SERVER_DBG_DEB=${PACKAGE}-server-dbgsym_${DEB_VERSION}_${ARCH}.deb
|
||||||
CLIENT_DEB=${PACKAGE}-client_${DEB_VERSION}_${ARCH}.deb
|
CLIENT_DEB=${PACKAGE}-client_${DEB_VERSION}_${ARCH}.deb
|
||||||
CLIENT_DBG_DEB=${PACKAGE}-client-dbgsym_${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
|
|
||||||
DOC_DEB=${PACKAGE}-docs_${DEB_VERSION}_all.deb
|
DOC_DEB=${PACKAGE}-docs_${DEB_VERSION}_all.deb
|
||||||
|
|
||||||
DEBS=${SERVER_DEB} ${SERVER_DBG_DEB} ${CLIENT_DEB} ${CLIENT_DBG_DEB} \
|
DEBS=${SERVER_DEB} ${SERVER_DBG_DEB} ${CLIENT_DEB} ${CLIENT_DBG_DEB}
|
||||||
${RESTORE_DEB} ${RESTORE_DBG_DEB} ${DEBUG_DEB} ${DEBUG_DBG_DEB}
|
|
||||||
|
|
||||||
DSC = rust-${PACKAGE}_${DEB_VERSION}.dsc
|
DSC = rust-${PACKAGE}_${DEB_VERSION}.dsc
|
||||||
|
|
||||||
DESTDIR=
|
DESTDIR=
|
||||||
|
|
||||||
tests ?= --workspace
|
all: cargo-build $(SUBDIRS)
|
||||||
|
|
||||||
all: $(SUBDIRS)
|
|
||||||
|
|
||||||
.PHONY: $(SUBDIRS)
|
.PHONY: $(SUBDIRS)
|
||||||
$(SUBDIRS):
|
$(SUBDIRS):
|
||||||
@ -95,23 +67,19 @@ test:
|
|||||||
$(CARGO) test $(tests) $(CARGO_BUILD_ARGS)
|
$(CARGO) test $(tests) $(CARGO_BUILD_ARGS)
|
||||||
|
|
||||||
doc:
|
doc:
|
||||||
$(CARGO) doc --workspace --no-deps $(CARGO_BUILD_ARGS)
|
$(CARGO) doc --no-deps $(CARGO_BUILD_ARGS)
|
||||||
|
|
||||||
# always re-create this dir
|
# always re-create this dir
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
build:
|
build:
|
||||||
@echo "Setting pkg-buildcfg version to: $(DEB_VERSION_UPSTREAM)"
|
|
||||||
sed -i -e 's/^version =.*$$/version = "$(DEB_VERSION_UPSTREAM)"/' \
|
|
||||||
pbs-buildcfg/Cargo.toml
|
|
||||||
rm -rf build
|
rm -rf build
|
||||||
mkdir build
|
rm -f debian/control
|
||||||
cp -a debian \
|
debcargo package --config debian/debcargo.toml --changelog-ready --no-overlay-write-back --directory build proxmox-backup $(shell dpkg-parsechangelog -l debian/changelog -SVersion | sed -e 's/-.*//')
|
||||||
Cargo.toml src \
|
sed -e '1,/^$$/ ! d' build/debian/control > build/debian/control.src
|
||||||
$(SUBCRATES) \
|
cat build/debian/control.src build/debian/control.in > build/debian/control
|
||||||
docs etc examples tests www zsh-completions \
|
rm build/debian/control.in build/debian/control.src
|
||||||
defines.mk Makefile \
|
cp build/debian/control debian/control
|
||||||
./build/
|
rm build/Cargo.lock
|
||||||
rm -f build/Cargo.lock
|
|
||||||
find build/debian -name "*.hint" -delete
|
find build/debian -name "*.hint" -delete
|
||||||
$(foreach i,$(SUBDIRS), \
|
$(foreach i,$(SUBDIRS), \
|
||||||
$(MAKE) -C build/$(i) clean ;)
|
$(MAKE) -C build/$(i) clean ;)
|
||||||
@ -131,9 +99,7 @@ deb: build
|
|||||||
lintian $(DEBS)
|
lintian $(DEBS)
|
||||||
|
|
||||||
.PHONY: deb-all
|
.PHONY: deb-all
|
||||||
deb-all: build
|
deb-all: $(DOC_DEB) $(DEBS)
|
||||||
cd build; dpkg-buildpackage -b -us -uc --no-pre-clean
|
|
||||||
lintian $(DEBS) $(DOC_DEB)
|
|
||||||
|
|
||||||
.PHONY: dsc
|
.PHONY: dsc
|
||||||
dsc: $(DSC)
|
dsc: $(DSC)
|
||||||
@ -141,61 +107,27 @@ $(DSC): build
|
|||||||
cd build; dpkg-buildpackage -S -us -uc -d -nc
|
cd build; dpkg-buildpackage -S -us -uc -d -nc
|
||||||
lintian $(DSC)
|
lintian $(DSC)
|
||||||
|
|
||||||
.PHONY: clean distclean deb clean
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
clean: clean-deb
|
|
||||||
|
clean:
|
||||||
$(foreach i,$(SUBDIRS), \
|
$(foreach i,$(SUBDIRS), \
|
||||||
$(MAKE) -C $(i) clean ;)
|
$(MAKE) -C $(i) clean ;)
|
||||||
$(CARGO) clean
|
$(CARGO) clean
|
||||||
rm -f .do-cargo-build
|
rm -rf *.deb *.dsc *.tar.gz *.buildinfo *.changes build
|
||||||
find . -name '*~' -exec rm {} ';'
|
find . -name '*~' -exec rm {} ';'
|
||||||
|
|
||||||
# allows one to avoid running cargo clean when one just wants to tidy up after a packgae build
|
|
||||||
clean-deb:
|
|
||||||
rm -rf *.deb *.dsc *.tar.gz *.buildinfo *.changes build/
|
|
||||||
|
|
||||||
.PHONY: dinstall
|
.PHONY: dinstall
|
||||||
dinstall: ${SERVER_DEB} ${SERVER_DBG_DEB} ${CLIENT_DEB} ${CLIENT_DBG_DEB} \
|
dinstall: ${DEBS}
|
||||||
${DEBUG_DEB} ${DEBUG_DBG_DEB}
|
dpkg -i ${DEBS}
|
||||||
dpkg -i $^
|
|
||||||
|
|
||||||
# make sure we build binaries before docs
|
# make sure we build binaries before docs
|
||||||
docs: $(COMPILEDIR)/dump-catalog-shell-cli $(COMPILEDIR)/docgen
|
docs: cargo-build
|
||||||
|
|
||||||
.PHONY: cargo-build
|
.PHONY: cargo-build
|
||||||
cargo-build:
|
cargo-build:
|
||||||
rm -f .do-cargo-build
|
$(CARGO) build $(CARGO_BUILD_ARGS)
|
||||||
$(MAKE) $(COMPILED_BINS)
|
|
||||||
|
|
||||||
$(COMPILED_BINS) $(COMPILEDIR)/dump-catalog-shell-cli $(COMPILEDIR)/docgen: .do-cargo-build
|
|
||||||
.do-cargo-build:
|
|
||||||
$(CARGO) build $(CARGO_BUILD_ARGS) \
|
|
||||||
--package proxmox-backup-banner \
|
|
||||||
--bin proxmox-backup-banner \
|
|
||||||
--package proxmox-backup-client \
|
|
||||||
--bin proxmox-backup-client \
|
|
||||||
--bin dump-catalog-shell-cli \
|
|
||||||
--bin proxmox-backup-debug \
|
|
||||||
--package proxmox-file-restore \
|
|
||||||
--bin proxmox-file-restore \
|
|
||||||
--package pxar-bin \
|
|
||||||
--bin pxar \
|
|
||||||
--package pbs-tape \
|
|
||||||
--bin pmt \
|
|
||||||
--bin pmtx \
|
|
||||||
--package proxmox-restore-daemon \
|
|
||||||
--bin proxmox-restore-daemon \
|
|
||||||
--package proxmox-backup \
|
|
||||||
--bin docgen \
|
|
||||||
--bin proxmox-backup-api \
|
|
||||||
--bin proxmox-backup-manager \
|
|
||||||
--bin proxmox-backup-proxy \
|
|
||||||
--bin proxmox-daily-update \
|
|
||||||
--bin proxmox-file-restore \
|
|
||||||
--bin proxmox-tape \
|
|
||||||
--bin sg-tape-cmd
|
|
||||||
touch "$@"
|
|
||||||
|
|
||||||
|
$(COMPILED_BINS): cargo-build
|
||||||
|
|
||||||
.PHONY: lint
|
.PHONY: lint
|
||||||
lint:
|
lint:
|
||||||
@ -212,9 +144,6 @@ install: $(COMPILED_BINS)
|
|||||||
install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(SBINDIR)/ ; \
|
install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(SBINDIR)/ ; \
|
||||||
install -m644 zsh-completions/_$(i) $(DESTDIR)$(ZSH_COMPL_DEST)/ ;)
|
install -m644 zsh-completions/_$(i) $(DESTDIR)$(ZSH_COMPL_DEST)/ ;)
|
||||||
install -dm755 $(DESTDIR)$(LIBEXECDIR)/proxmox-backup
|
install -dm755 $(DESTDIR)$(LIBEXECDIR)/proxmox-backup
|
||||||
install -dm755 $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/file-restore
|
|
||||||
$(foreach i,$(RESTORE_BIN), \
|
|
||||||
install -m755 $(COMPILEDIR)/$(i) $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/file-restore/ ;)
|
|
||||||
# install sg-tape-cmd as setuid binary
|
# install sg-tape-cmd as setuid binary
|
||||||
install -m4755 -o root -g root $(COMPILEDIR)/sg-tape-cmd $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/sg-tape-cmd
|
install -m4755 -o root -g root $(COMPILEDIR)/sg-tape-cmd $(DESTDIR)$(LIBEXECDIR)/proxmox-backup/sg-tape-cmd
|
||||||
$(foreach i,$(SERVICE_BIN), \
|
$(foreach i,$(SERVICE_BIN), \
|
||||||
@ -223,11 +152,8 @@ install: $(COMPILED_BINS)
|
|||||||
$(MAKE) -C docs install
|
$(MAKE) -C docs install
|
||||||
|
|
||||||
.PHONY: upload
|
.PHONY: upload
|
||||||
upload: ${SERVER_DEB} ${CLIENT_DEB} ${RESTORE_DEB} ${DOC_DEB} ${DEBUG_DEB}
|
upload: ${SERVER_DEB} ${CLIENT_DEB} ${DOC_DEB}
|
||||||
# check if working directory is clean
|
# check if working directory is clean
|
||||||
git diff --exit-code --stat && git diff --exit-code --stat --staged
|
git diff --exit-code --stat && git diff --exit-code --stat --staged
|
||||||
tar cf - ${SERVER_DEB} ${SERVER_DBG_DEB} ${DOC_DEB} ${CLIENT_DEB} \
|
tar cf - ${SERVER_DEB} ${SERVER_DBG_DEB} ${DOC_DEB} | ssh -X repoman@repo.proxmox.com upload --product pbs --dist buster
|
||||||
${CLIENT_DBG_DEB} ${DEBUG_DEB} ${DEBUG_DBG_DEB} \
|
tar cf - ${CLIENT_DEB} ${CLIENT_DBG_DEB} | ssh -X repoman@repo.proxmox.com upload --product "pbs,pve,pmg" --dist buster
|
||||||
| ssh -X repoman@repo.proxmox.com upload --product pbs --dist bullseye
|
|
||||||
tar cf - ${CLIENT_DEB} ${CLIENT_DBG_DEB} | ssh -X repoman@repo.proxmox.com upload --product "pve,pmg,pbs-client" --dist bullseye
|
|
||||||
tar cf - ${RESTORE_DEB} ${RESTORE_DBG_DEB} | ssh -X repoman@repo.proxmox.com upload --product "pve" --dist bullseye
|
|
||||||
|
37
README.rst
@ -1,7 +1,3 @@
|
|||||||
|
|
||||||
Build & Release Notes
|
|
||||||
*********************
|
|
||||||
|
|
||||||
``rustup`` Toolchain
|
``rustup`` Toolchain
|
||||||
====================
|
====================
|
||||||
|
|
||||||
@ -44,44 +40,41 @@ example for proxmox crate above).
|
|||||||
|
|
||||||
Build
|
Build
|
||||||
=====
|
=====
|
||||||
on Debian 11 Bullseye
|
on Debian Buster
|
||||||
|
|
||||||
Setup:
|
Setup:
|
||||||
1. # echo 'deb http://download.proxmox.com/debian/devel/ bullseye main' | sudo tee /etc/apt/sources.list.d/proxmox-devel.list
|
1. # echo 'deb http://download.proxmox.com/debian/devel/ buster main' >> /etc/apt/sources.list.d/proxmox-devel.list
|
||||||
2. # sudo wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
|
2. # sudo wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
||||||
3. # sudo apt update
|
3. # sudo apt update
|
||||||
4. # sudo apt install devscripts debcargo clang
|
4. # sudo apt install devscripts debcargo clang
|
||||||
5. # git clone git://git.proxmox.com/git/proxmox-backup.git
|
5. # git clone git://git.proxmox.com/git/proxmox-backup.git
|
||||||
6. # cd proxmox-backup; sudo mk-build-deps -ir
|
6. # sudo mk-build-deps -ir
|
||||||
|
|
||||||
Note: 2. may be skipped if you already added the PVE or PBS package repository
|
Note: 2. may be skipped if you already added the PVE or PBS package repository
|
||||||
|
|
||||||
You are now able to build using the Makefile or cargo itself, e.g.::
|
You are now able to build using the Makefile or cargo itself.
|
||||||
|
|
||||||
# make deb-all
|
|
||||||
# # or for a non-package build
|
|
||||||
# cargo build --all --release
|
|
||||||
|
|
||||||
Design Notes
|
Design Notes
|
||||||
************
|
============
|
||||||
|
|
||||||
Here are some random thought about the software design (unless I find a better place).
|
Here are some random thought about the software design (unless I find a better place).
|
||||||
|
|
||||||
|
|
||||||
Large chunk sizes
|
Large chunk sizes
|
||||||
=================
|
-----------------
|
||||||
|
|
||||||
It is important to notice that large chunk sizes are crucial for performance.
|
It is important to notice that large chunk sizes are crucial for
|
||||||
We have a multi-user system, where different people can do different operations
|
performance. We have a multi-user system, where different people can do
|
||||||
on a datastore at the same time, and most operation involves reading a series
|
different operations on a datastore at the same time, and most operation
|
||||||
of chunks.
|
involves reading a series of chunks.
|
||||||
|
|
||||||
So what is the maximal theoretical speed we can get when reading a series of
|
So what is the maximal theoretical speed we can get when reading a
|
||||||
chunks? Reading a chunk sequence need the following steps:
|
series of chunks? Reading a chunk sequence need the following steps:
|
||||||
|
|
||||||
- seek to the first chunk's start location
|
- seek to the first chunk start location
|
||||||
- read the chunk data
|
- read the chunk data
|
||||||
- seek to the next chunk's start location
|
- seek to the first chunk start location
|
||||||
- read the chunk data
|
- read the chunk data
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
|
1071
debian/changelog
vendored
129
debian/control
vendored
@ -1,116 +1,81 @@
|
|||||||
Source: rust-proxmox-backup
|
Source: rust-proxmox-backup
|
||||||
Section: admin
|
Section: admin
|
||||||
Priority: optional
|
Priority: optional
|
||||||
Build-Depends: debhelper (>= 12),
|
Build-Depends: debhelper (>= 11),
|
||||||
dh-cargo (>= 24),
|
dh-cargo (>= 18),
|
||||||
cargo:native,
|
cargo:native,
|
||||||
rustc:native,
|
rustc:native,
|
||||||
libstd-rust-dev,
|
libstd-rust-dev,
|
||||||
librust-anyhow-1+default-dev,
|
librust-anyhow-1+default-dev,
|
||||||
librust-apt-pkg-native-0.3+default-dev (>= 0.3.2-~~),
|
librust-apt-pkg-native-0.3+default-dev (>= 0.3.2-~~),
|
||||||
librust-base64-0.13+default-dev,
|
librust-base64-0.12+default-dev,
|
||||||
librust-bitflags-1+default-dev (>= 1.2.1-~~),
|
librust-bitflags-1+default-dev (>= 1.2.1-~~),
|
||||||
librust-bytes-1+default-dev,
|
librust-bytes-1+default-dev,
|
||||||
librust-cidr-0.2+default-dev (>= 0.2.1-~~),
|
|
||||||
librust-crc32fast-1+default-dev,
|
librust-crc32fast-1+default-dev,
|
||||||
librust-crossbeam-channel-0.5+default-dev,
|
librust-crossbeam-channel-0.5+default-dev,
|
||||||
librust-endian-trait-0.6+arrays-dev,
|
librust-endian-trait-0.6+arrays-dev,
|
||||||
librust-endian-trait-0.6+default-dev,
|
librust-endian-trait-0.6+default-dev,
|
||||||
librust-env-logger-0.9+default-dev,
|
|
||||||
librust-flate2-1+default-dev,
|
|
||||||
librust-foreign-types-0.3+default-dev,
|
|
||||||
librust-futures-0.3+default-dev,
|
librust-futures-0.3+default-dev,
|
||||||
librust-h2-0.3+default-dev,
|
librust-h2-0.3+default-dev,
|
||||||
librust-h2-0.3+stream-dev,
|
librust-h2-0.3+stream-dev,
|
||||||
librust-handlebars-3+default-dev,
|
librust-handlebars-3+default-dev,
|
||||||
librust-hex-0.4+default-dev (>= 0.4.3-~~),
|
|
||||||
librust-hex-0.4+serde-dev (>= 0.4.3-~~),
|
|
||||||
librust-http-0.2+default-dev,
|
librust-http-0.2+default-dev,
|
||||||
librust-hyper-0.14+default-dev (>= 0.14.5-~~),
|
librust-hyper-0.14+default-dev,
|
||||||
librust-hyper-0.14+full-dev (>= 0.14.5-~~),
|
librust-hyper-0.14+full-dev,
|
||||||
librust-lazy-static-1+default-dev (>= 1.4-~~),
|
librust-lazy-static-1+default-dev (>= 1.4-~~),
|
||||||
librust-libc-0.2+default-dev,
|
librust-libc-0.2+default-dev,
|
||||||
librust-log-0.4+default-dev (>= 0.4.17-~~) <!nocheck>,
|
librust-log-0.4+default-dev,
|
||||||
librust-nix-0.24+default-dev,
|
librust-nix-0.19+default-dev (>= 0.19.1-~~),
|
||||||
librust-nom-5+default-dev (>= 5.1-~~),
|
librust-nom-5+default-dev (>= 5.1-~~),
|
||||||
librust-num-traits-0.2+default-dev,
|
librust-num-traits-0.2+default-dev,
|
||||||
librust-once-cell-1+default-dev (>= 1.3.1-~~),
|
librust-once-cell-1+default-dev (>= 1.3.1-~~),
|
||||||
librust-openssl-0.10+default-dev (>= 0.10.38-~~),
|
librust-openssl-0.10+default-dev,
|
||||||
librust-pam-0.7+default-dev,
|
librust-pam-0.7+default-dev,
|
||||||
librust-pam-sys-0.5+default-dev,
|
librust-pam-sys-0.5+default-dev,
|
||||||
librust-pathpatterns-0.1+default-dev (>= 0.1.2-~~),
|
librust-pathpatterns-0.1+default-dev (>= 0.1.2-~~),
|
||||||
librust-percent-encoding-2+default-dev (>= 2.1-~~),
|
librust-percent-encoding-2+default-dev (>= 2.1-~~),
|
||||||
librust-pin-project-lite-0.2+default-dev,
|
librust-pin-project-1+default-dev,
|
||||||
librust-proxmox-acme-rs-0.4+default-dev,
|
librust-pin-utils-0.1+default-dev,
|
||||||
librust-proxmox-apt-0.8+default-dev,
|
librust-proxmox-0.11+api-macro-dev,
|
||||||
librust-proxmox-async-0.4+default-dev,
|
librust-proxmox-0.11+default-dev,
|
||||||
librust-proxmox-borrow-1+default-dev,
|
librust-proxmox-0.11+sortable-macro-dev,
|
||||||
librust-proxmox-compression-0.1+default-dev (>= 0.1.1-~~),
|
librust-proxmox-0.11+websocket-dev,
|
||||||
librust-proxmox-fuse-0.1+default-dev (>= 0.1.1-~~),
|
librust-proxmox-fuse-0.1+default-dev (>= 0.1.1-~~),
|
||||||
librust-proxmox-http-0.6+client-dev (>= 0.6.1-~~),
|
|
||||||
librust-proxmox-http-0.6+default-dev (>= 0.6.1-~~),
|
|
||||||
librust-proxmox-http-0.6+http-helpers-dev (>= 0.6.1-~~),
|
|
||||||
librust-proxmox-http-0.6+websocket-dev (>= 0.6.1-~~),
|
|
||||||
librust-proxmox-io-1+default-dev (>= 1.0.1-~~),
|
|
||||||
librust-proxmox-io-1+tokio-dev (>= 1.0.1-~~),
|
|
||||||
librust-proxmox-lang-1+default-dev (>= 1.1-~~),
|
|
||||||
librust-proxmox-openid-0.9+default-dev,
|
|
||||||
librust-proxmox-router-1+cli-dev (>= 1.2-~~),
|
|
||||||
librust-proxmox-router-1+default-dev (>= 1.2.2-~~),
|
|
||||||
librust-proxmox-schema-1+api-macro-dev (>= 1.3.1-~~),
|
|
||||||
librust-proxmox-schema-1+default-dev (>= 1.3.1-~~),
|
|
||||||
librust-proxmox-schema-1+upid-api-impl-dev (>= 1.3.1-~~),
|
|
||||||
librust-proxmox-section-config-1+default-dev,
|
|
||||||
librust-proxmox-serde-0.1+default-dev,
|
|
||||||
librust-proxmox-shared-memory-0.2+default-dev,
|
|
||||||
librust-proxmox-sys-0.3+default-dev,
|
|
||||||
librust-proxmox-sys-0.3+logrotate-dev,
|
|
||||||
librust-proxmox-sys-0.3+sortable-macro-dev,
|
|
||||||
librust-proxmox-tfa-2+api-dev,
|
|
||||||
librust-proxmox-tfa-2+api-types-dev,
|
|
||||||
librust-proxmox-tfa-2+default-dev,
|
|
||||||
librust-proxmox-time-1+default-dev (>= 1.1.2-~~),
|
|
||||||
librust-proxmox-uuid-1+default-dev,
|
|
||||||
librust-proxmox-uuid-1+serde-dev,
|
|
||||||
librust-pxar-0.10+default-dev (>= 0.10.1-~~),
|
librust-pxar-0.10+default-dev (>= 0.10.1-~~),
|
||||||
librust-pxar-0.10+tokio-io-dev (>= 0.10.1-~~),
|
librust-pxar-0.10+tokio-io-dev (>= 0.10.1-~~),
|
||||||
librust-regex-1+default-dev (>= 1.5.5-~~),
|
librust-regex-1+default-dev (>= 1.2-~~),
|
||||||
librust-rustyline-9+default-dev,
|
librust-rustyline-7+default-dev,
|
||||||
librust-serde-1+default-dev,
|
librust-serde-1+default-dev,
|
||||||
librust-serde-1+derive-dev,
|
librust-serde-1+derive-dev,
|
||||||
librust-serde-cbor-0.11+default-dev (>= 0.11.1-~~),
|
|
||||||
librust-serde-json-1+default-dev,
|
librust-serde-json-1+default-dev,
|
||||||
librust-siphasher-0.3+default-dev,
|
librust-siphasher-0.3+default-dev,
|
||||||
librust-syslog-4+default-dev,
|
librust-syslog-4+default-dev,
|
||||||
librust-thiserror-1+default-dev,
|
librust-tokio-1+default-dev,
|
||||||
librust-tokio-1+default-dev (>= 1.6-~~),
|
librust-tokio-1+fs-dev,
|
||||||
librust-tokio-1+fs-dev (>= 1.6-~~),
|
librust-tokio-1+io-util-dev,
|
||||||
librust-tokio-1+io-std-dev (>= 1.6-~~),
|
librust-tokio-1+macros-dev,
|
||||||
librust-tokio-1+io-util-dev (>= 1.6-~~),
|
librust-tokio-1+net-dev,
|
||||||
librust-tokio-1+macros-dev (>= 1.6-~~),
|
librust-tokio-1+parking-lot-dev,
|
||||||
librust-tokio-1+net-dev (>= 1.6-~~),
|
librust-tokio-1+process-dev,
|
||||||
librust-tokio-1+parking-lot-dev (>= 1.6-~~),
|
librust-tokio-1+rt-dev,
|
||||||
librust-tokio-1+process-dev (>= 1.6-~~),
|
librust-tokio-1+rt-multi-thread-dev,
|
||||||
librust-tokio-1+rt-dev (>= 1.6-~~),
|
librust-tokio-1+signal-dev,
|
||||||
librust-tokio-1+rt-multi-thread-dev (>= 1.6-~~),
|
librust-tokio-1+time-dev,
|
||||||
librust-tokio-1+signal-dev (>= 1.6-~~),
|
|
||||||
librust-tokio-1+sync-dev (>= 1.6-~~),
|
|
||||||
librust-tokio-1+time-dev (>= 1.6-~~),
|
|
||||||
librust-tokio-openssl-0.6+default-dev (>= 0.6.1-~~),
|
librust-tokio-openssl-0.6+default-dev (>= 0.6.1-~~),
|
||||||
librust-tokio-stream-0.1+default-dev,
|
librust-tokio-stream-0.1+default-dev,
|
||||||
librust-tokio-util-0.7+codec-dev,
|
librust-tokio-util-0.6+codec-dev,
|
||||||
librust-tokio-util-0.7+default-dev,
|
librust-tokio-util-0.6+default-dev,
|
||||||
librust-tokio-util-0.7+io-dev,
|
|
||||||
librust-tower-service-0.3+default-dev,
|
librust-tower-service-0.3+default-dev,
|
||||||
librust-udev-0.4+default-dev,
|
librust-udev-0.4+default-dev | librust-udev-0.3+default-dev,
|
||||||
librust-url-2+default-dev (>= 2.1-~~),
|
librust-url-2+default-dev (>= 2.1-~~),
|
||||||
librust-walkdir-2+default-dev,
|
librust-walkdir-2+default-dev,
|
||||||
|
librust-webauthn-rs-0.2+default-dev (>= 0.2.5-~~),
|
||||||
librust-xdg-2+default-dev (>= 2.2-~~),
|
librust-xdg-2+default-dev (>= 2.2-~~),
|
||||||
librust-zstd-0.6+bindgen-dev,
|
librust-zstd-0.4+bindgen-dev,
|
||||||
librust-zstd-0.6+default-dev,
|
librust-zstd-0.4+default-dev,
|
||||||
libacl1-dev,
|
libacl1-dev,
|
||||||
libfuse3-dev,
|
libfuse3-dev,
|
||||||
libsystemd-dev (>= 246-~~),
|
libsystemd-dev,
|
||||||
uuid-dev,
|
uuid-dev,
|
||||||
libsgutils2-dev,
|
libsgutils2-dev,
|
||||||
bash-completion,
|
bash-completion,
|
||||||
@ -121,7 +86,6 @@ Build-Depends: debhelper (>= 12),
|
|||||||
graphviz <!nodoc>,
|
graphviz <!nodoc>,
|
||||||
latexmk <!nodoc>,
|
latexmk <!nodoc>,
|
||||||
patchelf,
|
patchelf,
|
||||||
proxmox-widget-toolkit-dev <!nodoc>,
|
|
||||||
pve-eslint (>= 7.18.0-1),
|
pve-eslint (>= 7.18.0-1),
|
||||||
python3-docutils,
|
python3-docutils,
|
||||||
python3-pygments,
|
python3-pygments,
|
||||||
@ -132,27 +96,27 @@ Build-Depends: debhelper (>= 12),
|
|||||||
texlive-xetex <!nodoc>,
|
texlive-xetex <!nodoc>,
|
||||||
xindy <!nodoc>
|
xindy <!nodoc>
|
||||||
Maintainer: Proxmox Support Team <support@proxmox.com>
|
Maintainer: Proxmox Support Team <support@proxmox.com>
|
||||||
Standards-Version: 4.5.1
|
Standards-Version: 4.4.1
|
||||||
Vcs-Git: git://git.proxmox.com/git/proxmox-backup.git
|
Vcs-Git: git://git.proxmox.com/git/proxmox-backup.git
|
||||||
Vcs-Browser: https://git.proxmox.com/?p=proxmox-backup.git;a=summary
|
Vcs-Browser: https://git.proxmox.com/?p=proxmox-backup.git;a=summary
|
||||||
Homepage: https://www.proxmox.com
|
Homepage: https://www.proxmox.com
|
||||||
Rules-Requires-Root: binary-targets
|
|
||||||
|
|
||||||
Package: proxmox-backup-server
|
Package: proxmox-backup-server
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Depends: fonts-font-awesome,
|
Depends: fonts-font-awesome,
|
||||||
libjs-extjs (>= 7~),
|
libjs-extjs (>= 6.0.1),
|
||||||
libjs-qrcodejs (>= 1.20201119),
|
libjs-qrcodejs (>= 1.20201119),
|
||||||
libproxmox-acme-plugins,
|
|
||||||
libsgutils2-2,
|
libsgutils2-2,
|
||||||
libzstd1 (>= 1.3.8),
|
libzstd1 (>= 1.3.8),
|
||||||
lvm2,
|
lvm2,
|
||||||
|
mt-st,
|
||||||
|
mtx,
|
||||||
openssh-server,
|
openssh-server,
|
||||||
pbs-i18n,
|
pbs-i18n,
|
||||||
postfix | mail-transport-agent,
|
postfix | mail-transport-agent,
|
||||||
proxmox-backup-docs,
|
proxmox-backup-docs,
|
||||||
proxmox-mini-journalreader,
|
proxmox-mini-journalreader,
|
||||||
proxmox-widget-toolkit (>= 3.4-3),
|
proxmox-widget-toolkit (>= 2.3-6),
|
||||||
pve-xtermjs (>= 4.7.0-1),
|
pve-xtermjs (>= 4.7.0-1),
|
||||||
sg3-utils,
|
sg3-utils,
|
||||||
smartmontools,
|
smartmontools,
|
||||||
@ -176,22 +140,9 @@ Description: Proxmox Backup Client tools
|
|||||||
Package: proxmox-backup-docs
|
Package: proxmox-backup-docs
|
||||||
Build-Profiles: <!nodoc>
|
Build-Profiles: <!nodoc>
|
||||||
Section: doc
|
Section: doc
|
||||||
Depends: fonts-font-awesome,
|
Depends: libjs-extjs,
|
||||||
libjs-extjs,
|
|
||||||
libjs-mathjax,
|
libjs-mathjax,
|
||||||
${misc:Depends},
|
${misc:Depends},
|
||||||
Architecture: all
|
Architecture: all
|
||||||
Description: Proxmox Backup Documentation
|
Description: Proxmox Backup Documentation
|
||||||
This package contains the Proxmox Backup Documentation files.
|
This package contains the Proxmox Backup Documentation files.
|
||||||
|
|
||||||
Package: proxmox-backup-file-restore
|
|
||||||
Architecture: any
|
|
||||||
Depends: ${misc:Depends},
|
|
||||||
${shlibs:Depends},
|
|
||||||
Recommends: pve-qemu-kvm (>= 5.0.0-9),
|
|
||||||
proxmox-backup-restore-image,
|
|
||||||
Breaks: proxmox-backup-restore-image (<< 0.3.1)
|
|
||||||
Description: Proxmox Backup single file restore tools for pxar and block device backups
|
|
||||||
This package contains the Proxmox Backup single file restore client for
|
|
||||||
restoring individual files and folders from both host/container and VM/block
|
|
||||||
device backups. It includes a block device restore driver using QEMU.
|
|
||||||
|
45
debian/control.in
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
Package: proxmox-backup-server
|
||||||
|
Architecture: any
|
||||||
|
Depends: fonts-font-awesome,
|
||||||
|
libjs-extjs (>= 6.0.1),
|
||||||
|
libjs-qrcodejs (>= 1.20201119),
|
||||||
|
libsgutils2-2,
|
||||||
|
libzstd1 (>= 1.3.8),
|
||||||
|
lvm2,
|
||||||
|
mt-st,
|
||||||
|
mtx,
|
||||||
|
openssh-server,
|
||||||
|
pbs-i18n,
|
||||||
|
postfix | mail-transport-agent,
|
||||||
|
proxmox-backup-docs,
|
||||||
|
proxmox-mini-journalreader,
|
||||||
|
proxmox-widget-toolkit (>= 2.3-6),
|
||||||
|
pve-xtermjs (>= 4.7.0-1),
|
||||||
|
sg3-utils,
|
||||||
|
smartmontools,
|
||||||
|
${misc:Depends},
|
||||||
|
${shlibs:Depends},
|
||||||
|
Recommends: zfsutils-linux,
|
||||||
|
ifupdown2,
|
||||||
|
Description: Proxmox Backup Server daemon with tools and GUI
|
||||||
|
This package contains the Proxmox Backup Server daemons and related
|
||||||
|
tools. This includes a web-based graphical user interface.
|
||||||
|
|
||||||
|
Package: proxmox-backup-client
|
||||||
|
Architecture: any
|
||||||
|
Depends: qrencode,
|
||||||
|
${misc:Depends},
|
||||||
|
${shlibs:Depends},
|
||||||
|
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-docs
|
||||||
|
Build-Profiles: <!nodoc>
|
||||||
|
Section: doc
|
||||||
|
Depends: libjs-extjs,
|
||||||
|
libjs-mathjax,
|
||||||
|
${misc:Depends},
|
||||||
|
Architecture: all
|
||||||
|
Description: Proxmox Backup Documentation
|
||||||
|
This package contains the Proxmox Backup Documentation files.
|
42
debian/debcargo.toml
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
overlay = "."
|
||||||
|
crate_src_path = ".."
|
||||||
|
whitelist = ["tests/*.c"]
|
||||||
|
|
||||||
|
maintainer = "Proxmox Support Team <support@proxmox.com>"
|
||||||
|
|
||||||
|
[source]
|
||||||
|
vcs_git = "git://git.proxmox.com/git/proxmox-backup.git"
|
||||||
|
vcs_browser = "https://git.proxmox.com/?p=proxmox-backup.git;a=summary"
|
||||||
|
section = "admin"
|
||||||
|
build_depends = [
|
||||||
|
"bash-completion",
|
||||||
|
"debhelper (>= 12~)",
|
||||||
|
"fonts-dejavu-core <!nodoc>",
|
||||||
|
"fonts-lato <!nodoc>",
|
||||||
|
"fonts-open-sans <!nodoc>",
|
||||||
|
"graphviz <!nodoc>",
|
||||||
|
"latexmk <!nodoc>",
|
||||||
|
"patchelf",
|
||||||
|
"pve-eslint (>= 7.18.0-1)",
|
||||||
|
"python3-docutils",
|
||||||
|
"python3-pygments",
|
||||||
|
"python3-sphinx <!nodoc>",
|
||||||
|
"rsync",
|
||||||
|
"texlive-fonts-extra <!nodoc>",
|
||||||
|
"texlive-fonts-recommended <!nodoc>",
|
||||||
|
"texlive-xetex <!nodoc>",
|
||||||
|
"xindy <!nodoc>",
|
||||||
|
]
|
||||||
|
|
||||||
|
build_depends_excludes = [
|
||||||
|
"debhelper (>=11)",
|
||||||
|
]
|
||||||
|
|
||||||
|
[packages.lib]
|
||||||
|
depends = [
|
||||||
|
"libacl1-dev",
|
||||||
|
"libfuse3-dev",
|
||||||
|
"libsystemd-dev",
|
||||||
|
"uuid-dev",
|
||||||
|
"libsgutils2-dev",
|
||||||
|
]
|
64
debian/postinst
vendored
@ -4,14 +4,6 @@ set -e
|
|||||||
|
|
||||||
#DEBHELPER#
|
#DEBHELPER#
|
||||||
|
|
||||||
update_sync_job() {
|
|
||||||
job="$1"
|
|
||||||
|
|
||||||
echo "Updating sync job '$job' to make old 'remove-vanished' default explicit.."
|
|
||||||
proxmox-backup-manager sync-job update "$job" --remove-vanished true \
|
|
||||||
|| echo "Failed, please check sync.cfg manually!"
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
configure)
|
configure)
|
||||||
# need to have user backup in the tape group
|
# need to have user backup in the tape group
|
||||||
@ -34,42 +26,38 @@ case "$1" in
|
|||||||
fi
|
fi
|
||||||
deb-systemd-invoke $_dh_action proxmox-backup.service proxmox-backup-proxy.service >/dev/null || true
|
deb-systemd-invoke $_dh_action proxmox-backup.service proxmox-backup-proxy.service >/dev/null || true
|
||||||
|
|
||||||
|
# FIXME: Remove with 1.1
|
||||||
if test -n "$2"; then
|
if test -n "$2"; then
|
||||||
|
if dpkg --compare-versions "$2" 'lt' '0.9.4-1'; then
|
||||||
|
if grep -s -q -P -e '^\s+verify-schedule ' /etc/proxmox-backup/datastore.cfg; then
|
||||||
|
echo "NOTE: drop all verify schedules from datastore config."
|
||||||
|
echo "You can now add more flexible verify jobs"
|
||||||
|
flock -w 30 /etc/proxmox-backup/.datastore.lck \
|
||||||
|
sed -i '/^\s\+verify-schedule /d' /etc/proxmox-backup/datastore.cfg || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if dpkg --compare-versions "$2" 'le' '0.9.5-1'; then
|
||||||
|
chown --quiet backup:backup /var/log/proxmox-backup/api/auth.log || true
|
||||||
|
fi
|
||||||
|
if dpkg --compare-versions "$2" 'le' '0.9.7-1'; then
|
||||||
|
if [ -e /etc/proxmox-backup/remote.cfg ]; then
|
||||||
|
echo "NOTE: Switching over remote.cfg to new field names.."
|
||||||
|
flock -w 30 /etc/proxmox-backup/.remote.lck \
|
||||||
|
sed -i \
|
||||||
|
-e 's/^\s\+userid /\tauth-id /g' \
|
||||||
|
/etc/proxmox-backup/remote.cfg || true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
# FIXME: remove with 2.0
|
||||||
|
if [ -d "/var/lib/proxmox-backup/tape" ] &&
|
||||||
|
[ "$(stat --printf '%a' '/var/lib/proxmox-backup/tape')" != "750" ]; then
|
||||||
|
chmod 0750 /var/lib/proxmox-backup/tape || true
|
||||||
|
fi
|
||||||
# FIXME: Remove in future version once we're sure no broken entries remain in anyone's files
|
# FIXME: Remove in future version once we're sure no broken entries remain in anyone's files
|
||||||
if grep -q -e ':termproxy::[^@]\+: ' /var/log/proxmox-backup/tasks/active; then
|
if grep -q -e ':termproxy::[^@]\+: ' /var/log/proxmox-backup/tasks/active; then
|
||||||
echo "Fixing up termproxy user id in task log..."
|
echo "Fixing up termproxy user id in task log..."
|
||||||
flock -w 30 /var/log/proxmox-backup/tasks/active.lock sed -i 's/:termproxy::\([^@]\+\): /:termproxy::\1@pam: /' /var/log/proxmox-backup/tasks/active || true
|
flock -w 30 /var/log/proxmox-backup/tasks/active.lock sed -i 's/:termproxy::\([^@]\+\): /:termproxy::\1@pam: /' /var/log/proxmox-backup/tasks/active || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if dpkg --compare-versions "$2" 'lt' '2.2.2~'; then
|
|
||||||
echo "moving prune schedule from datacenter config to new prune job config"
|
|
||||||
proxmox-backup-manager update-to-prune-jobs-config \
|
|
||||||
|| echo "Failed to move prune jobs, please check manually"
|
|
||||||
true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if dpkg --compare-versions "$2" 'lt' '2.1.3~' && test -e /etc/proxmox-backup/sync.cfg; then
|
|
||||||
prev_job=""
|
|
||||||
|
|
||||||
# read from HERE doc because POSIX sh limitations
|
|
||||||
while read -r key value; do
|
|
||||||
if test "$key" = "sync:"; then
|
|
||||||
if test -n "$prev_job"; then
|
|
||||||
# previous job doesn't have an explicit value
|
|
||||||
update_sync_job "$prev_job"
|
|
||||||
fi
|
|
||||||
prev_job=$value
|
|
||||||
else
|
|
||||||
prev_job=""
|
|
||||||
fi
|
|
||||||
done <<EOF
|
|
||||||
$(grep -e '^sync:' -e 'remove-vanished' /etc/proxmox-backup/sync.cfg)
|
|
||||||
EOF
|
|
||||||
if test -n "$prev_job"; then
|
|
||||||
# last job doesn't have an explicit value
|
|
||||||
update_sync_job "$prev_job"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
8
debian/proxmox-backup-debug.bc
vendored
@ -1,8 +0,0 @@
|
|||||||
# proxmox-backup-debug bash completion
|
|
||||||
|
|
||||||
# see http://tiswww.case.edu/php/chet/bash/FAQ
|
|
||||||
# and __ltrim_colon_completions() in /usr/share/bash-completion/bash_completion
|
|
||||||
# this modifies global var, but I found no better way
|
|
||||||
COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
|
|
||||||
|
|
||||||
complete -C 'proxmox-backup-debug bashcomplete' proxmox-backup-debug
|
|
1
debian/proxmox-backup-docs.links
vendored
@ -1,6 +1,5 @@
|
|||||||
/usr/share/doc/proxmox-backup/proxmox-backup.pdf /usr/share/doc/proxmox-backup/html/proxmox-backup.pdf
|
/usr/share/doc/proxmox-backup/proxmox-backup.pdf /usr/share/doc/proxmox-backup/html/proxmox-backup.pdf
|
||||||
/usr/share/javascript/extjs /usr/share/doc/proxmox-backup/html/prune-simulator/extjs
|
/usr/share/javascript/extjs /usr/share/doc/proxmox-backup/html/prune-simulator/extjs
|
||||||
/usr/share/javascript/extjs /usr/share/doc/proxmox-backup/html/lto-barcode/extjs
|
/usr/share/javascript/extjs /usr/share/doc/proxmox-backup/html/lto-barcode/extjs
|
||||||
/usr/share/fonts-font-awesome/ /usr/share/doc/proxmox-backup/html/lto-barcode/font-awesome
|
|
||||||
/usr/share/javascript/extjs /usr/share/doc/proxmox-backup/html/api-viewer/extjs
|
/usr/share/javascript/extjs /usr/share/doc/proxmox-backup/html/api-viewer/extjs
|
||||||
/usr/share/javascript/mathjax /usr/share/doc/proxmox-backup/html/_static/mathjax
|
/usr/share/javascript/mathjax /usr/share/doc/proxmox-backup/html/_static/mathjax
|
||||||
|
@ -1 +0,0 @@
|
|||||||
debian/proxmox-file-restore.bc proxmox-file-restore
|
|
8
debian/proxmox-backup-file-restore.bc
vendored
@ -1,8 +0,0 @@
|
|||||||
# proxmox-file-restore bash completion
|
|
||||||
|
|
||||||
# see http://tiswww.case.edu/php/chet/bash/FAQ
|
|
||||||
# and __ltrim_colon_completions() in /usr/share/bash-completion/bash_completion
|
|
||||||
# this modifies global var, but I found no better way
|
|
||||||
COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
|
|
||||||
|
|
||||||
complete -C 'proxmox-file-restore bashcomplete' proxmox-file-restore
|
|
4
debian/proxmox-backup-file-restore.install
vendored
@ -1,4 +0,0 @@
|
|||||||
usr/bin/proxmox-file-restore
|
|
||||||
usr/share/man/man1/proxmox-file-restore.1
|
|
||||||
usr/share/zsh/vendor-completions/_proxmox-file-restore
|
|
||||||
usr/lib/x86_64-linux-gnu/proxmox-backup/file-restore/proxmox-restore-daemon
|
|
74
debian/proxmox-backup-file-restore.postinst
vendored
@ -1,74 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
update_initramfs() {
|
|
||||||
# regenerate initramfs for single file restore VM
|
|
||||||
INST_PATH="/usr/lib/x86_64-linux-gnu/proxmox-backup/file-restore"
|
|
||||||
CACHE_PATH="/var/cache/proxmox-backup/file-restore-initramfs.img"
|
|
||||||
CACHE_PATH_DBG="/var/cache/proxmox-backup/file-restore-initramfs-debug.img"
|
|
||||||
|
|
||||||
# cleanup first, in case proxmox-file-restore was uninstalled since we do
|
|
||||||
# not want an unuseable image lying around
|
|
||||||
rm -f "$CACHE_PATH"
|
|
||||||
|
|
||||||
if [ ! -f "$INST_PATH/initramfs.img" ]; then
|
|
||||||
echo "proxmox-backup-restore-image is not installed correctly, skipping update" >&2
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Updating file-restore initramfs..."
|
|
||||||
|
|
||||||
# avoid leftover temp file
|
|
||||||
cleanup() {
|
|
||||||
rm -f "$CACHE_PATH.tmp" "$CACHE_PATH_DBG.tmp"
|
|
||||||
}
|
|
||||||
trap cleanup EXIT
|
|
||||||
|
|
||||||
mkdir -p "/var/cache/proxmox-backup"
|
|
||||||
cp "$INST_PATH/initramfs.img" "$CACHE_PATH.tmp"
|
|
||||||
|
|
||||||
# cpio uses passed in path as offset inside the archive as well, so we need
|
|
||||||
# to be in the same dir as the daemon binary to ensure it's placed in /
|
|
||||||
( cd "$INST_PATH"; \
|
|
||||||
printf "./proxmox-restore-daemon" \
|
|
||||||
| cpio -o --format=newc -A -F "$CACHE_PATH.tmp" )
|
|
||||||
mv -f "$CACHE_PATH.tmp" "$CACHE_PATH"
|
|
||||||
|
|
||||||
if [ -f "$INST_PATH/initramfs-debug.img" ]; then
|
|
||||||
echo "Updating file-restore debug initramfs..."
|
|
||||||
cp "$INST_PATH/initramfs-debug.img" "$CACHE_PATH_DBG.tmp"
|
|
||||||
( cd "$INST_PATH"; \
|
|
||||||
printf "./proxmox-restore-daemon" \
|
|
||||||
| cpio -o --format=newc -A -F "$CACHE_PATH_DBG.tmp" )
|
|
||||||
mv -f "$CACHE_PATH_DBG.tmp" "$CACHE_PATH_DBG"
|
|
||||||
fi
|
|
||||||
|
|
||||||
trap - EXIT
|
|
||||||
}
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
configure)
|
|
||||||
# in case restore daemon was updated
|
|
||||||
update_initramfs
|
|
||||||
;;
|
|
||||||
|
|
||||||
triggered)
|
|
||||||
if [ "$2" = "proxmox-backup-restore-image-update" ]; then
|
|
||||||
# in case base-image was updated
|
|
||||||
update_initramfs
|
|
||||||
else
|
|
||||||
echo "postinst called with unknown trigger name: \`$2'" >&2
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
|
|
||||||
abort-upgrade|abort-remove|abort-deconfigure)
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "postinst called with unknown argument \`$1'" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
exit 0
|
|
1
debian/proxmox-backup-file-restore.triggers
vendored
@ -1 +0,0 @@
|
|||||||
interest-noawait proxmox-backup-restore-image-update
|
|
1
debian/proxmox-backup-server.bash-completion
vendored
@ -1,5 +1,4 @@
|
|||||||
debian/proxmox-backup-manager.bc proxmox-backup-manager
|
debian/proxmox-backup-manager.bc proxmox-backup-manager
|
||||||
debian/proxmox-backup-debug.bc proxmox-backup-debug
|
|
||||||
debian/proxmox-tape.bc proxmox-tape
|
debian/proxmox-tape.bc proxmox-tape
|
||||||
debian/pmtx.bc pmtx
|
debian/pmtx.bc pmtx
|
||||||
debian/pmt.bc pmt
|
debian/pmt.bc pmt
|
||||||
|
3
debian/proxmox-backup-server.install
vendored
@ -9,7 +9,6 @@ usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-proxy
|
|||||||
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-banner
|
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-banner
|
||||||
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-daily-update
|
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-daily-update
|
||||||
usr/lib/x86_64-linux-gnu/proxmox-backup/sg-tape-cmd
|
usr/lib/x86_64-linux-gnu/proxmox-backup/sg-tape-cmd
|
||||||
usr/sbin/proxmox-backup-debug
|
|
||||||
usr/sbin/proxmox-backup-manager
|
usr/sbin/proxmox-backup-manager
|
||||||
usr/bin/pmtx
|
usr/bin/pmtx
|
||||||
usr/bin/pmt
|
usr/bin/pmt
|
||||||
@ -18,7 +17,6 @@ usr/share/javascript/proxmox-backup/index.hbs
|
|||||||
usr/share/javascript/proxmox-backup/css/ext6-pbs.css
|
usr/share/javascript/proxmox-backup/css/ext6-pbs.css
|
||||||
usr/share/javascript/proxmox-backup/images
|
usr/share/javascript/proxmox-backup/images
|
||||||
usr/share/javascript/proxmox-backup/js/proxmox-backup-gui.js
|
usr/share/javascript/proxmox-backup/js/proxmox-backup-gui.js
|
||||||
usr/share/man/man1/proxmox-backup-debug.1
|
|
||||||
usr/share/man/man1/proxmox-backup-manager.1
|
usr/share/man/man1/proxmox-backup-manager.1
|
||||||
usr/share/man/man1/proxmox-backup-proxy.1
|
usr/share/man/man1/proxmox-backup-proxy.1
|
||||||
usr/share/man/man1/proxmox-tape.1
|
usr/share/man/man1/proxmox-tape.1
|
||||||
@ -33,7 +31,6 @@ usr/share/man/man5/verification.cfg.5
|
|||||||
usr/share/man/man5/media-pool.cfg.5
|
usr/share/man/man5/media-pool.cfg.5
|
||||||
usr/share/man/man5/tape.cfg.5
|
usr/share/man/man5/tape.cfg.5
|
||||||
usr/share/man/man5/tape-job.cfg.5
|
usr/share/man/man5/tape-job.cfg.5
|
||||||
usr/share/zsh/vendor-completions/_proxmox-backup-debug
|
|
||||||
usr/share/zsh/vendor-completions/_proxmox-backup-manager
|
usr/share/zsh/vendor-completions/_proxmox-backup-manager
|
||||||
usr/share/zsh/vendor-completions/_proxmox-tape
|
usr/share/zsh/vendor-completions/_proxmox-tape
|
||||||
usr/share/zsh/vendor-completions/_pmtx
|
usr/share/zsh/vendor-completions/_pmtx
|
||||||
|
18
debian/proxmox-backup-server.udev
vendored
@ -1,18 +0,0 @@
|
|||||||
# do not edit this file, it will be overwritten on update
|
|
||||||
|
|
||||||
# persistent storage links: /dev/tape/{by-id,by-path}
|
|
||||||
|
|
||||||
ACTION=="remove", GOTO="persistent_storage_tape_end"
|
|
||||||
ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="persistent_storage_tape_end"
|
|
||||||
|
|
||||||
# also see: /lib/udev/rules.d/60-persistent-storage-tape.rules
|
|
||||||
|
|
||||||
SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="1", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $devnode", \
|
|
||||||
SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL}-sg"
|
|
||||||
|
|
||||||
# iSCSI devices from the same host have all the same ID_SERIAL,
|
|
||||||
# but additionally a property named ID_SCSI_SERIAL.
|
|
||||||
SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="1", ENV{ID_SCSI_SERIAL}=="?*", \
|
|
||||||
SYMLINK+="tape/by-id/scsi-$env{ID_SCSI_SERIAL}-sg"
|
|
||||||
|
|
||||||
LABEL="persistent_storage_tape_end"
|
|
12
debian/rules
vendored
@ -45,13 +45,15 @@ override_dh_installsystemd:
|
|||||||
override_dh_fixperms:
|
override_dh_fixperms:
|
||||||
dh_fixperms --exclude sg-tape-cmd
|
dh_fixperms --exclude sg-tape-cmd
|
||||||
|
|
||||||
|
# workaround https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=933541
|
||||||
|
# TODO: remove once available (Debian 11 ?)
|
||||||
|
override_dh_dwz:
|
||||||
|
dh_dwz --no-dwz-multifile
|
||||||
|
|
||||||
override_dh_strip:
|
override_dh_strip:
|
||||||
dh_strip
|
dh_strip
|
||||||
for exe in $$(find \
|
for exe in $$(find debian/proxmox-backup-client/usr \
|
||||||
debian/proxmox-backup-client/usr \
|
debian/proxmox-backup-server/usr -executable -type f); do \
|
||||||
debian/proxmox-backup-server/usr \
|
|
||||||
debian/proxmox-backup-file-restore \
|
|
||||||
-executable -type f); do \
|
|
||||||
debian/scripts/elf-strip-unused-dependencies.sh "$$exe" || true; \
|
debian/scripts/elf-strip-unused-dependencies.sh "$$exe" || true; \
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@ -5,8 +5,6 @@ GENERATED_SYNOPSIS := \
|
|||||||
proxmox-backup-client/synopsis.rst \
|
proxmox-backup-client/synopsis.rst \
|
||||||
proxmox-backup-client/catalog-shell-synopsis.rst \
|
proxmox-backup-client/catalog-shell-synopsis.rst \
|
||||||
proxmox-backup-manager/synopsis.rst \
|
proxmox-backup-manager/synopsis.rst \
|
||||||
proxmox-backup-debug/synopsis.rst \
|
|
||||||
proxmox-file-restore/synopsis.rst \
|
|
||||||
pxar/synopsis.rst \
|
pxar/synopsis.rst \
|
||||||
pmtx/synopsis.rst \
|
pmtx/synopsis.rst \
|
||||||
pmt/synopsis.rst \
|
pmt/synopsis.rst \
|
||||||
@ -27,9 +25,7 @@ MAN1_PAGES := \
|
|||||||
proxmox-tape.1 \
|
proxmox-tape.1 \
|
||||||
proxmox-backup-proxy.1 \
|
proxmox-backup-proxy.1 \
|
||||||
proxmox-backup-client.1 \
|
proxmox-backup-client.1 \
|
||||||
proxmox-backup-manager.1 \
|
proxmox-backup-manager.1
|
||||||
proxmox-file-restore.1 \
|
|
||||||
proxmox-backup-debug.1
|
|
||||||
|
|
||||||
MAN5_PAGES := \
|
MAN5_PAGES := \
|
||||||
media-pool.cfg.5 \
|
media-pool.cfg.5 \
|
||||||
@ -48,12 +44,8 @@ PRUNE_SIMULATOR_FILES := \
|
|||||||
prune-simulator/clear-trigger.png \
|
prune-simulator/clear-trigger.png \
|
||||||
prune-simulator/prune-simulator.js
|
prune-simulator/prune-simulator.js
|
||||||
|
|
||||||
PRUNE_SIMULATOR_JS_SOURCE := \
|
LTO_BARCODE_FILES := \
|
||||||
/usr/share/javascript/proxmox-widget-toolkit-dev/Toolkit.js \
|
lto-barcode/index.html \
|
||||||
prune-simulator/prune-simulator_source.js
|
|
||||||
|
|
||||||
LTO_BARCODE_JS_SOURCE := \
|
|
||||||
/usr/share/javascript/proxmox-widget-toolkit-dev/Toolkit.js \
|
|
||||||
lto-barcode/code39.js \
|
lto-barcode/code39.js \
|
||||||
lto-barcode/prefix-field.js \
|
lto-barcode/prefix-field.js \
|
||||||
lto-barcode/label-style.js \
|
lto-barcode/label-style.js \
|
||||||
@ -65,18 +57,10 @@ LTO_BARCODE_JS_SOURCE := \
|
|||||||
lto-barcode/label-setup.js \
|
lto-barcode/label-setup.js \
|
||||||
lto-barcode/lto-barcode.js
|
lto-barcode/lto-barcode.js
|
||||||
|
|
||||||
LTO_BARCODE_FILES := \
|
|
||||||
lto-barcode/index.html \
|
|
||||||
lto-barcode/lto-barcode-generator.js
|
|
||||||
|
|
||||||
API_VIEWER_SOURCES= \
|
API_VIEWER_SOURCES= \
|
||||||
api-viewer/index.html \
|
api-viewer/index.html \
|
||||||
api-viewer/apidoc.js
|
api-viewer/apidoc.js
|
||||||
|
|
||||||
API_VIEWER_FILES := \
|
|
||||||
api-viewer/apidata.js \
|
|
||||||
/usr/share/javascript/proxmox-widget-toolkit-dev/APIViewer.js \
|
|
||||||
|
|
||||||
# Sphinx documentation setup
|
# Sphinx documentation setup
|
||||||
SPHINXOPTS =
|
SPHINXOPTS =
|
||||||
SPHINXBUILD = sphinx-build
|
SPHINXBUILD = sphinx-build
|
||||||
@ -195,38 +179,17 @@ proxmox-backup-manager.1: proxmox-backup-manager/man1.rst proxmox-backup-manage
|
|||||||
proxmox-backup-proxy.1: proxmox-backup-proxy/man1.rst proxmox-backup-proxy/description.rst
|
proxmox-backup-proxy.1: proxmox-backup-proxy/man1.rst proxmox-backup-proxy/description.rst
|
||||||
rst2man $< >$@
|
rst2man $< >$@
|
||||||
|
|
||||||
proxmox-file-restore/synopsis.rst: ${COMPILEDIR}/proxmox-file-restore
|
|
||||||
${COMPILEDIR}/proxmox-file-restore printdoc > proxmox-file-restore/synopsis.rst
|
|
||||||
|
|
||||||
proxmox-file-restore.1: proxmox-file-restore/man1.rst proxmox-file-restore/description.rst proxmox-file-restore/synopsis.rst
|
|
||||||
rst2man $< >$@
|
|
||||||
|
|
||||||
proxmox-backup-debug/synopsis.rst: ${COMPILEDIR}/proxmox-backup-debug
|
|
||||||
${COMPILEDIR}/proxmox-backup-debug printdoc > proxmox-backup-debug/synopsis.rst
|
|
||||||
|
|
||||||
proxmox-backup-debug.1: proxmox-backup-debug/man1.rst proxmox-backup-debug/description.rst proxmox-backup-debug/synopsis.rst
|
|
||||||
rst2man $< >$@
|
|
||||||
|
|
||||||
.PHONY: onlinehelpinfo
|
.PHONY: onlinehelpinfo
|
||||||
onlinehelpinfo:
|
onlinehelpinfo:
|
||||||
@echo "Generating OnlineHelpInfo.js..."
|
@echo "Generating OnlineHelpInfo.js..."
|
||||||
$(SPHINXBUILD) -b proxmox-scanrefs -Q $(ALLSPHINXOPTS) $(BUILDDIR)/scanrefs
|
$(SPHINXBUILD) -b proxmox-scanrefs $(ALLSPHINXOPTS) $(BUILDDIR)/scanrefs
|
||||||
@echo "Build finished. OnlineHelpInfo.js is in $(BUILDDIR)/scanrefs."
|
@echo "Build finished. OnlineHelpInfo.js is in $(BUILDDIR)/scanrefs."
|
||||||
|
|
||||||
api-viewer/apidata.js: ${COMPILEDIR}/docgen
|
api-viewer/apidata.js: ${COMPILEDIR}/docgen
|
||||||
${COMPILEDIR}/docgen apidata.js >$@
|
${COMPILEDIR}/docgen apidata.js >$@
|
||||||
|
|
||||||
api-viewer/apidoc.js: ${API_VIEWER_FILES}
|
api-viewer/apidoc.js: api-viewer/apidata.js api-viewer/PBSAPI.js
|
||||||
cat ${API_VIEWER_FILES} >$@.tmp
|
cat api-viewer/apidata.js api-viewer/PBSAPI.js >$@
|
||||||
mv $@.tmp $@
|
|
||||||
|
|
||||||
prune-simulator/prune-simulator.js: ${PRUNE_SIMULATOR_JS_SOURCE}
|
|
||||||
cat ${PRUNE_SIMULATOR_JS_SOURCE} >$@.tmp
|
|
||||||
mv $@.tmp $@
|
|
||||||
|
|
||||||
lto-barcode/lto-barcode-generator.js: ${LTO_BARCODE_JS_SOURCE}
|
|
||||||
cat ${LTO_BARCODE_JS_SOURCE} >$@.tmp
|
|
||||||
mv $@.tmp $@
|
|
||||||
|
|
||||||
.PHONY: html
|
.PHONY: html
|
||||||
html: ${GENERATED_SYNOPSIS} images/proxmox-logo.svg custom.css conf.py ${PRUNE_SIMULATOR_FILES} ${LTO_BARCODE_FILES} ${API_VIEWER_SOURCES}
|
html: ${GENERATED_SYNOPSIS} images/proxmox-logo.svg custom.css conf.py ${PRUNE_SIMULATOR_FILES} ${LTO_BARCODE_FILES} ${API_VIEWER_SOURCES}
|
||||||
@ -257,7 +220,6 @@ epub3: ${GENERATED_SYNOPSIS}
|
|||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -r -f *~ *.1 ${BUILDDIR} ${GENERATED_SYNOPSIS} api-viewer/apidata.js
|
rm -r -f *~ *.1 ${BUILDDIR} ${GENERATED_SYNOPSIS} api-viewer/apidata.js
|
||||||
rm -f api-viewer/apidoc.js lto-barcode/lto-barcode-generator.js prune-simulator/prune-simulator.js
|
|
||||||
|
|
||||||
|
|
||||||
install_manual_pages: ${MAN1_PAGES} ${MAN5_PAGES}
|
install_manual_pages: ${MAN1_PAGES} ${MAN5_PAGES}
|
||||||
|
511
docs/api-viewer/PBSAPI.js
Normal file
@ -0,0 +1,511 @@
|
|||||||
|
// avoid errors when running without development tools
|
||||||
|
if (!Ext.isDefined(Ext.global.console)) {
|
||||||
|
var console = {
|
||||||
|
dir: function() {},
|
||||||
|
log: function() {}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
Ext.onReady(function() {
|
||||||
|
|
||||||
|
Ext.define('pve-param-schema', {
|
||||||
|
extend: 'Ext.data.Model',
|
||||||
|
fields: [
|
||||||
|
'name', 'type', 'typetext', 'description', 'verbose_description',
|
||||||
|
'enum', 'minimum', 'maximum', 'minLength', 'maxLength',
|
||||||
|
'pattern', 'title', 'requires', 'format', 'default',
|
||||||
|
'disallow', 'extends', 'links',
|
||||||
|
{
|
||||||
|
name: 'optional',
|
||||||
|
type: 'boolean'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
var store = Ext.define('pve-updated-treestore', {
|
||||||
|
extend: 'Ext.data.TreeStore',
|
||||||
|
model: Ext.define('pve-api-doc', {
|
||||||
|
extend: 'Ext.data.Model',
|
||||||
|
fields: [
|
||||||
|
'path', 'info', 'text',
|
||||||
|
]
|
||||||
|
}),
|
||||||
|
proxy: {
|
||||||
|
type: 'memory',
|
||||||
|
data: pbsapi
|
||||||
|
},
|
||||||
|
sorters: [{
|
||||||
|
property: 'leaf',
|
||||||
|
direction: 'ASC'
|
||||||
|
}, {
|
||||||
|
property: 'text',
|
||||||
|
direction: 'ASC'
|
||||||
|
}],
|
||||||
|
filterer: 'bottomup',
|
||||||
|
doFilter: function(node) {
|
||||||
|
this.filterNodes(node, this.getFilters().getFilterFn(), true);
|
||||||
|
},
|
||||||
|
|
||||||
|
filterNodes: function(node, filterFn, parentVisible) {
|
||||||
|
var me = this,
|
||||||
|
bottomUpFiltering = me.filterer === 'bottomup',
|
||||||
|
match = filterFn(node) && parentVisible || (node.isRoot() && !me.getRootVisible()),
|
||||||
|
childNodes = node.childNodes,
|
||||||
|
len = childNodes && childNodes.length, i, matchingChildren;
|
||||||
|
|
||||||
|
if (len) {
|
||||||
|
for (i = 0; i < len; ++i) {
|
||||||
|
matchingChildren = me.filterNodes(childNodes[i], filterFn, match || bottomUpFiltering) || matchingChildren;
|
||||||
|
}
|
||||||
|
if (bottomUpFiltering) {
|
||||||
|
match = matchingChildren || match;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
node.set("visible", match, me._silentOptions);
|
||||||
|
return match;
|
||||||
|
},
|
||||||
|
|
||||||
|
}).create();
|
||||||
|
|
||||||
|
var render_description = function(value, metaData, record) {
|
||||||
|
var pdef = record.data;
|
||||||
|
|
||||||
|
value = pdef.verbose_description || value;
|
||||||
|
|
||||||
|
// TODO: try to render asciidoc correctly
|
||||||
|
|
||||||
|
metaData.style = 'white-space:pre-wrap;'
|
||||||
|
|
||||||
|
return Ext.htmlEncode(value);
|
||||||
|
};
|
||||||
|
|
||||||
|
var render_type = function(value, metaData, record) {
|
||||||
|
var pdef = record.data;
|
||||||
|
|
||||||
|
return pdef['enum'] ? 'enum' : (pdef.type || 'string');
|
||||||
|
};
|
||||||
|
|
||||||
|
var render_format = function(value, metaData, record) {
|
||||||
|
var pdef = record.data;
|
||||||
|
|
||||||
|
metaData.style = 'white-space:normal;'
|
||||||
|
|
||||||
|
if (pdef.typetext)
|
||||||
|
return Ext.htmlEncode(pdef.typetext);
|
||||||
|
|
||||||
|
if (pdef['enum'])
|
||||||
|
return pdef['enum'].join(' | ');
|
||||||
|
|
||||||
|
if (pdef.format)
|
||||||
|
return pdef.format;
|
||||||
|
|
||||||
|
if (pdef.pattern)
|
||||||
|
return Ext.htmlEncode(pdef.pattern);
|
||||||
|
|
||||||
|
return '';
|
||||||
|
};
|
||||||
|
|
||||||
|
var real_path = function(path) {
|
||||||
|
return path.replace(/^.*\/_upgrade_(\/)?/, "/");
|
||||||
|
};
|
||||||
|
|
||||||
|
var permission_text = function(permission) {
|
||||||
|
let permhtml = "";
|
||||||
|
|
||||||
|
if (permission.user) {
|
||||||
|
if (!permission.description) {
|
||||||
|
if (permission.user === 'world') {
|
||||||
|
permhtml += "Accessible without any authentication.";
|
||||||
|
} else if (permission.user === 'all') {
|
||||||
|
permhtml += "Accessible by all authenticated users.";
|
||||||
|
} else {
|
||||||
|
permhtml += 'Onyl accessible by user "' +
|
||||||
|
permission.user + '"';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (permission.check) {
|
||||||
|
permhtml += "<pre>Check: " +
|
||||||
|
Ext.htmlEncode(Ext.JSON.encode(permission.check)) + "</pre>";
|
||||||
|
} else if (permission.userParam) {
|
||||||
|
permhtml += `<div>Check if user matches parameter '${permission.userParam}'`;
|
||||||
|
} else if (permission.or) {
|
||||||
|
permhtml += "<div>Or<div style='padding-left: 10px;'>";
|
||||||
|
Ext.Array.each(permission.or, function(sub_permission) {
|
||||||
|
permhtml += permission_text(sub_permission);
|
||||||
|
})
|
||||||
|
permhtml += "</div></div>";
|
||||||
|
} else if (permission.and) {
|
||||||
|
permhtml += "<div>And<div style='padding-left: 10px;'>";
|
||||||
|
Ext.Array.each(permission.and, function(sub_permission) {
|
||||||
|
permhtml += permission_text(sub_permission);
|
||||||
|
})
|
||||||
|
permhtml += "</div></div>";
|
||||||
|
} else {
|
||||||
|
//console.log(permission);
|
||||||
|
permhtml += "Unknown systax!";
|
||||||
|
}
|
||||||
|
|
||||||
|
return permhtml;
|
||||||
|
};
|
||||||
|
|
||||||
|
var render_docu = function(data) {
|
||||||
|
var md = data.info;
|
||||||
|
|
||||||
|
// console.dir(data);
|
||||||
|
|
||||||
|
var items = [];
|
||||||
|
|
||||||
|
var clicmdhash = {
|
||||||
|
GET: 'get',
|
||||||
|
POST: 'create',
|
||||||
|
PUT: 'set',
|
||||||
|
DELETE: 'delete'
|
||||||
|
};
|
||||||
|
|
||||||
|
Ext.Array.each(['GET', 'POST', 'PUT', 'DELETE'], function(method) {
|
||||||
|
var info = md[method];
|
||||||
|
if (info) {
|
||||||
|
|
||||||
|
var usage = "";
|
||||||
|
|
||||||
|
usage += "<table><tr><td>HTTP: </td><td>"
|
||||||
|
+ method + " " + real_path("/api2/json" + data.path) + "</td></tr>";
|
||||||
|
|
||||||
|
var sections = [
|
||||||
|
{
|
||||||
|
title: 'Description',
|
||||||
|
html: Ext.htmlEncode(info.description),
|
||||||
|
bodyPadding: 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Usage',
|
||||||
|
html: usage,
|
||||||
|
bodyPadding: 10
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
if (info.parameters && info.parameters.properties) {
|
||||||
|
|
||||||
|
var pstore = Ext.create('Ext.data.Store', {
|
||||||
|
model: 'pve-param-schema',
|
||||||
|
proxy: {
|
||||||
|
type: 'memory'
|
||||||
|
},
|
||||||
|
groupField: 'optional',
|
||||||
|
sorters: [
|
||||||
|
{
|
||||||
|
property: 'name',
|
||||||
|
direction: 'ASC'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
Ext.Object.each(info.parameters.properties, function(name, pdef) {
|
||||||
|
pdef.name = name;
|
||||||
|
pstore.add(pdef);
|
||||||
|
});
|
||||||
|
|
||||||
|
pstore.sort();
|
||||||
|
|
||||||
|
var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{
|
||||||
|
enableGroupingMenu: false,
|
||||||
|
groupHeaderTpl: '<tpl if="groupValue">Optional</tpl><tpl if="!groupValue">Required</tpl>'
|
||||||
|
});
|
||||||
|
|
||||||
|
sections.push({
|
||||||
|
xtype: 'gridpanel',
|
||||||
|
title: 'Parameters',
|
||||||
|
features: [groupingFeature],
|
||||||
|
store: pstore,
|
||||||
|
viewConfig: {
|
||||||
|
trackOver: false,
|
||||||
|
stripeRows: true
|
||||||
|
},
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
header: 'Name',
|
||||||
|
dataIndex: 'name',
|
||||||
|
flex: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: 'Type',
|
||||||
|
dataIndex: 'type',
|
||||||
|
renderer: render_type,
|
||||||
|
flex: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: 'Default',
|
||||||
|
dataIndex: 'default',
|
||||||
|
flex: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: 'Format',
|
||||||
|
dataIndex: 'type',
|
||||||
|
renderer: render_format,
|
||||||
|
flex: 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: 'Description',
|
||||||
|
dataIndex: 'description',
|
||||||
|
renderer: render_description,
|
||||||
|
flex: 6
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.returns) {
|
||||||
|
|
||||||
|
var retinf = info.returns;
|
||||||
|
var rtype = retinf.type;
|
||||||
|
if (!rtype && retinf.items)
|
||||||
|
rtype = 'array';
|
||||||
|
if (!rtype)
|
||||||
|
rtype = 'object';
|
||||||
|
|
||||||
|
var rpstore = Ext.create('Ext.data.Store', {
|
||||||
|
model: 'pve-param-schema',
|
||||||
|
proxy: {
|
||||||
|
type: 'memory'
|
||||||
|
},
|
||||||
|
groupField: 'optional',
|
||||||
|
sorters: [
|
||||||
|
{
|
||||||
|
property: 'name',
|
||||||
|
direction: 'ASC'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
var properties;
|
||||||
|
if (rtype === 'array' && retinf.items.properties) {
|
||||||
|
properties = retinf.items.properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rtype === 'object' && retinf.properties) {
|
||||||
|
properties = retinf.properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ext.Object.each(properties, function(name, pdef) {
|
||||||
|
pdef.name = name;
|
||||||
|
rpstore.add(pdef);
|
||||||
|
});
|
||||||
|
|
||||||
|
rpstore.sort();
|
||||||
|
|
||||||
|
var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{
|
||||||
|
enableGroupingMenu: false,
|
||||||
|
groupHeaderTpl: '<tpl if="groupValue">Optional</tpl><tpl if="!groupValue">Obligatory</tpl>'
|
||||||
|
});
|
||||||
|
var returnhtml;
|
||||||
|
if (retinf.items) {
|
||||||
|
returnhtml = '<pre>items: ' + Ext.htmlEncode(JSON.stringify(retinf.items, null, 4)) + '</pre>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (retinf.properties) {
|
||||||
|
returnhtml = returnhtml || '';
|
||||||
|
returnhtml += '<pre>properties:' + Ext.htmlEncode(JSON.stringify(retinf.properties, null, 4)) + '</pre>';
|
||||||
|
}
|
||||||
|
|
||||||
|
var rawSection = Ext.create('Ext.panel.Panel', {
|
||||||
|
bodyPadding: '0px 10px 10px 10px',
|
||||||
|
html: returnhtml,
|
||||||
|
hidden: true
|
||||||
|
});
|
||||||
|
|
||||||
|
sections.push({
|
||||||
|
xtype: 'gridpanel',
|
||||||
|
title: 'Returns: ' + rtype,
|
||||||
|
features: [groupingFeature],
|
||||||
|
store: rpstore,
|
||||||
|
viewConfig: {
|
||||||
|
trackOver: false,
|
||||||
|
stripeRows: true
|
||||||
|
},
|
||||||
|
columns: [
|
||||||
|
{
|
||||||
|
header: 'Name',
|
||||||
|
dataIndex: 'name',
|
||||||
|
flex: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: 'Type',
|
||||||
|
dataIndex: 'type',
|
||||||
|
renderer: render_type,
|
||||||
|
flex: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: 'Default',
|
||||||
|
dataIndex: 'default',
|
||||||
|
flex: 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: 'Format',
|
||||||
|
dataIndex: 'type',
|
||||||
|
renderer: render_format,
|
||||||
|
flex: 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
header: 'Description',
|
||||||
|
dataIndex: 'description',
|
||||||
|
renderer: render_description,
|
||||||
|
flex: 6
|
||||||
|
}
|
||||||
|
],
|
||||||
|
bbar: [
|
||||||
|
{
|
||||||
|
xtype: 'button',
|
||||||
|
text: 'Show RAW',
|
||||||
|
handler: function(btn) {
|
||||||
|
rawSection.setVisible(!rawSection.isVisible());
|
||||||
|
btn.setText(rawSection.isVisible() ? 'Hide RAW' : 'Show RAW');
|
||||||
|
}}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
sections.push(rawSection);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!data.path.match(/\/_upgrade_/)) {
|
||||||
|
var permhtml = '';
|
||||||
|
|
||||||
|
if (!info.permissions) {
|
||||||
|
permhtml = "Root only.";
|
||||||
|
} else {
|
||||||
|
if (info.permissions.description) {
|
||||||
|
permhtml += "<div style='white-space:pre-wrap;padding-bottom:10px;'>" +
|
||||||
|
Ext.htmlEncode(info.permissions.description) + "</div>";
|
||||||
|
}
|
||||||
|
permhtml += permission_text(info.permissions);
|
||||||
|
}
|
||||||
|
|
||||||
|
// we do not have this information for PBS api
|
||||||
|
//if (!info.allowtoken) {
|
||||||
|
// permhtml += "<br />This API endpoint is not available for API tokens."
|
||||||
|
//}
|
||||||
|
|
||||||
|
sections.push({
|
||||||
|
title: 'Required permissions',
|
||||||
|
bodyPadding: 10,
|
||||||
|
html: permhtml
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
items.push({
|
||||||
|
title: method,
|
||||||
|
autoScroll: true,
|
||||||
|
defaults: {
|
||||||
|
border: false
|
||||||
|
},
|
||||||
|
items: sections
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var ct = Ext.getCmp('docview');
|
||||||
|
ct.setTitle("Path: " + real_path(data.path));
|
||||||
|
ct.removeAll(true);
|
||||||
|
ct.add(items);
|
||||||
|
ct.setActiveTab(0);
|
||||||
|
};
|
||||||
|
|
||||||
|
Ext.define('Ext.form.SearchField', {
|
||||||
|
extend: 'Ext.form.field.Text',
|
||||||
|
alias: 'widget.searchfield',
|
||||||
|
|
||||||
|
emptyText: 'Search...',
|
||||||
|
|
||||||
|
flex: 1,
|
||||||
|
|
||||||
|
inputType: 'search',
|
||||||
|
listeners: {
|
||||||
|
'change': function(){
|
||||||
|
|
||||||
|
var value = this.getValue();
|
||||||
|
if (!Ext.isEmpty(value)) {
|
||||||
|
store.filter({
|
||||||
|
property: 'path',
|
||||||
|
value: value,
|
||||||
|
anyMatch: true
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
store.clearFilter();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var tree = Ext.create('Ext.tree.Panel', {
|
||||||
|
title: 'Resource Tree',
|
||||||
|
tbar: [
|
||||||
|
{
|
||||||
|
xtype: 'searchfield',
|
||||||
|
}
|
||||||
|
],
|
||||||
|
tools: [
|
||||||
|
{
|
||||||
|
type: 'expand',
|
||||||
|
tooltip: 'Expand all',
|
||||||
|
tooltipType: 'title',
|
||||||
|
callback: (tree) => tree.expandAll(),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'collapse',
|
||||||
|
tooltip: 'Collapse all',
|
||||||
|
tooltipType: 'title',
|
||||||
|
callback: (tree) => tree.collapseAll(),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
store: store,
|
||||||
|
width: 200,
|
||||||
|
region: 'west',
|
||||||
|
split: true,
|
||||||
|
margins: '5 0 5 5',
|
||||||
|
rootVisible: false,
|
||||||
|
listeners: {
|
||||||
|
selectionchange: function(v, selections) {
|
||||||
|
if (!selections[0])
|
||||||
|
return;
|
||||||
|
var rec = selections[0];
|
||||||
|
render_docu(rec.data);
|
||||||
|
location.hash = '#' + rec.data.path;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Ext.create('Ext.container.Viewport', {
|
||||||
|
layout: 'border',
|
||||||
|
renderTo: Ext.getBody(),
|
||||||
|
items: [
|
||||||
|
tree,
|
||||||
|
{
|
||||||
|
xtype: 'tabpanel',
|
||||||
|
title: 'Documentation',
|
||||||
|
id: 'docview',
|
||||||
|
region: 'center',
|
||||||
|
margins: '5 5 5 0',
|
||||||
|
layout: 'fit',
|
||||||
|
items: []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
var deepLink = function() {
|
||||||
|
var path = window.location.hash.substring(1).replace(/\/\s*$/, '')
|
||||||
|
var endpoint = store.findNode('path', path);
|
||||||
|
|
||||||
|
if (endpoint) {
|
||||||
|
tree.getSelectionModel().select(endpoint);
|
||||||
|
tree.expandPath(endpoint.getPath());
|
||||||
|
render_docu(endpoint.data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
window.onhashchange = deepLink;
|
||||||
|
|
||||||
|
deepLink();
|
||||||
|
|
||||||
|
});
|
@ -1,33 +1,31 @@
|
|||||||
Backup Client Usage
|
Backup Client Usage
|
||||||
===================
|
===================
|
||||||
|
|
||||||
The command line client for Proxmox Backup Server is called
|
The command line client is called :command:`proxmox-backup-client`.
|
||||||
:command:`proxmox-backup-client`.
|
|
||||||
|
|
||||||
.. _client_repository:
|
.. _client_repository:
|
||||||
|
|
||||||
Backup Repository Locations
|
Repository Locations
|
||||||
---------------------------
|
--------------------
|
||||||
|
|
||||||
The client uses the following format to specify a datastore repository
|
The client uses the following notation to specify a datastore repository
|
||||||
on the backup server (where username is specified in the form of user@realm):
|
on the backup server.
|
||||||
|
|
||||||
[[username@]server[:port]:]datastore
|
[[username@]server[:port]:]datastore
|
||||||
|
|
||||||
The default value for ``username`` is ``root@pam``. If no server is specified,
|
The default value for ``username`` is ``root@pam``. If no server is specified,
|
||||||
the default is the local host (``localhost``).
|
the default is the local host (``localhost``).
|
||||||
|
|
||||||
You can specify a port if your backup server is only reachable on a non-default
|
You can specify a port if your backup server is only reachable on a different
|
||||||
port (for example, with NAT and port forwarding configurations).
|
port (e.g. with NAT and port forwarding).
|
||||||
|
|
||||||
Note that if the server uses an IPv6 address, you have to write it with square
|
Note that if the server is an IPv6 address, you have to write it with square
|
||||||
brackets (for example, `[fe80::01]`).
|
brackets (for example, `[fe80::01]`).
|
||||||
|
|
||||||
You can pass the repository with the ``--repository`` command line option, or
|
You can pass the repository with the ``--repository`` command line option, or
|
||||||
by setting the ``PBS_REPOSITORY`` environment variable.
|
by setting the ``PBS_REPOSITORY`` environment variable.
|
||||||
|
|
||||||
Below are some examples of valid repositories and their corresponding real
|
Here some examples of valid repositories and the real values
|
||||||
values:
|
|
||||||
|
|
||||||
================================ ================== ================== ===========
|
================================ ================== ================== ===========
|
||||||
Example User Host:Port Datastore
|
Example User Host:Port Datastore
|
||||||
@ -48,31 +46,16 @@ Environment Variables
|
|||||||
The default backup repository.
|
The default backup repository.
|
||||||
|
|
||||||
``PBS_PASSWORD``
|
``PBS_PASSWORD``
|
||||||
When set, this value is used as the password for the backup server.
|
When set, this value is used for the password required for the backup server.
|
||||||
You can also set this to an API token secret.
|
You can also set this to a API token secret.
|
||||||
|
|
||||||
``PBS_PASSWORD_FD``, ``PBS_PASSWORD_FILE``, ``PBS_PASSWORD_CMD``
|
|
||||||
Like ``PBS_PASSWORD``, but read data from an open file descriptor, a file
|
|
||||||
name or from the `stdout` of a command, respectively. The first defined
|
|
||||||
environment variable from the order above is preferred.
|
|
||||||
|
|
||||||
``PBS_ENCRYPTION_PASSWORD``
|
``PBS_ENCRYPTION_PASSWORD``
|
||||||
When set, this value is used to access the secret encryption key (if
|
When set, this value is used to access the secret encryption key (if
|
||||||
protected by password).
|
protected by password).
|
||||||
|
|
||||||
``PBS_ENCRYPTION_PASSWORD_FD``, ``PBS_ENCRYPTION_PASSWORD_FILE``, ``PBS_ENCRYPTION_PASSWORD_CMD``
|
``PBS_FINGERPRINT`` When set, this value is used to verify the server
|
||||||
Like ``PBS_ENCRYPTION_PASSWORD``, but read data from an open file descriptor,
|
certificate (only used if the system CA certificates cannot validate the
|
||||||
a file name or from the `stdout` of a command, respectively. The first
|
certificate).
|
||||||
defined environment variable from the order above is preferred.
|
|
||||||
|
|
||||||
``PBS_FINGERPRINT``
|
|
||||||
When set, this value is used to verify the server certificate (only used if
|
|
||||||
the system CA certificates cannot validate the certificate).
|
|
||||||
|
|
||||||
|
|
||||||
.. Note:: Passwords must be valid UTF-8 and may not contain newlines. For your
|
|
||||||
convenience, Proxmox Backup Server only uses the first line as password, so
|
|
||||||
you can add arbitrary comments after the first newline.
|
|
||||||
|
|
||||||
|
|
||||||
Output Format
|
Output Format
|
||||||
@ -87,15 +70,14 @@ Creating Backups
|
|||||||
----------------
|
----------------
|
||||||
|
|
||||||
This section explains how to create a backup from within the machine. This can
|
This section explains how to create a backup from within the machine. This can
|
||||||
be a physical host, a virtual machine, or a container. Such backups may contain
|
be a physical host, a virtual machine, or a container. Such backups may contain file
|
||||||
file and image archives. There are no restrictions in this case.
|
and image archives. There are no restrictions in this case.
|
||||||
|
|
||||||
.. Note:: If you want to backup virtual machines or containers on Proxmox VE,
|
.. note:: If you want to backup virtual machines or containers on Proxmox VE, see :ref:`pve-integration`.
|
||||||
see :ref:`pve-integration`.
|
|
||||||
|
|
||||||
For the following example, you need to have a backup server set up, have working
|
For the following example you need to have a backup server set up, working
|
||||||
credentials, and know the repository name.
|
credentials and need to know the repository name.
|
||||||
In the following examples, we use ``backup-server:store1``.
|
In the following examples we use ``backup-server:store1``.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -109,32 +91,32 @@ In the following examples, we use ``backup-server:store1``.
|
|||||||
Uploaded 12129 chunks in 87 seconds (564 MB/s).
|
Uploaded 12129 chunks in 87 seconds (564 MB/s).
|
||||||
End Time: 2019-12-03T10:36:29+01:00
|
End Time: 2019-12-03T10:36:29+01:00
|
||||||
|
|
||||||
This will prompt you for a password, then upload a file archive named
|
This will prompt you for a password and then uploads a file archive named
|
||||||
``root.pxar`` containing all the files in the ``/`` directory.
|
``root.pxar`` containing all the files in the ``/`` directory.
|
||||||
|
|
||||||
.. Caution:: Please note that proxmox-backup-client does not
|
.. Caution:: Please note that the proxmox-backup-client does not
|
||||||
automatically include mount points. Instead, you will see a short
|
automatically include mount points. Instead, you will see a short
|
||||||
``skip mount point`` message for each of them. The idea is to
|
``skip mount point`` notice for each of them. The idea is to
|
||||||
create a separate file archive for each mounted disk. You can
|
create a separate file archive for each mounted disk. You can
|
||||||
explicitly include them using the ``--include-dev`` option
|
explicitly include them using the ``--include-dev`` option
|
||||||
(i.e. ``--include-dev /boot/efi``). You can use this option
|
(i.e. ``--include-dev /boot/efi``). You can use this option
|
||||||
multiple times for each mount point that should be included.
|
multiple times for each mount point that should be included.
|
||||||
|
|
||||||
The ``--repository`` option can get quite long and is used by all commands. You
|
The ``--repository`` option can get quite long and is used by all
|
||||||
can avoid having to enter this value by setting the environment variable
|
commands. You can avoid having to enter this value by setting the
|
||||||
``PBS_REPOSITORY``. Note that if you would like this to remain set over
|
environment variable ``PBS_REPOSITORY``. Note that if you would like this to remain set
|
||||||
multiple sessions, you should instead add the below line to your ``.bashrc``
|
over multiple sessions, you should instead add the below line to your
|
||||||
file.
|
``.bashrc`` file.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# export PBS_REPOSITORY=backup-server:store1
|
# export PBS_REPOSITORY=backup-server:store1
|
||||||
|
|
||||||
After this, you can execute all commands without having to specify the
|
After this you can execute all commands without specifying the ``--repository``
|
||||||
``--repository`` option.
|
option.
|
||||||
|
|
||||||
A single backup is allowed to contain more than one archive. For example, if
|
One single backup is allowed to contain more than one archive. For example, if
|
||||||
you want to back up two disks mounted at ``/mnt/disk1`` and ``/mnt/disk2``:
|
you want to backup two disks mounted at ``/mnt/disk1`` and ``/mnt/disk2``:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -142,71 +124,59 @@ you want to back up two disks mounted at ``/mnt/disk1`` and ``/mnt/disk2``:
|
|||||||
|
|
||||||
This creates a backup of both disks.
|
This creates a backup of both disks.
|
||||||
|
|
||||||
If you want to use a namespace for the backup target you can add the `--ns`
|
The backup command takes a list of backup specifications, which
|
||||||
parameter:
|
include the archive name on the server, the type of the archive, and the
|
||||||
|
archive source at the client. The format is:
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# proxmox-backup-client backup disk1.pxar:/mnt/disk1 disk2.pxar:/mnt/disk2 --ns a/b/c
|
|
||||||
|
|
||||||
The backup command takes a list of backup specifications, which include the
|
|
||||||
archive name on the server, the type of the archive, and the archive source at
|
|
||||||
the client. The format is:
|
|
||||||
|
|
||||||
<archive-name>.<type>:<source-path>
|
<archive-name>.<type>:<source-path>
|
||||||
|
|
||||||
Common types are ``.pxar`` for file archives and ``.img`` for block
|
Common types are ``.pxar`` for file archives, and ``.img`` for block
|
||||||
device images. To create a backup of a block device, run the following command:
|
device images. To create a backup of a block device run the following command:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# proxmox-backup-client backup mydata.img:/dev/mylvm/mydata
|
# proxmox-backup-client backup mydata.img:/dev/mylvm/mydata
|
||||||
|
|
||||||
|
|
||||||
Excluding Files/Directories from a Backup
|
Excluding files/folders from a backup
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Sometimes it is desired to exclude certain files or directories from a backup
|
Sometimes it is desired to exclude certain files or folders from a backup archive.
|
||||||
archive. To tell the Proxmox Backup client when and how to ignore files and
|
To tell the Proxmox Backup client when and how to ignore files and directories,
|
||||||
directories, place a text file named ``.pxarexclude`` in the filesystem
|
place a text file called ``.pxarexclude`` in the filesystem hierarchy.
|
||||||
hierarchy. Whenever the backup client encounters such a file in a directory,
|
Whenever the backup client encounters such a file in a directory, it interprets
|
||||||
it interprets each line as a glob match pattern for files and directories that
|
each line as glob match patterns for files and directories that are to be excluded
|
||||||
are to be excluded from the backup.
|
from the backup.
|
||||||
|
|
||||||
The file must contain a single glob pattern per line. Empty lines and lines
|
The file must contain a single glob pattern per line. Empty lines are ignored.
|
||||||
starting with ``#`` (indicating a comment) are ignored.
|
The same is true for lines starting with ``#``, which indicates a comment.
|
||||||
A ``!`` at the beginning of a line reverses the glob match pattern from an
|
A ``!`` at the beginning of a line reverses the glob match pattern from an exclusion
|
||||||
exclusion to an explicit inclusion. This makes it possible to exclude all
|
to an explicit inclusion. This makes it possible to exclude all entries in a
|
||||||
entries in a directory except for a few single files/subdirectories.
|
directory except for a few single files/subdirectories.
|
||||||
Lines ending in ``/`` match only on directories.
|
Lines ending in ``/`` match only on directories.
|
||||||
The directory containing the ``.pxarexclude`` file is considered to be the root
|
The directory containing the ``.pxarexclude`` file is considered to be the root of
|
||||||
of the given patterns. It is only possible to match files in this directory and
|
the given patterns. It is only possible to match files in this directory and its subdirectories.
|
||||||
its subdirectories.
|
|
||||||
|
|
||||||
.. Note:: Patterns without a leading ``/`` will also match in subdirectories,
|
|
||||||
while patterns with a leading ``/`` will only match in the current directory.
|
|
||||||
|
|
||||||
``\`` is used to escape special glob characters.
|
``\`` is used to escape special glob characters.
|
||||||
``?`` matches any single character.
|
``?`` matches any single character.
|
||||||
``*`` matches any character, including an empty string.
|
``*`` matches any character, including an empty string.
|
||||||
``**`` is used to match current directory and subdirectories. For example, with
|
``**`` is used to match subdirectories. It can be used to, for example, exclude
|
||||||
the pattern ``**/*.tmp``, it would exclude all files ending in ``.tmp`` within
|
all files ending in ``.tmp`` within the directory or subdirectories with the
|
||||||
a directory and its subdirectories.
|
following pattern ``**/*.tmp``.
|
||||||
``[...]`` matches a single character from any of the provided characters within
|
``[...]`` matches a single character from any of the provided characters within
|
||||||
the brackets. ``[!...]`` does the complementary and matches any single
|
the brackets. ``[!...]`` does the complementary and matches any single character
|
||||||
character not contained within the brackets. It is also possible to specify
|
not contained within the brackets. It is also possible to specify ranges with two
|
||||||
ranges with two characters separated by ``-``. For example, ``[a-z]`` matches
|
characters separated by ``-``. For example, ``[a-z]`` matches any lowercase
|
||||||
any lowercase alphabetic character, and ``[0-9]`` matches any single digit.
|
alphabetic character and ``[0-9]`` matches any one single digit.
|
||||||
|
|
||||||
The order of the glob match patterns defines whether a file is included or
|
The order of the glob match patterns defines whether a file is included or
|
||||||
excluded, that is to say, later entries override earlier ones.
|
excluded, that is to say later entries override previous ones.
|
||||||
This is also true for match patterns encountered deeper down the directory
|
This is also true for match patterns encountered deeper down the directory tree,
|
||||||
tree, which can override a previous exclusion.
|
which can override a previous exclusion.
|
||||||
|
Be aware that excluded directories will **not** be read by the backup client.
|
||||||
.. Note:: Excluded directories will **not** be read by the backup client. Thus,
|
Thus, a ``.pxarexclude`` file in an excluded subdirectory will have no effect.
|
||||||
a ``.pxarexclude`` file in an excluded subdirectory will have no effect.
|
``.pxarexclude`` files are treated as regular files and will be included in the
|
||||||
``.pxarexclude`` files are treated as regular files and will be included in
|
backup archive.
|
||||||
the backup archive.
|
|
||||||
|
|
||||||
For example, consider the following directory structure:
|
For example, consider the following directory structure:
|
||||||
|
|
||||||
@ -294,7 +264,7 @@ You can avoid entering the passwords by setting the environment
|
|||||||
variables ``PBS_PASSWORD`` and ``PBS_ENCRYPTION_PASSWORD``.
|
variables ``PBS_PASSWORD`` and ``PBS_ENCRYPTION_PASSWORD``.
|
||||||
|
|
||||||
|
|
||||||
Using a Master Key to Store and Recover Encryption Keys
|
Using a master key to store and recover encryption keys
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
You can also use ``proxmox-backup-client key`` to create an RSA public/private
|
You can also use ``proxmox-backup-client key`` to create an RSA public/private
|
||||||
@ -374,7 +344,7 @@ To set up a master key:
|
|||||||
keep keys ordered and in a place that is separate from the contents being
|
keep keys ordered and in a place that is separate from the contents being
|
||||||
backed up. It can happen, for example, that you back up an entire system, using
|
backed up. It can happen, for example, that you back up an entire system, using
|
||||||
a key on that system. If the system then becomes inaccessible for any reason
|
a key on that system. If the system then becomes inaccessible for any reason
|
||||||
and needs to be restored, this will not be possible, as the encryption key will be
|
and needs to be restored, this will not be possible as the encryption key will be
|
||||||
lost along with the broken system.
|
lost along with the broken system.
|
||||||
|
|
||||||
It is recommended that you keep your master key safe, but easily accessible, in
|
It is recommended that you keep your master key safe, but easily accessible, in
|
||||||
@ -396,10 +366,10 @@ version of your master key. The following command sends the output of the
|
|||||||
Restoring Data
|
Restoring Data
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
The regular creation of backups is a necessary step in avoiding data loss. More
|
The regular creation of backups is a necessary step to avoiding data
|
||||||
importantly, however, is the restoration. It is good practice to perform
|
loss. More importantly, however, is the restoration. It is good practice to perform
|
||||||
periodic recovery tests to ensure that you can access the data in case of
|
periodic recovery tests to ensure that you can access the data in
|
||||||
disaster.
|
case of problems.
|
||||||
|
|
||||||
First, you need to find the snapshot which you want to restore. The snapshot
|
First, you need to find the snapshot which you want to restore. The snapshot
|
||||||
list command provides a list of all the snapshots on the server:
|
list command provides a list of all the snapshots on the server:
|
||||||
@ -416,11 +386,6 @@ list command provides a list of all the snapshots on the server:
|
|||||||
├────────────────────────────────┼─────────────┼────────────────────────────────────┤
|
├────────────────────────────────┼─────────────┼────────────────────────────────────┤
|
||||||
...
|
...
|
||||||
|
|
||||||
|
|
||||||
.. tip:: List will by default only output the backup snapshots of the root
|
|
||||||
namespace itself. To list backups from another namespace use the ``--ns
|
|
||||||
<ns>`` option
|
|
||||||
|
|
||||||
You can inspect the catalog to find specific files.
|
You can inspect the catalog to find specific files.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -463,22 +428,23 @@ to use the interactive recovery shell.
|
|||||||
|
|
||||||
The interactive recovery shell is a minimal command line interface that
|
The interactive recovery shell is a minimal command line interface that
|
||||||
utilizes the metadata stored in the catalog to quickly list, navigate and
|
utilizes the metadata stored in the catalog to quickly list, navigate and
|
||||||
search for files in a file archive.
|
search files in a file archive.
|
||||||
To restore files, you can select them individually or match them with a glob
|
To restore files, you can select them individually or match them with a glob
|
||||||
pattern.
|
pattern.
|
||||||
|
|
||||||
Using the catalog for navigation reduces the overhead considerably because only
|
Using the catalog for navigation reduces the overhead considerably because only
|
||||||
the catalog needs to be downloaded and, optionally, decrypted.
|
the catalog needs to be downloaded and, optionally, decrypted.
|
||||||
The actual chunks are only accessed if the metadata in the catalog is
|
The actual chunks are only accessed if the metadata in the catalog is not enough
|
||||||
insufficient or for the actual restore.
|
or for the actual restore.
|
||||||
|
|
||||||
Similar to common UNIX shells, ``cd`` and ``ls`` are the commands used to change
|
Similar to common UNIX shells ``cd`` and ``ls`` are the commands used to change
|
||||||
working directory and list directory contents in the archive.
|
working directory and list directory contents in the archive.
|
||||||
``pwd`` shows the full path of the current working directory with respect to the
|
``pwd`` shows the full path of the current working directory with respect to the
|
||||||
archive root.
|
archive root.
|
||||||
|
|
||||||
The ability to quickly search the contents of the archive is a commonly required
|
Being able to quickly search the contents of the archive is a commonly needed feature.
|
||||||
feature. That's where the catalog is most valuable. For example:
|
That's where the catalog is most valuable.
|
||||||
|
For example:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -489,8 +455,8 @@ feature. That's where the catalog is most valuable. For example:
|
|||||||
pxar:/ > restore-selected /target/path
|
pxar:/ > restore-selected /target/path
|
||||||
...
|
...
|
||||||
|
|
||||||
This will find and print all files ending in ``.txt`` located in ``etc/`` or its
|
This will find and print all files ending in ``.txt`` located in ``etc/`` or a
|
||||||
subdirectories, and add the corresponding pattern to the list for subsequent restores.
|
subdirectory and add the corresponding pattern to the list for subsequent restores.
|
||||||
``list-selected`` shows these patterns and ``restore-selected`` finally restores
|
``list-selected`` shows these patterns and ``restore-selected`` finally restores
|
||||||
all files in the archive matching the patterns to ``/target/path`` on the local
|
all files in the archive matching the patterns to ``/target/path`` on the local
|
||||||
host. This will scan the whole archive.
|
host. This will scan the whole archive.
|
||||||
@ -506,7 +472,7 @@ located in ``/etc``, you could do the following:
|
|||||||
pxar:/ > restore target/ --pattern etc/**/*.conf
|
pxar:/ > restore target/ --pattern etc/**/*.conf
|
||||||
...
|
...
|
||||||
|
|
||||||
The above will scan through all the directories below ``/etc`` and restore all
|
The above will scan trough all the directories below ``/etc`` and restore all
|
||||||
files ending in ``.conf``.
|
files ending in ``.conf``.
|
||||||
|
|
||||||
.. todo:: Explain interactive restore in more detail
|
.. todo:: Explain interactive restore in more detail
|
||||||
@ -515,7 +481,7 @@ Mounting of Archives via FUSE
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The :term:`FUSE` implementation for the pxar archive allows you to mount a
|
The :term:`FUSE` implementation for the pxar archive allows you to mount a
|
||||||
file archive as a read-only filesystem to a mount point on your host.
|
file archive as a read-only filesystem to a mountpoint on your host.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -531,7 +497,7 @@ This allows you to access the full contents of the archive in a seamless manner.
|
|||||||
load on your host, depending on the operations you perform on the mounted
|
load on your host, depending on the operations you perform on the mounted
|
||||||
filesystem.
|
filesystem.
|
||||||
|
|
||||||
To unmount the filesystem, use the ``umount`` command on the mount point:
|
To unmount the filesystem use the ``umount`` command on the mountpoint:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -540,7 +506,7 @@ To unmount the filesystem, use the ``umount`` command on the mount point:
|
|||||||
Login and Logout
|
Login and Logout
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
The client tool prompts you to enter the login password as soon as you
|
The client tool prompts you to enter the logon password as soon as you
|
||||||
want to access the backup server. The server checks your credentials
|
want to access the backup server. The server checks your credentials
|
||||||
and responds with a ticket that is valid for two hours. The client
|
and responds with a ticket that is valid for two hours. The client
|
||||||
tool automatically stores that ticket and uses it for further requests
|
tool automatically stores that ticket and uses it for further requests
|
||||||
@ -578,10 +544,10 @@ user that has ``Datastore.Modify`` privileges on the datastore.
|
|||||||
# proxmox-backup-client change-owner vm/103 john@pbs
|
# proxmox-backup-client change-owner vm/103 john@pbs
|
||||||
|
|
||||||
This can also be done from within the web interface, by navigating to the
|
This can also be done from within the web interface, by navigating to the
|
||||||
`Content` section of the datastore that contains the backup group and selecting
|
`Content` section of the datastore that contains the backup group and
|
||||||
the user icon under the `Actions` column. Common cases for this could be to
|
selecting the user icon under the `Actions` column. Common cases for this could
|
||||||
change the owner of a sync job from ``root@pam``, or to repurpose a backup
|
be to change the owner of a sync job from ``root@pam``, or to repurpose a
|
||||||
group.
|
backup group.
|
||||||
|
|
||||||
|
|
||||||
.. _backup-pruning:
|
.. _backup-pruning:
|
||||||
@ -589,24 +555,16 @@ group.
|
|||||||
Pruning and Removing Backups
|
Pruning and Removing Backups
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
You can manually delete a backup snapshot using the ``forget`` command:
|
You can manually delete a backup snapshot using the ``forget``
|
||||||
|
command:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# proxmox-backup-client snapshot forget <snapshot>
|
# proxmox-backup-client snapshot forget <snapshot>
|
||||||
|
|
||||||
|
|
||||||
.. caution:: This command removes all archives in this backup snapshot. They
|
.. caution:: This command removes all archives in this backup
|
||||||
will be inaccessible and *unrecoverable*.
|
snapshot. They will be inaccessible and unrecoverable.
|
||||||
|
|
||||||
Don't forget to add the namespace ``--ns`` parameter if you want to forget a
|
|
||||||
snapshot that is contained in the root namespace:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# proxmox-backup-client snapshot forget <snapshot> --ns <ns>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Although manual removal is sometimes required, the ``prune``
|
Although manual removal is sometimes required, the ``prune``
|
||||||
@ -678,25 +636,6 @@ shows the list of existing snapshots and what actions prune would take.
|
|||||||
in the chunk-store. The chunk-store still contains the data blocks. To free
|
in the chunk-store. The chunk-store still contains the data blocks. To free
|
||||||
space you need to perform :ref:`client_garbage-collection`.
|
space you need to perform :ref:`client_garbage-collection`.
|
||||||
|
|
||||||
It is also possible to protect single snapshots from being pruned or deleted:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# proxmox-backup-client snapshot protected update <snapshot> true
|
|
||||||
|
|
||||||
This will set the protected flag on the snapshot and prevent pruning or manual
|
|
||||||
deletion of this snapshot untilt he flag is removed again with:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# proxmox-backup-client snapshot protected update <snapshot> false
|
|
||||||
|
|
||||||
When a group is with a protected snapshot is deleted, only the non-protected
|
|
||||||
ones are removed and the group will remain.
|
|
||||||
|
|
||||||
.. note:: This flag will not be synced when using pull or sync jobs. If you
|
|
||||||
want to protect a synced snapshot, you have to manually to this again on
|
|
||||||
the target backup server.
|
|
||||||
|
|
||||||
.. _client_garbage-collection:
|
.. _client_garbage-collection:
|
||||||
|
|
||||||
@ -722,7 +661,7 @@ unused data blocks are removed.
|
|||||||
(access time) property. Filesystems are mounted with the ``relatime`` option
|
(access time) property. Filesystems are mounted with the ``relatime`` option
|
||||||
by default. This results in a better performance by only updating the
|
by default. This results in a better performance by only updating the
|
||||||
``atime`` property if the last access has been at least 24 hours ago. The
|
``atime`` property if the last access has been at least 24 hours ago. The
|
||||||
downside is that touching a chunk within these 24 hours will not always
|
downside is, that touching a chunk within these 24 hours will not always
|
||||||
update its ``atime`` property.
|
update its ``atime`` property.
|
||||||
|
|
||||||
Chunks in the grace period will be logged at the end of the garbage
|
Chunks in the grace period will be logged at the end of the garbage
|
||||||
@ -746,8 +685,8 @@ unused data blocks are removed.
|
|||||||
Average chunk size: 2486565
|
Average chunk size: 2486565
|
||||||
TASK OK
|
TASK OK
|
||||||
|
|
||||||
Garbage collection can also be scheduled using ``promxox-backup-manager`` or
|
|
||||||
from the Proxmox Backup Server's web interface.
|
.. todo:: howto run garbage-collection at regular intervals (cron)
|
||||||
|
|
||||||
Benchmarking
|
Benchmarking
|
||||||
------------
|
------------
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
Backup Protocol
|
Backup Protocol
|
||||||
===============
|
===============
|
||||||
|
|
||||||
Proxmox Backup Server uses a REST-based API. While the management
|
Proxmox Backup Server uses a REST based API. While the management
|
||||||
interface uses normal HTTP, the actual backup and restore interface uses
|
interface use normal HTTP, the actual backup and restore interface use
|
||||||
HTTP/2 for improved performance. Both HTTP and HTTP/2 are well known
|
HTTP/2 for improved performance. Both HTTP and HTTP/2 are well known
|
||||||
standards, so the following section assumes that you are familiar with
|
standards, so the following section assumes that you are familiar on
|
||||||
how to use them.
|
how to use them.
|
||||||
|
|
||||||
|
|
||||||
@ -13,35 +13,35 @@ Backup Protocol API
|
|||||||
|
|
||||||
To start a new backup, the API call ``GET /api2/json/backup`` needs to
|
To start a new backup, the API call ``GET /api2/json/backup`` needs to
|
||||||
be upgraded to a HTTP/2 connection using
|
be upgraded to a HTTP/2 connection using
|
||||||
``proxmox-backup-protocol-v1`` as the protocol name::
|
``proxmox-backup-protocol-v1`` as protocol name::
|
||||||
|
|
||||||
GET /api2/json/backup HTTP/1.1
|
GET /api2/json/backup HTTP/1.1
|
||||||
UPGRADE: proxmox-backup-protocol-v1
|
UPGRADE: proxmox-backup-protocol-v1
|
||||||
|
|
||||||
The server replies with the ``HTTP 101 Switching Protocol`` status code,
|
The server replies with HTTP 101 Switching Protocol status code,
|
||||||
and you can then issue REST commands on the updated HTTP/2 connection.
|
and you can then issue REST commands on that updated HTTP/2 connection.
|
||||||
|
|
||||||
The backup protocol allows you to upload three different kind of files:
|
The backup protocol allows you to upload three different kind of files:
|
||||||
|
|
||||||
- Chunks and blobs (binary data)
|
- Chunks and blobs (binary data)
|
||||||
|
|
||||||
- Fixed indexes (List of chunks with fixed size)
|
- Fixed Indexes (List of chunks with fixed size)
|
||||||
|
|
||||||
- Dynamic indexes (List of chunks with variable size)
|
- Dynamic Indexes (List of chunk with variable size)
|
||||||
|
|
||||||
The following section provides a short introduction on how to upload such
|
The following section gives a short introduction how to upload such
|
||||||
files. Please use the `API Viewer <api-viewer/index.html>`_ for
|
files. Please use the `API Viewer <api-viewer/index.html>`_ for
|
||||||
details about the available REST commands.
|
details about available REST commands.
|
||||||
|
|
||||||
|
|
||||||
Upload Blobs
|
Upload Blobs
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
Blobs are uploaded using ``POST /blob``. The HTTP body contains the
|
Uploading blobs is done using ``POST /blob``. The HTTP body contains the
|
||||||
data encoded as :ref:`Data Blob <data-blob-format>`.
|
data encoded as :ref:`Data Blob <data-blob-format>`).
|
||||||
|
|
||||||
The file name must end with ``.blob``, and is automatically added
|
The file name needs to end with ``.blob``, and is automatically added
|
||||||
to the backup manifest, following the call to ``POST /finish``.
|
to the backup manifest.
|
||||||
|
|
||||||
|
|
||||||
Upload Chunks
|
Upload Chunks
|
||||||
@ -56,41 +56,40 @@ encoded as :ref:`Data Blob <data-blob-format>`).
|
|||||||
Upload Fixed Indexes
|
Upload Fixed Indexes
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Fixed indexes are used to store VM image data. The VM image is split
|
Fixed indexes are use to store VM image data. The VM image is split
|
||||||
into equally sized chunks, which are uploaded individually. The index
|
into equally sized chunks, which are uploaded individually. The index
|
||||||
file simply contains a list of chunk digests.
|
file simply contains a list to chunk digests.
|
||||||
|
|
||||||
You create a fixed index with ``POST /fixed_index``. Then, upload
|
You create a fixed index with ``POST /fixed_index``. Then upload
|
||||||
chunks with ``POST /fixed_chunk``, and append them to the index with
|
chunks with ``POST /fixed_chunk``, and append them to the index with
|
||||||
``PUT /fixed_index``. When finished, you need to close the index using
|
``PUT /fixed_index``. When finished, you need to close the index using
|
||||||
``POST /fixed_close``.
|
``POST /fixed_close``.
|
||||||
|
|
||||||
The file name needs to end with ``.fidx``, and is automatically added
|
The file name needs to end with ``.fidx``, and is automatically added
|
||||||
to the backup manifest, following the call to ``POST /finish``.
|
to the backup manifest.
|
||||||
|
|
||||||
|
|
||||||
Upload Dynamic Indexes
|
Upload Dynamic Indexes
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Dynamic indexes are used to store file archive data. The archive data
|
Dynamic indexes are use to store file archive data. The archive data
|
||||||
is split into dynamically sized chunks, which are uploaded
|
is split into dynamically sized chunks, which are uploaded
|
||||||
individually. The index file simply contains a list of chunk digests
|
individually. The index file simply contains a list to chunk digests
|
||||||
and offsets.
|
and offsets.
|
||||||
|
|
||||||
You can create a dynamically sized index with ``POST /dynamic_index``. Then,
|
You create a dynamic sized index with ``POST /dynamic_index``. Then
|
||||||
upload chunks with ``POST /dynamic_chunk``, and append them to the index with
|
upload chunks with ``POST /dynamic_chunk``, and append them to the index with
|
||||||
``PUT /dynamic_index``. When finished, you need to close the index using
|
``PUT /dynamic_index``. When finished, you need to close the index using
|
||||||
``POST /dynamic_close``.
|
``POST /dynamic_close``.
|
||||||
|
|
||||||
The filename needs to end with ``.didx``, and is automatically added
|
The file name needs to end with ``.didx``, and is automatically added
|
||||||
to the backup manifest, following the call to ``POST /finish``.
|
to the backup manifest.
|
||||||
|
|
||||||
|
|
||||||
Finish Backup
|
Finish Backup
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
Once you have uploaded all data, you need to call ``POST /finish``. This
|
Once you have uploaded all data, you need to call ``POST
|
||||||
commits all data and ends the backup protocol.
|
/finish``. This commits all data and ends the backup protocol.
|
||||||
|
|
||||||
|
|
||||||
Restore/Reader Protocol API
|
Restore/Reader Protocol API
|
||||||
@ -103,39 +102,39 @@ be upgraded to a HTTP/2 connection using
|
|||||||
GET /api2/json/reader HTTP/1.1
|
GET /api2/json/reader HTTP/1.1
|
||||||
UPGRADE: proxmox-backup-reader-protocol-v1
|
UPGRADE: proxmox-backup-reader-protocol-v1
|
||||||
|
|
||||||
The server replies with the ``HTTP 101 Switching Protocol`` status code,
|
The server replies with HTTP 101 Switching Protocol status code,
|
||||||
and you can then issue REST commands on that updated HTTP/2 connection.
|
and you can then issue REST commands on that updated HTTP/2 connection.
|
||||||
|
|
||||||
The reader protocol allows you to download three different kinds of files:
|
The reader protocol allows you to download three different kind of files:
|
||||||
|
|
||||||
- Chunks and blobs (binary data)
|
- Chunks and blobs (binary data)
|
||||||
|
|
||||||
- Fixed indexes (list of chunks with fixed size)
|
- Fixed Indexes (List of chunks with fixed size)
|
||||||
|
|
||||||
- Dynamic indexes (list of chunks with variable size)
|
- Dynamic Indexes (List of chunk with variable size)
|
||||||
|
|
||||||
The following section provides a short introduction on how to download such
|
The following section gives a short introduction how to download such
|
||||||
files. Please use the `API Viewer <api-viewer/index.html>`_ for details about
|
files. Please use the `API Viewer <api-viewer/index.html>`_ for details about
|
||||||
the available REST commands.
|
available REST commands.
|
||||||
|
|
||||||
|
|
||||||
Download Blobs
|
Download Blobs
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Blobs are downloaded using ``GET /download``. The HTTP body contains the
|
Downloading blobs is done using ``GET /download``. The HTTP body contains the
|
||||||
data encoded as :ref:`Data Blob <data-blob-format>`.
|
data encoded as :ref:`Data Blob <data-blob-format>`.
|
||||||
|
|
||||||
|
|
||||||
Download Chunks
|
Download Chunks
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Chunks are downloaded using ``GET /chunk``. The HTTP body contains the
|
Downloading chunks is done using ``GET /chunk``. The HTTP body contains the
|
||||||
data encoded as :ref:`Data Blob <data-blob-format>`.
|
data encoded as :ref:`Data Blob <data-blob-format>`).
|
||||||
|
|
||||||
|
|
||||||
Download Index Files
|
Download Index Files
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Index files are downloaded using ``GET /download``. The HTTP body
|
Downloading index files is done using ``GET /download``. The HTTP body
|
||||||
contains the data encoded as :ref:`Fixed Index <fixed-index-format>`
|
contains the data encoded as :ref:`Fixed Index <fixed-index-format>`
|
||||||
or :ref:`Dynamic Index <dynamic-index-format>`.
|
or :ref:`Dynamic Index <dynamic-index-format>`.
|
||||||
|
@ -37,7 +37,7 @@ Each field can contain multiple values in the following formats:
|
|||||||
* and a combination of the above: e.g., 01,05..10,12/02
|
* and a combination of the above: e.g., 01,05..10,12/02
|
||||||
* or a `*` for every possible value: e.g., \*:00
|
* or a `*` for every possible value: e.g., \*:00
|
||||||
|
|
||||||
There are some special values that have a specific meaning:
|
There are some special values that have specific meaning:
|
||||||
|
|
||||||
================================= ==============================
|
================================= ==============================
|
||||||
Value Syntax
|
Value Syntax
|
||||||
@ -81,19 +81,19 @@ Not all features of systemd calendar events are implemented:
|
|||||||
|
|
||||||
* no Unix timestamps (e.g. `@12345`): instead use date and time to specify
|
* no Unix timestamps (e.g. `@12345`): instead use date and time to specify
|
||||||
a specific point in time
|
a specific point in time
|
||||||
* no timezone: all schedules use the timezone of the server
|
* no timezone: all schedules use the set timezone on the server
|
||||||
* no sub-second resolution
|
* no sub-second resolution
|
||||||
* no reverse day syntax (e.g. 2020-03~01)
|
* no reverse day syntax (e.g. 2020-03~01)
|
||||||
* no repetition of ranges (e.g. 1..10/2)
|
* no repetition of ranges (e.g. 1..10/2)
|
||||||
|
|
||||||
Notes on Scheduling
|
Notes on scheduling
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
In `Proxmox Backup`_, scheduling for most tasks is done in the
|
In `Proxmox Backup`_ scheduling for most tasks is done in the
|
||||||
`proxmox-backup-proxy`. This daemon checks all job schedules
|
`proxmox-backup-proxy`. This daemon checks all job schedules
|
||||||
every minute, to see if any are due. This means that even though
|
if they are due every minute. This means that even if
|
||||||
`calendar events` can contain seconds, it will only be checked
|
`calendar events` can contain seconds, it will only be checked
|
||||||
once per minute.
|
once a minute.
|
||||||
|
|
||||||
Also, all schedules will be checked against the timezone set
|
Also, all schedules will be checked against the timezone set
|
||||||
in the `Proxmox Backup`_ server.
|
in the `Proxmox Backup`_ server.
|
||||||
|
@ -1,333 +0,0 @@
|
|||||||
.. _sysadmin_certificate_management:
|
|
||||||
|
|
||||||
Certificate Management
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Access to the API and thus the web-based administration interface is always
|
|
||||||
encrypted through ``https``. Each `Proxmox Backup`_ host creates by default its
|
|
||||||
own (self-signed) certificate. This certificate is used for encrypted
|
|
||||||
communication with the host’s ``proxmox-backup-proxy`` service, for any API
|
|
||||||
call between a user or backup-client and the web-interface.
|
|
||||||
|
|
||||||
Certificate verification when sending backups to a `Proxmox Backup`_ server
|
|
||||||
is either done based on pinning the certificate fingerprints in the storage/remote
|
|
||||||
configuration, or by using certificates, signed by a trusted certificate authority.
|
|
||||||
|
|
||||||
.. _sysadmin_certs_api_gui:
|
|
||||||
|
|
||||||
Certificates for the API and SMTP
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
`Proxmox Backup`_ stores it certificate and key in:
|
|
||||||
|
|
||||||
- ``/etc/proxmox-backup/proxy.pem``
|
|
||||||
|
|
||||||
- ``/etc/proxmox-backup/proxy.key``
|
|
||||||
|
|
||||||
You have the following options for the certificate:
|
|
||||||
|
|
||||||
1. Keep using the default self-signed certificate in
|
|
||||||
``/etc/proxmox-backup/proxy.pem``.
|
|
||||||
|
|
||||||
2. Use an externally provided certificate (for example, signed by a
|
|
||||||
commercial Certificate Authority (CA)).
|
|
||||||
|
|
||||||
3. Use an ACME provider like Let’s Encrypt to get a trusted certificate
|
|
||||||
with automatic renewal; this is also integrated in the `Proxmox Backup`_
|
|
||||||
API and web interface.
|
|
||||||
|
|
||||||
Certificates are managed through the `Proxmox Backup`_
|
|
||||||
web-interface/API or using the the ``proxmox-backup-manager`` CLI tool.
|
|
||||||
|
|
||||||
.. _sysadmin_certs_upload_custom:
|
|
||||||
|
|
||||||
Upload Custom Certificate
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If you already have a certificate which you want to use for a Proxmox
|
|
||||||
Mail Gateway host, you can simply upload that certificate over the web
|
|
||||||
interface.
|
|
||||||
|
|
||||||
|
|
||||||
.. image:: images/screenshots/pbs-gui-certs-upload-custom.png
|
|
||||||
:align: right
|
|
||||||
:alt: Upload a custom certificate
|
|
||||||
|
|
||||||
Note that any certificate key files must not be password protected.
|
|
||||||
|
|
||||||
.. _sysadmin_certs_get_trusted_acme_cert:
|
|
||||||
|
|
||||||
Trusted certificates via Let’s Encrypt (ACME)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
`Proxmox Backup`_ includes an implementation of the **A**\ utomatic
|
|
||||||
**C**\ ertificate **M**\ anagement **E**\ nvironment (**ACME**)
|
|
||||||
protocol, allowing `Proxmox Backup`_ admins to use an ACME provider
|
|
||||||
like Let’s Encrypt for easy setup of TLS certificates, which are
|
|
||||||
accepted and trusted by modern operating systems and web browsers out of
|
|
||||||
the box.
|
|
||||||
|
|
||||||
Currently, the two ACME endpoints implemented are the `Let’s Encrypt
|
|
||||||
(LE) <https://letsencrypt.org>`_ production and staging environments.
|
|
||||||
Our ACME client supports validation of ``http-01`` challenges using a
|
|
||||||
built-in web server and validation of ``dns-01`` challenges using a DNS
|
|
||||||
plugin supporting all the DNS API endpoints
|
|
||||||
`acme.sh <https://acme.sh>`_ does.
|
|
||||||
|
|
||||||
.. _sysadmin_certs_acme_account:
|
|
||||||
|
|
||||||
ACME Account
|
|
||||||
^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. image:: images/screenshots/pbs-gui-acme-create-account.png
|
|
||||||
:align: right
|
|
||||||
:alt: Create ACME Account
|
|
||||||
|
|
||||||
You need to register an ACME account per cluster, with the endpoint you
|
|
||||||
want to use. The email address used for that account will serve as the
|
|
||||||
contact point for renewal-due or similar notifications from the ACME
|
|
||||||
endpoint.
|
|
||||||
|
|
||||||
You can register or deactivate ACME accounts over the web interface
|
|
||||||
``Certificates -> ACME Accounts`` or using the ``proxmox-backup-manager`` command
|
|
||||||
line tool.
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
proxmox-backup-manager acme account register <account-name> <mail@example.com>
|
|
||||||
|
|
||||||
.. tip::
|
|
||||||
|
|
||||||
Because of
|
|
||||||
`rate-limits <https://letsencrypt.org/docs/rate-limits/>`_ you
|
|
||||||
should use LE ``staging`` for experiments or if you use ACME for the
|
|
||||||
very first time until all is working there, and only then switch over
|
|
||||||
to the production directory.
|
|
||||||
|
|
||||||
.. _sysadmin_certs_acme_plugins:
|
|
||||||
|
|
||||||
ACME Plugins
|
|
||||||
^^^^^^^^^^^^
|
|
||||||
|
|
||||||
The ACME plugin’s role is to provide automatic verification that you,
|
|
||||||
and thus the `Proxmox Backup`_ server under your operation, are the
|
|
||||||
real owner of a domain. This is the basic building block of automatic
|
|
||||||
certificate management.
|
|
||||||
|
|
||||||
The ACME protocol specifies different types of challenges, for example
|
|
||||||
the ``http-01``, where a web server provides a file with a specific
|
|
||||||
token to prove that it controls a domain. Sometimes this isn’t possible,
|
|
||||||
either because of technical limitations or if the address of a record is
|
|
||||||
not reachable from the public internet. The ``dns-01`` challenge can be
|
|
||||||
used in such cases. This challenge is fulfilled by creating a certain
|
|
||||||
DNS record in the domain’s zone.
|
|
||||||
|
|
||||||
.. image:: images/screenshots/pbs-gui-acme-create-challenge-plugin.png
|
|
||||||
:align: right
|
|
||||||
:alt: Create ACME Account
|
|
||||||
|
|
||||||
`Proxmox Backup`_ supports both of those challenge types out of the
|
|
||||||
box, you can configure plugins either over the web interface under
|
|
||||||
``Certificates -> ACME Challenges``, or using the
|
|
||||||
``proxmox-backup-manager acme plugin add`` command.
|
|
||||||
|
|
||||||
ACME Plugin configurations are stored in ``/etc/proxmox-backup/acme/plugins.cfg``.
|
|
||||||
|
|
||||||
.. _domains:
|
|
||||||
|
|
||||||
Domains
|
|
||||||
^^^^^^^
|
|
||||||
|
|
||||||
You can add new or manage existing domain entries under
|
|
||||||
``Certificates``, or using the ``proxmox-backup-manager`` command.
|
|
||||||
|
|
||||||
.. image:: images/screenshots/pbs-gui-acme-add-domain.png
|
|
||||||
:align: right
|
|
||||||
:alt: Add a Domain for ACME verification
|
|
||||||
|
|
||||||
After configuring the desired domain(s) for a node and ensuring that the
|
|
||||||
desired ACME account is selected, you can order your new certificate
|
|
||||||
over the web-interface. On success, the interface will reload after
|
|
||||||
roughly 10 seconds.
|
|
||||||
|
|
||||||
Renewal will happen `automatically <#sysadmin-certs-acme-automatic-renewal>`_
|
|
||||||
|
|
||||||
.. _sysadmin_certs_acme_http_challenge:
|
|
||||||
|
|
||||||
ACME HTTP Challenge Plugin
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
There is always an implicitly configured ``standalone`` plugin for
|
|
||||||
validating ``http-01`` challenges via the built-in web server spawned on
|
|
||||||
port 80.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
The name ``standalone`` means that it can provide the validation on
|
|
||||||
its own, without any third party service.
|
|
||||||
|
|
||||||
There are a few prerequisites to use this for certificate management
|
|
||||||
with Let’s Encrypts ACME.
|
|
||||||
|
|
||||||
- You have to accept the ToS of Let’s Encrypt to register an account.
|
|
||||||
|
|
||||||
- **Port 80** of the node needs to be reachable from the internet.
|
|
||||||
|
|
||||||
- There **must** be no other listener on port 80.
|
|
||||||
|
|
||||||
- The requested (sub)domain needs to resolve to a public IP of the
|
|
||||||
`Proxmox Backup`_ host.
|
|
||||||
|
|
||||||
.. _sysadmin_certs_acme_dns_challenge:
|
|
||||||
|
|
||||||
ACME DNS API Challenge Plugin
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
On systems where external access for validation via the ``http-01``
|
|
||||||
method is not possible or desired, it is possible to use the ``dns-01``
|
|
||||||
validation method. This validation method requires a DNS server that
|
|
||||||
allows provisioning of ``TXT`` records via an API.
|
|
||||||
|
|
||||||
.. _sysadmin_certs_acme_dns_api_config:
|
|
||||||
|
|
||||||
Configuring ACME DNS APIs for validation
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
`Proxmox Backup`_ re-uses the DNS plugins developed for the
|
|
||||||
``acme.sh`` [1]_ project. Please refer to its documentation for details
|
|
||||||
on configuration of specific APIs.
|
|
||||||
|
|
||||||
The easiest way to configure a new plugin with the DNS API is using the
|
|
||||||
web interface (``Certificates -> ACME Accounts/Challenges``).
|
|
||||||
|
|
||||||
Here you can add a new challenge plugin by selecting your API provider
|
|
||||||
and entering the credential data to access your account over their API.
|
|
||||||
|
|
||||||
.. tip::
|
|
||||||
|
|
||||||
See the acme.sh `How to use DNS
|
|
||||||
API <https://github.com/acmesh-official/acme.sh/wiki/dnsapi#how-to-use-dns-api>`_
|
|
||||||
wiki for more detailed information about getting API credentials for
|
|
||||||
your provider. Configuration values do not need to be quoted with
|
|
||||||
single or double quotes; for some plugins that is even an error.
|
|
||||||
|
|
||||||
As there are many DNS providers and API endpoints, `Proxmox Backup`_
|
|
||||||
automatically generates the form for the credentials, but not all
|
|
||||||
providers are annotated yet. For those you will see a bigger text area,
|
|
||||||
into which you simply need to copy all the credential’s
|
|
||||||
``KEY``\ =\ ``VALUE`` pairs.
|
|
||||||
|
|
||||||
.. _dns_validation_through_cname_alias:
|
|
||||||
|
|
||||||
DNS Validation through CNAME Alias
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
A special ``alias`` mode can be used to handle validation on a different
|
|
||||||
domain/DNS server, in case your primary/real DNS does not support
|
|
||||||
provisioning via an API. Manually set up a permanent ``CNAME`` record
|
|
||||||
for ``_acme-challenge.domain1.example`` pointing to
|
|
||||||
``_acme-challenge.domain2.example``, and set the ``alias`` property in
|
|
||||||
the `Proxmox Backup`_ node configuration file ``/etc/proxmox-backup/node.cfg``
|
|
||||||
to ``domain2.example`` to allow the DNS server of ``domain2.example`` to
|
|
||||||
validate all challenges for ``domain1.example``.
|
|
||||||
|
|
||||||
.. _sysadmin_certs_acme_dns_wildcard:
|
|
||||||
|
|
||||||
Wildcard Certificates
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Wildcard DNS names start with a ``*.`` prefix and are considered valid
|
|
||||||
for all (one-level) subdomain names of the verified domain. So a
|
|
||||||
certificate for ``*.domain.example`` is valid for ``foo.domain.example``
|
|
||||||
and ``bar.domain.example``, but not for ``baz.foo.domain.example``.
|
|
||||||
|
|
||||||
Currently, you can only create wildcard certificates with the `DNS
|
|
||||||
challenge
|
|
||||||
type <https://letsencrypt.org/docs/challenge-types/#dns-01-challenge>`_.
|
|
||||||
|
|
||||||
.. _combination_of_plugins:
|
|
||||||
|
|
||||||
Combination of Plugins
|
|
||||||
^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Combining ``http-01`` and ``dns-01`` validation is possible in case your
|
|
||||||
node is reachable via multiple domains with different requirements / DNS
|
|
||||||
provisioning capabilities. Mixing DNS APIs from multiple providers or
|
|
||||||
instances is also possible by specifying different plugin instances per
|
|
||||||
domain.
|
|
||||||
|
|
||||||
.. tip::
|
|
||||||
|
|
||||||
Accessing the same service over multiple domains increases complexity
|
|
||||||
and should be avoided if possible.
|
|
||||||
|
|
||||||
.. _sysadmin_certs_acme_automatic_renewal:
|
|
||||||
|
|
||||||
Automatic renewal of ACME certificates
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If a node has been successfully configured with an ACME-provided
|
|
||||||
certificate (either via ``proxmox-backup-manager`` or via the web-interface/API), the
|
|
||||||
certificate will be renewed automatically by the ``proxmox-backup-daily-update.service``.
|
|
||||||
Currently, renewal is triggered if the certificate either has already
|
|
||||||
expired or if it will expire in the next 30 days.
|
|
||||||
|
|
||||||
.. _manually_change_certificate_over_command_line:
|
|
||||||
|
|
||||||
Manually Change Certificate over Command-Line
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If you want to get rid of certificate verification warnings, you have to
|
|
||||||
generate a valid certificate for your server.
|
|
||||||
|
|
||||||
Log in to your `Proxmox Backup`_ via ssh or use the console:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
openssl req -newkey rsa:2048 -nodes -keyout key.pem -out req.pem
|
|
||||||
|
|
||||||
Follow the instructions on the screen, for example:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
Country Name (2 letter code) [AU]: AT
|
|
||||||
State or Province Name (full name) [Some-State]:Vienna
|
|
||||||
Locality Name (eg, city) []:Vienna
|
|
||||||
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Proxmox GmbH
|
|
||||||
Organizational Unit Name (eg, section) []:Proxmox Backup
|
|
||||||
Common Name (eg, YOUR name) []: yourproxmox.yourdomain.com
|
|
||||||
Email Address []:support@yourdomain.com
|
|
||||||
|
|
||||||
Please enter the following 'extra' attributes to be sent with your certificate request
|
|
||||||
A challenge password []: not necessary
|
|
||||||
An optional company name []: not necessary
|
|
||||||
|
|
||||||
After you have finished the certificate request, you have to send the
|
|
||||||
file ``req.pem`` to your Certification Authority (CA). The CA will issue
|
|
||||||
the certificate (BASE64 encoded), based on your request – save this file
|
|
||||||
as ``cert.pem`` to your `Proxmox Backup`_.
|
|
||||||
|
|
||||||
To activate the new certificate, do the following on your `Proxmox Backup`_
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
cp key.pem /etc/proxmox-backup/proxy.key
|
|
||||||
cp cert.pem /etc/proxmox-backup/proxy.pem
|
|
||||||
|
|
||||||
Then restart the API servers:
|
|
||||||
|
|
||||||
::
|
|
||||||
|
|
||||||
systemctl restart proxmox-backup-proxy
|
|
||||||
|
|
||||||
Test your new certificate, using your browser.
|
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
To transfer files to and from your `Proxmox Backup`_, you can use
|
|
||||||
secure copy: If your desktop runs Linux, you can use the ``scp``
|
|
||||||
command line tool. If your desktop PC runs windows, please use an scp
|
|
||||||
client like WinSCP (see https://winscp.net/).
|
|
||||||
|
|
||||||
.. [1]
|
|
||||||
acme.sh https://github.com/acmesh-official/acme.sh
|
|
@ -11,32 +11,8 @@ Command Line Tools
|
|||||||
|
|
||||||
.. include:: proxmox-backup-manager/description.rst
|
.. include:: proxmox-backup-manager/description.rst
|
||||||
|
|
||||||
``proxmox-tape``
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. include:: proxmox-tape/description.rst
|
|
||||||
|
|
||||||
``pmt``
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
.. include:: pmt/description.rst
|
|
||||||
|
|
||||||
``pmtx``
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
.. include:: pmtx/description.rst
|
|
||||||
|
|
||||||
``pxar``
|
``pxar``
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
.. include:: pxar/description.rst
|
.. include:: pxar/description.rst
|
||||||
|
|
||||||
``proxmox-file-restore``
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. include:: proxmox-file-restore/description.rst
|
|
||||||
|
|
||||||
``proxmox-backup-debug``
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. include:: proxmox-backup-debug/description.rst
|
|
||||||
|
@ -10,7 +10,7 @@ Command Syntax
|
|||||||
Catalog Shell Commands
|
Catalog Shell Commands
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
The following commands are available in an interactive restore shell:
|
Those command are available when you start an interactive restore shell:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -26,38 +26,7 @@ The following commands are available in an interactive restore shell:
|
|||||||
.. include:: proxmox-backup-manager/synopsis.rst
|
.. include:: proxmox-backup-manager/synopsis.rst
|
||||||
|
|
||||||
|
|
||||||
``proxmox-tape``
|
|
||||||
----------------
|
|
||||||
|
|
||||||
.. include:: proxmox-tape/synopsis.rst
|
|
||||||
|
|
||||||
``pmt``
|
|
||||||
-------
|
|
||||||
|
|
||||||
.. include:: pmt/options.rst
|
|
||||||
|
|
||||||
....
|
|
||||||
|
|
||||||
.. include:: pmt/synopsis.rst
|
|
||||||
|
|
||||||
|
|
||||||
``pmtx``
|
|
||||||
--------
|
|
||||||
|
|
||||||
.. include:: pmtx/synopsis.rst
|
|
||||||
|
|
||||||
|
|
||||||
``pxar``
|
``pxar``
|
||||||
--------
|
--------
|
||||||
|
|
||||||
.. include:: pxar/synopsis.rst
|
.. include:: pxar/synopsis.rst
|
||||||
|
|
||||||
|
|
||||||
``proxmox-file-restore``
|
|
||||||
------------------------
|
|
||||||
.. include:: proxmox-file-restore/synopsis.rst
|
|
||||||
|
|
||||||
|
|
||||||
``proxmox-backup-debug``
|
|
||||||
------------------------
|
|
||||||
.. include:: proxmox-backup-debug/synopsis.rst
|
|
||||||
|
15
docs/conf.py
@ -49,7 +49,7 @@ PygmentsBridge.latex_formatter = CustomLatexFormatter
|
|||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
# ones.
|
# ones.
|
||||||
|
|
||||||
extensions = ["sphinx.ext.graphviz", 'sphinx.ext.mathjax', "sphinx.ext.todo", "proxmox-scanrefs"]
|
extensions = ["sphinx.ext.graphviz", "sphinx.ext.todo", "proxmox-scanrefs"]
|
||||||
|
|
||||||
todo_link_only = True
|
todo_link_only = True
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ project = 'Proxmox Backup'
|
|||||||
copyright = '2019-2021, Proxmox Server Solutions GmbH'
|
copyright = '2019-2021, Proxmox Server Solutions GmbH'
|
||||||
author = 'Proxmox Support Team'
|
author = 'Proxmox Support Team'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as a replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
# built documents.
|
# built documents.
|
||||||
#
|
#
|
||||||
@ -108,14 +108,11 @@ today_fmt = '%A, %d %B %Y'
|
|||||||
exclude_patterns = [
|
exclude_patterns = [
|
||||||
'_build', 'Thumbs.db', '.DS_Store',
|
'_build', 'Thumbs.db', '.DS_Store',
|
||||||
'*/man1.rst',
|
'*/man1.rst',
|
||||||
'certificate-management.rst',
|
|
||||||
'config/*/man5.rst',
|
'config/*/man5.rst',
|
||||||
'epilog.rst',
|
'epilog.rst',
|
||||||
'pbs-copyright.rst',
|
'pbs-copyright.rst',
|
||||||
'local-zfs.rst',
|
'local-zfs.rst'
|
||||||
'package-repositories.rst',
|
'package-repositories.rst',
|
||||||
'system-booting.rst',
|
|
||||||
'traffic-control.rst',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all
|
# The reST default role (used for this markup: `text`) to use for all
|
||||||
@ -310,9 +307,6 @@ html_show_sourcelink = False
|
|||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'ProxmoxBackupdoc'
|
htmlhelp_basename = 'ProxmoxBackupdoc'
|
||||||
|
|
||||||
# use local mathjax package, symlink comes from debian/proxmox-backup-docs.links
|
|
||||||
mathjax_path = "mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
latex_engine = 'xelatex'
|
latex_engine = 'xelatex'
|
||||||
@ -470,3 +464,6 @@ epub_exclude_files = ['search.html']
|
|||||||
# If false, no index is generated.
|
# If false, no index is generated.
|
||||||
#
|
#
|
||||||
# epub_use_index = True
|
# epub_use_index = True
|
||||||
|
|
||||||
|
# use local mathjax package, symlink comes from debian/proxmox-backup-docs.links
|
||||||
|
mathjax_path = "mathjax/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
|
||||||
|
@ -2,13 +2,13 @@ This file contains the access control list for the Proxmox Backup
|
|||||||
Server API.
|
Server API.
|
||||||
|
|
||||||
Each line starts with ``acl:``, followed by 4 additional values
|
Each line starts with ``acl:``, followed by 4 additional values
|
||||||
separated by colon.
|
separated by collon.
|
||||||
|
|
||||||
:propagate: Propagate permissions down the hierarchy
|
:propagate: Propagate permissions down the hierachrchy
|
||||||
|
|
||||||
:path: The object path
|
:path: The object path
|
||||||
|
|
||||||
:User/Token: List of users and tokens
|
:User/Token: List of users and token
|
||||||
|
|
||||||
:Role: List of assigned roles
|
:Role: List of assigned roles
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
This file contains a list of datastore configuration sections. Each
|
The file contains a list of datastore configuration sections. Each
|
||||||
section starts with the header ``datastore: <name>``, followed by the
|
section starts with a header ``datastore: <name>``, followed by the
|
||||||
datastore configuration options.
|
datastore configuration options.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Each entry starts with the header ``pool: <name>``, followed by the
|
Each entry starts with a header ``pool: <name>``, followed by the
|
||||||
media pool configuration options.
|
media pool configuration options.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
This file contains information used to access remote servers.
|
This file contains information used to access remote servers.
|
||||||
|
|
||||||
Each entry starts with the header ``remote: <name>``, followed by the
|
Each entry starts with a header ``remote: <name>``, followed by the
|
||||||
remote configuration options.
|
remote configuration options.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Each entry starts with the header ``sync: <name>``, followed by the
|
Each entry starts with a header ``sync: <name>``, followed by the
|
||||||
job configuration options.
|
job configuration options.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Each entry starts with the header ``backup: <name>``, followed by the
|
Each entry starts with a header ``backup: <name>``, followed by the
|
||||||
job configuration options.
|
job configuration options.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
Each LTO drive configuration section starts with the header ``lto: <name>``,
|
Each drive configuration section starts with a header ``linux: <name>``,
|
||||||
followed by the drive configuration options.
|
followed by the drive configuration options.
|
||||||
|
|
||||||
Tape changer configurations start with the header ``changer: <name>``,
|
Tape changer configurations starts with ``changer: <name>``,
|
||||||
followed by the changer configuration options.
|
followed by the changer configuration options.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
lto: hh8
|
linux: hh8
|
||||||
changer sl3
|
changer sl3
|
||||||
path /dev/tape/by-id/scsi-10WT065325-nst
|
path /dev/tape/by-id/scsi-10WT065325-nst
|
||||||
|
|
||||||
@ -18,5 +18,5 @@ followed by the changer configuration options.
|
|||||||
You can use the ``proxmox-tape drive`` and ``proxmox-tape changer``
|
You can use the ``proxmox-tape drive`` and ``proxmox-tape changer``
|
||||||
commands to manipulate this file.
|
commands to manipulate this file.
|
||||||
|
|
||||||
.. NOTE:: The ``virtual:`` drive type is experimental and should only be used
|
.. NOTE:: The ``virtual:`` drive type is experimental and onyl used
|
||||||
for debugging.
|
for debugging.
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
This file contains the list of API users and API tokens.
|
This file contains the list of API users and API tokens.
|
||||||
|
|
||||||
Each user configuration section starts with the header ``user: <name>``,
|
Each user configuration section starts with a header ``user: <name>``,
|
||||||
followed by the user configuration options.
|
followed by the user configuration options.
|
||||||
|
|
||||||
API token configuration starts with the header ``token:
|
API token configuration starts with a header ``token:
|
||||||
<userid!token_name>``, followed by the token configuration. The data
|
<userid!token_name>``, followed by the token configuration. The data
|
||||||
used to authenticate tokens is stored in a separate file
|
used to authenticate tokens is stored in a separate file
|
||||||
(``token.shadow``).
|
(``token.shadow``).
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
Each entry starts with the header ``verification: <name>``, followed by the
|
Each entry starts with a header ``verification: <name>``, followed by the
|
||||||
job configuration options.
|
job configuration options.
|
||||||
|
|
||||||
::
|
::
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Configuration Files
|
Configuration Files
|
||||||
===================
|
===================
|
||||||
|
|
||||||
All Proxmox Backup Server configuration files reside in the directory
|
All Proxmox Backup Server configuration files resides inside directory
|
||||||
``/etc/proxmox-backup/``.
|
``/etc/proxmox-backup/``.
|
||||||
|
|
||||||
|
|
||||||
@ -37,53 +37,8 @@ Options
|
|||||||
.. include:: config/datastore/config.rst
|
.. include:: config/datastore/config.rst
|
||||||
|
|
||||||
|
|
||||||
``media-pool.cfg``
|
|
||||||
~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
File Format
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. include:: config/media-pool/format.rst
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
^^^^^^^
|
|
||||||
|
|
||||||
.. include:: config/media-pool/config.rst
|
|
||||||
|
|
||||||
|
|
||||||
``tape.cfg``
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
File Format
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. include:: config/tape/format.rst
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
^^^^^^^
|
|
||||||
|
|
||||||
.. include:: config/tape/config.rst
|
|
||||||
|
|
||||||
|
|
||||||
``tape-job.cfg``
|
|
||||||
~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
File Format
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. include:: config/tape-job/format.rst
|
|
||||||
|
|
||||||
|
|
||||||
Options
|
|
||||||
^^^^^^^
|
|
||||||
|
|
||||||
.. include:: config/tape-job/config.rst
|
|
||||||
|
|
||||||
|
|
||||||
``user.cfg``
|
``user.cfg``
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
File Format
|
File Format
|
||||||
^^^^^^^^^^^
|
^^^^^^^^^^^
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
.. _Proxmox: https://www.proxmox.com
|
.. _Proxmox: https://www.proxmox.com
|
||||||
.. _Proxmox Community Forum: https://forum.proxmox.com
|
.. _Proxmox Community Forum: https://forum.proxmox.com
|
||||||
.. _Proxmox Virtual Environment: https://www.proxmox.com/proxmox-ve
|
.. _Proxmox Virtual Environment: https://www.proxmox.com/proxmox-ve
|
||||||
|
.. FIXME
|
||||||
.. _Proxmox Backup: https://pbs.proxmox.com/wiki/index.php/Main_Page
|
.. _Proxmox Backup: https://pbs.proxmox.com/wiki/index.php/Main_Page
|
||||||
.. _PBS Development List: https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
|
.. _PBS Development List: https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
|
||||||
.. _reStructuredText: https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html
|
.. _reStructuredText: https://www.sphinx-doc.org/en/master/usage/restructuredtext/index.html
|
||||||
@ -22,7 +23,6 @@
|
|||||||
.. _Virtual machine: https://en.wikipedia.org/wiki/Virtual_machine
|
.. _Virtual machine: https://en.wikipedia.org/wiki/Virtual_machine
|
||||||
.. _APT: http://en.wikipedia.org/wiki/Advanced_Packaging_Tool
|
.. _APT: http://en.wikipedia.org/wiki/Advanced_Packaging_Tool
|
||||||
.. _QEMU: https://www.qemu.org/
|
.. _QEMU: https://www.qemu.org/
|
||||||
.. _LXC: https://linuxcontainers.org/lxc/introduction/
|
|
||||||
|
|
||||||
.. _Client-server model: https://en.wikipedia.org/wiki/Client-server_model
|
.. _Client-server model: https://en.wikipedia.org/wiki/Client-server_model
|
||||||
.. _AE: https://en.wikipedia.org/wiki/Authenticated_encryption
|
.. _AE: https://en.wikipedia.org/wiki/Authenticated_encryption
|
||||||
@ -35,7 +35,7 @@
|
|||||||
.. _ZFS: https://en.wikipedia.org/wiki/ZFS
|
.. _ZFS: https://en.wikipedia.org/wiki/ZFS
|
||||||
.. _Proxmox VE: https://pve.proxmox.com
|
.. _Proxmox VE: https://pve.proxmox.com
|
||||||
|
|
||||||
.. _RFC3339: https://tools.ietf.org/html/rfc3339
|
.. _RFC3399: https://tools.ietf.org/html/rfc3339
|
||||||
.. _UTC: https://en.wikipedia.org/wiki/Coordinated_Universal_Time
|
.. _UTC: https://en.wikipedia.org/wiki/Coordinated_Universal_Time
|
||||||
.. _ISO Week date: https://en.wikipedia.org/wiki/ISO_week_date
|
.. _ISO Week date: https://en.wikipedia.org/wiki/ISO_week_date
|
||||||
|
|
||||||
|
20
docs/faq.rst
@ -24,13 +24,11 @@ future plans to support 32-bit processors.
|
|||||||
How long will my Proxmox Backup Server version be supported?
|
How long will my Proxmox Backup Server version be supported?
|
||||||
------------------------------------------------------------
|
------------------------------------------------------------
|
||||||
|
|
||||||
+-----------------------+----------------------+---------------+------------+--------------------+
|
+-----------------------+--------------------+---------------+------------+--------------------+
|
||||||
|Proxmox Backup Version | Debian Version | First Release | Debian EOL | Proxmox Backup EOL |
|
|Proxmox Backup Version | Debian Version | First Release | Debian EOL | Proxmox Backup EOL |
|
||||||
+=======================+======================+===============+============+====================+
|
+=======================+====================+===============+============+====================+
|
||||||
|Proxmox Backup 2.x | Debian 11 (Bullseye) | 2021-07 | tba | tba |
|
|Proxmox Backup 1.x | Debian 10 (Buster) | 2020-11 | tba | tba |
|
||||||
+-----------------------+----------------------+---------------+------------+--------------------+
|
+-----------------------+--------------------+---------------+------------+--------------------+
|
||||||
|Proxmox Backup 1.x | Debian 10 (Buster) | 2020-11 | 2022-08 | 2022-07 |
|
|
||||||
+-----------------------+----------------------+---------------+------------+--------------------+
|
|
||||||
|
|
||||||
|
|
||||||
Can I copy or synchronize my datastore to another location?
|
Can I copy or synchronize my datastore to another location?
|
||||||
@ -63,12 +61,14 @@ attacker gains access to the server or any point of the network, they will not
|
|||||||
be able to read the data.
|
be able to read the data.
|
||||||
|
|
||||||
.. note:: Encryption is not enabled by default. To set up encryption, see the
|
.. note:: Encryption is not enabled by default. To set up encryption, see the
|
||||||
:ref:`backup client encryption section <client_encryption>`.
|
`Encryption
|
||||||
|
<https://pbs.proxmox.com/docs/administration-guide.html#encryption>`_ section
|
||||||
|
of the Proxmox Backup Server Administration Guide.
|
||||||
|
|
||||||
|
|
||||||
Is the backup incremental/deduplicated?
|
Is the backup incremental/deduplicated?
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
With Proxmox Backup Server, backups are sent incrementally to the server, and
|
With Proxmox Backup Server, backups are sent incremental and data is
|
||||||
data is then deduplicated on the server. This minimizes both the storage
|
deduplicated on the server.
|
||||||
consumed and the impact on the network.
|
This minimizes both the storage consumed and the network impact.
|
||||||
|
@ -14,8 +14,7 @@ Proxmox File Archive Format (``.pxar``)
|
|||||||
Data Blob Format (``.blob``)
|
Data Blob Format (``.blob``)
|
||||||
----------------------------
|
----------------------------
|
||||||
|
|
||||||
The data blob format is used to store small binary data. The magic number
|
The data blob format is used to store small binary data. The magic number decides the exact format:
|
||||||
decides the exact format:
|
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
:widths: auto
|
:widths: auto
|
||||||
@ -33,8 +32,7 @@ decides the exact format:
|
|||||||
- encrypted
|
- encrypted
|
||||||
- compressed
|
- compressed
|
||||||
|
|
||||||
The compression algorithm used is ``zstd``. The encryption cipher is
|
Compression algorithm is ``zstd``. Encryption cipher is ``AES_256_GCM``.
|
||||||
``AES_256_GCM``.
|
|
||||||
|
|
||||||
Unencrypted blobs use the following format:
|
Unencrypted blobs use the following format:
|
||||||
|
|
||||||
@ -45,15 +43,15 @@ Unencrypted blobs use the following format:
|
|||||||
* - ``CRC32: [u8; 4]``
|
* - ``CRC32: [u8; 4]``
|
||||||
* - ``Data: (max 16MiB)``
|
* - ``Data: (max 16MiB)``
|
||||||
|
|
||||||
Encrypted blobs additionally contain a 16 byte initialization vector (IV),
|
Encrypted blobs additionally contains a 16 byte IV, followed by a 16
|
||||||
followed by a 16 byte authenticated encryption (AE) tag, followed by the
|
byte Authenticated Encyryption (AE) tag, followed by the encrypted
|
||||||
encrypted data:
|
data:
|
||||||
|
|
||||||
.. list-table::
|
.. list-table::
|
||||||
|
|
||||||
* - ``MAGIC: [u8; 8]``
|
* - ``MAGIC: [u8; 8]``
|
||||||
* - ``CRC32: [u8; 4]``
|
* - ``CRC32: [u8; 4]``
|
||||||
* - ``IV: [u8; 16]``
|
* - ``ÌV: [u8; 16]``
|
||||||
* - ``TAG: [u8; 16]``
|
* - ``TAG: [u8; 16]``
|
||||||
* - ``Data: (max 16MiB)``
|
* - ``Data: (max 16MiB)``
|
||||||
|
|
||||||
@ -74,19 +72,19 @@ All numbers are stored as little-endian.
|
|||||||
* - ``ctime: i64``,
|
* - ``ctime: i64``,
|
||||||
- Creation Time (epoch)
|
- Creation Time (epoch)
|
||||||
* - ``index_csum: [u8; 32]``,
|
* - ``index_csum: [u8; 32]``,
|
||||||
- SHA-256 over the index (without header) ``SHA256(digest1||digest2||...)``
|
- Sha256 over the index (without header) ``SHA256(digest1||digest2||...)``
|
||||||
* - ``size: u64``,
|
* - ``size: u64``,
|
||||||
- Image size
|
- Image size
|
||||||
* - ``chunk_size: u64``,
|
* - ``chunk_size: u64``,
|
||||||
- Chunk size
|
- Chunk size
|
||||||
* - ``reserved: [u8; 4016]``,
|
* - ``reserved: [u8; 4016]``,
|
||||||
- Overall header size is one page (4096 bytes)
|
- overall header size is one page (4096 bytes)
|
||||||
* - ``digest1: [u8; 32]``
|
* - ``digest1: [u8; 32]``
|
||||||
- First chunk digest
|
- first chunk digest
|
||||||
* - ``digest2: [u8; 32]``
|
* - ``digest2: [u8; 32]``
|
||||||
- Second chunk digest
|
- next chunk
|
||||||
* - ...
|
* - ...
|
||||||
- Next chunk digest ...
|
- next chunk ...
|
||||||
|
|
||||||
|
|
||||||
.. _dynamic-index-format:
|
.. _dynamic-index-format:
|
||||||
@ -105,16 +103,16 @@ All numbers are stored as little-endian.
|
|||||||
* - ``ctime: i64``,
|
* - ``ctime: i64``,
|
||||||
- Creation Time (epoch)
|
- Creation Time (epoch)
|
||||||
* - ``index_csum: [u8; 32]``,
|
* - ``index_csum: [u8; 32]``,
|
||||||
- SHA-256 over the index (without header) ``SHA256(offset1||digest1||offset2||digest2||...)``
|
- Sha256 over the index (without header) ``SHA256(offset1||digest1||offset2||digest2||...)``
|
||||||
* - ``reserved: [u8; 4032]``,
|
* - ``reserved: [u8; 4032]``,
|
||||||
- Overall header size is one page (4096 bytes)
|
- Overall header size is one page (4096 bytes)
|
||||||
* - ``offset1: u64``
|
* - ``offset1: u64``
|
||||||
- End of first chunk
|
- End of first chunk
|
||||||
* - ``digest1: [u8; 32]``
|
* - ``digest1: [u8; 32]``
|
||||||
- First chunk digest
|
- first chunk digest
|
||||||
* - ``offset2: u64``
|
* - ``offset2: u64``
|
||||||
- End of second chunk
|
- End of second chunk
|
||||||
* - ``digest2: [u8; 32]``
|
* - ``digest2: [u8; 32]``
|
||||||
- Second chunk digest
|
- second chunk digest
|
||||||
* - ...
|
* - ...
|
||||||
- Next chunk offset/digest
|
- next chunk offset/digest
|
||||||
|
@ -11,7 +11,7 @@ Glossary
|
|||||||
`Container`_
|
`Container`_
|
||||||
|
|
||||||
A container is an isolated user space. Programs run directly on
|
A container is an isolated user space. Programs run directly on
|
||||||
the host's kernel, but with limited access to the host's resources.
|
the host's kernel, but with limited access to the host resources.
|
||||||
|
|
||||||
Datastore
|
Datastore
|
||||||
|
|
||||||
@ -23,19 +23,19 @@ Glossary
|
|||||||
Rust is a new, fast and memory-efficient system programming
|
Rust is a new, fast and memory-efficient system programming
|
||||||
language. It has no runtime or garbage collector. Rust’s rich type
|
language. It has no runtime or garbage collector. Rust’s rich type
|
||||||
system and ownership model guarantee memory-safety and
|
system and ownership model guarantee memory-safety and
|
||||||
thread-safety. This can eliminate many classes of bugs
|
thread-safety. I can eliminate many classes of bugs
|
||||||
at compile-time.
|
at compile-time.
|
||||||
|
|
||||||
`Sphinx`_
|
`Sphinx`_
|
||||||
|
|
||||||
Is a tool that makes it easy to create intelligent and nicely formatted
|
Is a tool that makes it easy to create intelligent and
|
||||||
documentation. It was originally created for the documentation of the
|
beautiful documentation. It was originally created for the
|
||||||
Python programming language. It has excellent facilities for the
|
documentation of the Python programming language. It has excellent facilities for the
|
||||||
documentation of software projects in a range of languages.
|
documentation of software projects in a range of languages.
|
||||||
|
|
||||||
`reStructuredText`_
|
`reStructuredText`_
|
||||||
|
|
||||||
Is an easy-to-read, what-you-see-is-what-you-get, plaintext
|
Is an easy-to-read, what-you-see-is-what-you-get plaintext
|
||||||
markup syntax and parser system.
|
markup syntax and parser system.
|
||||||
|
|
||||||
`FUSE`
|
`FUSE`
|
||||||
|
56
docs/gui.rst
@ -8,9 +8,8 @@ tools. The web interface also provides a built-in console, so if you prefer the
|
|||||||
command line or need some extra control, you have this option.
|
command line or need some extra control, you have this option.
|
||||||
|
|
||||||
The web interface can be accessed via https://youripaddress:8007. The default
|
The web interface can be accessed via https://youripaddress:8007. The default
|
||||||
login is `root`, and the password is either the one specified during the
|
login is `root`, and the password is the one specified during the installation
|
||||||
installation process or the password of the root user, in case of installation
|
process.
|
||||||
on top of Debian.
|
|
||||||
|
|
||||||
|
|
||||||
Features
|
Features
|
||||||
@ -49,13 +48,12 @@ GUI Overview
|
|||||||
|
|
||||||
The Proxmox Backup Server web interface consists of 3 main sections:
|
The Proxmox Backup Server web interface consists of 3 main sections:
|
||||||
|
|
||||||
* **Header**: At the top. This shows version information and contains buttons to
|
* **Header**: At the top. This shows version information, and contains buttons to view
|
||||||
view documentation, monitor running tasks, set the language, configure various
|
documentation, monitor running tasks, set the language and logout.
|
||||||
display settings, and logout.
|
* **Sidebar**: On the left. This contains the configuration options for
|
||||||
* **Sidebar**: On the left. This contains the administration options for
|
|
||||||
the server.
|
the server.
|
||||||
* **Configuration Panel**: In the center. This contains the respective control
|
* **Configuration Panel**: In the center. This contains the control interface for the
|
||||||
interfaces for the administration options in the *Sidebar*.
|
configuration options in the *Sidebar*.
|
||||||
|
|
||||||
|
|
||||||
Sidebar
|
Sidebar
|
||||||
@ -76,14 +74,12 @@ previous and currently running tasks, and subscription information.
|
|||||||
Configuration
|
Configuration
|
||||||
^^^^^^^^^^^^^
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
The Configuration section contains some system options, such as time, network,
|
The Configuration section contains some system configuration options, such as
|
||||||
WebAuthn, and HTTP proxy configuration. It also contains the following
|
time and network configuration. It also contains the following subsections:
|
||||||
subsections:
|
|
||||||
|
|
||||||
* **Access Control**: Add and manage users, API tokens, and the permissions
|
* **Access Control**: Add and manage users, API tokens, and the permissions
|
||||||
associated with these items
|
associated with these items
|
||||||
* **Remotes**: Add, edit and remove remotes (see :term:`Remote`)
|
* **Remotes**: Add, edit and remove remotes (see :term:`Remote`)
|
||||||
* **Certificates**: Manage ACME accounts and create SSL certificates.
|
|
||||||
* **Subscription**: Upload a subscription key, view subscription status and
|
* **Subscription**: Upload a subscription key, view subscription status and
|
||||||
access a text-based system report.
|
access a text-based system report.
|
||||||
|
|
||||||
@ -102,7 +98,6 @@ tasks and information. These are:
|
|||||||
resource usage statistics
|
resource usage statistics
|
||||||
* **Services**: Manage and monitor system services
|
* **Services**: Manage and monitor system services
|
||||||
* **Updates**: An interface for upgrading packages
|
* **Updates**: An interface for upgrading packages
|
||||||
* **Repositories**: An interface for configuring APT repositories
|
|
||||||
* **Syslog**: View log messages from the server
|
* **Syslog**: View log messages from the server
|
||||||
* **Tasks**: Task history with multiple filter options
|
* **Tasks**: Task history with multiple filter options
|
||||||
|
|
||||||
@ -117,27 +112,6 @@ The administration menu item also contains a disk management subsection:
|
|||||||
* **Directory**: Create and view information on *ext4* and *xfs* disks
|
* **Directory**: Create and view information on *ext4* and *xfs* disks
|
||||||
* **ZFS**: Create and view information on *ZFS* disks
|
* **ZFS**: Create and view information on *ZFS* disks
|
||||||
|
|
||||||
Tape Backup
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. image:: images/screenshots/pbs-gui-tape-changer-overview.png
|
|
||||||
:align: right
|
|
||||||
:alt: Tape Backup: Tape changer overview
|
|
||||||
|
|
||||||
The `Tape Backup`_ section contains a top panel, with options for managing tape
|
|
||||||
media sets, inventories, drives, changers, encryption keys, and the tape backup
|
|
||||||
jobs itself. The tabs are as follows:
|
|
||||||
|
|
||||||
* **Content**: Information on the contents of the tape backup
|
|
||||||
* **Inventory**: Manage the tapes attached to the system
|
|
||||||
* **Changers**: Manage tape loading devices
|
|
||||||
* **Drives**: Manage drives used for reading and writing to tapes
|
|
||||||
* **Media Pools**: Manage logical pools of tapes
|
|
||||||
* **Encryption Keys**: Manage tape backup encryption keys
|
|
||||||
* **Backup Jobs**: Manage tape backup jobs
|
|
||||||
|
|
||||||
The section also contains a subsection per standalone drive and per changer,
|
|
||||||
with a status and management view for those devices.
|
|
||||||
|
|
||||||
Datastore
|
Datastore
|
||||||
^^^^^^^^^
|
^^^^^^^^^
|
||||||
@ -147,9 +121,9 @@ Datastore
|
|||||||
:alt: Datastore Configuration
|
:alt: Datastore Configuration
|
||||||
|
|
||||||
The Datastore section contains interfaces for creating and managing
|
The Datastore section contains interfaces for creating and managing
|
||||||
datastores. It also contains a button for creating a new datastore on the
|
datastores. It contains a button to create a new datastore on the server, as
|
||||||
server, as well as a subsection for each datastore on the system, in which you
|
well as a subsection for each datastore on the system, in which you can use the
|
||||||
can use the top panel to view:
|
top panel to view:
|
||||||
|
|
||||||
* **Summary**: Access a range of datastore usage statistics
|
* **Summary**: Access a range of datastore usage statistics
|
||||||
* **Content**: Information on the datastore's backup groups and their respective
|
* **Content**: Information on the datastore's backup groups and their respective
|
||||||
@ -158,7 +132,5 @@ can use the top panel to view:
|
|||||||
collection <client_garbage-collection>` operations, and run garbage collection
|
collection <client_garbage-collection>` operations, and run garbage collection
|
||||||
manually
|
manually
|
||||||
* **Sync Jobs**: Create, manage and run :ref:`syncjobs` from remote servers
|
* **Sync Jobs**: Create, manage and run :ref:`syncjobs` from remote servers
|
||||||
* **Verify Jobs**: Create, manage and run :ref:`maintenance_verification` jobs
|
* **Verify Jobs**: Create, manage and run :ref:`maintenance_verification` jobs on the
|
||||||
on the datastore
|
datastore
|
||||||
* **Options**: Configure notification and verification settings
|
|
||||||
* **Permissions**: Manage permissions on the datastore
|
|
||||||
|
Before Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 149 KiB |
Before Width: | Height: | Size: 438 KiB |
Before Width: | Height: | Size: 197 KiB After Width: | Height: | Size: 140 KiB |
Before Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 367 KiB |
Before Width: | Height: | Size: 83 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 90 KiB |
BIN
docs/images/screenshots/pbs-gui-datastore-create-general.png
Normal file
After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 131 KiB After Width: | Height: | Size: 130 KiB |
Before Width: | Height: | Size: 139 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 174 KiB |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 75 KiB |
Before Width: | Height: | Size: 117 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 112 KiB |
Before Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 70 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 62 KiB |
@ -25,15 +25,14 @@ in the section entitled "GNU Free Documentation License".
|
|||||||
terminology.rst
|
terminology.rst
|
||||||
gui.rst
|
gui.rst
|
||||||
storage.rst
|
storage.rst
|
||||||
|
network-management.rst
|
||||||
user-management.rst
|
user-management.rst
|
||||||
|
managing-remotes.rst
|
||||||
|
maintenance.rst
|
||||||
backup-client.rst
|
backup-client.rst
|
||||||
pve-integration.rst
|
pve-integration.rst
|
||||||
pxar-tool.rst
|
pxar-tool.rst
|
||||||
tape-backup.rst
|
|
||||||
managing-remotes.rst
|
|
||||||
maintenance.rst
|
|
||||||
sysadmin.rst
|
sysadmin.rst
|
||||||
network-management.rst
|
|
||||||
technical-overview.rst
|
technical-overview.rst
|
||||||
faq.rst
|
faq.rst
|
||||||
|
|
||||||
@ -50,7 +49,6 @@ in the section entitled "GNU Free Documentation License".
|
|||||||
file-formats.rst
|
file-formats.rst
|
||||||
backup-protocol.rst
|
backup-protocol.rst
|
||||||
calendarevents.rst
|
calendarevents.rst
|
||||||
markdown-primer.rst
|
|
||||||
glossary.rst
|
glossary.rst
|
||||||
GFDL.rst
|
GFDL.rst
|
||||||
|
|
||||||
|
@ -19,24 +19,24 @@ for various management tasks such as disk management.
|
|||||||
`Proxmox Backup`_ without the server part.
|
`Proxmox Backup`_ without the server part.
|
||||||
|
|
||||||
The disk image (ISO file) provided by Proxmox includes a complete Debian system
|
The disk image (ISO file) provided by Proxmox includes a complete Debian system
|
||||||
as well as all necessary packages for the `Proxmox Backup`_ Server.
|
("buster" for version 1.x) as well as all necessary packages for the `Proxmox Backup`_ server.
|
||||||
|
|
||||||
The installer will guide you through the setup process and allow
|
The installer will guide you through the setup process and allow
|
||||||
you to partition the local disk(s), apply basic system configuration
|
you to partition the local disk(s), apply basic system configurations
|
||||||
(for example timezone, language, network), and install all required packages.
|
(e.g. timezone, language, network), and install all required packages.
|
||||||
The provided ISO will get you started in just a few minutes, and is the
|
The provided ISO will get you started in just a few minutes, and is the
|
||||||
recommended method for new and existing users.
|
recommended method for new and existing users.
|
||||||
|
|
||||||
Alternatively, `Proxmox Backup`_ Server can be installed on top of an
|
Alternatively, `Proxmox Backup`_ server can be installed on top of an
|
||||||
existing Debian system.
|
existing Debian system.
|
||||||
|
|
||||||
Install `Proxmox Backup`_ Server using the Installer
|
Install `Proxmox Backup`_ with the Installer
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Download the ISO from |DOWNLOADS|.
|
Download the ISO from |DOWNLOADS|.
|
||||||
It includes the following:
|
It includes the following:
|
||||||
|
|
||||||
* The `Proxmox Backup`_ Server installer, which partitions the local
|
* The `Proxmox Backup`_ server installer, which partitions the local
|
||||||
disk(s) with ext4, xfs or ZFS, and installs the operating system
|
disk(s) with ext4, xfs or ZFS, and installs the operating system
|
||||||
|
|
||||||
* Complete operating system (Debian Linux, 64-bit)
|
* Complete operating system (Debian Linux, 64-bit)
|
||||||
@ -63,7 +63,7 @@ standard Debian installation. After configuring the
|
|||||||
# apt-get update
|
# apt-get update
|
||||||
# apt-get install proxmox-backup-server
|
# apt-get install proxmox-backup-server
|
||||||
|
|
||||||
The above commands keep the current (Debian) kernel and install a minimal
|
The commands above keep the current (Debian) kernel and install a minimal
|
||||||
set of required packages.
|
set of required packages.
|
||||||
|
|
||||||
If you want to install the same set of packages as the installer
|
If you want to install the same set of packages as the installer
|
||||||
@ -113,9 +113,9 @@ Client Installation
|
|||||||
Install `Proxmox Backup`_ Client on Debian
|
Install `Proxmox Backup`_ Client on Debian
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Proxmox ships as a set of Debian packages to be installed on top of a standard
|
Proxmox ships as a set of Debian packages to be installed on
|
||||||
Debian installation. After configuring the :ref:`package_repositories_client_only_apt`,
|
top of a standard Debian installation. After configuring the
|
||||||
you need to run:
|
:ref:`sysadmin_package_repositories`, you need to run:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -123,6 +123,12 @@ you need to run:
|
|||||||
# apt-get install proxmox-backup-client
|
# apt-get install proxmox-backup-client
|
||||||
|
|
||||||
|
|
||||||
.. note:: The client-only repository should be usable by most recent Debian and
|
Installing from source
|
||||||
Ubuntu derivatives.
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. todo:: Add section "Installing from source"
|
||||||
|
|
||||||
|
Installing statically linked binary
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. todo:: Add section "Installing statically linked binary"
|
||||||
|
@ -4,16 +4,15 @@ Introduction
|
|||||||
What is Proxmox Backup Server?
|
What is Proxmox Backup Server?
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
Proxmox Backup Server is an enterprise-class, client-server backup solution that
|
Proxmox Backup Server is an enterprise-class, client-server backup software
|
||||||
is capable of backing up :term:`virtual machine<Virtual machine>`\ s,
|
package that backs up :term:`virtual machine`\ s, :term:`container`\ s, and
|
||||||
:term:`container<Container>`\ s, and physical hosts. It is specially optimized
|
physical hosts. It is specially optimized for the `Proxmox Virtual Environment`_
|
||||||
for the `Proxmox Virtual Environment`_ platform and allows you to back up your
|
platform and allows you to back up your data securely, even between remote
|
||||||
data securely, even between remote sites, providing easy management through a
|
sites, providing easy management with a web-based user interface.
|
||||||
web-based user interface.
|
|
||||||
|
|
||||||
It supports deduplication, compression, and authenticated
|
It supports deduplication, compression, and authenticated
|
||||||
encryption (AE_). Using :term:`Rust` as the implementation language guarantees
|
encryption (AE_). Using :term:`Rust` as the implementation language guarantees high
|
||||||
high performance, low resource usage, and a safe, high-quality codebase.
|
performance, low resource usage, and a safe, high-quality codebase.
|
||||||
|
|
||||||
Proxmox Backup uses state of the art cryptography for both client-server
|
Proxmox Backup uses state of the art cryptography for both client-server
|
||||||
communication and backup content :ref:`encryption <client_encryption>`. All
|
communication and backup content :ref:`encryption <client_encryption>`. All
|
||||||
@ -29,24 +28,23 @@ Proxmox Backup Server uses a `client-server model`_. The server stores the
|
|||||||
backup data and provides an API to create and manage datastores. With the
|
backup data and provides an API to create and manage datastores. With the
|
||||||
API, it's also possible to manage disks and other server-side resources.
|
API, it's also possible to manage disks and other server-side resources.
|
||||||
|
|
||||||
The backup client uses this API to access the backed up data. You can use the
|
The backup client uses this API to access the backed up data. With the command
|
||||||
``proxmox-backup-client`` command line tool to create and restore file backups.
|
line tool ``proxmox-backup-client`` you can create backups and restore data.
|
||||||
For QEMU_ and LXC_ within `Proxmox Virtual Environment`_, we deliver an
|
For QEMU_ with `Proxmox Virtual Environment`_ we deliver an integrated client.
|
||||||
integrated client.
|
|
||||||
|
|
||||||
A single backup is allowed to contain several archives. For example, when you
|
A single backup is allowed to contain several archives. For example, when you
|
||||||
backup a :term:`virtual machine<Virtual machine>`, each disk is stored as a
|
backup a :term:`virtual machine`, each disk is stored as a separate archive
|
||||||
separate archive inside that backup. The VM configuration itself is stored as
|
inside that backup. The VM configuration itself is stored as an extra file.
|
||||||
an extra file. This way, it's easy to access and restore only the important
|
This way, it's easy to access and restore only important parts of the backup,
|
||||||
parts of the backup, without the need to scan the whole backup.
|
without the need to scan the whole backup.
|
||||||
|
|
||||||
|
|
||||||
Main Features
|
Main Features
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
:Support for Proxmox VE: The `Proxmox Virtual Environment`_ is fully
|
:Support for Proxmox VE: The `Proxmox Virtual Environment`_ is fully
|
||||||
supported, and you can easily backup :term:`virtual machine<Virtual machine>`\ s and
|
supported and you can easily backup :term:`virtual machine`\ s and
|
||||||
:term:`container<Container>`\ s.
|
:term:`container`\ s.
|
||||||
|
|
||||||
:Performance: The whole software stack is written in :term:`Rust`,
|
:Performance: The whole software stack is written in :term:`Rust`,
|
||||||
in order to provide high speed and memory efficiency.
|
in order to provide high speed and memory efficiency.
|
||||||
@ -72,21 +70,17 @@ Main Features
|
|||||||
modern hardware. In addition to client-side encryption, all data is
|
modern hardware. In addition to client-side encryption, all data is
|
||||||
transferred via a secure TLS connection.
|
transferred via a secure TLS connection.
|
||||||
|
|
||||||
:Tape backup: For long-term archiving of data, Proxmox Backup Server also
|
|
||||||
provides extensive support for backing up to tape and managing tape
|
|
||||||
libraries.
|
|
||||||
|
|
||||||
:Web interface: Manage the Proxmox Backup Server with the integrated, web-based
|
:Web interface: Manage the Proxmox Backup Server with the integrated, web-based
|
||||||
user interface.
|
user interface.
|
||||||
|
|
||||||
:Open Source: No secrets. Proxmox Backup Server is free and open-source
|
:Open Source: No secrets. Proxmox Backup Server is free and open-source
|
||||||
software. The source code is licensed under AGPL, v3.
|
software. The source code is licensed under AGPL, v3.
|
||||||
|
|
||||||
:No Limits: Proxmox Backup Server has no artificial limits for backup storage or
|
:No Limits: Proxmox Backup Server has no artifical limits for backup storage or
|
||||||
backup-clients.
|
backup-clients.
|
||||||
|
|
||||||
:Enterprise Support: Proxmox Server Solutions GmbH offers enterprise support in
|
:Enterprise Support: Proxmox Server Solutions GmbH offers enterprise support in
|
||||||
the form of `Proxmox Backup Server Subscription Plans
|
form of `Proxmox Backup Server Subscription Plans
|
||||||
<https://www.proxmox.com/en/proxmox-backup-server/pricing>`_. Users at every
|
<https://www.proxmox.com/en/proxmox-backup-server/pricing>`_. Users at every
|
||||||
subscription level get access to the Proxmox Backup :ref:`Enterprise
|
subscription level get access to the Proxmox Backup :ref:`Enterprise
|
||||||
Repository <sysadmin_package_repos_enterprise>`. In addition, with a Basic,
|
Repository <sysadmin_package_repos_enterprise>`. In addition, with a Basic,
|
||||||
@ -155,8 +149,8 @@ Enterprise Support
|
|||||||
|
|
||||||
Users with a `Proxmox Backup Server Basic, Standard or Premium Subscription Plan
|
Users with a `Proxmox Backup Server Basic, Standard or Premium Subscription Plan
|
||||||
<https://www.proxmox.com/en/proxmox-backup-server/pricing>`_ have access to the
|
<https://www.proxmox.com/en/proxmox-backup-server/pricing>`_ have access to the
|
||||||
`Proxmox Customer Portal <https://my.proxmox.com>`_. The customer portal
|
Proxmox Customer Portal. The Customer Portal provides support with guaranteed
|
||||||
provides support with guaranteed response times from the Proxmox developers.
|
response times from the Proxmox developers.
|
||||||
For more information or for volume discounts, please contact office@proxmox.com.
|
For more information or for volume discounts, please contact office@proxmox.com.
|
||||||
|
|
||||||
Community Support Forum
|
Community Support Forum
|
||||||
@ -179,7 +173,7 @@ Bug Tracker
|
|||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
Proxmox runs a public bug tracker at `<https://bugzilla.proxmox.com>`_. If an
|
Proxmox runs a public bug tracker at `<https://bugzilla.proxmox.com>`_. If an
|
||||||
issue appears, file your report there. An issue can be a bug, as well as a
|
issue appears, file your report there. An issue can be a bug as well as a
|
||||||
request for a new feature or enhancement. The bug tracker helps to keep track
|
request for a new feature or enhancement. The bug tracker helps to keep track
|
||||||
of the issue and will send a notification once it has been solved.
|
of the issue and will send a notification once it has been solved.
|
||||||
|
|
||||||
@ -230,6 +224,5 @@ requirements.
|
|||||||
|
|
||||||
In July 2020, we released the first beta version of Proxmox Backup
|
In July 2020, we released the first beta version of Proxmox Backup
|
||||||
Server, followed by the first stable version in November 2020. With support for
|
Server, followed by the first stable version in November 2020. With support for
|
||||||
encryption and incremental, fully deduplicated backups, Proxmox Backup offers a
|
incremental, fully deduplicated backups, Proxmox Backup significantly reduces
|
||||||
secure environment, which significantly reduces network load and saves valuable
|
network load and saves valuable storage space.
|
||||||
storage space.
|
|
||||||
|
@ -4,17 +4,17 @@
|
|||||||
ZFS on Linux
|
ZFS on Linux
|
||||||
------------
|
------------
|
||||||
|
|
||||||
ZFS is a combined file system and logical volume manager, designed by
|
ZFS is a combined file system and logical volume manager designed by
|
||||||
Sun Microsystems. There is no need to manually compile ZFS modules - all
|
Sun Microsystems. There is no need to manually compile ZFS modules - all
|
||||||
packages are included.
|
packages are included.
|
||||||
|
|
||||||
By using ZFS, it's possible to achieve maximum enterprise features with
|
By using ZFS, it's possible to achieve maximum enterprise features with
|
||||||
low budget hardware, and also high performance systems by leveraging
|
low budget hardware, but also high performance systems by leveraging
|
||||||
SSD caching or even SSD only setups. ZFS can replace expensive
|
SSD caching or even SSD only setups. ZFS can replace cost intense
|
||||||
hardware raid cards with moderate CPU and memory load, combined with easy
|
hardware raid cards by moderate CPU and memory load combined with easy
|
||||||
management.
|
management.
|
||||||
|
|
||||||
General advantages of ZFS:
|
General ZFS advantages
|
||||||
|
|
||||||
* Easy configuration and management with GUI and CLI.
|
* Easy configuration and management with GUI and CLI.
|
||||||
* Reliable
|
* Reliable
|
||||||
@ -34,18 +34,18 @@ General advantages of ZFS:
|
|||||||
Hardware
|
Hardware
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
ZFS depends heavily on memory, so it's recommended to have at least 8GB to
|
ZFS depends heavily on memory, so you need at least 8GB to start. In
|
||||||
start. In practice, use as much you can get for your hardware/budget. To prevent
|
practice, use as much you can get for your hardware/budget. To prevent
|
||||||
data corruption, we recommend the use of high quality ECC RAM.
|
data corruption, we recommend the use of high quality ECC RAM.
|
||||||
|
|
||||||
If you use a dedicated cache and/or log disk, you should use an
|
If you use a dedicated cache and/or log disk, you should use an
|
||||||
enterprise class SSD (for example, Intel SSD DC S3700 Series). This can
|
enterprise class SSD (e.g. Intel SSD DC S3700 Series). This can
|
||||||
increase the overall performance significantly.
|
increase the overall performance significantly.
|
||||||
|
|
||||||
IMPORTANT: Do not use ZFS on top of a hardware controller which has its
|
IMPORTANT: Do not use ZFS on top of hardware controller which has its
|
||||||
own cache management. ZFS needs to directly communicate with disks. An
|
own cache management. ZFS needs to directly communicate with disks. An
|
||||||
HBA adapter or something like an LSI controller flashed in ``IT`` mode is
|
HBA adapter is the way to go, or something like LSI controller flashed
|
||||||
recommended.
|
in ``IT`` mode.
|
||||||
|
|
||||||
|
|
||||||
ZFS Administration
|
ZFS Administration
|
||||||
@ -53,7 +53,7 @@ ZFS Administration
|
|||||||
|
|
||||||
This section gives you some usage examples for common tasks. ZFS
|
This section gives you some usage examples for common tasks. ZFS
|
||||||
itself is really powerful and provides many options. The main commands
|
itself is really powerful and provides many options. The main commands
|
||||||
to manage ZFS are `zfs` and `zpool`. Both commands come with extensive
|
to manage ZFS are `zfs` and `zpool`. Both commands come with great
|
||||||
manual pages, which can be read with:
|
manual pages, which can be read with:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -123,7 +123,7 @@ Create a new pool with cache (L2ARC)
|
|||||||
It is possible to use a dedicated cache drive partition to increase
|
It is possible to use a dedicated cache drive partition to increase
|
||||||
the performance (use SSD).
|
the performance (use SSD).
|
||||||
|
|
||||||
For `<device>`, you can use multiple devices, as is shown in
|
As `<device>` it is possible to use more devices, like it's shown in
|
||||||
"Create a new pool with RAID*".
|
"Create a new pool with RAID*".
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -136,7 +136,7 @@ Create a new pool with log (ZIL)
|
|||||||
It is possible to use a dedicated cache drive partition to increase
|
It is possible to use a dedicated cache drive partition to increase
|
||||||
the performance (SSD).
|
the performance (SSD).
|
||||||
|
|
||||||
For `<device>`, you can use multiple devices, as is shown in
|
As `<device>` it is possible to use more devices, like it's shown in
|
||||||
"Create a new pool with RAID*".
|
"Create a new pool with RAID*".
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
@ -146,9 +146,8 @@ For `<device>`, you can use multiple devices, as is shown in
|
|||||||
Add cache and log to an existing pool
|
Add cache and log to an existing pool
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
You can add cache and log devices to a pool after its creation. In this example,
|
If you have a pool without cache and log. First partition the SSD in
|
||||||
we will use a single drive for both cache and log. First, you need to create
|
2 partition with `parted` or `gdisk`
|
||||||
2 partitions on the SSD with `parted` or `gdisk`
|
|
||||||
|
|
||||||
.. important:: Always use GPT partition tables.
|
.. important:: Always use GPT partition tables.
|
||||||
|
|
||||||
@ -172,12 +171,12 @@ Changing a failed device
|
|||||||
Changing a failed bootable device
|
Changing a failed bootable device
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Depending on how Proxmox Backup was installed, it is either using `grub` or
|
Depending on how Proxmox Backup was installed it is either using `grub` or `systemd-boot`
|
||||||
`systemd-boot` as a bootloader.
|
as bootloader.
|
||||||
|
|
||||||
In either case, the first steps of copying the partition table, reissuing GUIDs
|
The first steps of copying the partition table, reissuing GUIDs and replacing
|
||||||
and replacing the ZFS partition are the same. To make the system bootable from
|
the ZFS partition are the same. To make the system bootable from the new disk,
|
||||||
the new disk, different steps are needed which depend on the bootloader in use.
|
different steps are needed which depend on the bootloader in use.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -191,12 +190,12 @@ With `systemd-boot`:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# proxmox-boot-tool format <new ESP>
|
# pve-efiboot-tool format <new disk's ESP>
|
||||||
# proxmox-boot-tool init <new ESP>
|
# pve-efiboot-tool init <new disk's ESP>
|
||||||
|
|
||||||
.. NOTE:: `ESP` stands for EFI System Partition, which is setup as partition #2 on
|
.. NOTE:: `ESP` stands for EFI System Partition, which is setup as partition #2 on
|
||||||
bootable disks setup by the `Proxmox Backup`_ installer. For details, see
|
bootable disks setup by the {pve} installer since version 5.4. For details, see
|
||||||
:ref:`Setting up a new partition for use as synced ESP <systembooting-proxmox-boot-setup>`.
|
xref:sysboot_systemd_boot_setup[Setting up a new partition for use as synced ESP].
|
||||||
|
|
||||||
With `grub`:
|
With `grub`:
|
||||||
|
|
||||||
@ -208,31 +207,36 @@ Usually `grub.cfg` is located in `/boot/grub/grub.cfg`
|
|||||||
# grub-mkconfig -o /path/to/grub.cfg
|
# grub-mkconfig -o /path/to/grub.cfg
|
||||||
|
|
||||||
|
|
||||||
Activate e-mail notification
|
Activate E-Mail Notification
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
ZFS comes with an event daemon ``ZED``, which monitors events generated by the
|
ZFS comes with an event daemon, which monitors events generated by the
|
||||||
ZFS kernel module. The daemon can also send emails on ZFS events like pool
|
ZFS kernel module. The daemon can also send emails on ZFS events like
|
||||||
errors. Newer ZFS packages ship the daemon in a separate package ``zfs-zed``,
|
pool errors. Newer ZFS packages ship the daemon in a separate package,
|
||||||
which should already be installed by default in `Proxmox Backup`_.
|
and you can install it using `apt-get`:
|
||||||
|
|
||||||
You can configure the daemon via the file ``/etc/zfs/zed.d/zed.rc`` with your
|
.. code-block:: console
|
||||||
favorite editor. The required setting for email notification is
|
|
||||||
``ZED_EMAIL_ADDR``, which is set to ``root`` by default.
|
# apt-get install zfs-zed
|
||||||
|
|
||||||
|
To activate the daemon it is necessary to edit `/etc/zfs/zed.d/zed.rc` with your
|
||||||
|
favorite editor, and uncomment the `ZED_EMAIL_ADDR` setting:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
ZED_EMAIL_ADDR="root"
|
ZED_EMAIL_ADDR="root"
|
||||||
|
|
||||||
Please note that `Proxmox Backup`_ forwards mails to `root` to the email address
|
Please note Proxmox Backup forwards mails to `root` to the email address
|
||||||
configured for the root user.
|
configured for the root user.
|
||||||
|
|
||||||
|
IMPORTANT: The only setting that is required is `ZED_EMAIL_ADDR`. All
|
||||||
|
other settings are optional.
|
||||||
|
|
||||||
Limit ZFS memory usage
|
Limit ZFS Memory Usage
|
||||||
^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
It is good to use at most 50 percent (which is the default) of the
|
It is good to use at most 50 percent (which is the default) of the
|
||||||
system memory for ZFS ARC, to prevent performance degradation of the
|
system memory for ZFS ARC to prevent performance shortage of the
|
||||||
host. Use your preferred editor to change the configuration in
|
host. Use your preferred editor to change the configuration in
|
||||||
`/etc/modprobe.d/zfs.conf` and insert:
|
`/etc/modprobe.d/zfs.conf` and insert:
|
||||||
|
|
||||||
@ -240,40 +244,25 @@ host. Use your preferred editor to change the configuration in
|
|||||||
|
|
||||||
options zfs zfs_arc_max=8589934592
|
options zfs zfs_arc_max=8589934592
|
||||||
|
|
||||||
The above example limits the usage to 8 GiB ('8 * 2^30^').
|
This example setting limits the usage to 8GB.
|
||||||
|
|
||||||
.. IMPORTANT:: In case your desired `zfs_arc_max` value is lower than or equal
|
.. IMPORTANT:: If your root file system is ZFS you must update your initramfs every time this value changes:
|
||||||
to `zfs_arc_min` (which defaults to 1/32 of the system memory), `zfs_arc_max`
|
|
||||||
will be ignored. Thus, for it to work in this case, you must set
|
|
||||||
`zfs_arc_min` to at most `zfs_arc_max - 1`. This would require updating the
|
|
||||||
configuration in `/etc/modprobe.d/zfs.conf`, with:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
options zfs zfs_arc_min=8589934591
|
|
||||||
options zfs zfs_arc_max=8589934592
|
|
||||||
|
|
||||||
This example setting limits the usage to 8 GiB ('8 * 2^30^') on
|
|
||||||
systems with more than 256 GiB of total memory, where simply setting
|
|
||||||
`zfs_arc_max` alone would not work.
|
|
||||||
|
|
||||||
.. IMPORTANT:: If your root file system is ZFS, you must update your initramfs
|
|
||||||
every time this value changes.
|
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# update-initramfs -u
|
# update-initramfs -u
|
||||||
|
|
||||||
|
|
||||||
Swap on ZFS
|
SWAP on ZFS
|
||||||
^^^^^^^^^^^
|
^^^^^^^^^^^
|
||||||
|
|
||||||
Swap-space created on a zvol may cause some issues, such as blocking the
|
Swap-space created on a zvol may generate some troubles, like blocking the
|
||||||
server or generating a high IO load.
|
server or generating a high IO load, often seen when starting a Backup
|
||||||
|
to an external Storage.
|
||||||
|
|
||||||
We strongly recommend using enough memory, so that you normally do not
|
We strongly recommend to use enough memory, so that you normally do not
|
||||||
run into low memory situations. Should you need or want to add swap, it is
|
run into low memory situations. Should you need or want to add swap, it is
|
||||||
preferred to create a partition on a physical disk and use it as a swap device.
|
preferred to create a partition on a physical disk and use it as swap device.
|
||||||
You can leave some space free for this purpose in the advanced options of the
|
You can leave some space free for this purpose in the advanced options of the
|
||||||
installer. Additionally, you can lower the `swappiness` value.
|
installer. Additionally, you can lower the `swappiness` value.
|
||||||
A good value for servers is 10:
|
A good value for servers is 10:
|
||||||
@ -302,24 +291,21 @@ an editor of your choice and add the following line:
|
|||||||
vm.swappiness = 100 The kernel will swap aggressively.
|
vm.swappiness = 100 The kernel will swap aggressively.
|
||||||
==================== ===============================================================
|
==================== ===============================================================
|
||||||
|
|
||||||
ZFS compression
|
ZFS Compression
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
To activate compression:
|
To activate compression:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# zpool set compression=lz4 <pool>
|
# zpool set compression=lz4 <pool>
|
||||||
|
|
||||||
We recommend using the `lz4` algorithm, since it adds very little CPU overhead.
|
We recommend using the `lz4` algorithm, since it adds very little CPU overhead.
|
||||||
Other algorithms such as `lzjb`, `zstd` and `gzip-N` (where `N` is an integer from `1-9`
|
Other algorithms such as `lzjb` and `gzip-N` (where `N` is an integer `1-9` representing
|
||||||
representing the compression ratio, where 1 is fastest and 9 is best
|
the compression ratio, 1 is fastest and 9 is best compression) are also available.
|
||||||
compression) are also available. Depending on the algorithm and how
|
Depending on the algorithm and how compressible the data is, having compression enabled can even increase
|
||||||
compressible the data is, having compression enabled can even increase I/O
|
I/O performance.
|
||||||
performance.
|
|
||||||
|
|
||||||
You can disable compression at any time with:
|
You can disable compression at any time with:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# zfs set compression=off <dataset>
|
# zfs set compression=off <dataset>
|
||||||
@ -328,26 +314,26 @@ Only new blocks will be affected by this change.
|
|||||||
|
|
||||||
.. _local_zfs_special_device:
|
.. _local_zfs_special_device:
|
||||||
|
|
||||||
ZFS special device
|
ZFS Special Device
|
||||||
^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Since version 0.8.0, ZFS supports `special` devices. A `special` device in a
|
Since version 0.8.0 ZFS supports `special` devices. A `special` device in a
|
||||||
pool is used to store metadata, deduplication tables, and optionally small
|
pool is used to store metadata, deduplication tables, and optionally small
|
||||||
file blocks.
|
file blocks.
|
||||||
|
|
||||||
A `special` device can improve the speed of a pool consisting of slow spinning
|
A `special` device can improve the speed of a pool consisting of slow spinning
|
||||||
hard disks with a lot of metadata changes. For example, workloads that involve
|
hard disks with a lot of metadata changes. For example workloads that involve
|
||||||
creating, updating or deleting a large number of files will benefit from the
|
creating, updating or deleting a large number of files will benefit from the
|
||||||
presence of a `special` device. ZFS datasets can also be configured to store
|
presence of a `special` device. ZFS datasets can also be configured to store
|
||||||
small files on the `special` device, which can further improve the
|
whole small files on the `special` device which can further improve the
|
||||||
performance. Use fast SSDs for the `special` device.
|
performance. Use fast SSDs for the `special` device.
|
||||||
|
|
||||||
.. IMPORTANT:: The redundancy of the `special` device should match the one of the
|
.. IMPORTANT:: The redundancy of the `special` device should match the one of the
|
||||||
pool, since the `special` device is a point of failure for the entire pool.
|
pool, since the `special` device is a point of failure for the whole pool.
|
||||||
|
|
||||||
.. WARNING:: Adding a `special` device to a pool cannot be undone!
|
.. WARNING:: Adding a `special` device to a pool cannot be undone!
|
||||||
|
|
||||||
To create a pool with `special` device and RAID-1:
|
Create a pool with `special` device and RAID-1:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -360,8 +346,8 @@ Adding a `special` device to an existing pool with RAID-1:
|
|||||||
# zpool add <pool> special mirror <device1> <device2>
|
# zpool add <pool> special mirror <device1> <device2>
|
||||||
|
|
||||||
ZFS datasets expose the `special_small_blocks=<size>` property. `size` can be
|
ZFS datasets expose the `special_small_blocks=<size>` property. `size` can be
|
||||||
`0` to disable storing small file blocks on the `special` device, or a power of
|
`0` to disable storing small file blocks on the `special` device or a power of
|
||||||
two in the range between `512B` to `128K`. After setting this property, new file
|
two in the range between `512B` to `128K`. After setting the property new file
|
||||||
blocks smaller than `size` will be allocated on the `special` device.
|
blocks smaller than `size` will be allocated on the `special` device.
|
||||||
|
|
||||||
.. IMPORTANT:: If the value for `special_small_blocks` is greater than or equal to
|
.. IMPORTANT:: If the value for `special_small_blocks` is greater than or equal to
|
||||||
@ -369,10 +355,10 @@ blocks smaller than `size` will be allocated on the `special` device.
|
|||||||
the `special` device, so be careful!
|
the `special` device, so be careful!
|
||||||
|
|
||||||
Setting the `special_small_blocks` property on a pool will change the default
|
Setting the `special_small_blocks` property on a pool will change the default
|
||||||
value of that property for all child ZFS datasets (for example, all containers
|
value of that property for all child ZFS datasets (for example all containers
|
||||||
in the pool will opt in for small file blocks).
|
in the pool will opt in for small file blocks).
|
||||||
|
|
||||||
Opt in for all files smaller than 4K-blocks pool-wide:
|
Opt in for all file smaller than 4K-blocks pool-wide:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -393,15 +379,10 @@ Opt out from small file blocks for a single dataset:
|
|||||||
Troubleshooting
|
Troubleshooting
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Corrupt cache file
|
Corrupted cachefile
|
||||||
""""""""""""""""""
|
|
||||||
|
|
||||||
`zfs-import-cache.service` imports ZFS pools using the ZFS cache file. If this
|
In case of a corrupted ZFS cachefile, some volumes may not be mounted during
|
||||||
file becomes corrupted, the service won't be able to import the pools that it's
|
boot until mounted manually later.
|
||||||
unable to read from it.
|
|
||||||
|
|
||||||
As a result, in case of a corrupted ZFS cache file, some volumes may not be
|
|
||||||
mounted during boot and must be mounted manually later.
|
|
||||||
|
|
||||||
For each pool, run:
|
For each pool, run:
|
||||||
|
|
||||||
@ -409,13 +390,16 @@ For each pool, run:
|
|||||||
|
|
||||||
# zpool set cachefile=/etc/zfs/zpool.cache POOLNAME
|
# zpool set cachefile=/etc/zfs/zpool.cache POOLNAME
|
||||||
|
|
||||||
then, update the `initramfs` by running:
|
and afterwards update the `initramfs` by running:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# update-initramfs -u -k all
|
# update-initramfs -u -k all
|
||||||
|
|
||||||
and finally, reboot the node.
|
and finally reboot your node.
|
||||||
|
|
||||||
|
Sometimes the ZFS cachefile can get corrupted, and `zfs-import-cache.service`
|
||||||
|
doesn't import the pools that aren't present in the cachefile.
|
||||||
|
|
||||||
Another workaround to this problem is enabling the `zfs-import-scan.service`,
|
Another workaround to this problem is enabling the `zfs-import-scan.service`,
|
||||||
which searches and imports pools via device scanning (usually slower).
|
which searches and imports pools via device scanning (usually slower).
|
||||||
|
@ -34,7 +34,17 @@
|
|||||||
</style>
|
</style>
|
||||||
<link rel="stylesheet" type="text/css" href="font-awesome/css/font-awesome.css"/>
|
<link rel="stylesheet" type="text/css" href="font-awesome/css/font-awesome.css"/>
|
||||||
<script type="text/javascript" src="extjs/ext-all.js"></script>
|
<script type="text/javascript" src="extjs/ext-all.js"></script>
|
||||||
<script type="text/javascript" src="lto-barcode-generator.js"></script>
|
|
||||||
|
<script type="text/javascript" src="code39.js"></script>
|
||||||
|
<script type="text/javascript" src="prefix-field.js"></script>
|
||||||
|
<script type="text/javascript" src="label-style.js"></script>
|
||||||
|
<script type="text/javascript" src="tape-type.js"></script>
|
||||||
|
<script type="text/javascript" src="paper-size.js"></script>
|
||||||
|
<script type="text/javascript" src="page-layout.js"></script>
|
||||||
|
<script type="text/javascript" src="page-calibration.js"></script>
|
||||||
|
<script type="text/javascript" src="label-list.js"></script>
|
||||||
|
<script type="text/javascript" src="label-setup.js"></script>
|
||||||
|
<script type="text/javascript" src="lto-barcode.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
</body>
|
</body>
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
// for toolkit.js
|
// FIXME: HACK! Makes scrolling in number spinner work again. fixed in ExtJS >= 6.1
|
||||||
function gettext(val) { return val; };
|
if (Ext.isFirefox) {
|
||||||
|
Ext.$eventNameMap.DOMMouseScroll = 'DOMMouseScroll';
|
||||||
|
}
|
||||||
|
|
||||||
function draw_labels(target_id, label_list, page_layout, calibration) {
|
function draw_labels(target_id, label_list, page_layout, calibration) {
|
||||||
let max_labels = compute_max_labels(page_layout);
|
let max_labels = compute_max_labels(page_layout);
|
||||||
|
@ -14,15 +14,15 @@ following retention options are available:
|
|||||||
|
|
||||||
``keep-hourly <N>``
|
``keep-hourly <N>``
|
||||||
Keep backups for the last ``<N>`` hours. If there is more than one
|
Keep backups for the last ``<N>`` hours. If there is more than one
|
||||||
backup for a single hour, only the latest is retained.
|
backup for a single hour, only the latest is kept.
|
||||||
|
|
||||||
``keep-daily <N>``
|
``keep-daily <N>``
|
||||||
Keep backups for the last ``<N>`` days. If there is more than one
|
Keep backups for the last ``<N>`` days. If there is more than one
|
||||||
backup for a single day, only the latest is retained.
|
backup for a single day, only the latest is kept.
|
||||||
|
|
||||||
``keep-weekly <N>``
|
``keep-weekly <N>``
|
||||||
Keep backups for the last ``<N>`` weeks. If there is more than one
|
Keep backups for the last ``<N>`` weeks. If there is more than one
|
||||||
backup for a single week, only the latest is retained.
|
backup for a single week, only the latest is kept.
|
||||||
|
|
||||||
.. note:: Weeks start on Monday and end on Sunday. The software
|
.. note:: Weeks start on Monday and end on Sunday. The software
|
||||||
uses the `ISO week date`_ system and handles weeks at
|
uses the `ISO week date`_ system and handles weeks at
|
||||||
@ -30,17 +30,17 @@ following retention options are available:
|
|||||||
|
|
||||||
``keep-monthly <N>``
|
``keep-monthly <N>``
|
||||||
Keep backups for the last ``<N>`` months. If there is more than one
|
Keep backups for the last ``<N>`` months. If there is more than one
|
||||||
backup for a single month, only the latest is retained.
|
backup for a single month, only the latest is kept.
|
||||||
|
|
||||||
``keep-yearly <N>``
|
``keep-yearly <N>``
|
||||||
Keep backups for the last ``<N>`` years. If there is more than one
|
Keep backups for the last ``<N>`` years. If there is more than one
|
||||||
backup for a single year, only the latest is retained.
|
backup for a single year, only the latest is kept.
|
||||||
|
|
||||||
The retention options are processed in the order given above. Each option
|
The retention options are processed in the order given above. Each option
|
||||||
only covers backups within its time period. The next option does not take care
|
only covers backups within its time period. The next option does not take care
|
||||||
of already covered backups. It will only consider older backups.
|
of already covered backups. It will only consider older backups.
|
||||||
|
|
||||||
Unfinished and incomplete backups will be removed by the prune command, unless
|
Unfinished and incomplete backups will be removed by the prune command unless
|
||||||
they are newer than the last successful backup. In this case, the last failed
|
they are newer than the last successful backup. In this case, the last failed
|
||||||
backup is retained.
|
backup is retained.
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ Prune Simulator
|
|||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
You can use the built-in `prune simulator <prune-simulator/index.html>`_
|
You can use the built-in `prune simulator <prune-simulator/index.html>`_
|
||||||
to explore the effect of different retention options with various backup
|
to explore the effect of different retetion options with various backup
|
||||||
schedules.
|
schedules.
|
||||||
|
|
||||||
Manual Pruning
|
Manual Pruning
|
||||||
@ -59,10 +59,10 @@ Manual Pruning
|
|||||||
:align: right
|
:align: right
|
||||||
:alt: Prune and garbage collection options
|
:alt: Prune and garbage collection options
|
||||||
|
|
||||||
To manually prune a specific backup group, you can use
|
To access pruning functionality for a specific backup group, you can use the
|
||||||
``proxmox-backup-client``'s ``prune`` subcommand, discussed in
|
prune command line option discussed in :ref:`backup-pruning`, or navigate to
|
||||||
:ref:`backup-pruning`, or navigate to the **Content** tab of the datastore and
|
the **Content** tab of the datastore and click the scissors icon in the
|
||||||
click the scissors icon in the **Actions** column of the relevant backup group.
|
**Actions** column of the relevant backup group.
|
||||||
|
|
||||||
Prune Schedules
|
Prune Schedules
|
||||||
^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^
|
||||||
@ -81,7 +81,7 @@ Retention Settings Example
|
|||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The backup frequency and retention of old backups may depend on how often data
|
The backup frequency and retention of old backups may depend on how often data
|
||||||
changes and how important an older state may be in a specific workload.
|
changes, and how important an older state may be, in a specific work load.
|
||||||
When backups act as a company's document archive, there may also be legal
|
When backups act as a company's document archive, there may also be legal
|
||||||
requirements for how long backup snapshots must be kept.
|
requirements for how long backup snapshots must be kept.
|
||||||
|
|
||||||
@ -125,8 +125,8 @@ start garbage collection on an entire datastore and the ``status`` subcommand to
|
|||||||
see attributes relating to the :ref:`garbage collection <client_garbage-collection>`.
|
see attributes relating to the :ref:`garbage collection <client_garbage-collection>`.
|
||||||
|
|
||||||
This functionality can also be accessed in the GUI, by navigating to **Prune &
|
This functionality can also be accessed in the GUI, by navigating to **Prune &
|
||||||
GC** from the top panel of a datastore. From here, you can edit the schedule at
|
GC** from the top panel. From here, you can edit the schedule at which garbage
|
||||||
which garbage collection runs and manually start the operation.
|
collection runs and manually start the operation.
|
||||||
|
|
||||||
|
|
||||||
.. _maintenance_verification:
|
.. _maintenance_verification:
|
||||||
@ -139,16 +139,16 @@ Verification
|
|||||||
:align: right
|
:align: right
|
||||||
:alt: Adding a verify job
|
:alt: Adding a verify job
|
||||||
|
|
||||||
Proxmox Backup Server offers various verification options to ensure that backup
|
Proxmox Backup offers various verification options to ensure that backup data is
|
||||||
data is intact. Verification is generally carried out through the creation of
|
intact. Verification is generally carried out through the creation of verify
|
||||||
verify jobs. These are scheduled tasks that run verification at a given interval
|
jobs. These are scheduled tasks that run verification at a given interval (see
|
||||||
(see :ref:`calendar-event-scheduling`). With these, you can also set whether
|
:ref:`calendar-event-scheduling`). With these, you can set whether already verified
|
||||||
already verified snapshots are ignored, as well as set a time period, after
|
snapshots are ignored, as well as set a time period, after which verified jobs
|
||||||
which snapshots are checked again. The interface for creating verify jobs can be
|
are checked again. The interface for creating verify jobs can be found under the
|
||||||
found under the **Verify Jobs** tab of the datastore.
|
**Verify Jobs** tab of the datastore.
|
||||||
|
|
||||||
.. Note:: It is recommended that you reverify all backups at least monthly, even
|
.. Note:: It is recommended that you reverify all backups at least monthly, even
|
||||||
if a previous verification was successful. This is because physical drives
|
if a previous verification was successful. This is becuase physical drives
|
||||||
are susceptible to damage over time, which can cause an old, working backup
|
are susceptible to damage over time, which can cause an old, working backup
|
||||||
to become corrupted in a process known as `bit rot/data degradation
|
to become corrupted in a process known as `bit rot/data degradation
|
||||||
<https://en.wikipedia.org/wiki/Data_degradation>`_. It is good practice to
|
<https://en.wikipedia.org/wiki/Data_degradation>`_. It is good practice to
|
||||||
@ -158,9 +158,9 @@ found under the **Verify Jobs** tab of the datastore.
|
|||||||
data.
|
data.
|
||||||
|
|
||||||
Aside from using verify jobs, you can also run verification manually on entire
|
Aside from using verify jobs, you can also run verification manually on entire
|
||||||
datastores, backup groups or snapshots. To do this, navigate to the **Content**
|
datastores, backup groups, or snapshots. To do this, navigate to the **Content**
|
||||||
tab of the datastore and either click *Verify All* or select the *V.* icon from
|
tab of the datastore and either click *Verify All*, or select the *V.* icon from
|
||||||
the **Actions** column in the table.
|
the *Actions* column in the table.
|
||||||
|
|
||||||
.. _maintenance_notification:
|
.. _maintenance_notification:
|
||||||
|
|
||||||
@ -170,12 +170,8 @@ Notifications
|
|||||||
Proxmox Backup Server can send you notification emails about automatically
|
Proxmox Backup Server can send you notification emails about automatically
|
||||||
scheduled verification, garbage-collection and synchronization tasks results.
|
scheduled verification, garbage-collection and synchronization tasks results.
|
||||||
|
|
||||||
By default, notifications are sent to the email address configured for the
|
By default, notifications are send to the email address configured for the
|
||||||
`root@pam` user. You can instead set this user for each datastore.
|
`root@pam` user. You can set that user for each datastore.
|
||||||
|
|
||||||
.. image:: images/screenshots/pbs-gui-datastore-options.png
|
|
||||||
:align: right
|
|
||||||
:alt: Datastore Options
|
|
||||||
|
|
||||||
You can also change the level of notification received per task type, the
|
You can also change the level of notification received per task type, the
|
||||||
following options are available:
|
following options are available:
|
||||||
@ -183,23 +179,6 @@ following options are available:
|
|||||||
* Always: send a notification for any scheduled task, independent of the
|
* Always: send a notification for any scheduled task, independent of the
|
||||||
outcome
|
outcome
|
||||||
|
|
||||||
* Errors: send a notification for any scheduled task that results in an error
|
* Errors: send a notification for any scheduled task resulting in an error
|
||||||
|
|
||||||
* Never: do not send any notification at all
|
* Never: do not send any notification at all
|
||||||
|
|
||||||
.. _maintenance_mode:
|
|
||||||
|
|
||||||
Maintenance Mode
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Proxmox Backup Server implements setting the `read-only` and `offline`
|
|
||||||
maintenance modes for a datastore.
|
|
||||||
|
|
||||||
Once enabled, depending on the mode, new reads and/or writes to the datastore
|
|
||||||
are blocked, allowing an administrator to safely execute maintenance tasks, for
|
|
||||||
example, on the underlying storage.
|
|
||||||
|
|
||||||
Internally Proxmox Backup Server tracks whether each datastore access is a
|
|
||||||
write or read operation, so that it can gracefully enter the respective mode,
|
|
||||||
by allowing conflicting operations that started before enabling the maintenance
|
|
||||||
mode to finish.
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Managing Remotes & Sync
|
Managing Remotes
|
||||||
=======================
|
================
|
||||||
|
|
||||||
.. _backup_remote:
|
.. _backup_remote:
|
||||||
|
|
||||||
@ -17,8 +17,8 @@ configuration information for remotes is stored in the file
|
|||||||
:align: right
|
:align: right
|
||||||
:alt: Add a remote
|
:alt: Add a remote
|
||||||
|
|
||||||
To add a remote, you need its hostname or IP address, a userid and password on
|
To add a remote, you need its hostname or IP, a userid and password on the
|
||||||
the remote, and its certificate fingerprint. To get the fingerprint, use the
|
remote, and its certificate fingerprint. To get the fingerprint, use the
|
||||||
``proxmox-backup-manager cert info`` command on the remote, or navigate to
|
``proxmox-backup-manager cert info`` command on the remote, or navigate to
|
||||||
**Dashboard** in the remote's web interface and select **Show Fingerprint**.
|
**Dashboard** in the remote's web interface and select **Show Fingerprint**.
|
||||||
|
|
||||||
@ -60,13 +60,12 @@ Sync Jobs
|
|||||||
|
|
||||||
Sync jobs are configured to pull the contents of a datastore on a **Remote** to
|
Sync jobs are configured to pull the contents of a datastore on a **Remote** to
|
||||||
a local datastore. You can manage sync jobs in the web interface, from the
|
a local datastore. You can manage sync jobs in the web interface, from the
|
||||||
**Sync Jobs** tab of the **Datastore** panel or from that of the Datastore
|
**Sync Jobs** tab of the datastore which you'd like to set one up for, or using
|
||||||
itself. Alternatively, you can manage them with the ``proxmox-backup-manager
|
the ``proxmox-backup-manager sync-job`` command. The configuration information
|
||||||
sync-job`` command. The configuration information for sync jobs is stored at
|
for sync jobs is stored at ``/etc/proxmox-backup/sync.cfg``. To create a new
|
||||||
``/etc/proxmox-backup/sync.cfg``. To create a new sync job, click the add button
|
sync job, click the add button in the GUI, or use the ``create`` subcommand.
|
||||||
in the GUI, or use the ``create`` subcommand. After creating a sync job, you can
|
After creating a sync job, you can either start it manually from the GUI or
|
||||||
either start it manually from the GUI or provide it with a schedule (see
|
provide it with a schedule (see :ref:`calendar-event-scheduling`) to run regularly.
|
||||||
:ref:`calendar-event-scheduling`) to run regularly.
|
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -80,130 +79,17 @@ either start it manually from the GUI or provide it with a schedule (see
|
|||||||
└────────────┴───────┴────────┴──────────────┴───────────┴─────────┘
|
└────────────┴───────┴────────┴──────────────┴───────────┴─────────┘
|
||||||
# proxmox-backup-manager sync-job remove pbs2-local
|
# proxmox-backup-manager sync-job remove pbs2-local
|
||||||
|
|
||||||
To set up sync jobs, the configuring user needs the following permissions:
|
For setting up sync jobs, the configuring user needs the following permissions:
|
||||||
|
|
||||||
#. ``Remote.Read`` on the ``/remote/{remote}/{remote-store}`` path
|
#. ``Remote.Read`` on the ``/remote/{remote}/{remote-store}`` path
|
||||||
#. At least ``Datastore.Backup`` on the local target datastore (``/datastore/{store}``)
|
#. at least ``Datastore.Backup`` on the local target datastore (``/datastore/{store}``)
|
||||||
|
|
||||||
|
If the ``remove-vanished`` option is set, ``Datastore.Prune`` is required on
|
||||||
|
the local datastore as well. If the ``owner`` option is not set (defaulting to
|
||||||
|
``root@pam``) or set to something other than the configuring user,
|
||||||
|
``Datastore.Modify`` is required as well.
|
||||||
|
|
||||||
.. note:: A sync job can only sync backup groups that the configured remote's
|
.. note:: A sync job can only sync backup groups that the configured remote's
|
||||||
user/API token can read. If a remote is configured with a user/API token that
|
user/API token can read. If a remote is configured with a user/API token that
|
||||||
only has ``Datastore.Backup`` privileges, only the limited set of accessible
|
only has ``Datastore.Backup`` privileges, only the limited set of accessible
|
||||||
snapshots owned by that user/API token can be synced.
|
snapshots owned by that user/API token can be synced.
|
||||||
|
|
||||||
If the ``remove-vanished`` option is set, ``Datastore.Prune`` is required on
|
|
||||||
the local datastore as well. If the ``owner`` option is not set (defaulting to
|
|
||||||
``root@pam``) or is set to something other than the configuring user,
|
|
||||||
``Datastore.Modify`` is required as well.
|
|
||||||
|
|
||||||
If the ``group-filter`` option is set, only backup groups matching at least one
|
|
||||||
of the specified criteria are synced. The available criteria are:
|
|
||||||
|
|
||||||
* backup type, for example to only sync groups of the `ct` (Container) type:
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# proxmox-backup-manager sync-job update ID --group-filter type:ct
|
|
||||||
* full group identifier
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# proxmox-backup-manager sync-job update ID --group-filter group:vm/100
|
|
||||||
* regular expression matched against the full group identifier
|
|
||||||
|
|
||||||
.. todo:: add example for regex
|
|
||||||
|
|
||||||
The same filter is applied to local groups for handling of the
|
|
||||||
``remove-vanished`` option.
|
|
||||||
|
|
||||||
.. note:: The ``protected`` flag of remote backup snapshots will not be synced.
|
|
||||||
|
|
||||||
Namespace Support
|
|
||||||
^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Sync jobs can be configured to not only sync datastores, but also sub-sets of
|
|
||||||
datastores in the form of namespaces or namespace sub-trees. The following
|
|
||||||
parameters influence how namespaces are treated as part of a sync job
|
|
||||||
execution:
|
|
||||||
|
|
||||||
- ``remote-ns``: the remote namespace anchor (default: the root namespace)
|
|
||||||
|
|
||||||
- ``ns``: the local namespace anchor (default: the root namespace)
|
|
||||||
|
|
||||||
- ``max-depth``: whether to recursively iterate over sub-namespaces of the remote
|
|
||||||
namespace anchor (default: `None`)
|
|
||||||
|
|
||||||
If ``max-depth`` is set to `0`, groups are synced from ``remote-ns`` into
|
|
||||||
``ns``, without any recursion. If it is set to `None` (left empty), recursion
|
|
||||||
depth will depend on the value of ``remote-ns`` and the remote side's
|
|
||||||
availability of namespace support:
|
|
||||||
|
|
||||||
- ``remote-ns`` set to something other than the root namespace: remote *must*
|
|
||||||
support namespaces, full recursion starting at ``remote-ns``.
|
|
||||||
|
|
||||||
- ``remote-ns`` set to root namespace and remote *supports* namespaces: full
|
|
||||||
recursion starting at root namespace.
|
|
||||||
|
|
||||||
- ``remote-ns`` set to root namespace and remote *does not support* namespaces:
|
|
||||||
backwards-compat mode, only root namespace will be synced into ``ns``, no
|
|
||||||
recursion.
|
|
||||||
|
|
||||||
Any other value of ``max-depth`` will limit recursion to at most ``max-depth``
|
|
||||||
levels, for example: ``remote-ns`` set to `location_a/department_b` and
|
|
||||||
``max-depth`` set to `1` will result in `location_a/department_b` and at most
|
|
||||||
one more level of sub-namespaces being synced.
|
|
||||||
|
|
||||||
The namespace tree starting at ``remote-ns`` will be mapped into ``ns`` up to a
|
|
||||||
depth of ``max-depth``.
|
|
||||||
|
|
||||||
For example, with the following namespaces at the remote side:
|
|
||||||
|
|
||||||
- `location_a`
|
|
||||||
|
|
||||||
- `location_a/department_x`
|
|
||||||
|
|
||||||
- `location_a/department_x/team_one`
|
|
||||||
|
|
||||||
- `location_a/department_x/team_two`
|
|
||||||
|
|
||||||
- `location_a/department_y`
|
|
||||||
|
|
||||||
- `location_a/department_y/team_one`
|
|
||||||
|
|
||||||
- `location_a/department_y/team_two`
|
|
||||||
|
|
||||||
- `location_b`
|
|
||||||
|
|
||||||
and ``remote-ns`` being set to `location_a/department_x` and ``ns`` set to
|
|
||||||
`location_a_dep_x` resulting in the following namespace tree on the sync
|
|
||||||
target:
|
|
||||||
|
|
||||||
- `location_a_dep_x` (containing the remote's `location_a/department_x`)
|
|
||||||
|
|
||||||
- `location_a_dep_x/team_one` (containing the remote's `location_a/department_x/team_one`)
|
|
||||||
|
|
||||||
- `location_a_dep_x/team_two` (containing the remote's `location_a/department_x/team_two`)
|
|
||||||
|
|
||||||
with the rest of the remote namespaces and groups not being synced (by this
|
|
||||||
sync job).
|
|
||||||
|
|
||||||
If a remote namespace is included in the sync job scope, but does not exist
|
|
||||||
locally, it will be created (provided the sync job owner has sufficient
|
|
||||||
privileges).
|
|
||||||
|
|
||||||
If the ``remove-vanished`` option is set, namespaces that are included in the
|
|
||||||
sync job scope but only exist locally are treated as vanished and removed
|
|
||||||
(provided the sync job owner has sufficient privileges).
|
|
||||||
|
|
||||||
.. note:: All other limitations on sync scope (such as remote user/API token
|
|
||||||
privileges, group filters) also apply for sync jobs involving one or
|
|
||||||
multiple namespaces.
|
|
||||||
|
|
||||||
Bandwidth Limit
|
|
||||||
^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Syncing a datastore to an archive can produce lots of traffic and impact other
|
|
||||||
users of the network. So, to avoid network or storage congestion you can limit
|
|
||||||
the bandwidth of the sync job by setting the ``rate-in`` option either in the
|
|
||||||
web interface or using the ``proxmox-backup-manager`` command-line tool:
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
# proxmox-backup-manager sync-job update ID --rate-in 20MiB
|
|
||||||
|
@ -1,178 +0,0 @@
|
|||||||
.. _markdown-primer:
|
|
||||||
|
|
||||||
Markdown Primer
|
|
||||||
===============
|
|
||||||
|
|
||||||
"Markdown is a text-to-HTML conversion tool for web writers. Markdown allows
|
|
||||||
you to write using an easy-to-read, easy-to-write plain text format, then
|
|
||||||
convertit to structurally valid XHTML (or HTML)."
|
|
||||||
|
|
||||||
-- John Gruber, https://daringfireball.net/projects/markdown/
|
|
||||||
|
|
||||||
|
|
||||||
The Proxmox Backup Server (PBS) web-interface has support for using Markdown to
|
|
||||||
rendering rich text formatting in node and virtual guest notes.
|
|
||||||
|
|
||||||
PBS supports CommonMark with most extensions of GFM (GitHub Flavoured Markdown),
|
|
||||||
like tables or task-lists.
|
|
||||||
|
|
||||||
.. _markdown_basics:
|
|
||||||
|
|
||||||
Markdown Basics
|
|
||||||
---------------
|
|
||||||
|
|
||||||
Note that we only describe the basics here, please search the web for more
|
|
||||||
extensive resources, for example on https://www.markdownguide.org/
|
|
||||||
|
|
||||||
Headings
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
# This is a Heading h1
|
|
||||||
## This is a Heading h2
|
|
||||||
##### This is a Heading h5
|
|
||||||
|
|
||||||
|
|
||||||
Emphasis
|
|
||||||
~~~~~~~~
|
|
||||||
|
|
||||||
Use ``*text*`` or ``_text_`` for emphasis.
|
|
||||||
|
|
||||||
Use ``**text**`` or ``__text__`` for bold, heavy-weight text.
|
|
||||||
|
|
||||||
Combinations are also possible, for example:
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
_You **can** combine them_
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
|
||||||
~~~~~
|
|
||||||
|
|
||||||
You can use automatic detection of links, for example,
|
|
||||||
``https://forum.proxmox.com/`` would transform it into a clickable link.
|
|
||||||
|
|
||||||
You can also control the link text, for example:
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
Now, [the part in brackets will be the link text](https://forum.proxmox.com/).
|
|
||||||
|
|
||||||
Lists
|
|
||||||
~~~~~
|
|
||||||
|
|
||||||
Unordered Lists
|
|
||||||
^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
Use ``*`` or ``-`` for unordered lists, for example:
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
* Item 1
|
|
||||||
* Item 2
|
|
||||||
* Item 2a
|
|
||||||
* Item 2b
|
|
||||||
|
|
||||||
|
|
||||||
Adding an indentation can be used to created nested lists.
|
|
||||||
|
|
||||||
Ordered Lists
|
|
||||||
^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
1. Item 1
|
|
||||||
1. Item 2
|
|
||||||
1. Item 3
|
|
||||||
1. Item 3a
|
|
||||||
1. Item 3b
|
|
||||||
|
|
||||||
NOTE: The integer of ordered lists does not need to be correct, they will be numbered automatically.
|
|
||||||
|
|
||||||
Task Lists
|
|
||||||
^^^^^^^^^^
|
|
||||||
|
|
||||||
Task list use a empty box ``[ ]`` for unfinished tasks and a box with an `X` for finished tasks.
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
- [X] First task already done!
|
|
||||||
- [X] Second one too
|
|
||||||
- [ ] This one is still to-do
|
|
||||||
- [ ] So is this one
|
|
||||||
|
|
||||||
Tables
|
|
||||||
~~~~~~
|
|
||||||
|
|
||||||
Tables use the pipe symbol ``|`` to separate columns, and ``-`` to separate the
|
|
||||||
table header from the table body, in that separation one can also set the text
|
|
||||||
alignment, making one column left-, center-, or right-aligned.
|
|
||||||
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
| Left columns | Right columns | Some | More | Cols.| Centering Works Too
|
|
||||||
| ------------- |--------------:|--------|------|------|:------------------:|
|
|
||||||
| left foo | right foo | First | Row | Here | >center< |
|
|
||||||
| left bar | right bar | Second | Row | Here | 12345 |
|
|
||||||
| left baz | right baz | Third | Row | Here | Test |
|
|
||||||
| left zab | right zab | Fourth | Row | Here | ☁️☁️☁️ |
|
|
||||||
| left rab | right rab | And | Last | Here | The End |
|
|
||||||
|
|
||||||
Note that you do not need to align the columns nicely with white space, but that makes
|
|
||||||
editing tables easier.
|
|
||||||
|
|
||||||
Block Quotes
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
You can enter block quotes by prefixing a line with ``>``, similar as in plain-text emails.
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
> Markdown is a lightweight markup language with plain-text-formatting syntax,
|
|
||||||
> created in 2004 by John Gruber with Aaron Swartz.
|
|
||||||
>
|
|
||||||
>> Markdown is often used to format readme files, for writing messages in online discussion forums,
|
|
||||||
>> and to create rich text using a plain text editor.
|
|
||||||
|
|
||||||
Code and Snippets
|
|
||||||
~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
You can use backticks to avoid processing for a few word or paragraphs. That is useful for
|
|
||||||
avoiding that a code or configuration hunk gets mistakenly interpreted as markdown.
|
|
||||||
|
|
||||||
Inline code
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
Surrounding part of a line with single backticks allows to write code inline,
|
|
||||||
for examples:
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
This hosts IP address is `10.0.0.1`.
|
|
||||||
|
|
||||||
Whole blocks of code
|
|
||||||
^^^^^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
For code blocks spanning several lines you can use triple-backticks to start
|
|
||||||
and end such a block, for example:
|
|
||||||
|
|
||||||
.. code-block:: md
|
|
||||||
|
|
||||||
```
|
|
||||||
# This is the network config I want to remember here
|
|
||||||
auto vmbr2
|
|
||||||
iface vmbr2 inet static
|
|
||||||
address 10.0.0.1/24
|
|
||||||
bridge-ports ens20
|
|
||||||
bridge-stp off
|
|
||||||
bridge-fd 0
|
|
||||||
bridge-vlan-aware yes
|
|
||||||
bridge-vids 2-4094
|
|
||||||
|
|
||||||
```
|
|
@ -3,10 +3,6 @@
|
|||||||
Network Management
|
Network Management
|
||||||
==================
|
==================
|
||||||
|
|
||||||
.. image:: images/screenshots/pbs-gui-system-config.png
|
|
||||||
:align: right
|
|
||||||
:alt: System and Network Configuration Overview
|
|
||||||
|
|
||||||
Proxmox Backup Server provides both a web interface and a command line tool for
|
Proxmox Backup Server provides both a web interface and a command line tool for
|
||||||
network configuration. You can find the configuration options in the web
|
network configuration. You can find the configuration options in the web
|
||||||
interface under the **Network Interfaces** section of the **Configuration** menu
|
interface under the **Network Interfaces** section of the **Configuration** menu
|
||||||
@ -35,6 +31,10 @@ To get a list of available interfaces, use the following command:
|
|||||||
│ ens19 │ eth │ 1 │ manual │ │ │ │
|
│ ens19 │ eth │ 1 │ manual │ │ │ │
|
||||||
└───────┴────────┴───────────┴────────┴─────────────┴──────────────┴──────────────┘
|
└───────┴────────┴───────────┴────────┴─────────────┴──────────────┴──────────────┘
|
||||||
|
|
||||||
|
.. image:: images/screenshots/pbs-gui-network-create-bond.png
|
||||||
|
:align: right
|
||||||
|
:alt: Add a network interface
|
||||||
|
|
||||||
To add a new network interface, use the ``create`` subcommand with the relevant
|
To add a new network interface, use the ``create`` subcommand with the relevant
|
||||||
parameters. For example, you may want to set up a bond, for the purpose of
|
parameters. For example, you may want to set up a bond, for the purpose of
|
||||||
network redundancy. The following command shows a template for creating the bond shown
|
network redundancy. The following command shows a template for creating the bond shown
|
||||||
@ -44,10 +44,6 @@ in the list above:
|
|||||||
|
|
||||||
# proxmox-backup-manager network create bond0 --type bond --bond_mode active-backup --slaves ens18,ens19 --autostart true --cidr x.x.x.x/x --gateway x.x.x.x
|
# proxmox-backup-manager network create bond0 --type bond --bond_mode active-backup --slaves ens18,ens19 --autostart true --cidr x.x.x.x/x --gateway x.x.x.x
|
||||||
|
|
||||||
.. image:: images/screenshots/pbs-gui-network-create-bond.png
|
|
||||||
:align: right
|
|
||||||
:alt: Add a network interface
|
|
||||||
|
|
||||||
You can make changes to the configuration of a network interface with the
|
You can make changes to the configuration of a network interface with the
|
||||||
``update`` subcommand:
|
``update`` subcommand:
|
||||||
|
|
||||||
@ -86,12 +82,9 @@ is:
|
|||||||
.. note:: This command and corresponding GUI button rely on the ``ifreload``
|
.. note:: This command and corresponding GUI button rely on the ``ifreload``
|
||||||
command, from the package ``ifupdown2``. This package is included within the
|
command, from the package ``ifupdown2``. This package is included within the
|
||||||
Proxmox Backup Server installation, however, you may have to install it yourself,
|
Proxmox Backup Server installation, however, you may have to install it yourself,
|
||||||
if you have installed Proxmox Backup Server on top of Debian or a Proxmox VE
|
if you have installed Proxmox Backup Server on top of Debian or Proxmox VE.
|
||||||
version prior to version 7.
|
|
||||||
|
|
||||||
You can also configure DNS settings, from the **DNS** section
|
You can also configure DNS settings, from the **DNS** section
|
||||||
of **Configuration** or by using the ``dns`` subcommand of
|
of **Configuration** or by using the ``dns`` subcommand of
|
||||||
``proxmox-backup-manager``.
|
``proxmox-backup-manager``.
|
||||||
|
|
||||||
|
|
||||||
.. include:: traffic-control.rst
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Most commands that produce output support the ``--output-format``
|
Most commands producing output supports the ``--output-format``
|
||||||
parameter. This accepts the following values:
|
parameter. It accepts the following values:
|
||||||
|
|
||||||
:``text``: Text format (default). Structured data is rendered as a table.
|
:``text``: Text format (default). Structured data is rendered as a table.
|
||||||
|
|
||||||
|
@ -17,22 +17,18 @@ update``.
|
|||||||
.. code-block:: sources.list
|
.. code-block:: sources.list
|
||||||
:caption: File: ``/etc/apt/sources.list``
|
:caption: File: ``/etc/apt/sources.list``
|
||||||
|
|
||||||
deb http://ftp.debian.org/debian bullseye main contrib
|
deb http://ftp.debian.org/debian buster main contrib
|
||||||
deb http://ftp.debian.org/debian bullseye-updates main contrib
|
deb http://ftp.debian.org/debian buster-updates main contrib
|
||||||
|
|
||||||
# security updates
|
# security updates
|
||||||
deb http://security.debian.org/debian-security bullseye-security main contrib
|
deb http://security.debian.org/debian-security buster/updates main contrib
|
||||||
|
|
||||||
|
|
||||||
|
.. FIXME for 7.0: change security update suite to bullseye-security
|
||||||
|
|
||||||
In addition, you need a package repository from Proxmox to get Proxmox Backup
|
In addition, you need a package repository from Proxmox to get Proxmox Backup
|
||||||
updates.
|
updates.
|
||||||
|
|
||||||
.. image:: images/screenshots/pbs-gui-administration-apt-repos.png
|
|
||||||
:align: right
|
|
||||||
:alt: APT Repository Management in the Web Interface
|
|
||||||
|
|
||||||
.. _package_repos_secure_apt:
|
|
||||||
|
|
||||||
SecureApt
|
SecureApt
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
@ -47,21 +43,31 @@ key with the following commands:
|
|||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# wget https://enterprise.proxmox.com/debian/proxmox-release-bullseye.gpg -O /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
|
# wget http://download.proxmox.com/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
||||||
|
|
||||||
Verify the SHA512 checksum afterwards with the expected output below:
|
Verify the SHA512 checksum afterwards with:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# sha512sum /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
|
# sha512sum /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
||||||
7fb03ec8a1675723d2853b84aa4fdb49a46a3bb72b9951361488bfd19b29aab0a789a4f8c7406e71a69aabbc727c936d3549731c4659ffa1a08f44db8fdcebfa /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
|
|
||||||
|
|
||||||
and the md5sum, with the expected output below:
|
The output should be:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# md5sum /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
|
acca6f416917e8e11490a08a1e2842d500b3a5d9f322c6319db0927b2901c3eae23cfb5cd5df6facf2b57399d3cfa52ad7769ebdd75d9b204549ca147da52626 /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
||||||
bcc35c7173e0845c0d6ad6470b70f50e /etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg
|
|
||||||
|
and the md5sum:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
# md5sum /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
||||||
|
|
||||||
|
Here, the output should be:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
f3f6c5a3a67baf38ad178e5ff1ee270c /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
||||||
|
|
||||||
.. _sysadmin_package_repos_enterprise:
|
.. _sysadmin_package_repos_enterprise:
|
||||||
|
|
||||||
@ -76,7 +82,7 @@ enabled by default:
|
|||||||
.. code-block:: sources.list
|
.. code-block:: sources.list
|
||||||
:caption: File: ``/etc/apt/sources.list.d/pbs-enterprise.list``
|
:caption: File: ``/etc/apt/sources.list.d/pbs-enterprise.list``
|
||||||
|
|
||||||
deb https://enterprise.proxmox.com/debian/pbs bullseye pbs-enterprise
|
deb https://enterprise.proxmox.com/debian/pbs buster pbs-enterprise
|
||||||
|
|
||||||
|
|
||||||
To never miss important security fixes, the superuser (``root@pam`` user) is
|
To never miss important security fixes, the superuser (``root@pam`` user) is
|
||||||
@ -106,15 +112,15 @@ We recommend to configure this repository in ``/etc/apt/sources.list``.
|
|||||||
.. code-block:: sources.list
|
.. code-block:: sources.list
|
||||||
:caption: File: ``/etc/apt/sources.list``
|
:caption: File: ``/etc/apt/sources.list``
|
||||||
|
|
||||||
deb http://ftp.debian.org/debian bullseye main contrib
|
deb http://ftp.debian.org/debian buster main contrib
|
||||||
deb http://ftp.debian.org/debian bullseye-updates main contrib
|
deb http://ftp.debian.org/debian buster-updates main contrib
|
||||||
|
|
||||||
# PBS pbs-no-subscription repository provided by proxmox.com,
|
# PBS pbs-no-subscription repository provided by proxmox.com,
|
||||||
# NOT recommended for production use
|
# NOT recommended for production use
|
||||||
deb http://download.proxmox.com/debian/pbs bullseye pbs-no-subscription
|
deb http://download.proxmox.com/debian/pbs buster pbs-no-subscription
|
||||||
|
|
||||||
# security updates
|
# security updates
|
||||||
deb http://security.debian.org/debian-security bullseye-security main contrib
|
deb http://security.debian.org/debian-security buster/updates main contrib
|
||||||
|
|
||||||
|
|
||||||
`Proxmox Backup`_ Test Repository
|
`Proxmox Backup`_ Test Repository
|
||||||
@ -132,74 +138,4 @@ You can access this repository by adding the following line to
|
|||||||
.. code-block:: sources.list
|
.. code-block:: sources.list
|
||||||
:caption: sources.list entry for ``pbstest``
|
:caption: sources.list entry for ``pbstest``
|
||||||
|
|
||||||
deb http://download.proxmox.com/debian/pbs bullseye pbstest
|
deb http://download.proxmox.com/debian/pbs buster pbstest
|
||||||
|
|
||||||
.. _package_repositories_client_only:
|
|
||||||
|
|
||||||
Proxmox Backup Client-only Repository
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
If you want to :ref:`use the the Proxmox Backup Client <client_creating_backups>`
|
|
||||||
on systems using a Linux distribution not based on Proxmox projects, you can
|
|
||||||
use the client-only repository.
|
|
||||||
|
|
||||||
Currently there's only a client-repository for APT based systems.
|
|
||||||
|
|
||||||
.. _package_repositories_client_only_apt:
|
|
||||||
|
|
||||||
APT-based Proxmox Backup Client Repository
|
|
||||||
++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
For modern Linux distributions using `apt` as package manager, like all Debian
|
|
||||||
and Ubuntu Derivative do, you may be able to use the APT-based repository.
|
|
||||||
|
|
||||||
In order to configure this repository you need to first :ref:`setup the Proxmox
|
|
||||||
release key <package_repos_secure_apt>`. After that, add the repository URL to
|
|
||||||
the APT sources lists.
|
|
||||||
|
|
||||||
**Repositories for Debian 11 (Bullseye) based releases**
|
|
||||||
|
|
||||||
This repository is tested with:
|
|
||||||
|
|
||||||
- Debian Bullseye
|
|
||||||
|
|
||||||
Edit the file ``/etc/apt/sources.list.d/pbs-client.list`` and add the following
|
|
||||||
snipped
|
|
||||||
|
|
||||||
.. code-block:: sources.list
|
|
||||||
:caption: File: ``/etc/apt/sources.list``
|
|
||||||
|
|
||||||
deb http://download.proxmox.com/debian/pbs-client bullseye main
|
|
||||||
|
|
||||||
**Repositories for Debian 10 (Buster) based releases**
|
|
||||||
|
|
||||||
This repository is tested with:
|
|
||||||
|
|
||||||
- Debian Buster
|
|
||||||
- Ubuntu 20.04 LTS
|
|
||||||
|
|
||||||
It may work with older, and should work with more recent released versions.
|
|
||||||
|
|
||||||
Edit the file ``/etc/apt/sources.list.d/pbs-client.list`` and add the following
|
|
||||||
snipped
|
|
||||||
|
|
||||||
.. code-block:: sources.list
|
|
||||||
:caption: File: ``/etc/apt/sources.list``
|
|
||||||
|
|
||||||
deb http://download.proxmox.com/debian/pbs-client buster main
|
|
||||||
|
|
||||||
.. _node_options_http_proxy:
|
|
||||||
|
|
||||||
Repository Access Behind HTTP Proxy
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Some setups have restricted access to the internet, sometimes only through a
|
|
||||||
central proxy. You can setup a HTTP proxy through the Proxmox Backup Server's
|
|
||||||
web-interface in the `Configuration -> Authentication` tab.
|
|
||||||
|
|
||||||
Once configured this proxy will be used for apt network requests and for
|
|
||||||
checking a Proxmox Backup Server support subscription.
|
|
||||||
|
|
||||||
Standard HTTP proxy configurations are accepted, `[http://]<host>[:port]` where
|
|
||||||
the `<host>` part may include an authorization, for example:
|
|
||||||
`http://user:pass@proxy.example.org:12345`
|
|
||||||
|
@ -13,3 +13,39 @@ parameter. It accepts the following values:
|
|||||||
:``json``: JSON (single line).
|
:``json``: JSON (single line).
|
||||||
|
|
||||||
:``json-pretty``: JSON (multiple lines, nicely formatted).
|
:``json-pretty``: JSON (multiple lines, nicely formatted).
|
||||||
|
|
||||||
|
|
||||||
|
Device driver options can be specified as integer numbers (see
|
||||||
|
``/usr/include/linux/mtio.h``), or using symbolic names:
|
||||||
|
|
||||||
|
:``buffer-writes``: Enable buffered writes
|
||||||
|
|
||||||
|
:``async-writes``: Enable async writes
|
||||||
|
|
||||||
|
:``read-ahead``: Use read-ahead for fixed block size
|
||||||
|
|
||||||
|
:``debugging``: Enable debugging if compiled into the driver
|
||||||
|
|
||||||
|
:``two-fm``: Write two file marks when closing the file
|
||||||
|
|
||||||
|
:``fast-mteom``: Space directly to eod (and lose file number)
|
||||||
|
|
||||||
|
:``auto-lock``: Automatically lock/unlock drive door
|
||||||
|
|
||||||
|
:``def-writes``: Defaults are meant only for writes
|
||||||
|
|
||||||
|
:``can-bsr``: Indicates that the drive can space backwards
|
||||||
|
|
||||||
|
:``no-blklims``: Drive does not support read block limits
|
||||||
|
|
||||||
|
:``can-partitions``: Drive can handle partitioned tapes
|
||||||
|
|
||||||
|
:``scsi2locical``: Seek and tell use SCSI-2 logical block addresses
|
||||||
|
|
||||||
|
:``sysv``: Enable the System V semantics
|
||||||
|
|
||||||
|
:``nowait``: Do not wait for rewind, etc. to complete
|
||||||
|
|
||||||
|
:``sili``: Enables setting the SILI bit in SCSI commands when reading
|
||||||
|
in variable block mode to enhance performance when reading blocks
|
||||||
|
shorter than the byte count
|
||||||
|
@ -51,7 +51,7 @@ ENVIRONMENT
|
|||||||
:CHANGER: If set, replaces the `--device` option
|
:CHANGER: If set, replaces the `--device` option
|
||||||
|
|
||||||
:PROXMOX_TAPE_DRIVE: If set, use the Proxmox Backup Server
|
:PROXMOX_TAPE_DRIVE: If set, use the Proxmox Backup Server
|
||||||
configuration to find the associated changer device.
|
configuration to find the associcated changer device.
|
||||||
|
|
||||||
|
|
||||||
.. include:: ../pbs-copyright.rst
|
.. include:: ../pbs-copyright.rst
|
||||||
|
@ -1,14 +0,0 @@
|
|||||||
Implements debugging functionality to inspect Proxmox Backup datastore
|
|
||||||
files, verify the integrity of chunks.
|
|
||||||
|
|
||||||
Also contains an 'api' subcommand where arbitrary api paths can be called
|
|
||||||
(get/create/set/delete) as well as display their parameters (usage) and
|
|
||||||
their child-links (ls).
|
|
||||||
|
|
||||||
By default, it connects to the proxmox-backup-proxy on localhost via https,
|
|
||||||
but by setting the environment variable `PROXMOX_DEBUG_API_CODE` to `1` the
|
|
||||||
tool directly calls the corresponding code.
|
|
||||||
|
|
||||||
.. WARNING:: Using `PROXMOX_DEBUG_API_CODE` can be dangerous and is only intended
|
|
||||||
for debugging purposes. It is not intended for use on a production system.
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
==========================
|
|
||||||
proxmox-backup-debug
|
|
||||||
==========================
|
|
||||||
|
|
||||||
.. include:: ../epilog.rst
|
|
||||||
|
|
||||||
-------------------------------------------------------------
|
|
||||||
Debugging command line tool for Backup and Restore
|
|
||||||
-------------------------------------------------------------
|
|
||||||
|
|
||||||
:Author: |AUTHOR|
|
|
||||||
:Version: Version |VERSION|
|
|
||||||
:Manual section: 1
|
|
||||||
|
|
||||||
|
|
||||||
Synopsis
|
|
||||||
==========
|
|
||||||
|
|
||||||
.. include:: synopsis.rst
|
|
||||||
|
|
||||||
Common Options
|
|
||||||
==============
|
|
||||||
|
|
||||||
.. include:: ../output-format.rst
|
|
||||||
|
|
||||||
|
|
||||||
Description
|
|
||||||
============
|
|
||||||
|
|
||||||
.. include:: description.rst
|
|
||||||
|
|
||||||
|
|
||||||
.. include:: ../pbs-copyright.rst
|
|
@ -1,5 +1,5 @@
|
|||||||
This daemon exposes the whole Proxmox Backup Server API on TCP port
|
This daemon exposes the whole Proxmox Backup Server API on TCP port
|
||||||
8007 using HTTPS. It runs as user ``backup`` and has very limited
|
8007 using HTTPS. It runs as user ``backup`` and has very limited
|
||||||
permissions. Operations requiring more permissions are forwarded to
|
permissions. Operation requiring more permissions are forwarded to
|
||||||
the local ``proxmox-backup`` service.
|
the local ``proxmox-backup`` service.
|
||||||
|
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
Command line tool for restoring files and directories from PBS archives. In contrast to
|
|
||||||
proxmox-backup-client, this supports both container/host and VM backups.
|
|
||||||
|
|