Compare commits
566 Commits
Author | SHA1 | Date | |
---|---|---|---|
5547f90ba7 | |||
2e1b63fb25 | |||
7b2d3a5fe9 | |||
0216f56241 | |||
80acdd71fa | |||
26af61debc | |||
e7f94010d3 | |||
a4e871f52c | |||
bc3072ef7a | |||
f4bb2510b9 | |||
2ab12cd0cb | |||
c894909e17 | |||
7f394c807b | |||
7afb98a912 | |||
3847008e1b | |||
f6ed2eff47 | |||
23eed6755a | |||
384a2b4d4f | |||
910177a388 | |||
54311a38c6 | |||
983edbc54a | |||
10439718e2 | |||
ebddccef5f | |||
9cfe0ff350 | |||
295bae14b7 | |||
53939bb438 | |||
329c2cbe66 | |||
55334cf45a | |||
a2e30cd51d | |||
4bf2ab1109 | |||
1dd1c9eb5c | |||
6dde015f8c | |||
5f3b2330c8 | |||
4ba5d3b3dd | |||
e7e3d7360a | |||
fd8b00aed7 | |||
2631e57d20 | |||
90461b76fb | |||
629103d60c | |||
dc232b8946 | |||
6fed819dc2 | |||
646fc7f086 | |||
ecc5602c88 | |||
6a15cce540 | |||
f281b8d3a9 | |||
4465b76812 | |||
61df02cda1 | |||
3b0321365b | |||
0dfce17a43 | |||
a38dccf0e8 | |||
f05085ab22 | |||
bc42bb3c6e | |||
94b7f56e65 | |||
0417e9af1b | |||
ce5327badc | |||
368f4c5416 | |||
318b310638 | |||
164ad7b706 | |||
a5322f3c50 | |||
fa29d7eb49 | |||
a21f9852fd | |||
79e2473c63 | |||
375b1f6150 | |||
109ccd300f | |||
c287b28725 | |||
c560cfddca | |||
44f6bb019c | |||
d6d42702d1 | |||
3fafd0e2a1 | |||
59648eac3d | |||
5b6b5bba68 | |||
b13089cdf5 | |||
1f03196c0b | |||
edf0940649 | |||
801ec1dbf9 | |||
34ac5cd889 | |||
58421ec112 | |||
a5bdc987dc | |||
d32a8652bd | |||
a26ebad5f9 | |||
dd9cef56fc | |||
26858dba84 | |||
9fe3358ce6 | |||
76425d84b3 | |||
42355b11a4 | |||
511e4f6987 | |||
3f0e344bc1 | |||
a316178768 | |||
dff8ea92aa | |||
88e1f7997c | |||
4c3eabeaf3 | |||
4c7be5f59d | |||
6d4fbbc3ea | |||
1a23132262 | |||
48c4193f7c | |||
8204d9b095 | |||
fad95a334a | |||
973e985d73 | |||
e5a13382b2 | |||
81c0b90447 | |||
ee9fa953de | |||
09acf0a70d | |||
15d1435789 | |||
80ea23e1b9 | |||
5d6379f8db | |||
566b946f9b | |||
7f7459677d | |||
0892a512bc | |||
b717871d2a | |||
7b11a8098d | |||
8b2c6f5dbc | |||
d26985a600 | |||
e29f456efc | |||
a79082a0dd | |||
1336ae8249 | |||
0db5712493 | |||
c47609fedb | |||
b84e8aaee9 | |||
d84e4073af | |||
e8656da70d | |||
59477ad252 | |||
2f29f1c765 | |||
4d84e869bf | |||
79d841014e | |||
ea62611d8e | |||
f3c867a034 | |||
aae5db916e | |||
a417c8a93e | |||
79e58a903e | |||
9f40e09d0a | |||
553e57f914 | |||
2200a38671 | |||
ba39ab20fb | |||
ff8945fd2f | |||
4876393562 | |||
971bc6f94b | |||
cab92acb3c | |||
a1d90719e4 | |||
eeff085d9d | |||
d43c407a00 | |||
6bc87d3952 | |||
04c1c68f31 | |||
94b17c804a | |||
94352256b7 | |||
b3bed7e41f | |||
a4672dd0b1 | |||
17bbcb57d7 | |||
843146479a | |||
cf1e117fc7 | |||
03eac20b87 | |||
11f5d59396 | |||
6f63c29306 | |||
c0e365fd49 | |||
93fb2e0d21 | |||
c553407e98 | |||
4830de408b | |||
7f78528308 | |||
2843ba9017 | |||
e244b9d03d | |||
657c47db35 | |||
a32bb86df9 | |||
654c56e05d | |||
589c4dad9e | |||
0320deb0a9 | |||
4c4e5c2b1e | |||
924373d2df | |||
3b60b5098f | |||
4abb3edd9f | |||
932e69a837 | |||
ef6d49670b | |||
52ea00e9df | |||
870681013a | |||
c046739461 | |||
8b1289f3e4 | |||
f1d76ecf6c | |||
074503f288 | |||
c6f55139f8 | |||
20cc25d749 | |||
30316192b3 | |||
e93263be1e | |||
2ab2ca9c24 | |||
54fcb7f5d8 | |||
4abd4dbe38 | |||
eac1beef3c | |||
166a48f903 | |||
82775c4764 | |||
88bc9635aa | |||
1037f2bc2d | |||
f24cbee77d | |||
25b4d52dce | |||
2729d134bd | |||
32b75d36a8 | |||
c4430a937d | |||
237314ad0d | |||
caf76ec592 | |||
0af8c26b74 | |||
825dfe7e0d | |||
30a0809553 | |||
6ee3035523 | |||
b627ebbf40 | |||
ef4bdf6b8b | |||
54722acada | |||
0e2bf3aa1d | |||
365126efa9 | |||
03d4c9217d | |||
8498290848 | |||
654db565cb | |||
51f83548ed | |||
5847a6bdb5 | |||
313e5e2047 | |||
7914e62b10 | |||
84d3284609 | |||
70fab5b46e | |||
e36135031d | |||
5a5ee0326e | |||
776dabfb2e | |||
5c4755ad08 | |||
7c1666289d | |||
cded320e92 | |||
b31cdec225 | |||
591b120d35 | |||
e8913fea12 | |||
355a41a763 | |||
5bd4825432 | |||
8f7e5b028a | |||
2a29d9a1ee | |||
e056966bc7 | |||
ef0ea4ba05 | |||
2892624783 | |||
2c10410b0d | |||
d1d74c4367 | |||
8b7f3b8f1d | |||
3f6c2efb8d | |||
227f36497a | |||
5ef4c7bcd3 | |||
70d00e0149 | |||
dcf155dac9 | |||
3c5b523631 | |||
6396bace3d | |||
713a128adf | |||
affc224aca | |||
6f82d32977 | |||
2a06e08618 | |||
1057b1f5a5 | |||
af76234112 | |||
1825c1a9b7 | |||
9a8bf2cac9 | |||
cc5ef79bec | |||
3725d95c65 | |||
4fb068019e | |||
6446a078a0 | |||
1d7fcbece8 | |||
8703a68a31 | |||
9bcdade85f | |||
b0156179b9 | |||
d0a0bad9d6 | |||
a4003d9078 | |||
3f4a62de2f | |||
bf23f63aa5 | |||
fd641b99c3 | |||
225affc9ca | |||
9ce2481a69 | |||
d95c74c6e7 | |||
218ee3269f | |||
5ca5f8daf3 | |||
98cdee781a | |||
9cf4504909 | |||
5f846a3fc1 | |||
c9793d47f9 | |||
be8adca115 | |||
9152a0077f | |||
0b90c67fb4 | |||
b4975d3102 | |||
ee33795b72 | |||
90e16be3ae | |||
cf90a369e2 | |||
6b303323be | |||
1576c7a0d9 | |||
cd5d6103ea | |||
207f763d1a | |||
1bed3aedc8 | |||
ab77d660cc | |||
b74a1daae9 | |||
bec357e2cb | |||
78593b5b5c | |||
7d6f03a7fe | |||
f46573f8c3 | |||
b83e136fb6 | |||
5c4203b20c | |||
7f9eef1d47 | |||
a8a0132766 | |||
831c43c91b | |||
b452e2df74 | |||
7f37cacfac | |||
3bb7e62e88 | |||
3b060167f6 | |||
8a76e71129 | |||
396fd747a6 | |||
16bd08b297 | |||
ccdf327ac8 | |||
8cd63df0dc | |||
b90cb34fd6 | |||
d6c1e12c06 | |||
d33d1c880b | |||
985e84e369 | |||
cc2c5c7762 | |||
40bf636b47 | |||
347cde827b | |||
ac4a1fb35c | |||
6f3714b9aa | |||
d810014eeb | |||
e0f6892625 | |||
9d5b426a6d | |||
8bf5769382 | |||
2970cd3d6d | |||
d41114c5a8 | |||
6c92449702 | |||
db04d10d14 | |||
5a4233f07b | |||
3c715edd07 | |||
bbe05d7fe9 | |||
2af8b8ef91 | |||
d4bfdfe749 | |||
1d14c31658 | |||
9bd81bb384 | |||
d64226efee | |||
2440eaa2df | |||
e8bf4f31f2 | |||
6682461d88 | |||
41f1132e0e | |||
d938c9337a | |||
9896a75caf | |||
7eefd0c3d7 | |||
2e268e311c | |||
3e182fd828 | |||
7b60850334 | |||
1552d9699c | |||
7507b19cd2 | |||
16f9ea6708 | |||
d984a9acf0 | |||
955f4aefcd | |||
858bbfbbd1 | |||
c1570b373f | |||
d336363771 | |||
e57aa36d3e | |||
b488f850aa | |||
ec07a280ba | |||
5006632550 | |||
7eb9f48485 | |||
31cba7098d | |||
f4571b0b50 | |||
3832911d50 | |||
28c86760da | |||
c4604ca468 | |||
464c409aa3 | |||
08ec39be0c | |||
25350f3370 | |||
0023cfa385 | |||
ed24142767 | |||
917230e4f8 | |||
05228f17f5 | |||
e8653b96be | |||
1cf191c597 | |||
3d3e31b7f8 | |||
8730cfcc3e | |||
5830e5620d | |||
46d53e3e90 | |||
3554fe6480 | |||
0dadf66dc7 | |||
a941bbd0c9 | |||
21e3ed3449 | |||
81678129fb | |||
52d8db7925 | |||
875d375d7a | |||
cba167b874 | |||
e68c0e68bd | |||
ff2bc2d21f | |||
4961404c7c | |||
3fbf2311e4 | |||
41685061f7 | |||
35a7ab5778 | |||
e1beaae4a2 | |||
965bd58693 | |||
00fdaaf12b | |||
60473d234a | |||
4f688e09a4 | |||
24e84128e4 | |||
e63457b6b2 | |||
a83cedc2ac | |||
076afa6197 | |||
423e3cbd18 | |||
0263396187 | |||
043018cfbe | |||
2037d9af03 | |||
7f07991035 | |||
18ce01caff | |||
5bc8e80a99 | |||
6252df4c18 | |||
451856d21d | |||
aa30663ca5 | |||
8616a4afe5 | |||
bc2358319b | |||
0bf4b81370 | |||
c9dd5a2452 | |||
cf95f616c5 | |||
1adbc7c13c | |||
9d28974c27 | |||
3dbc35b5c1 | |||
fee0fe5422 | |||
86d9f4e733 | |||
3f16f1b006 | |||
cbd9899389 | |||
cd44fb8d84 | |||
aca4c2b5a9 | |||
85eedfb78b | |||
f26276bc4e | |||
6d62e69f9a | |||
4188fd59a0 | |||
5b9f575648 | |||
0d890ec414 | |||
926d05ef0b | |||
8be48ddfc7 | |||
41e66bfaf6 | |||
47a7241410 | |||
54c77b3d62 | |||
a1c5575308 | |||
a44c934b5d | |||
546d2653ee | |||
33c06b3388 | |||
1917ea3ce1 | |||
70842b9ef2 | |||
e6122a657e | |||
9e860ac01a | |||
7690a8e7bd | |||
1860208560 | |||
1689296d46 | |||
7aa4851b77 | |||
6ef8e2902f | |||
aa16b7b284 | |||
9bbd83b1f2 | |||
65535670f9 | |||
9d42fe4d3b | |||
918a367258 | |||
970a70b41e | |||
4094fe5a31 | |||
dea8e2cb54 | |||
0514a4308f | |||
d0647e5a02 | |||
bbe06f97be | |||
f1a83e9759 | |||
38a81c6b46 | |||
6afb60abf5 | |||
a42212fc1e | |||
2e21948156 | |||
5279ee745f | |||
227501c063 | |||
89d25b1931 | |||
b57c0dbe30 | |||
8b910bb6bc | |||
dfde34e612 | |||
2530811e22 | |||
85205bc253 | |||
3cdd1a3424 | |||
002865405c | |||
8a73ef897a | |||
be61c56c21 | |||
dbaef7d04d | |||
2048073355 | |||
a585e1f696 | |||
415737b2b8 | |||
54f7007cc5 | |||
b0338178d7 | |||
159100b944 | |||
41a8db3576 | |||
fe291ab794 | |||
adb65b9889 | |||
8513626b9f | |||
7ca0ba4515 | |||
42200c405a | |||
be327dbccd | |||
c724dc3892 | |||
70dc2ff3ab | |||
81f5d03e8d | |||
e50c6b94c1 | |||
28eaff20bd | |||
8d1a1b2976 | |||
92eaec53db | |||
b3c2c57897 | |||
f458e97fda | |||
80bf9ae99b | |||
bebd4a7ca4 | |||
9468e94412 | |||
6b66c8507f | |||
167e5406c3 | |||
c111c9a931 | |||
bb71e3a023 | |||
7b1bf4c098 | |||
32b88d928a | |||
f8e1932337 | |||
7c9fb570cc | |||
56d22c66c0 | |||
85cdc4f371 | |||
96bcfb9b1f | |||
4a874665eb | |||
6f6b69946e | |||
5b7f44555e | |||
2ca396c015 | |||
d8dae16035 | |||
8f02db04f9 | |||
9f35e44681 | |||
6279b8f5a5 | |||
3084232cb5 | |||
67cc79ec52 | |||
b9a09a9501 | |||
4a0d3a3e3f | |||
2322a980d0 | |||
c19f5b85a3 | |||
7f9d8438ab | |||
51c80c5a52 | |||
6477ebcf6f | |||
bc02c2789c | |||
c0b3d09236 | |||
3ddbab6193 | |||
befd95a90a | |||
ab6cd4229b | |||
9213744ecb | |||
41c0333814 | |||
afcf8b3ed6 | |||
69ebbec40b | |||
b22a9c14a4 | |||
54067d8225 | |||
d64c4eeab0 | |||
15d2c7786e | |||
73a1da5ed6 | |||
fbf8779388 | |||
3231c35fb8 | |||
ced7838de4 | |||
2f26b8668a | |||
9432838914 | |||
1a89a7794e | |||
c0a87c12fb | |||
c6a7ea0a2f | |||
5bb057e5a2 | |||
2924b37d6d | |||
42c0f784e2 | |||
05f17d1ec4 | |||
777690a121 | |||
a98e228766 | |||
4c9174ce26 | |||
1d70e3812c | |||
e2225aa882 | |||
99dd709f3e | |||
f197c286d5 | |||
b121711baa | |||
085655b21b | |||
4c209d6b10 | |||
8dc45e291a | |||
ec1ae7e631 | |||
25aa55b5f5 | |||
b5c6088130 | |||
a65eb0ec29 | |||
42eef1451c | |||
11ecf058e4 | |||
5f1f7ef564 | |||
2e4e698633 | |||
02dce8cad0 |
10
.gitignore
vendored
@ -1,6 +1,16 @@
|
|||||||
local.mak
|
local.mak
|
||||||
/target
|
/target
|
||||||
**/*.rs.bk
|
**/*.rs.bk
|
||||||
|
*~
|
||||||
|
*.backup
|
||||||
|
*.backup[0-9]
|
||||||
|
*.backup[0-9][0-9]
|
||||||
|
*.old
|
||||||
|
*.old[0-9]
|
||||||
|
*.old[0-9][0-9]
|
||||||
|
*.5
|
||||||
|
*.7
|
||||||
|
__pycache__/
|
||||||
/etc/proxmox-backup.service
|
/etc/proxmox-backup.service
|
||||||
/etc/proxmox-backup-proxy.service
|
/etc/proxmox-backup-proxy.service
|
||||||
build/
|
build/
|
||||||
|
13
Cargo.toml
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "proxmox-backup"
|
name = "proxmox-backup"
|
||||||
version = "1.0.8"
|
version = "1.1.2"
|
||||||
authors = [
|
authors = [
|
||||||
"Dietmar Maurer <dietmar@proxmox.com>",
|
"Dietmar Maurer <dietmar@proxmox.com>",
|
||||||
"Dominik Csapak <d.csapak@proxmox.com>",
|
"Dominik Csapak <d.csapak@proxmox.com>",
|
||||||
@ -29,7 +29,10 @@ bitflags = "1.2.1"
|
|||||||
bytes = "1.0"
|
bytes = "1.0"
|
||||||
crc32fast = "1"
|
crc32fast = "1"
|
||||||
endian_trait = { version = "0.6", features = ["arrays"] }
|
endian_trait = { version = "0.6", features = ["arrays"] }
|
||||||
|
env_logger = "0.7"
|
||||||
|
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"
|
||||||
@ -48,11 +51,11 @@ percent-encoding = "2.1"
|
|||||||
pin-utils = "0.1.0"
|
pin-utils = "0.1.0"
|
||||||
pin-project = "1.0"
|
pin-project = "1.0"
|
||||||
pathpatterns = "0.1.2"
|
pathpatterns = "0.1.2"
|
||||||
proxmox = { version = "0.10.1", features = [ "sortable-macro", "api-macro", "websocket" ] }
|
proxmox = { version = "0.11.1", features = [ "sortable-macro", "api-macro", "websocket" ] }
|
||||||
#proxmox = { git = "git://git.proxmox.com/git/proxmox", version = "0.1.2", features = [ "sortable-macro", "api-macro" ] }
|
#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 = { path = "../proxmox/proxmox", features = [ "sortable-macro", "api-macro", "websocket" ] }
|
||||||
proxmox-fuse = "0.1.1"
|
proxmox-fuse = "0.1.1"
|
||||||
pxar = { version = "0.8.0", features = [ "tokio-io" ] }
|
pxar = { version = "0.10.1", features = [ "tokio-io" ] }
|
||||||
#pxar = { path = "../pxar", features = [ "tokio-io" ] }
|
#pxar = { path = "../pxar", features = [ "tokio-io" ] }
|
||||||
regex = "1.2"
|
regex = "1.2"
|
||||||
rustyline = "7"
|
rustyline = "7"
|
||||||
@ -60,10 +63,10 @@ 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.0", features = [ "fs", "io-util", "macros", "net", "parking_lot", "process", "rt", "rt-multi-thread", "signal", "time" ] }
|
tokio = { version = "1.0", features = [ "fs", "io-util", "io-std", "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.6", features = [ "codec" ] }
|
tokio-util = { version = "0.6", features = [ "codec", "io" ] }
|
||||||
tower-service = "0.3.0"
|
tower-service = "0.3.0"
|
||||||
udev = ">= 0.3, <0.5"
|
udev = ">= 0.3, <0.5"
|
||||||
url = "2.1"
|
url = "2.1"
|
||||||
|
31
Makefile
@ -9,8 +9,11 @@ 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 \
|
||||||
pmtx
|
proxmox-tape \
|
||||||
|
pmtx \
|
||||||
|
pmt
|
||||||
|
|
||||||
# Binaries usable by admins
|
# Binaries usable by admins
|
||||||
USR_SBIN := \
|
USR_SBIN := \
|
||||||
@ -23,6 +26,10 @@ SERVICE_BIN := \
|
|||||||
proxmox-backup-proxy \
|
proxmox-backup-proxy \
|
||||||
proxmox-daily-update
|
proxmox-daily-update
|
||||||
|
|
||||||
|
# Single file restore daemon
|
||||||
|
RESTORE_BIN := \
|
||||||
|
proxmox-restore-daemon
|
||||||
|
|
||||||
ifeq ($(BUILD_MODE), release)
|
ifeq ($(BUILD_MODE), release)
|
||||||
CARGO_BUILD_ARGS += --release
|
CARGO_BUILD_ARGS += --release
|
||||||
COMPILEDIR := target/release
|
COMPILEDIR := target/release
|
||||||
@ -37,7 +44,7 @@ endif
|
|||||||
CARGO ?= cargo
|
CARGO ?= cargo
|
||||||
|
|
||||||
COMPILED_BINS := \
|
COMPILED_BINS := \
|
||||||
$(addprefix $(COMPILEDIR)/,$(USR_BIN) $(USR_SBIN) $(SERVICE_BIN))
|
$(addprefix $(COMPILEDIR)/,$(USR_BIN) $(USR_SBIN) $(SERVICE_BIN) $(RESTORE_BIN))
|
||||||
|
|
||||||
export DEB_VERSION DEB_VERSION_UPSTREAM
|
export DEB_VERSION DEB_VERSION_UPSTREAM
|
||||||
|
|
||||||
@ -45,9 +52,12 @@ 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}
|
||||||
|
|
||||||
DSC = rust-${PACKAGE}_${DEB_VERSION}.dsc
|
DSC = rust-${PACKAGE}_${DEB_VERSION}.dsc
|
||||||
|
|
||||||
@ -115,8 +125,8 @@ clean:
|
|||||||
find . -name '*~' -exec rm {} ';'
|
find . -name '*~' -exec rm {} ';'
|
||||||
|
|
||||||
.PHONY: dinstall
|
.PHONY: dinstall
|
||||||
dinstall: ${DEBS}
|
dinstall: ${SERVER_DEB} ${SERVER_DBG_DEB} ${CLIENT_DEB} ${CLIENT_DBG_DEB}
|
||||||
dpkg -i ${DEBS}
|
dpkg -i $^
|
||||||
|
|
||||||
# make sure we build binaries before docs
|
# make sure we build binaries before docs
|
||||||
docs: cargo-build
|
docs: cargo-build
|
||||||
@ -142,6 +152,9 @@ 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), \
|
||||||
@ -150,8 +163,10 @@ install: $(COMPILED_BINS)
|
|||||||
$(MAKE) -C docs install
|
$(MAKE) -C docs install
|
||||||
|
|
||||||
.PHONY: upload
|
.PHONY: upload
|
||||||
upload: ${SERVER_DEB} ${CLIENT_DEB} ${DOC_DEB}
|
upload: ${SERVER_DEB} ${CLIENT_DEB} ${RESTORE_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} | ssh -X repoman@repo.proxmox.com upload --product pbs --dist buster
|
tar cf - ${SERVER_DEB} ${SERVER_DBG_DEB} ${DOC_DEB} ${CLIENT_DEB} ${CLIENT_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 buster
|
||||||
|
tar cf - ${CLIENT_DEB} ${CLIENT_DBG_DEB} | ssh -X repoman@repo.proxmox.com upload --product "pve,pmg" --dist buster
|
||||||
|
tar cf - ${RESTORE_DEB} ${RESTORE_DBG_DEB} | ssh -X repoman@repo.proxmox.com upload --product "pve" --dist buster
|
||||||
|
155
debian/changelog
vendored
@ -1,3 +1,158 @@
|
|||||||
|
rust-proxmox-backup (1.1.2-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* backup verify: always re-check if we can skip a chunk in the actual verify
|
||||||
|
loop.
|
||||||
|
|
||||||
|
* tape: do not try to backup unfinished backups
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Thu, 15 Apr 2021 13:26:52 +0200
|
||||||
|
|
||||||
|
rust-proxmox-backup (1.1.1-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* docs: include tape in table of contents
|
||||||
|
|
||||||
|
* docs: tape: improve definition-list format and add screenshots
|
||||||
|
|
||||||
|
* docs: reorder maintenance and network chapters after client-usage/tools
|
||||||
|
chapters
|
||||||
|
|
||||||
|
* ui: tape changer status: add Format button to drive grid
|
||||||
|
|
||||||
|
* backup/verify: improve speed on disks with slow random-IO (spinners) by
|
||||||
|
iterating over chunks sorted by inode
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Wed, 14 Apr 2021 14:50:29 +0200
|
||||||
|
|
||||||
|
rust-proxmox-backup (1.1.0-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* enable tape backup as technology preview by default
|
||||||
|
|
||||||
|
* tape: read drive status: clear deferred error or media changed events.
|
||||||
|
|
||||||
|
* tape: improve end-of-tape (EOT) error handling
|
||||||
|
|
||||||
|
* tape: cleanup media catalog on tape reuse
|
||||||
|
|
||||||
|
* zfs: re-use underlying pool wide IO stats for datasets
|
||||||
|
|
||||||
|
* api daemon: only log error from accepting new connections to avoid opening
|
||||||
|
to many file descriptors
|
||||||
|
|
||||||
|
* api/datastore: allow downloading the entire archive as ZIP archive, not
|
||||||
|
only sub-paths
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Tue, 13 Apr 2021 14:42:18 +0200
|
||||||
|
|
||||||
|
rust-proxmox-backup (1.0.14-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* server: compress API call response and static files if client accepts that
|
||||||
|
|
||||||
|
* compress generated ZIP archives with deflate
|
||||||
|
|
||||||
|
* tape: implement LTO userspace driver
|
||||||
|
|
||||||
|
* docs: mention new user space tape driver, adopt device path names
|
||||||
|
|
||||||
|
* tape: always clear encryption key after backup (for security reasons)
|
||||||
|
|
||||||
|
* ui: improve changer status view
|
||||||
|
|
||||||
|
* add proxmox-file-restore package, providing a central file-restore binary
|
||||||
|
with preparations for restoring files also from block level backups using
|
||||||
|
QEMU for a safe encapsulation.
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Thu, 08 Apr 2021 16:35:11 +0200
|
||||||
|
|
||||||
|
rust-proxmox-backup (1.0.13-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* pxar: improve handling ACL entries on create and restore
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Fri, 02 Apr 2021 15:32:01 +0200
|
||||||
|
|
||||||
|
rust-proxmox-backup (1.0.12-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* tape: write catalogs to tape (speedup catalog restore)
|
||||||
|
|
||||||
|
* tape: add --scan option for catalog restore
|
||||||
|
|
||||||
|
* tape: improve locking (lock media-sets)
|
||||||
|
|
||||||
|
* tape: ui: enable datastore mappings
|
||||||
|
|
||||||
|
* fix #3359: fix blocking writes in async code during pxar create
|
||||||
|
|
||||||
|
* api2/tape/backup: wait indefinitely for lock in scheduled backup jobs
|
||||||
|
|
||||||
|
* docu improvements
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Fri, 26 Mar 2021 14:08:47 +0100
|
||||||
|
|
||||||
|
rust-proxmox-backup (1.0.11-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* fix feature flag logic in pxar create
|
||||||
|
|
||||||
|
* tools/zip: add missing start_disk field for zip64 extension to improve
|
||||||
|
compatibility with some strict archive tools
|
||||||
|
|
||||||
|
* tape: speedup backup by doing read/write in parallel
|
||||||
|
|
||||||
|
* tape: store datastore name in tape archives and media catalog
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Thu, 18 Mar 2021 12:36:01 +0100
|
||||||
|
|
||||||
|
rust-proxmox-backup (1.0.10-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* tape: improve MediaPool allocation by sorting tapes by creation time and
|
||||||
|
label text
|
||||||
|
|
||||||
|
* api: tape backup: continue on vanishing snapshots, as a prune during long
|
||||||
|
running tape backup jobs is OK
|
||||||
|
|
||||||
|
* tape: fix scsi volume_statistics and cartridge_memory for quantum drives
|
||||||
|
|
||||||
|
* typo fixes all over the place
|
||||||
|
|
||||||
|
* d/postinst: restart, not reload, when updating from a to old version
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Thu, 11 Mar 2021 08:24:31 +0100
|
||||||
|
|
||||||
|
rust-proxmox-backup (1.0.9-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* client: track key source, print when used
|
||||||
|
|
||||||
|
* fix #3026: pxar: metadata: apply flags _after_ updating mtime
|
||||||
|
|
||||||
|
* docs: add acl.cfg, datastore.cfg, remote.cfg, sync.cfg, user.cfg and
|
||||||
|
verification.cfg manual page pages
|
||||||
|
|
||||||
|
* docs: add API viewer
|
||||||
|
|
||||||
|
* proxmox-backup-manger: add verify-job command group with various sub
|
||||||
|
commands
|
||||||
|
|
||||||
|
* add experimental opt-in tape backup support
|
||||||
|
|
||||||
|
* lto-barcode: fix page offset calibration
|
||||||
|
|
||||||
|
* lto-barcode: fix avery 3420 paper format properties
|
||||||
|
|
||||||
|
* asyncify pxar create archive
|
||||||
|
|
||||||
|
* client: raise HTTP_TIMEOUT for simple requests to 120s
|
||||||
|
|
||||||
|
* docs: depend on mathjax library package from debian instead of CDN
|
||||||
|
|
||||||
|
* fix #3321: docs: client: fix interactive restore command explanation
|
||||||
|
|
||||||
|
* ui: use shorter datetime format for encryption key creation time
|
||||||
|
|
||||||
|
* docs: TFA: improve language
|
||||||
|
|
||||||
|
* config/TFA: webauthn: disallow registering the same token more than once,
|
||||||
|
that can lead to buggy behavior in some token/browser combinations.
|
||||||
|
|
||||||
|
-- Proxmox Support Team <support@proxmox.com> Mon, 08 Mar 2021 15:54:47 +0100
|
||||||
|
|
||||||
rust-proxmox-backup (1.0.8-1) unstable; urgency=medium
|
rust-proxmox-backup (1.0.8-1) unstable; urgency=medium
|
||||||
|
|
||||||
* Https Connector: use hostname instead of URL again to avoid certificate
|
* Https Connector: use hostname instead of URL again to avoid certificate
|
||||||
|
33
debian/control
vendored
@ -15,6 +15,8 @@ Build-Depends: debhelper (>= 11),
|
|||||||
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.7+default-dev,
|
||||||
|
librust-flate2-1+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,
|
||||||
@ -36,13 +38,13 @@ Build-Depends: debhelper (>= 11),
|
|||||||
librust-percent-encoding-2+default-dev (>= 2.1-~~),
|
librust-percent-encoding-2+default-dev (>= 2.1-~~),
|
||||||
librust-pin-project-1+default-dev,
|
librust-pin-project-1+default-dev,
|
||||||
librust-pin-utils-0.1+default-dev,
|
librust-pin-utils-0.1+default-dev,
|
||||||
librust-proxmox-0.10+api-macro-dev (>= 0.10.1-~~),
|
librust-proxmox-0.11+api-macro-dev (>= 0.11.1-~~),
|
||||||
librust-proxmox-0.10+default-dev (>= 0.10.1-~~),
|
librust-proxmox-0.11+default-dev (>= 0.11.1-~~),
|
||||||
librust-proxmox-0.10+sortable-macro-dev (>= 0.10.1-~~),
|
librust-proxmox-0.11+sortable-macro-dev (>= 0.11.1-~~),
|
||||||
librust-proxmox-0.10+websocket-dev (>= 0.10.1-~~),
|
librust-proxmox-0.11+websocket-dev (>= 0.11.1-~~),
|
||||||
librust-proxmox-fuse-0.1+default-dev (>= 0.1.1-~~),
|
librust-proxmox-fuse-0.1+default-dev (>= 0.1.1-~~),
|
||||||
librust-pxar-0.8+default-dev,
|
librust-pxar-0.10+default-dev (>= 0.10.1-~~),
|
||||||
librust-pxar-0.8+tokio-io-dev,
|
librust-pxar-0.10+tokio-io-dev (>= 0.10.1-~~),
|
||||||
librust-regex-1+default-dev (>= 1.2-~~),
|
librust-regex-1+default-dev (>= 1.2-~~),
|
||||||
librust-rustyline-7+default-dev,
|
librust-rustyline-7+default-dev,
|
||||||
librust-serde-1+default-dev,
|
librust-serde-1+default-dev,
|
||||||
@ -50,8 +52,10 @@ Build-Depends: debhelper (>= 11),
|
|||||||
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,
|
||||||
librust-tokio-1+fs-dev,
|
librust-tokio-1+fs-dev,
|
||||||
|
librust-tokio-1+io-std-dev,
|
||||||
librust-tokio-1+io-util-dev,
|
librust-tokio-1+io-util-dev,
|
||||||
librust-tokio-1+macros-dev,
|
librust-tokio-1+macros-dev,
|
||||||
librust-tokio-1+net-dev,
|
librust-tokio-1+net-dev,
|
||||||
@ -65,6 +69,7 @@ Build-Depends: debhelper (>= 11),
|
|||||||
librust-tokio-stream-0.1+default-dev,
|
librust-tokio-stream-0.1+default-dev,
|
||||||
librust-tokio-util-0.6+codec-dev,
|
librust-tokio-util-0.6+codec-dev,
|
||||||
librust-tokio-util-0.6+default-dev,
|
librust-tokio-util-0.6+default-dev,
|
||||||
|
librust-tokio-util-0.6+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.3+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-~~),
|
||||||
@ -109,14 +114,12 @@ Depends: fonts-font-awesome,
|
|||||||
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 (>= 2.3-6),
|
proxmox-widget-toolkit (>= 2.5-1),
|
||||||
pve-xtermjs (>= 4.7.0-1),
|
pve-xtermjs (>= 4.7.0-1),
|
||||||
sg3-utils,
|
sg3-utils,
|
||||||
smartmontools,
|
smartmontools,
|
||||||
@ -141,7 +144,19 @@ Package: proxmox-backup-docs
|
|||||||
Build-Profiles: <!nodoc>
|
Build-Profiles: <!nodoc>
|
||||||
Section: doc
|
Section: doc
|
||||||
Depends: libjs-extjs,
|
Depends: libjs-extjs,
|
||||||
|
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,
|
||||||
|
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.
|
||||||
|
16
debian/control.in
vendored
@ -6,14 +6,12 @@ Depends: fonts-font-awesome,
|
|||||||
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 (>= 2.3-6),
|
proxmox-widget-toolkit (>= 2.5-1),
|
||||||
pve-xtermjs (>= 4.7.0-1),
|
pve-xtermjs (>= 4.7.0-1),
|
||||||
sg3-utils,
|
sg3-utils,
|
||||||
smartmontools,
|
smartmontools,
|
||||||
@ -38,7 +36,19 @@ Package: proxmox-backup-docs
|
|||||||
Build-Profiles: <!nodoc>
|
Build-Profiles: <!nodoc>
|
||||||
Section: doc
|
Section: doc
|
||||||
Depends: libjs-extjs,
|
Depends: libjs-extjs,
|
||||||
|
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,
|
||||||
|
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.
|
||||||
|
3
debian/pmt.bc
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# pmt bash completion
|
||||||
|
|
||||||
|
complete -C 'pmt bashcomplete' pmt
|
37
debian/postinst
vendored
@ -6,13 +6,21 @@ set -e
|
|||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
configure)
|
configure)
|
||||||
# need to have user backup in the tapoe group
|
# need to have user backup in the tape group
|
||||||
usermod -a -G tape backup
|
usermod -a -G tape backup
|
||||||
|
|
||||||
# modeled after dh_systemd_start output
|
# modeled after dh_systemd_start output
|
||||||
systemctl --system daemon-reload >/dev/null || true
|
systemctl --system daemon-reload >/dev/null || true
|
||||||
if [ -n "$2" ]; then
|
if [ -n "$2" ]; then
|
||||||
_dh_action=try-reload-or-restart
|
if dpkg --compare-versions "$2" 'lt' '1.0.7-1'; then
|
||||||
|
# there was an issue with reloading and systemd being confused in older daemon versions
|
||||||
|
# so restart instead of reload if upgrading from there, see commit 0ec79339f7aebf9
|
||||||
|
# FIXME: remove with PBS 2.1
|
||||||
|
echo "Upgrading from older proxmox-backup-server: restart (not reload) daemons"
|
||||||
|
_dh_action=try-restart
|
||||||
|
else
|
||||||
|
_dh_action=try-reload-or-restart
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
_dh_action=start
|
_dh_action=start
|
||||||
fi
|
fi
|
||||||
@ -40,11 +48,26 @@ case "$1" in
|
|||||||
/etc/proxmox-backup/remote.cfg || true
|
/etc/proxmox-backup/remote.cfg || true
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
if dpkg --compare-versions "$2" 'le' '1.0.14-1'; then
|
||||||
# FIXME: Remove in future version once we're sure no broken entries remain in anyone's files
|
# FIXME: Remove with 2.0
|
||||||
if grep -q -e ':termproxy::[^@]\+: ' /var/log/proxmox-backup/tasks/active; then
|
if grep -s -q -P -e '^linux:' /etc/proxmox-backup/tape.cfg; then
|
||||||
echo "Fixing up termproxy user id in task log..."
|
echo "========="
|
||||||
flock -w 30 /var/log/proxmox-backup/tasks/active.lock sed -i 's/:termproxy::\([^@]\+\): /:termproxy::\1@pam: /' /var/log/proxmox-backup/tasks/active || true
|
echo "= NOTE: You have now unsupported 'linux' tape drives configured."
|
||||||
|
echo "= * Execute 'udevadm control --reload-rules && udevadm trigger' to update /dev"
|
||||||
|
echo "= * Edit '/etc/proxmox-backup/tape.cfg', remove 'linux' entries and re-add over CLI/GUI"
|
||||||
|
echo "========="
|
||||||
|
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
|
||||||
|
if grep -q -e ':termproxy::[^@]\+: ' /var/log/proxmox-backup/tasks/active; then
|
||||||
|
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
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
2
debian/proxmox-backup-docs.links
vendored
@ -1,3 +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/javascript/extjs /usr/share/doc/proxmox-backup/html/api-viewer/extjs
|
||||||
|
/usr/share/javascript/mathjax /usr/share/doc/proxmox-backup/html/_static/mathjax
|
||||||
|
1
debian/proxmox-backup-file-restore.bash-completion
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
debian/proxmox-file-restore.bc proxmox-file-restore
|
8
debian/proxmox-backup-file-restore.bc
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# 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
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
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
|
64
debian/proxmox-backup-file-restore.postinst
vendored
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#!/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"
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
}
|
||||||
|
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"
|
||||||
|
|
||||||
|
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
Normal file
@ -0,0 +1 @@
|
|||||||
|
interest-noawait proxmox-backup-restore-image-update
|
2
debian/proxmox-backup-server.bash-completion
vendored
@ -1,2 +1,4 @@
|
|||||||
debian/proxmox-backup-manager.bc proxmox-backup-manager
|
debian/proxmox-backup-manager.bc proxmox-backup-manager
|
||||||
|
debian/proxmox-tape.bc proxmox-tape
|
||||||
debian/pmtx.bc pmtx
|
debian/pmtx.bc pmtx
|
||||||
|
debian/pmt.bc pmt
|
||||||
|
15
debian/proxmox-backup-server.install
vendored
@ -11,12 +11,27 @@ 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-manager
|
usr/sbin/proxmox-backup-manager
|
||||||
usr/bin/pmtx
|
usr/bin/pmtx
|
||||||
|
usr/bin/pmt
|
||||||
|
usr/bin/proxmox-tape
|
||||||
usr/share/javascript/proxmox-backup/index.hbs
|
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-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/pmtx.1
|
usr/share/man/man1/pmtx.1
|
||||||
|
usr/share/man/man1/pmt.1
|
||||||
|
usr/share/man/man5/acl.cfg.5
|
||||||
|
usr/share/man/man5/datastore.cfg.5
|
||||||
|
usr/share/man/man5/user.cfg.5
|
||||||
|
usr/share/man/man5/remote.cfg.5
|
||||||
|
usr/share/man/man5/sync.cfg.5
|
||||||
|
usr/share/man/man5/verification.cfg.5
|
||||||
|
usr/share/man/man5/media-pool.cfg.5
|
||||||
|
usr/share/man/man5/tape.cfg.5
|
||||||
|
usr/share/man/man5/tape-job.cfg.5
|
||||||
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/_pmtx
|
usr/share/zsh/vendor-completions/_pmtx
|
||||||
|
usr/share/zsh/vendor-completions/_pmt
|
||||||
|
18
debian/proxmox-backup-server.udev
vendored
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# 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"
|
3
debian/proxmox-tape.bc
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# proxmox-tape bash completion
|
||||||
|
|
||||||
|
complete -C 'proxmox-tape bashcomplete' proxmox-tape
|
7
debian/rules
vendored
@ -52,8 +52,11 @@ override_dh_dwz:
|
|||||||
|
|
||||||
override_dh_strip:
|
override_dh_strip:
|
||||||
dh_strip
|
dh_strip
|
||||||
for exe in $$(find debian/proxmox-backup-client/usr \
|
for exe in $$(find \
|
||||||
debian/proxmox-backup-server/usr -executable -type f); do \
|
debian/proxmox-backup-client/usr \
|
||||||
|
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,6 +5,7 @@ LIBDIR = $(PREFIX)/lib
|
|||||||
LIBEXECDIR = $(LIBDIR)
|
LIBEXECDIR = $(LIBDIR)
|
||||||
DATAROOTDIR = $(PREFIX)/share
|
DATAROOTDIR = $(PREFIX)/share
|
||||||
MAN1DIR = $(PREFIX)/share/man/man1
|
MAN1DIR = $(PREFIX)/share/man/man1
|
||||||
|
MAN5DIR = $(PREFIX)/share/man/man5
|
||||||
DOCDIR = $(PREFIX)/share/doc/proxmox-backup
|
DOCDIR = $(PREFIX)/share/doc/proxmox-backup
|
||||||
JSDIR = $(DATAROOTDIR)/javascript/proxmox-backup
|
JSDIR = $(DATAROOTDIR)/javascript/proxmox-backup
|
||||||
SYSCONFDIR = /etc
|
SYSCONFDIR = /etc
|
||||||
|
136
docs/Makefile
@ -1,20 +1,44 @@
|
|||||||
include ../defines.mk
|
include ../defines.mk
|
||||||
|
|
||||||
GENERATED_SYNOPSIS := \
|
GENERATED_SYNOPSIS := \
|
||||||
|
proxmox-tape/synopsis.rst \
|
||||||
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-file-restore/synopsis.rst \
|
||||||
pxar/synopsis.rst \
|
pxar/synopsis.rst \
|
||||||
pmtx/synopsis.rst \
|
pmtx/synopsis.rst \
|
||||||
backup-protocol-api.rst \
|
pmt/synopsis.rst \
|
||||||
reader-protocol-api.rst
|
config/media-pool/config.rst \
|
||||||
|
config/tape/config.rst \
|
||||||
|
config/tape-job/config.rst \
|
||||||
|
config/user/config.rst \
|
||||||
|
config/remote/config.rst \
|
||||||
|
config/sync/config.rst \
|
||||||
|
config/verification/config.rst \
|
||||||
|
config/acl/roles.rst \
|
||||||
|
config/datastore/config.rst
|
||||||
|
|
||||||
MANUAL_PAGES := \
|
MAN1_PAGES := \
|
||||||
pxar.1 \
|
pxar.1 \
|
||||||
pmtx.1 \
|
pmtx.1 \
|
||||||
|
pmt.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
|
||||||
|
|
||||||
|
MAN5_PAGES := \
|
||||||
|
media-pool.cfg.5 \
|
||||||
|
tape.cfg.5 \
|
||||||
|
tape-job.cfg.5 \
|
||||||
|
acl.cfg.5 \
|
||||||
|
user.cfg.5 \
|
||||||
|
remote.cfg.5 \
|
||||||
|
sync.cfg.5 \
|
||||||
|
verification.cfg.5 \
|
||||||
|
datastore.cfg.5
|
||||||
|
|
||||||
PRUNE_SIMULATOR_FILES := \
|
PRUNE_SIMULATOR_FILES := \
|
||||||
prune-simulator/index.html \
|
prune-simulator/index.html \
|
||||||
@ -35,6 +59,10 @@ LTO_BARCODE_FILES := \
|
|||||||
lto-barcode/label-setup.js \
|
lto-barcode/label-setup.js \
|
||||||
lto-barcode/lto-barcode.js
|
lto-barcode/lto-barcode.js
|
||||||
|
|
||||||
|
API_VIEWER_SOURCES= \
|
||||||
|
api-viewer/index.html \
|
||||||
|
api-viewer/apidoc.js
|
||||||
|
|
||||||
# Sphinx documentation setup
|
# Sphinx documentation setup
|
||||||
SPHINXOPTS =
|
SPHINXOPTS =
|
||||||
SPHINXBUILD = sphinx-build
|
SPHINXBUILD = sphinx-build
|
||||||
@ -51,15 +79,7 @@ endif
|
|||||||
# Sphinx internal variables.
|
# Sphinx internal variables.
|
||||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(SPHINXOPTS) .
|
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(SPHINXOPTS) .
|
||||||
|
|
||||||
all: ${MANUAL_PAGES}
|
all: ${MAN1_PAGES} ${MAN5_PAGES}
|
||||||
|
|
||||||
# Extract backup protocol docs
|
|
||||||
backup-protocol-api.rst: ${COMPILEDIR}/dump-backup-api
|
|
||||||
${COMPILEDIR}/dump-backup-api >$@
|
|
||||||
|
|
||||||
# Extract reader protocol docs
|
|
||||||
reader-protocol-api.rst: ${COMPILEDIR}/dump-reader-api
|
|
||||||
${COMPILEDIR}/dump-backup-api >$@
|
|
||||||
|
|
||||||
# Build manual pages using rst2man
|
# Build manual pages using rst2man
|
||||||
|
|
||||||
@ -77,6 +97,72 @@ pmtx.1: pmtx/man1.rst pmtx/description.rst pmtx/synopsis.rst
|
|||||||
rst2man $< >$@
|
rst2man $< >$@
|
||||||
|
|
||||||
|
|
||||||
|
pmt/synopsis.rst: ${COMPILEDIR}/pmt
|
||||||
|
${COMPILEDIR}/pmt printdoc > pmt/synopsis.rst
|
||||||
|
|
||||||
|
pmt.1: pmt/man1.rst pmt/description.rst pmt/options.rst pmt/synopsis.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
config/datastore/config.rst: ${COMPILEDIR}/docgen
|
||||||
|
${COMPILEDIR}/docgen datastore.cfg >$@
|
||||||
|
|
||||||
|
datastore.cfg.5: config/datastore/man5.rst config/datastore/config.rst config/datastore/format.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
config/user/config.rst: ${COMPILEDIR}/docgen
|
||||||
|
${COMPILEDIR}/docgen user.cfg >$@
|
||||||
|
|
||||||
|
user.cfg.5: config/user/man5.rst config/user/config.rst config/user/format.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
config/remote/config.rst: ${COMPILEDIR}/docgen
|
||||||
|
${COMPILEDIR}/docgen remote.cfg >$@
|
||||||
|
|
||||||
|
remote.cfg.5: config/remote/man5.rst config/remote/config.rst config/remote/format.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
config/sync/config.rst: ${COMPILEDIR}/docgen
|
||||||
|
${COMPILEDIR}/docgen sync.cfg >$@
|
||||||
|
|
||||||
|
sync.cfg.5: config/sync/man5.rst config/sync/config.rst config/sync/format.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
config/verification/config.rst: ${COMPILEDIR}/docgen
|
||||||
|
${COMPILEDIR}/docgen verification.cfg >$@
|
||||||
|
|
||||||
|
verification.cfg.5: config/verification/man5.rst config/verification/config.rst config/verification/format.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
config/acl/roles.rst: ${COMPILEDIR}/docgen
|
||||||
|
${COMPILEDIR}/docgen "config::acl::Role" >$@
|
||||||
|
|
||||||
|
acl.cfg.5: config/acl/man5.rst config/acl/roles.rst config/acl/format.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
config/media-pool/config.rst: ${COMPILEDIR}/docgen
|
||||||
|
${COMPILEDIR}/docgen media-pool.cfg >$@
|
||||||
|
|
||||||
|
media-pool.cfg.5: config/media-pool/man5.rst config/media-pool/config.rst config/media-pool/format.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
config/tape/config.rst: ${COMPILEDIR}/docgen
|
||||||
|
${COMPILEDIR}/docgen tape.cfg >$@
|
||||||
|
|
||||||
|
tape.cfg.5: config/tape/man5.rst config/tape/config.rst config/tape/format.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
config/tape-job/config.rst: ${COMPILEDIR}/docgen
|
||||||
|
${COMPILEDIR}/docgen tape-job.cfg >$@
|
||||||
|
|
||||||
|
tape-job.cfg.5: config/tape-job/man5.rst config/tape-job/config.rst config/tape-job/format.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
|
proxmox-tape/synopsis.rst: ${COMPILEDIR}/proxmox-tape
|
||||||
|
${COMPILEDIR}/proxmox-tape printdoc > proxmox-tape/synopsis.rst
|
||||||
|
|
||||||
|
proxmox-tape.1: proxmox-tape/man1.rst proxmox-tape/description.rst proxmox-tape/synopsis.rst
|
||||||
|
rst2man $< >$@
|
||||||
|
|
||||||
proxmox-backup-client/synopsis.rst: ${COMPILEDIR}/proxmox-backup-client
|
proxmox-backup-client/synopsis.rst: ${COMPILEDIR}/proxmox-backup-client
|
||||||
${COMPILEDIR}/proxmox-backup-client printdoc > proxmox-backup-client/synopsis.rst
|
${COMPILEDIR}/proxmox-backup-client printdoc > proxmox-backup-client/synopsis.rst
|
||||||
|
|
||||||
@ -95,20 +181,34 @@ 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 $< >$@
|
||||||
|
|
||||||
.PHONY: onlinehelpinfo
|
.PHONY: onlinehelpinfo
|
||||||
onlinehelpinfo:
|
onlinehelpinfo:
|
||||||
@echo "Generating OnlineHelpInfo.js..."
|
@echo "Generating OnlineHelpInfo.js..."
|
||||||
$(SPHINXBUILD) -b proxmox-scanrefs $(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
|
||||||
|
${COMPILEDIR}/docgen apidata.js >$@
|
||||||
|
|
||||||
|
api-viewer/apidoc.js: api-viewer/apidata.js api-viewer/PBSAPI.js
|
||||||
|
cat api-viewer/apidata.js api-viewer/PBSAPI.js >$@
|
||||||
|
|
||||||
.PHONY: html
|
.PHONY: html
|
||||||
html: ${GENERATED_SYNOPSIS} images/proxmox-logo.svg custom.css conf.py ${PRUNE_SIMULATOR_FILES} ${LTO_BARCODE_FILES}
|
html: ${GENERATED_SYNOPSIS} images/proxmox-logo.svg custom.css conf.py ${PRUNE_SIMULATOR_FILES} ${LTO_BARCODE_FILES} ${API_VIEWER_SOURCES}
|
||||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
install -m 0644 custom.js custom.css images/proxmox-logo.svg $(BUILDDIR)/html/_static/
|
install -m 0644 custom.js custom.css images/proxmox-logo.svg $(BUILDDIR)/html/_static/
|
||||||
install -dm 0755 $(BUILDDIR)/html/prune-simulator
|
install -dm 0755 $(BUILDDIR)/html/prune-simulator
|
||||||
install -m 0644 ${PRUNE_SIMULATOR_FILES} $(BUILDDIR)/html/prune-simulator
|
install -m 0644 ${PRUNE_SIMULATOR_FILES} $(BUILDDIR)/html/prune-simulator
|
||||||
install -dm 0755 $(BUILDDIR)/html/lto-barcode
|
install -dm 0755 $(BUILDDIR)/html/lto-barcode
|
||||||
install -m 0644 ${LTO_BARCODE_FILES} $(BUILDDIR)/html/lto-barcode
|
install -m 0644 ${LTO_BARCODE_FILES} $(BUILDDIR)/html/lto-barcode
|
||||||
|
install -dm 0755 $(BUILDDIR)/html/api-viewer
|
||||||
|
install -m 0644 ${API_VIEWER_SOURCES} $(BUILDDIR)/html/api-viewer
|
||||||
@echo
|
@echo
|
||||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||||
|
|
||||||
@ -127,12 +227,14 @@ epub3: ${GENERATED_SYNOPSIS}
|
|||||||
@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
|
@echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3."
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -r -f *~ *.1 ${BUILDDIR} ${GENERATED_SYNOPSIS}
|
rm -r -f *~ *.1 ${BUILDDIR} ${GENERATED_SYNOPSIS} api-viewer/apidata.js
|
||||||
|
|
||||||
|
|
||||||
install_manual_pages: ${MANUAL_PAGES}
|
install_manual_pages: ${MAN1_PAGES} ${MAN5_PAGES}
|
||||||
install -dm755 $(DESTDIR)$(MAN1DIR)
|
install -dm755 $(DESTDIR)$(MAN1DIR)
|
||||||
for i in ${MANUAL_PAGES}; do install -m755 $$i $(DESTDIR)$(MAN1DIR)/ ; done
|
for i in ${MAN1_PAGES}; do install -m755 $$i $(DESTDIR)$(MAN1DIR)/ ; done
|
||||||
|
install -dm755 $(DESTDIR)$(MAN5DIR)
|
||||||
|
for i in ${MAN5_PAGES}; do install -m755 $$i $(DESTDIR)$(MAN5DIR)/ ; done
|
||||||
|
|
||||||
install_html: html
|
install_html: html
|
||||||
install -dm755 $(DESTDIR)$(DOCDIR)
|
install -dm755 $(DESTDIR)$(DOCDIR)
|
||||||
|
@ -90,7 +90,18 @@ class ReflabelMapper(Builder):
|
|||||||
if hasattr(node, 'expect_referenced_by_id') and len(node['ids']) > 1: # explicit labels
|
if hasattr(node, 'expect_referenced_by_id') and len(node['ids']) > 1: # explicit labels
|
||||||
filename = self.env.doc2path(docname)
|
filename = self.env.doc2path(docname)
|
||||||
filename_html = re.sub('.rst', '.html', filename)
|
filename_html = re.sub('.rst', '.html', filename)
|
||||||
labelid = node['ids'][1] # [0] is predefined by sphinx, we need [1] for explicit ones
|
|
||||||
|
# node['ids'][0] contains a normalized version of the
|
||||||
|
# headline. If the ref and headline are the same
|
||||||
|
# (normalized) sphinx will set the node['ids'][1] to a
|
||||||
|
# generic id in the format `idX` where X is numeric. If the
|
||||||
|
# ref and headline are not the same, the ref name will be
|
||||||
|
# stored in node['ids'][1]
|
||||||
|
if re.match('^id[0-9]*$', node['ids'][1]):
|
||||||
|
labelid = node['ids'][0]
|
||||||
|
else:
|
||||||
|
labelid = node['ids'][1]
|
||||||
|
|
||||||
title = cast(nodes.title, node[0])
|
title = cast(nodes.title, node[0])
|
||||||
logger.info('traversing section {}'.format(title.astext()))
|
logger.info('traversing section {}'.format(title.astext()))
|
||||||
ref_name = getattr(title, 'rawsource', title.astext())
|
ref_name = getattr(title, 'rawsource', title.astext())
|
||||||
|
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 syntax!";
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
});
|
13
docs/api-viewer/index.html
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
|
<title>Proxmox Backup Server API Documentation</title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" type="text/css" href="extjs/theme-crisp/resources/theme-crisp-all.css">
|
||||||
|
<script type="text/javascript" src="extjs/ext-all.js"></script>
|
||||||
|
<script type="text/javascript" src="apidoc.js"></script>
|
||||||
|
</head>
|
||||||
|
<body></body>
|
||||||
|
</html>
|
@ -3,9 +3,10 @@ Backup Client Usage
|
|||||||
|
|
||||||
The command line client is called :command:`proxmox-backup-client`.
|
The command line client is called :command:`proxmox-backup-client`.
|
||||||
|
|
||||||
|
.. _client_repository:
|
||||||
|
|
||||||
Repository Locations
|
Backup Repository Locations
|
||||||
--------------------
|
---------------------------
|
||||||
|
|
||||||
The client uses the following notation to specify a datastore repository
|
The client uses the following notation to specify a datastore repository
|
||||||
on the backup server.
|
on the backup server.
|
||||||
@ -60,33 +61,10 @@ Environment Variables
|
|||||||
Output Format
|
Output Format
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
Most commands support the ``--output-format`` parameter. It accepts
|
.. include:: output-format.rst
|
||||||
the following values:
|
|
||||||
|
|
||||||
:``text``: Text format (default). Structured data is rendered as a table.
|
|
||||||
|
|
||||||
:``json``: JSON (single line).
|
|
||||||
|
|
||||||
:``json-pretty``: JSON (multiple lines, nicely formatted).
|
|
||||||
|
|
||||||
|
|
||||||
Please use the following environment variables to modify output behavior:
|
.. _client_creating_backups:
|
||||||
|
|
||||||
``PROXMOX_OUTPUT_FORMAT``
|
|
||||||
Defines the default output format.
|
|
||||||
|
|
||||||
``PROXMOX_OUTPUT_NO_BORDER``
|
|
||||||
If set (to any value), do not render table borders.
|
|
||||||
|
|
||||||
``PROXMOX_OUTPUT_NO_HEADER``
|
|
||||||
If set (to any value), do not render table headers.
|
|
||||||
|
|
||||||
.. note:: The ``text`` format is designed to be human readable, and
|
|
||||||
not meant to be parsed by automation tools. Please use the ``json``
|
|
||||||
format if you need to process the output.
|
|
||||||
|
|
||||||
|
|
||||||
.. _creating-backups:
|
|
||||||
|
|
||||||
Creating Backups
|
Creating Backups
|
||||||
----------------
|
----------------
|
||||||
@ -246,7 +224,7 @@ Restoring this backup will result in:
|
|||||||
. .. file2
|
. .. file2
|
||||||
|
|
||||||
|
|
||||||
.. _encryption:
|
.. _client_encryption:
|
||||||
|
|
||||||
Encryption
|
Encryption
|
||||||
----------
|
----------
|
||||||
@ -483,19 +461,18 @@ subdirectory and add the corresponding pattern to the list for subsequent restor
|
|||||||
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.
|
||||||
|
|
||||||
With ``restore /target/path`` you can restore the sub-archive given by the current
|
The ``restore`` command can be used to restore all the files contained within
|
||||||
working directory to the local target path ``/target/path`` on your host.
|
the backup archive. This is most helpful when paired with the ``--pattern
|
||||||
By additionally passing a glob pattern with ``--pattern <glob>``, the restore is
|
<glob>`` option, as it allows you to restore all files matching a specific
|
||||||
further limited to files matching the pattern.
|
pattern. For example, if you wanted to restore configuration files
|
||||||
For example:
|
located in ``/etc``, you could do the following:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
pxar:/ > cd /etc/
|
pxar:/ > restore target/ --pattern etc/**/*.conf
|
||||||
pxar:/etc/ > restore /target/ --pattern **/*.conf
|
|
||||||
...
|
...
|
||||||
|
|
||||||
The above will scan trough all the directories below ``/etc`` and restore all
|
The above will scan through 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
|
||||||
@ -657,10 +634,10 @@ shows the list of existing snapshots and what actions prune would take.
|
|||||||
|
|
||||||
.. note:: Neither the ``prune`` command nor the ``forget`` command free space
|
.. note:: Neither the ``prune`` command nor the ``forget`` command free space
|
||||||
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:`garbage-collection`.
|
space you need to perform :ref:`client_garbage-collection`.
|
||||||
|
|
||||||
|
|
||||||
.. _garbage-collection:
|
.. _client_garbage-collection:
|
||||||
|
|
||||||
Garbage Collection
|
Garbage Collection
|
||||||
------------------
|
------------------
|
||||||
@ -715,38 +692,46 @@ Benchmarking
|
|||||||
------------
|
------------
|
||||||
|
|
||||||
The backup client also comes with a benchmarking tool. This tool measures
|
The backup client also comes with a benchmarking tool. This tool measures
|
||||||
various metrics relating to compression and encryption speeds. You can run a
|
various metrics relating to compression and encryption speeds. If a Proxmox
|
||||||
benchmark using the ``benchmark`` subcommand of ``proxmox-backup-client``:
|
Backup repository (remote or local) is specified, the TLS upload speed will get
|
||||||
|
measured too.
|
||||||
|
|
||||||
|
You can run a benchmark using the ``benchmark`` subcommand of
|
||||||
|
``proxmox-backup-client``:
|
||||||
|
|
||||||
|
.. note:: The TLS speed test is only included if a :ref:`backup server
|
||||||
|
repository is specified <client_repository>`.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
# proxmox-backup-client benchmark
|
# proxmox-backup-client benchmark
|
||||||
Uploaded 656 chunks in 5 seconds.
|
Uploaded 1517 chunks in 5 seconds.
|
||||||
Time per request: 7659 microseconds.
|
Time per request: 3309 microseconds.
|
||||||
TLS speed: 547.60 MB/s
|
TLS speed: 1267.41 MB/s
|
||||||
SHA256 speed: 585.76 MB/s
|
SHA256 speed: 2066.73 MB/s
|
||||||
Compression speed: 1923.96 MB/s
|
Compression speed: 775.11 MB/s
|
||||||
Decompress speed: 7885.24 MB/s
|
Decompress speed: 1233.35 MB/s
|
||||||
AES256/GCM speed: 3974.03 MB/s
|
AES256/GCM speed: 3688.27 MB/s
|
||||||
|
Verify speed: 783.43 MB/s
|
||||||
┌───────────────────────────────────┬─────────────────────┐
|
┌───────────────────────────────────┬─────────────────────┐
|
||||||
│ Name │ Value │
|
│ Name │ Value │
|
||||||
╞═══════════════════════════════════╪═════════════════════╡
|
╞═══════════════════════════════════╪═════════════════════╡
|
||||||
│ TLS (maximal backup upload speed) │ 547.60 MB/s (93%) │
|
│ TLS (maximal backup upload speed) │ 1267.41 MB/s (103%) │
|
||||||
├───────────────────────────────────┼─────────────────────┤
|
├───────────────────────────────────┼─────────────────────┤
|
||||||
│ SHA256 checksum computation speed │ 585.76 MB/s (28%) │
|
│ SHA256 checksum computation speed │ 2066.73 MB/s (102%) │
|
||||||
├───────────────────────────────────┼─────────────────────┤
|
├───────────────────────────────────┼─────────────────────┤
|
||||||
│ ZStd level 1 compression speed │ 1923.96 MB/s (89%) │
|
│ ZStd level 1 compression speed │ 775.11 MB/s (103%) │
|
||||||
├───────────────────────────────────┼─────────────────────┤
|
├───────────────────────────────────┼─────────────────────┤
|
||||||
│ ZStd level 1 decompression speed │ 7885.24 MB/s (98%) │
|
│ ZStd level 1 decompression speed │ 1233.35 MB/s (103%) │
|
||||||
├───────────────────────────────────┼─────────────────────┤
|
├───────────────────────────────────┼─────────────────────┤
|
||||||
│ AES256 GCM encryption speed │ 3974.03 MB/s (104%) │
|
│ Chunk verification speed │ 783.43 MB/s (103%) │
|
||||||
|
├───────────────────────────────────┼─────────────────────┤
|
||||||
|
│ AES256 GCM encryption speed │ 3688.27 MB/s (101%) │
|
||||||
└───────────────────────────────────┴─────────────────────┘
|
└───────────────────────────────────┴─────────────────────┘
|
||||||
|
|
||||||
|
|
||||||
.. note:: The percentages given in the output table correspond to a
|
.. note:: The percentages given in the output table correspond to a
|
||||||
comparison against a Ryzen 7 2700X. The TLS test connects to the
|
comparison against a Ryzen 7 2700X.
|
||||||
local host, so there is no network involved.
|
|
||||||
|
|
||||||
You can also pass the ``--output-format`` parameter to output stats in ``json``,
|
You can also pass the ``--output-format`` parameter to output stats in ``json``,
|
||||||
rather than the default table format.
|
rather than the default table format.
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,19 +1,140 @@
|
|||||||
Backup Protocol
|
Backup Protocol
|
||||||
===============
|
===============
|
||||||
|
|
||||||
.. todo:: add introduction to HTTP2 based backup protocols
|
Proxmox Backup Server uses a REST based API. While the management
|
||||||
|
interface use normal HTTP, the actual backup and restore interface use
|
||||||
|
HTTP/2 for improved performance. Both HTTP and HTTP/2 are well known
|
||||||
|
standards, so the following section assumes that you are familiar on
|
||||||
|
how to use them.
|
||||||
|
|
||||||
|
|
||||||
Backup Protocol API
|
Backup Protocol API
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
.. todo:: describe backup writer protocol
|
To start a new backup, the API call ``GET /api2/json/backup`` needs to
|
||||||
|
be upgraded to a HTTP/2 connection using
|
||||||
|
``proxmox-backup-protocol-v1`` as protocol name::
|
||||||
|
|
||||||
.. include:: backup-protocol-api.rst
|
GET /api2/json/backup HTTP/1.1
|
||||||
|
UPGRADE: proxmox-backup-protocol-v1
|
||||||
|
|
||||||
|
The server replies with HTTP 101 Switching Protocol status code,
|
||||||
|
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:
|
||||||
|
|
||||||
|
- Chunks and blobs (binary data)
|
||||||
|
|
||||||
|
- Fixed Indexes (List of chunks with fixed size)
|
||||||
|
|
||||||
|
- Dynamic Indexes (List of chunk with variable size)
|
||||||
|
|
||||||
|
The following section gives a short introduction how to upload such
|
||||||
|
files. Please use the `API Viewer <api-viewer/index.html>`_ for
|
||||||
|
details about available REST commands.
|
||||||
|
|
||||||
|
|
||||||
Reader Protocol API
|
Upload Blobs
|
||||||
-------------------
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
.. todo:: describe backup reader protocol
|
Uploading blobs is done using ``POST /blob``. The HTTP body contains the
|
||||||
|
data encoded as :ref:`Data Blob <data-blob-format>`).
|
||||||
|
|
||||||
.. include:: reader-protocol-api.rst
|
The file name needs to end with ``.blob``, and is automatically added
|
||||||
|
to the backup manifest.
|
||||||
|
|
||||||
|
|
||||||
|
Upload Chunks
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Chunks belong to an index, so you first need to open an index (see
|
||||||
|
below). After that, you can upload chunks using ``POST /fixed_chunk``
|
||||||
|
and ``POST /dynamic_chunk``. The HTTP body contains the chunk data
|
||||||
|
encoded as :ref:`Data Blob <data-blob-format>`).
|
||||||
|
|
||||||
|
|
||||||
|
Upload Fixed Indexes
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Fixed indexes are use to store VM image data. The VM image is split
|
||||||
|
into equally sized chunks, which are uploaded individually. The index
|
||||||
|
file simply contains a list to chunk digests.
|
||||||
|
|
||||||
|
You create a fixed index with ``POST /fixed_index``. Then upload
|
||||||
|
chunks with ``POST /fixed_chunk``, and append them to the index with
|
||||||
|
``PUT /fixed_index``. When finished, you need to close the index using
|
||||||
|
``POST /fixed_close``.
|
||||||
|
|
||||||
|
The file name needs to end with ``.fidx``, and is automatically added
|
||||||
|
to the backup manifest.
|
||||||
|
|
||||||
|
|
||||||
|
Upload Dynamic Indexes
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Dynamic indexes are use to store file archive data. The archive data
|
||||||
|
is split into dynamically sized chunks, which are uploaded
|
||||||
|
individually. The index file simply contains a list to chunk digests
|
||||||
|
and offsets.
|
||||||
|
|
||||||
|
You create a dynamic sized index with ``POST /dynamic_index``. Then
|
||||||
|
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
|
||||||
|
``POST /dynamic_close``.
|
||||||
|
|
||||||
|
The file name needs to end with ``.didx``, and is automatically added
|
||||||
|
to the backup manifest.
|
||||||
|
|
||||||
|
Finish Backup
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Once you have uploaded all data, you need to call ``POST
|
||||||
|
/finish``. This commits all data and ends the backup protocol.
|
||||||
|
|
||||||
|
|
||||||
|
Restore/Reader Protocol API
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
To start a new reader, the API call ``GET /api2/json/reader`` needs to
|
||||||
|
be upgraded to a HTTP/2 connection using
|
||||||
|
``proxmox-backup-reader-protocol-v1`` as protocol name::
|
||||||
|
|
||||||
|
GET /api2/json/reader HTTP/1.1
|
||||||
|
UPGRADE: proxmox-backup-reader-protocol-v1
|
||||||
|
|
||||||
|
The server replies with HTTP 101 Switching Protocol status code,
|
||||||
|
and you can then issue REST commands on that updated HTTP/2 connection.
|
||||||
|
|
||||||
|
The reader protocol allows you to download three different kind of files:
|
||||||
|
|
||||||
|
- Chunks and blobs (binary data)
|
||||||
|
|
||||||
|
- Fixed Indexes (List of chunks with fixed size)
|
||||||
|
|
||||||
|
- Dynamic Indexes (List of chunk with variable size)
|
||||||
|
|
||||||
|
The following section gives a short introduction how to download such
|
||||||
|
files. Please use the `API Viewer <api-viewer/index.html>`_ for details about
|
||||||
|
available REST commands.
|
||||||
|
|
||||||
|
|
||||||
|
Download Blobs
|
||||||
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Downloading blobs is done using ``GET /download``. The HTTP body contains the
|
||||||
|
data encoded as :ref:`Data Blob <data-blob-format>`.
|
||||||
|
|
||||||
|
|
||||||
|
Download Chunks
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Downloading chunks is done using ``GET /chunk``. The HTTP body contains the
|
||||||
|
data encoded as :ref:`Data Blob <data-blob-format>`).
|
||||||
|
|
||||||
|
|
||||||
|
Download Index Files
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Downloading index files is done using ``GET /download``. The HTTP body
|
||||||
|
contains the data encoded as :ref:`Fixed Index <fixed-index-format>`
|
||||||
|
or :ref:`Dynamic Index <dynamic-index-format>`.
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
|
.. _calendar-event-scheduling:
|
||||||
.. _calendar-events:
|
|
||||||
|
|
||||||
Calendar Events
|
Calendar Events
|
||||||
===============
|
===============
|
||||||
|
@ -6,6 +6,11 @@ Command Line Tools
|
|||||||
|
|
||||||
.. include:: proxmox-backup-client/description.rst
|
.. include:: proxmox-backup-client/description.rst
|
||||||
|
|
||||||
|
``proxmox-file-restore``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. include:: proxmox-file-restore/description.rst
|
||||||
|
|
||||||
``proxmox-backup-manager``
|
``proxmox-backup-manager``
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -26,6 +26,27 @@ Those command are available when you start 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``
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
18
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.todo", "proxmox-scanrefs"]
|
extensions = ["sphinx.ext.graphviz", 'sphinx.ext.mathjax', "sphinx.ext.todo", "proxmox-scanrefs"]
|
||||||
|
|
||||||
todo_link_only = True
|
todo_link_only = True
|
||||||
|
|
||||||
@ -107,10 +107,8 @@ today_fmt = '%A, %d %B %Y'
|
|||||||
# This patterns also effect to html_static_path and html_extra_path
|
# This patterns also effect to html_static_path and html_extra_path
|
||||||
exclude_patterns = [
|
exclude_patterns = [
|
||||||
'_build', 'Thumbs.db', '.DS_Store',
|
'_build', 'Thumbs.db', '.DS_Store',
|
||||||
'proxmox-backup-client/man1.rst',
|
'*/man1.rst',
|
||||||
'proxmox-backup-manager/man1.rst',
|
'config/*/man5.rst',
|
||||||
'proxmox-backup-proxy/man1.rst',
|
|
||||||
'pxar/man1.rst',
|
|
||||||
'epilog.rst',
|
'epilog.rst',
|
||||||
'pbs-copyright.rst',
|
'pbs-copyright.rst',
|
||||||
'local-zfs.rst'
|
'local-zfs.rst'
|
||||||
@ -171,6 +169,7 @@ html_theme_options = {
|
|||||||
'extra_nav_links': {
|
'extra_nav_links': {
|
||||||
'Proxmox Homepage': 'https://proxmox.com',
|
'Proxmox Homepage': 'https://proxmox.com',
|
||||||
'PDF': 'proxmox-backup.pdf',
|
'PDF': 'proxmox-backup.pdf',
|
||||||
|
'API Viewer' : 'api-viewer/index.html',
|
||||||
'Prune Simulator' : 'prune-simulator/index.html',
|
'Prune Simulator' : 'prune-simulator/index.html',
|
||||||
'LTO Barcode Generator' : 'lto-barcode/index.html',
|
'LTO Barcode Generator' : 'lto-barcode/index.html',
|
||||||
},
|
},
|
||||||
@ -246,10 +245,8 @@ html_js_files = [
|
|||||||
#
|
#
|
||||||
# html_last_updated_fmt = None
|
# html_last_updated_fmt = None
|
||||||
|
|
||||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
# We need to disable smatquotes, else Option Lists do not display long options
|
||||||
# typographically correct entities.
|
smartquotes = False
|
||||||
#
|
|
||||||
# html_use_smartypants = True
|
|
||||||
|
|
||||||
# Additional templates that should be rendered to pages, maps page names to
|
# Additional templates that should be rendered to pages, maps page names to
|
||||||
# template names.
|
# template names.
|
||||||
@ -310,6 +307,9 @@ 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'
|
||||||
|
22
docs/config/acl/format.rst
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
This file contains the access control list for the Proxmox Backup
|
||||||
|
Server API.
|
||||||
|
|
||||||
|
Each line starts with ``acl:``, followed by 4 additional values
|
||||||
|
separated by collon.
|
||||||
|
|
||||||
|
:propagate: Propagate permissions down the hierachrchy
|
||||||
|
|
||||||
|
:path: The object path
|
||||||
|
|
||||||
|
:User/Token: List of users and token
|
||||||
|
|
||||||
|
:Role: List of assigned roles
|
||||||
|
|
||||||
|
Here is an example list::
|
||||||
|
|
||||||
|
acl:1:/:root@pam!test:Admin
|
||||||
|
acl:1:/datastore/store1:user1@pbs:DatastoreAdmin
|
||||||
|
|
||||||
|
|
||||||
|
You can use the ``proxmox-backup-manager acl`` command to manipulate
|
||||||
|
this file.
|
35
docs/config/acl/man5.rst
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
==========================
|
||||||
|
acl.cfg
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Access Control Configuration
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 5
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
The file /etc/proxmox-backup/user.cfg is a configuration file for Proxmox
|
||||||
|
Backup Server. It contains the access control configuration for the API.
|
||||||
|
|
||||||
|
File Format
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Roles
|
||||||
|
=====
|
||||||
|
|
||||||
|
The following roles exist:
|
||||||
|
|
||||||
|
.. include:: roles.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../../pbs-copyright.rst
|
18
docs/config/datastore/format.rst
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
The file contains a list of datastore configuration sections. Each
|
||||||
|
section starts with a header ``datastore: <name>``, followed by the
|
||||||
|
datastore configuration options.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
datastore: <name1>
|
||||||
|
path <path1>
|
||||||
|
<option1> <value1>
|
||||||
|
...
|
||||||
|
|
||||||
|
datastore: <name2>
|
||||||
|
path <path2>
|
||||||
|
...
|
||||||
|
|
||||||
|
|
||||||
|
You can use the ``proxmox-backup-manager datastore`` command to manipulate
|
||||||
|
this file.
|
33
docs/config/datastore/man5.rst
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
==========================
|
||||||
|
datastore.cfg
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Datastore Configuration
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 5
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
The file /etc/proxmox-backup/datastore.cfg is a configuration file for Proxmox
|
||||||
|
Backup Server. It contains the Datastore configuration.
|
||||||
|
|
||||||
|
File Format
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. include:: config.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../../pbs-copyright.rst
|
13
docs/config/media-pool/format.rst
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Each entry starts with a header ``pool: <name>``, followed by the
|
||||||
|
media pool configuration options.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
pool: company1
|
||||||
|
allocation always
|
||||||
|
retention overwrite
|
||||||
|
|
||||||
|
pool: ...
|
||||||
|
|
||||||
|
|
||||||
|
You can use the ``proxmox-tape pool`` command to manipulate this file.
|
35
docs/config/media-pool/man5.rst
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
==========================
|
||||||
|
media-pool.cfg
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Media Pool Configuration
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 5
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
The file /etc/proxmox-backup/media-pool.cfg is a configuration file
|
||||||
|
for Proxmox Backup Server. It contains the medila pool configuration
|
||||||
|
for tape backups.
|
||||||
|
|
||||||
|
|
||||||
|
File Format
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. include:: config.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../../pbs-copyright.rst
|
17
docs/config/remote/format.rst
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
This file contains information used to access remote servers.
|
||||||
|
|
||||||
|
Each entry starts with a header ``remote: <name>``, followed by the
|
||||||
|
remote configuration options.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
remote: server1
|
||||||
|
host server1.local
|
||||||
|
auth-id sync@pbs
|
||||||
|
...
|
||||||
|
|
||||||
|
remote: ...
|
||||||
|
|
||||||
|
|
||||||
|
You can use the ``proxmox-backup-manager remote`` command to manipulate
|
||||||
|
this file.
|
35
docs/config/remote/man5.rst
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
==========================
|
||||||
|
remote.cfg
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Remote Server Configuration
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 5
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
The file /etc/proxmox-backup/remote.cfg is a configuration file for
|
||||||
|
Proxmox Backup Server. It contains information about remote servers,
|
||||||
|
usable for synchronization jobs.
|
||||||
|
|
||||||
|
|
||||||
|
File Format
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. include:: config.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../../pbs-copyright.rst
|
15
docs/config/sync/format.rst
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
Each entry starts with a header ``sync: <name>``, followed by the
|
||||||
|
job configuration options.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
sync: job1
|
||||||
|
store store1
|
||||||
|
remote-store store1
|
||||||
|
remote lina
|
||||||
|
|
||||||
|
sync: ...
|
||||||
|
|
||||||
|
|
||||||
|
You can use the ``proxmox-backup-manager sync-job`` command to manipulate
|
||||||
|
this file.
|
35
docs/config/sync/man5.rst
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
==========================
|
||||||
|
sync.cfg
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Synchronization Job Configuration
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 5
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
The file /etc/proxmox-backup/sync.cfg is a configuration file for
|
||||||
|
Proxmox Backup Server. It contains the synchronization job
|
||||||
|
configuration.
|
||||||
|
|
||||||
|
|
||||||
|
File Format
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. include:: config.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../../pbs-copyright.rst
|
16
docs/config/tape-job/format.rst
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Each entry starts with a header ``backup: <name>``, followed by the
|
||||||
|
job configuration options.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
backup: job1
|
||||||
|
drive hh8
|
||||||
|
pool p4
|
||||||
|
store store3
|
||||||
|
schedule daily
|
||||||
|
|
||||||
|
backup: ...
|
||||||
|
|
||||||
|
|
||||||
|
You can use the ``proxmox-tape backup-job`` command to manipulate
|
||||||
|
this file.
|
34
docs/config/tape-job/man5.rst
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
==========================
|
||||||
|
tape-job.cfg
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Tape Job Configuration
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 5
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
The file ``/etc/proxmox-backup/tape-job.cfg`` is a configuration file for
|
||||||
|
Proxmox Backup Server. It contains the tape job configuration.
|
||||||
|
|
||||||
|
|
||||||
|
File Format
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. include:: config.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../../pbs-copyright.rst
|
22
docs/config/tape/format.rst
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Each LTO drive configuration section starts with a header ``lto: <name>``,
|
||||||
|
followed by the drive configuration options.
|
||||||
|
|
||||||
|
Tape changer configurations starts with ``changer: <name>``,
|
||||||
|
followed by the changer configuration options.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
lto: hh8
|
||||||
|
changer sl3
|
||||||
|
path /dev/tape/by-id/scsi-10WT065325-nst
|
||||||
|
|
||||||
|
changer: sl3
|
||||||
|
export-slots 14,15,16
|
||||||
|
path /dev/tape/by-id/scsi-CJ0JBE0059
|
||||||
|
|
||||||
|
|
||||||
|
You can use the ``proxmox-tape drive`` and ``proxmox-tape changer``
|
||||||
|
commands to manipulate this file.
|
||||||
|
|
||||||
|
.. NOTE:: The ``virtual:`` drive type is experimental and onyl used
|
||||||
|
for debugging.
|
33
docs/config/tape/man5.rst
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
==========================
|
||||||
|
tape.cfg
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Tape Drive and Changer Configuration
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 5
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
The file /etc/proxmox-backup/tape.cfg is a configuration file for Proxmox
|
||||||
|
Backup Server. It contains the tape drive and changer configuration.
|
||||||
|
|
||||||
|
File Format
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. include:: config.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../../pbs-copyright.rst
|
28
docs/config/user/format.rst
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
This file contains the list of API users and API tokens.
|
||||||
|
|
||||||
|
Each user configuration section starts with a header ``user: <name>``,
|
||||||
|
followed by the user configuration options.
|
||||||
|
|
||||||
|
API token configuration starts with a header ``token:
|
||||||
|
<userid!token_name>``, followed by the token configuration. The data
|
||||||
|
used to authenticate tokens is stored in a separate file
|
||||||
|
(``token.shadow``).
|
||||||
|
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
user: root@pam
|
||||||
|
comment Superuser
|
||||||
|
email test@example.local
|
||||||
|
...
|
||||||
|
|
||||||
|
token: root@pam!token1
|
||||||
|
comment API test token
|
||||||
|
enable true
|
||||||
|
expire 0
|
||||||
|
|
||||||
|
user: ...
|
||||||
|
|
||||||
|
|
||||||
|
You can use the ``proxmox-backup-manager user`` command to manipulate
|
||||||
|
this file.
|
33
docs/config/user/man5.rst
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
==========================
|
||||||
|
user.cfg
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
User Configuration
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 5
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
The file /etc/proxmox-backup/user.cfg is a configuration file for Proxmox
|
||||||
|
Backup Server. It contains the user configuration.
|
||||||
|
|
||||||
|
File Format
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. include:: config.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../../pbs-copyright.rst
|
16
docs/config/verification/format.rst
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
Each entry starts with a header ``verification: <name>``, followed by the
|
||||||
|
job configuration options.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
verification: verify-store2
|
||||||
|
ignore-verified true
|
||||||
|
outdated-after 7
|
||||||
|
schedule daily
|
||||||
|
store store2
|
||||||
|
|
||||||
|
verification: ...
|
||||||
|
|
||||||
|
|
||||||
|
You can use the ``proxmox-backup-manager verify-job`` command to manipulate
|
||||||
|
this file.
|
35
docs/config/verification/man5.rst
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
==========================
|
||||||
|
verification.cfg
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Verification Job Configuration
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 5
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
The file /etc/proxmox-backup/sync.cfg is a configuration file for
|
||||||
|
Proxmox Backup Server. It contains the verification job
|
||||||
|
configuration.
|
||||||
|
|
||||||
|
|
||||||
|
File Format
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. include:: config.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../../pbs-copyright.rst
|
142
docs/configuration-files.rst
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
Configuration Files
|
||||||
|
===================
|
||||||
|
|
||||||
|
All Proxmox Backup Server configuration files resides inside directory
|
||||||
|
``/etc/proxmox-backup/``.
|
||||||
|
|
||||||
|
|
||||||
|
``acl.cfg``
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
File Format
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/acl/format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Roles
|
||||||
|
^^^^^
|
||||||
|
|
||||||
|
The following roles exist:
|
||||||
|
|
||||||
|
.. include:: config/acl/roles.rst
|
||||||
|
|
||||||
|
|
||||||
|
``datastore.cfg``
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
File Format
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/datastore/format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
.. 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``
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
File Format
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/user/format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/user/config.rst
|
||||||
|
|
||||||
|
|
||||||
|
``remote.cfg``
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
File Format
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/remote/format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/remote/config.rst
|
||||||
|
|
||||||
|
|
||||||
|
``sync.cfg``
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
File Format
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/sync/format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/sync/config.rst
|
||||||
|
|
||||||
|
|
||||||
|
``verification.cfg``
|
||||||
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
File Format
|
||||||
|
^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/verification/format.rst
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
.. include:: config/verification/config.rst
|
@ -14,6 +14,10 @@ pre {
|
|||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.topic {
|
||||||
|
background-color: #FAFAFA;
|
||||||
|
}
|
||||||
|
|
||||||
li a.current {
|
li a.current {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
border-bottom: 1px solid #000;
|
border-bottom: 1px solid #000;
|
||||||
@ -25,6 +29,23 @@ ul li.toctree-l1 > a {
|
|||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar ul {
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
div.sphinxsidebar ul ul {
|
||||||
|
list-style: circle;
|
||||||
|
}
|
||||||
|
div.sphinxsidebar ul ul ul {
|
||||||
|
list-style: square;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar ul a code {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
div.sphinxsidebar ul ul a {
|
||||||
|
border-bottom: 1px dotted #CCC;
|
||||||
|
}
|
||||||
|
|
||||||
div.sphinxsidebar form.search {
|
div.sphinxsidebar form.search {
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
@ -36,6 +57,11 @@ div.sphinxsidebar h3 {
|
|||||||
div.sphinxsidebar h1.logo-name {
|
div.sphinxsidebar h1.logo-name {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.document, div.footer {
|
||||||
|
width: min(100%, 1320px);
|
||||||
|
}
|
||||||
|
|
||||||
@media screen and (max-width: 875px) {
|
@media screen and (max-width: 875px) {
|
||||||
div.sphinxsidebar p.logo {
|
div.sphinxsidebar p.logo {
|
||||||
display: initial;
|
display: initial;
|
||||||
@ -44,9 +70,19 @@ div.sphinxsidebar h1.logo-name {
|
|||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
div.sphinxsidebar span {
|
div.sphinxsidebar span {
|
||||||
color: #AAA;
|
color: #EEE;
|
||||||
}
|
}
|
||||||
ul li.toctree-l1 > a {
|
.sphinxsidebar ul li.toctree-l1 > a, div.sphinxsidebar a {
|
||||||
color: #FFF;
|
color: #FFF;
|
||||||
}
|
}
|
||||||
|
div.sphinxsidebar {
|
||||||
|
background-color: #555;
|
||||||
|
}
|
||||||
|
div.body {
|
||||||
|
min-width: 300px;
|
||||||
|
}
|
||||||
|
div.footer {
|
||||||
|
display: block;
|
||||||
|
margin: 15px auto 0px auto;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,9 +61,7 @@ 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
|
||||||
`Encryption
|
:ref:`backup client encryption section <client_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?
|
||||||
|
@ -6,7 +6,113 @@ File Formats
|
|||||||
Proxmox File Archive Format (``.pxar``)
|
Proxmox File Archive Format (``.pxar``)
|
||||||
---------------------------------------
|
---------------------------------------
|
||||||
|
|
||||||
|
|
||||||
.. graphviz:: pxar-format-overview.dot
|
.. graphviz:: pxar-format-overview.dot
|
||||||
|
|
||||||
|
|
||||||
|
.. _data-blob-format:
|
||||||
|
|
||||||
|
Data Blob Format (``.blob``)
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
The data blob format is used to store small binary data. The magic number decides the exact format:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: auto
|
||||||
|
|
||||||
|
* - ``[66, 171, 56, 7, 190, 131, 112, 161]``
|
||||||
|
- unencrypted
|
||||||
|
- uncompressed
|
||||||
|
* - ``[49, 185, 88, 66, 111, 182, 163, 127]``
|
||||||
|
- unencrypted
|
||||||
|
- compressed
|
||||||
|
* - ``[123, 103, 133, 190, 34, 45, 76, 240]``
|
||||||
|
- encrypted
|
||||||
|
- uncompressed
|
||||||
|
* - ``[230, 89, 27, 191, 11, 191, 216, 11]``
|
||||||
|
- encrypted
|
||||||
|
- compressed
|
||||||
|
|
||||||
|
Compression algorithm is ``zstd``. Encryption cipher is ``AES_256_GCM``.
|
||||||
|
|
||||||
|
Unencrypted blobs use the following format:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
:widths: auto
|
||||||
|
|
||||||
|
* - ``MAGIC: [u8; 8]``
|
||||||
|
* - ``CRC32: [u8; 4]``
|
||||||
|
* - ``Data: (max 16MiB)``
|
||||||
|
|
||||||
|
Encrypted blobs additionally contains a 16 byte IV, followed by a 16
|
||||||
|
byte Authenticated Encyryption (AE) tag, followed by the encrypted
|
||||||
|
data:
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
|
||||||
|
* - ``MAGIC: [u8; 8]``
|
||||||
|
* - ``CRC32: [u8; 4]``
|
||||||
|
* - ``ÌV: [u8; 16]``
|
||||||
|
* - ``TAG: [u8; 16]``
|
||||||
|
* - ``Data: (max 16MiB)``
|
||||||
|
|
||||||
|
|
||||||
|
.. _fixed-index-format:
|
||||||
|
|
||||||
|
Fixed Index Format (``.fidx``)
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
All numbers are stored as little-endian.
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
|
||||||
|
* - ``MAGIC: [u8; 8]``
|
||||||
|
- ``[47, 127, 65, 237, 145, 253, 15, 205]``
|
||||||
|
* - ``uuid: [u8; 16]``,
|
||||||
|
- Unique ID
|
||||||
|
* - ``ctime: i64``,
|
||||||
|
- Creation Time (epoch)
|
||||||
|
* - ``index_csum: [u8; 32]``,
|
||||||
|
- Sha256 over the index (without header) ``SHA256(digest1||digest2||...)``
|
||||||
|
* - ``size: u64``,
|
||||||
|
- Image size
|
||||||
|
* - ``chunk_size: u64``,
|
||||||
|
- Chunk size
|
||||||
|
* - ``reserved: [u8; 4016]``,
|
||||||
|
- overall header size is one page (4096 bytes)
|
||||||
|
* - ``digest1: [u8; 32]``
|
||||||
|
- first chunk digest
|
||||||
|
* - ``digest2: [u8; 32]``
|
||||||
|
- next chunk
|
||||||
|
* - ...
|
||||||
|
- next chunk ...
|
||||||
|
|
||||||
|
|
||||||
|
.. _dynamic-index-format:
|
||||||
|
|
||||||
|
Dynamic Index Format (``.didx``)
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
All numbers are stored as little-endian.
|
||||||
|
|
||||||
|
.. list-table::
|
||||||
|
|
||||||
|
* - ``MAGIC: [u8; 8]``
|
||||||
|
- ``[28, 145, 78, 165, 25, 186, 179, 205]``
|
||||||
|
* - ``uuid: [u8; 16]``,
|
||||||
|
- Unique ID
|
||||||
|
* - ``ctime: i64``,
|
||||||
|
- Creation Time (epoch)
|
||||||
|
* - ``index_csum: [u8; 32]``,
|
||||||
|
- Sha256 over the index (without header) ``SHA256(offset1||digest1||offset2||digest2||...)``
|
||||||
|
* - ``reserved: [u8; 4032]``,
|
||||||
|
- Overall header size is one page (4096 bytes)
|
||||||
|
* - ``offset1: u64``
|
||||||
|
- End of first chunk
|
||||||
|
* - ``digest1: [u8; 32]``
|
||||||
|
- first chunk digest
|
||||||
|
* - ``offset2: u64``
|
||||||
|
- End of second chunk
|
||||||
|
* - ``digest2: [u8; 32]``
|
||||||
|
- second chunk digest
|
||||||
|
* - ...
|
||||||
|
- next chunk offset/digest
|
||||||
|
14
docs/gui.rst
@ -112,6 +112,18 @@ 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, managing tape media sets,
|
||||||
|
inventories, drives, changers and the tape backup jobs itself.
|
||||||
|
|
||||||
|
It also contains a subsection per standalone drive and per changer, with a
|
||||||
|
status and management view for those devices.
|
||||||
|
|
||||||
Datastore
|
Datastore
|
||||||
^^^^^^^^^
|
^^^^^^^^^
|
||||||
@ -129,7 +141,7 @@ top panel to view:
|
|||||||
* **Content**: Information on the datastore's backup groups and their respective
|
* **Content**: Information on the datastore's backup groups and their respective
|
||||||
contents
|
contents
|
||||||
* **Prune & GC**: Schedule :ref:`pruning <backup-pruning>` and :ref:`garbage
|
* **Prune & GC**: Schedule :ref:`pruning <backup-pruning>` and :ref:`garbage
|
||||||
collection <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 on the
|
* **Verify Jobs**: Create, manage and run :ref:`maintenance_verification` jobs on the
|
||||||
|
BIN
docs/images/screenshots/pbs-gui-tape-backup-jobs-add.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
docs/images/screenshots/pbs-gui-tape-backup-jobs.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
docs/images/screenshots/pbs-gui-tape-changer-overview.png
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
docs/images/screenshots/pbs-gui-tape-changers-add.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
docs/images/screenshots/pbs-gui-tape-changers.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
docs/images/screenshots/pbs-gui-tape-crypt-keys.png
Normal file
After Width: | Height: | Size: 72 KiB |
BIN
docs/images/screenshots/pbs-gui-tape-drives-add.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
docs/images/screenshots/pbs-gui-tape-drives.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
docs/images/screenshots/pbs-gui-tape-pools-add.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
docs/images/screenshots/pbs-gui-tape-pools.png
Normal file
After Width: | Height: | Size: 70 KiB |
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Welcome to the Proxmox Backup documentation!
|
Welcome to the Proxmox Backup documentation!
|
||||||
============================================
|
============================================
|
||||||
| Copyright (C) 2019-2020 Proxmox Server Solutions GmbH
|
| Copyright (C) 2019-2021 Proxmox Server Solutions GmbH
|
||||||
| Version |version| -- |today|
|
| Version |version| -- |today|
|
||||||
|
|
||||||
Permission is granted to copy, distribute and/or modify this document under the
|
Permission is granted to copy, distribute and/or modify this document under the
|
||||||
@ -25,14 +25,15 @@ 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
|
||||||
|
|
||||||
@ -45,6 +46,7 @@ in the section entitled "GNU Free Documentation License".
|
|||||||
:caption: Appendix
|
:caption: Appendix
|
||||||
|
|
||||||
command-syntax.rst
|
command-syntax.rst
|
||||||
|
configuration-files.rst
|
||||||
file-formats.rst
|
file-formats.rst
|
||||||
backup-protocol.rst
|
backup-protocol.rst
|
||||||
calendarevents.rst
|
calendarevents.rst
|
||||||
|
@ -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
|
Proxmox ships as a set of Debian packages to be installed on top of a standard
|
||||||
top of a standard Debian installation. After configuring the
|
Debian installation. After configuring the :ref:`package_repositories_client_only_apt`,
|
||||||
:ref:`sysadmin_package_repositories`, you need to run:
|
you need to run:
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
@ -123,12 +123,6 @@ top of a standard Debian installation. After configuring the
|
|||||||
# apt-get install proxmox-backup-client
|
# apt-get install proxmox-backup-client
|
||||||
|
|
||||||
|
|
||||||
Installing from source
|
.. note:: The client-only repository should be usable by most recent Debian and
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
Ubuntu derivatives.
|
||||||
|
|
||||||
.. todo:: Add section "Installing from source"
|
|
||||||
|
|
||||||
Installing statically linked binary
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
.. todo:: Add section "Installing statically linked binary"
|
|
||||||
|
@ -15,7 +15,7 @@ encryption (AE_). Using :term:`Rust` as the implementation language guarantees h
|
|||||||
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 <encryption>`. All
|
communication and backup content :ref:`encryption <client_encryption>`. All
|
||||||
client-server communication uses `TLS
|
client-server communication uses `TLS
|
||||||
<https://en.wikipedia.org/wiki/Transport_Layer_Security>`_, and backup data can
|
<https://en.wikipedia.org/wiki/Transport_Layer_Security>`_, and backup data can
|
||||||
be encrypted on the client-side before sending, making it safer to back up data
|
be encrypted on the client-side before sending, making it safer to back up data
|
||||||
@ -65,10 +65,10 @@ Main Features
|
|||||||
:Compression: The ultra-fast Zstandard_ compression is able to compress
|
:Compression: The ultra-fast Zstandard_ compression is able to compress
|
||||||
several gigabytes of data per second.
|
several gigabytes of data per second.
|
||||||
|
|
||||||
:Encryption: Backups can be encrypted on the client-side, using AES-256 in
|
:Encryption: Backups can be encrypted on the client-side, using AES-256 GCM_.
|
||||||
Galois/Counter Mode (GCM_). This authenticated encryption (AE_) mode
|
This authenticated encryption (AE_) mode provides very high performance on
|
||||||
provides very high performance on modern hardware. In addition to client-side
|
modern hardware. In addition to client-side encryption, all data is
|
||||||
encryption, all data is transferred via a secure TLS connection.
|
transferred via a secure TLS connection.
|
||||||
|
|
||||||
: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.
|
||||||
@ -76,8 +76,16 @@ Main Features
|
|||||||
: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.
|
||||||
|
|
||||||
:Support: Enterprise support will be available from `Proxmox`_ once the beta
|
:No Limits: Proxmox Backup Server has no artificial limits for backup storage or
|
||||||
phase is over.
|
backup-clients.
|
||||||
|
|
||||||
|
:Enterprise Support: Proxmox Server Solutions GmbH offers enterprise support in
|
||||||
|
form of `Proxmox Backup Server Subscription Plans
|
||||||
|
<https://www.proxmox.com/en/proxmox-backup-server/pricing>`_. Users at every
|
||||||
|
subscription level get access to the Proxmox Backup :ref:`Enterprise
|
||||||
|
Repository <sysadmin_package_repos_enterprise>`. In addition, with a Basic,
|
||||||
|
Standard or Premium subscription, users have access to the :ref:`Proxmox
|
||||||
|
Customer Portal <get_help_enterprise_support>`.
|
||||||
|
|
||||||
|
|
||||||
Reasons for Data Backup?
|
Reasons for Data Backup?
|
||||||
@ -117,8 +125,8 @@ Proxmox Backup Server consists of multiple components:
|
|||||||
* A client CLI tool (`proxmox-backup-client`) to access the server easily from
|
* A client CLI tool (`proxmox-backup-client`) to access the server easily from
|
||||||
any `Linux amd64` environment
|
any `Linux amd64` environment
|
||||||
|
|
||||||
Aside from the web interface, everything is written in the Rust programming
|
Aside from the web interface, most parts of Proxmox Backup Server are written in
|
||||||
language.
|
the Rust programming language.
|
||||||
|
|
||||||
"The Rust programming language helps you write faster, more reliable software.
|
"The Rust programming language helps you write faster, more reliable software.
|
||||||
High-level ergonomics and low-level control are often at odds in programming
|
High-level ergonomics and low-level control are often at odds in programming
|
||||||
@ -134,6 +142,17 @@ language.
|
|||||||
Getting Help
|
Getting Help
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
.. _get_help_enterprise_support:
|
||||||
|
|
||||||
|
Enterprise Support
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
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
|
||||||
|
`Proxmox Customer Portal <https://my.proxmox.com>`_. The customer portal
|
||||||
|
provides support with guaranteed response times from the Proxmox developers.
|
||||||
|
For more information or for volume discounts, please contact office@proxmox.com.
|
||||||
|
|
||||||
Community Support Forum
|
Community Support Forum
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
// IBM LTO Ultrium Cartridge Label Specification
|
// IBM LTO Ultrium Cartridge Label Specification
|
||||||
// http://www-01.ibm.com/support/docview.wss?uid=ssg1S7000429
|
// http://www-01.ibm.com/support/docview.wss?uid=ssg1S7000429
|
||||||
|
|
||||||
let code39_codes = {
|
const code39_codes = {
|
||||||
"1": ['B', 's', 'b', 'S', 'b', 's', 'b', 's', 'B'],
|
"1": ['B', 's', 'b', 'S', 'b', 's', 'b', 's', 'B'],
|
||||||
"A": ['B', 's', 'b', 's', 'b', 'S', 'b', 's', 'B'],
|
"A": ['B', 's', 'b', 's', 'b', 'S', 'b', 's', 'B'],
|
||||||
"K": ['B', 's', 'b', 's', 'b', 's', 'b', 'S', 'B'],
|
"K": ['B', 's', 'b', 's', 'b', 's', 'b', 'S', 'B'],
|
||||||
@ -53,10 +53,10 @@ let code39_codes = {
|
|||||||
"0": ['b', 's', 'b', 'S', 'B', 's', 'B', 's', 'b'],
|
"0": ['b', 's', 'b', 'S', 'B', 's', 'B', 's', 'b'],
|
||||||
"J": ['b', 's', 'b', 's', 'B', 'S', 'B', 's', 'b'],
|
"J": ['b', 's', 'b', 's', 'B', 'S', 'B', 's', 'b'],
|
||||||
"T": ['b', 's', 'b', 's', 'B', 's', 'B', 'S', 'b'],
|
"T": ['b', 's', 'b', 's', 'B', 's', 'B', 'S', 'b'],
|
||||||
"*": ['b', 'S', 'b', 's', 'B', 's', 'B', 's', 'b']
|
"*": ['b', 'S', 'b', 's', 'B', 's', 'B', 's', 'b'],
|
||||||
};
|
};
|
||||||
|
|
||||||
let colors = [
|
const colors = [
|
||||||
'#BB282E',
|
'#BB282E',
|
||||||
'#FAE54A',
|
'#FAE54A',
|
||||||
'#9AC653',
|
'#9AC653',
|
||||||
@ -66,25 +66,22 @@ let colors = [
|
|||||||
'#E27B99',
|
'#E27B99',
|
||||||
'#67A945',
|
'#67A945',
|
||||||
'#F6B855',
|
'#F6B855',
|
||||||
'#705A81'
|
'#705A81',
|
||||||
];
|
];
|
||||||
|
|
||||||
let lto_label_width = 70;
|
const lto_label_width = 70;
|
||||||
let lto_label_height = 17;
|
const lto_label_height = 16.9;
|
||||||
|
|
||||||
function foreach_label(page_layout, callback) {
|
function foreach_label(page_layout, callback) {
|
||||||
|
|
||||||
let count = 0;
|
let count = 0;
|
||||||
let row = 0;
|
let row = 0;
|
||||||
let height = page_layout.margin_top;
|
let height = page_layout.margin_top;
|
||||||
|
|
||||||
while ((height + page_layout.label_height) <= page_layout.page_height) {
|
while ((height + page_layout.label_height) <= page_layout.page_height) {
|
||||||
|
|
||||||
let column = 0;
|
let column = 0;
|
||||||
let width = page_layout.margin_left;
|
let width = page_layout.margin_left;
|
||||||
|
|
||||||
while ((width + page_layout.label_width) <= page_layout.page_width) {
|
while ((width + page_layout.label_width) <= page_layout.page_width) {
|
||||||
|
|
||||||
callback(column, row, count, width, height);
|
callback(column, row, count, width, height);
|
||||||
count += 1;
|
count += 1;
|
||||||
|
|
||||||
@ -97,11 +94,9 @@ function foreach_label(page_layout, callback) {
|
|||||||
height += page_layout.label_height;
|
height += page_layout.label_height;
|
||||||
height += page_layout.row_spacing;
|
height += page_layout.row_spacing;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function compute_max_labels(page_layout) {
|
function compute_max_labels(page_layout) {
|
||||||
|
|
||||||
let max_labels = 0;
|
let max_labels = 0;
|
||||||
foreach_label(page_layout, function() { max_labels += 1; });
|
foreach_label(page_layout, function() { max_labels += 1; });
|
||||||
return max_labels;
|
return max_labels;
|
||||||
@ -110,10 +105,10 @@ function compute_max_labels(page_layout) {
|
|||||||
function svg_label(mode, label, label_type, pagex, pagey, label_borders) {
|
function svg_label(mode, label, label_type, pagex, pagey, label_borders) {
|
||||||
let svg = "";
|
let svg = "";
|
||||||
|
|
||||||
if (label.length != 6) {
|
if (label.length !== 6) {
|
||||||
throw "wrong label length";
|
throw "wrong label length";
|
||||||
}
|
}
|
||||||
if (label_type.length != 2) {
|
if (label_type.length !== 2) {
|
||||||
throw "wrong label_type length";
|
throw "wrong label_type length";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,20 +121,22 @@ function svg_label(mode, label, label_type, pagex, pagey, label_borders) {
|
|||||||
let xpos = pagex + code_width;
|
let xpos = pagex + code_width;
|
||||||
let height = 12;
|
let height = 12;
|
||||||
|
|
||||||
|
let label_rect = `x='${pagex}' y='${pagey}' width='${lto_label_width}' height='${lto_label_height}'`;
|
||||||
|
|
||||||
if (mode === 'placeholder') {
|
if (mode === 'placeholder') {
|
||||||
if (label_borders) {
|
if (label_borders) {
|
||||||
svg += `<rect class='unprintable' x='${pagex}' y='${pagey}' width='${lto_label_width}' height='${lto_label_height}' fill='none' style='stroke:black;stroke-width:0.1;'/>`;
|
svg += `<rect class='unprintable' ${label_rect} fill='none' style='stroke:black;stroke-width:0.1;'/>`;
|
||||||
}
|
}
|
||||||
return svg;
|
return svg;
|
||||||
}
|
}
|
||||||
if (label_borders) {
|
if (label_borders) {
|
||||||
svg += `<rect x='${pagex}' y='${pagey}' width='${lto_label_width}' height='${lto_label_height}' fill='none' style='stroke:black;stroke-width:0.1;'/>`;
|
svg += `<rect ${label_rect} fill='none' style='stroke:black;stroke-width:0.1;'/>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mode === "color" || mode == "frame") {
|
if (mode === "color" || mode === "frame") {
|
||||||
let w = lto_label_width/8;
|
let w = lto_label_width/8;
|
||||||
let h = lto_label_height - height;
|
let h = lto_label_height - height;
|
||||||
for (var i = 0; i < 7; i++) {
|
for (let i = 0; i < 7; i++) {
|
||||||
let textx = w/2 + pagex + i*w;
|
let textx = w/2 + pagex + i*w;
|
||||||
let texty = pagey;
|
let texty = pagey;
|
||||||
|
|
||||||
@ -168,7 +165,7 @@ function svg_label(mode, label, label_type, pagex, pagey, label_borders) {
|
|||||||
|
|
||||||
let raw_label = `*${label}${label_type}*`;
|
let raw_label = `*${label}${label_type}*`;
|
||||||
|
|
||||||
for (var i = 0; i < raw_label.length; i++) {
|
for (let i = 0; i < raw_label.length; i++) {
|
||||||
let letter = raw_label.charAt(i);
|
let letter = raw_label.charAt(i);
|
||||||
|
|
||||||
let code = code39_codes[letter];
|
let code = code39_codes[letter];
|
||||||
@ -186,7 +183,6 @@ function svg_label(mode, label, label_type, pagex, pagey, label_borders) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (let c of code) {
|
for (let c of code) {
|
||||||
|
|
||||||
if (c === 's') {
|
if (c === 's') {
|
||||||
xpos += small;
|
xpos += small;
|
||||||
continue;
|
continue;
|
||||||
@ -216,7 +212,7 @@ function html_page_header() {
|
|||||||
/* no page margins */
|
/* no page margins */
|
||||||
html += "@page{margin-left: 0px;margin-right: 0px;margin-top: 0px;margin-bottom: 0px;}";
|
html += "@page{margin-left: 0px;margin-right: 0px;margin-top: 0px;margin-bottom: 0px;}";
|
||||||
/* to hide things on printed page */
|
/* to hide things on printed page */
|
||||||
html += "@media print { .unprintable { visibility: hidden; } }";
|
html += "@media print { .unprintable { visibility: hidden; } }";
|
||||||
|
|
||||||
html += "</style>";
|
html += "</style>";
|
||||||
|
|
||||||
@ -241,7 +237,6 @@ function printBarcodePage() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function generate_barcode_page(target_id, page_layout, label_list, calibration) {
|
function generate_barcode_page(target_id, page_layout, label_list, calibration) {
|
||||||
|
|
||||||
let svg = svg_page_header(page_layout.page_width, page_layout.page_height);
|
let svg = svg_page_header(page_layout.page_width, page_layout.page_height);
|
||||||
|
|
||||||
let c = calibration;
|
let c = calibration;
|
||||||
@ -255,7 +250,6 @@ function generate_barcode_page(target_id, page_layout, label_list, calibration)
|
|||||||
svg += '>';
|
svg += '>';
|
||||||
|
|
||||||
foreach_label(page_layout, function(column, row, count, xpos, ypos) {
|
foreach_label(page_layout, function(column, row, count, xpos, ypos) {
|
||||||
|
|
||||||
if (count >= label_list.length) { return; }
|
if (count >= label_list.length) { return; }
|
||||||
|
|
||||||
let item = label_list[count];
|
let item = label_list[count];
|
||||||
@ -297,12 +291,11 @@ function setupPrintFrame(frame, page_width, page_height) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function generate_calibration_page(target_id, page_layout, calibration) {
|
function generate_calibration_page(target_id, page_layout, calibration) {
|
||||||
|
|
||||||
let frame = document.getElementById(target_id);
|
let frame = document.getElementById(target_id);
|
||||||
|
|
||||||
setupPrintFrame(frame, page_layout.page_width, page_layout.page_height);
|
setupPrintFrame(frame, page_layout.page_width, page_layout.page_height);
|
||||||
|
|
||||||
let svg = svg_page_header( page_layout.page_width, page_layout.page_height);
|
let svg = svg_page_header(page_layout.page_width, page_layout.page_height);
|
||||||
|
|
||||||
svg += "<defs>";
|
svg += "<defs>";
|
||||||
svg += "<marker id='endarrow' markerWidth='10' markerHeight='7' ";
|
svg += "<marker id='endarrow' markerWidth='10' markerHeight='7' ";
|
||||||
|
@ -4,7 +4,7 @@ Ext.define('LabelList', {
|
|||||||
|
|
||||||
plugins: {
|
plugins: {
|
||||||
ptype: 'cellediting',
|
ptype: 'cellediting',
|
||||||
clicksToEdit: 1
|
clicksToEdit: 1,
|
||||||
},
|
},
|
||||||
|
|
||||||
selModel: 'cellmodel',
|
selModel: 'cellmodel',
|
||||||
@ -44,7 +44,7 @@ Ext.define('LabelList', {
|
|||||||
xtype: 'prefixfield',
|
xtype: 'prefixfield',
|
||||||
allowBlank: false,
|
allowBlank: false,
|
||||||
},
|
},
|
||||||
renderer: function (value, metaData, record) {
|
renderer: function(value, metaData, record) {
|
||||||
console.log(record);
|
console.log(record);
|
||||||
if (record.data.mode === 'placeholder') {
|
if (record.data.mode === 'placeholder') {
|
||||||
return "-";
|
return "-";
|
||||||
@ -60,7 +60,7 @@ Ext.define('LabelList', {
|
|||||||
xtype: 'ltoTapeType',
|
xtype: 'ltoTapeType',
|
||||||
allowBlank: false,
|
allowBlank: false,
|
||||||
},
|
},
|
||||||
renderer: function (value, metaData, record) {
|
renderer: function(value, metaData, record) {
|
||||||
console.log(record);
|
console.log(record);
|
||||||
if (record.data.mode === 'placeholder') {
|
if (record.data.mode === 'placeholder') {
|
||||||
return "-";
|
return "-";
|
||||||
@ -133,7 +133,7 @@ Ext.define('LabelList', {
|
|||||||
handler: function(grid, rowIndex) {
|
handler: function(grid, rowIndex) {
|
||||||
grid.getStore().removeAt(rowIndex);
|
grid.getStore().removeAt(rowIndex);
|
||||||
},
|
},
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
@ -4,7 +4,6 @@ if (Ext.isFirefox) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
let count_fixed = 0;
|
let count_fixed = 0;
|
||||||
@ -44,20 +43,16 @@ function draw_labels(target_id, label_list, page_layout, calibration) {
|
|||||||
count = fill_size;
|
count = fill_size;
|
||||||
}
|
}
|
||||||
rest -= count;
|
rest -= count;
|
||||||
|
} else if (item.end <= item.start) {
|
||||||
|
count = 1;
|
||||||
} else {
|
} else {
|
||||||
if (item.end <= item.start) {
|
count = (item.end - item.start) + 1;
|
||||||
count = 1;
|
|
||||||
} else {
|
|
||||||
count = (item.end - item.start) + 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < count; j++) {
|
for (j = 0; j < count; j++) {
|
||||||
|
|
||||||
let id = item.start + j;
|
let id = item.start + j;
|
||||||
|
|
||||||
if (item.prefix.length == 6) {
|
if (item.prefix.length == 6) {
|
||||||
|
|
||||||
list.push({
|
list.push({
|
||||||
label: item.prefix,
|
label: item.prefix,
|
||||||
tape_type: item.tape_type,
|
tape_type: item.tape_type,
|
||||||
@ -66,9 +61,7 @@ function draw_labels(target_id, label_list, page_layout, calibration) {
|
|||||||
});
|
});
|
||||||
rest += count - j - 1;
|
rest += count - j - 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
let pad_len = 6-item.prefix.length;
|
let pad_len = 6-item.prefix.length;
|
||||||
let label = item.prefix + id.toString().padStart(pad_len, 0);
|
let label = item.prefix + id.toString().padStart(pad_len, 0);
|
||||||
|
|
||||||
@ -115,10 +108,10 @@ Ext.define('MainView', {
|
|||||||
label_list.push(record.data);
|
label_list.push(record.data);
|
||||||
});
|
});
|
||||||
|
|
||||||
let page_layout_view = view.down("pageLayoutPanel");
|
let page_layout_view = view.down("pageLayoutPanel");
|
||||||
let page_layout = page_layout_view.getValues();
|
let page_layout = page_layout_view.getValues();
|
||||||
|
|
||||||
let calibration_view = view.down("pageCalibration");
|
let calibration_view = view.down("pageCalibration");
|
||||||
let page_calibration = calibration_view.getValues();
|
let page_calibration = calibration_view.getValues();
|
||||||
|
|
||||||
draw_labels("print_frame", label_list, page_layout, page_calibration);
|
draw_labels("print_frame", label_list, page_layout, page_calibration);
|
||||||
@ -127,10 +120,10 @@ Ext.define('MainView', {
|
|||||||
update_calibration_preview: function() {
|
update_calibration_preview: function() {
|
||||||
let me = this;
|
let me = this;
|
||||||
let view = me.getView();
|
let view = me.getView();
|
||||||
let page_layout_view = view.down("pageLayoutPanel");
|
let page_layout_view = view.down("pageLayoutPanel");
|
||||||
let page_layout = page_layout_view.getValues();
|
let page_layout = page_layout_view.getValues();
|
||||||
|
|
||||||
let calibration_view = view.down("pageCalibration");
|
let calibration_view = view.down("pageCalibration");
|
||||||
let page_calibration = calibration_view.getValues();
|
let page_calibration = calibration_view.getValues();
|
||||||
console.log(page_calibration);
|
console.log(page_calibration);
|
||||||
generate_calibration_page('print_frame', page_layout, page_calibration);
|
generate_calibration_page('print_frame', page_layout, page_calibration);
|
||||||
@ -195,19 +188,18 @@ Ext.define('MainView', {
|
|||||||
border: false,
|
border: false,
|
||||||
flex: 1,
|
flex: 1,
|
||||||
scrollable: true,
|
scrollable: true,
|
||||||
tools:[{
|
tools: [{
|
||||||
type: 'print',
|
type: 'print',
|
||||||
tooltip: 'Open Print Dialog',
|
tooltip: 'Open Print Dialog',
|
||||||
handler: function(event, toolEl, panelHeader) {
|
handler: function(event, toolEl, panelHeader) {
|
||||||
printBarcodePage();
|
printBarcodePage();
|
||||||
}
|
},
|
||||||
}],
|
}],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
||||||
Ext.onReady(function() {
|
Ext.onReady(function() {
|
||||||
|
|
||||||
Ext.create('MainView', {
|
Ext.create('MainView', {
|
||||||
renderTo: Ext.getBody(),
|
renderTo: Ext.getBody(),
|
||||||
});
|
});
|
||||||
|
@ -31,8 +31,8 @@ Ext.define('PageCalibration', {
|
|||||||
scalex = 100/values.d_x;
|
scalex = 100/values.d_x;
|
||||||
scaley = 100/values.d_y;
|
scaley = 100/values.d_y;
|
||||||
|
|
||||||
let offsetx = ((50*scalex) - values.s_x)/scalex;
|
let offsetx = ((50 - values.s_x) - (50*scalex - 50))/scalex;
|
||||||
let offsety = ((50*scaley) - values.s_y)/scaley;
|
let offsety = ((50 - values.s_y) - (50*scaley - 50))/scaley;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
scalex: scalex,
|
scalex: scalex,
|
||||||
@ -139,4 +139,4 @@ Ext.define('PageCalibration', {
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
})
|
});
|
||||||
|
@ -106,7 +106,7 @@ Ext.define('PageLayoutPanel', {
|
|||||||
xtype: 'numberfield',
|
xtype: 'numberfield',
|
||||||
name: 'label_height',
|
name: 'label_height',
|
||||||
fieldLabel: 'Label height',
|
fieldLabel: 'Label height',
|
||||||
minValue: 17,
|
minValue: 15,
|
||||||
allowBlank: false,
|
allowBlank: false,
|
||||||
value: 17,
|
value: 17,
|
||||||
},
|
},
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
let paper_sizes = {
|
const paper_sizes = {
|
||||||
a4: {
|
a4: {
|
||||||
comment: 'A4 (plain)',
|
comment: 'A4 (plain)',
|
||||||
page_width: 210,
|
page_width: 210,
|
||||||
@ -15,13 +15,13 @@ let paper_sizes = {
|
|||||||
page_width: 210,
|
page_width: 210,
|
||||||
page_height: 297,
|
page_height: 297,
|
||||||
label_width: 70,
|
label_width: 70,
|
||||||
label_height: 17,
|
label_height: 16.9,
|
||||||
margin_left: 0,
|
margin_left: 0,
|
||||||
margin_top: 4,
|
margin_top: 5,
|
||||||
column_spacing: 0,
|
column_spacing: 0,
|
||||||
row_spacing: 0,
|
row_spacing: 0,
|
||||||
},
|
},
|
||||||
}
|
};
|
||||||
|
|
||||||
function paper_size_combo_data() {
|
function paper_size_combo_data() {
|
||||||
let data = [];
|
let data = [];
|
||||||
|
@ -118,11 +118,11 @@ high, but you cannot recreate backup snapshots from the past.
|
|||||||
Garbage Collection
|
Garbage Collection
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
You can monitor and run :ref:`garbage collection <garbage-collection>` on the
|
You can monitor and run :ref:`garbage collection <client_garbage-collection>` on the
|
||||||
Proxmox Backup Server using the ``garbage-collection`` subcommand of
|
Proxmox Backup Server using the ``garbage-collection`` subcommand of
|
||||||
``proxmox-backup-manager``. You can use the ``start`` subcommand to manually
|
``proxmox-backup-manager``. You can use the ``start`` subcommand to manually
|
||||||
start garbage collection on an entire datastore and the ``status`` subcommand to
|
start garbage collection on an entire datastore and the ``status`` subcommand to
|
||||||
see attributes relating to the :ref:`garbage collection <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. From here, you can edit the schedule at which garbage
|
GC** from the top panel. From here, you can edit the schedule at which garbage
|
||||||
@ -142,13 +142,13 @@ Verification
|
|||||||
Proxmox Backup offers various verification options to ensure that backup data is
|
Proxmox Backup offers various verification options to ensure that backup data is
|
||||||
intact. Verification is generally carried out through the creation of verify
|
intact. Verification is generally carried out through the creation of verify
|
||||||
jobs. These are scheduled tasks that run verification at a given interval (see
|
jobs. These are scheduled tasks that run verification at a given interval (see
|
||||||
:ref:`calendar-events`). With these, you can set whether already verified
|
:ref:`calendar-event-scheduling`). With these, you can set whether already verified
|
||||||
snapshots are ignored, as well as set a time period, after which verified jobs
|
snapshots are ignored, as well as set a time period, after which verified jobs
|
||||||
are checked again. The interface for creating verify jobs can be found under the
|
are checked again. The interface for creating verify jobs can be 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 becuase physical drives
|
if a previous verification was successful. This is because 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
|
||||||
|
@ -65,7 +65,7 @@ the ``proxmox-backup-manager sync-job`` command. The configuration information
|
|||||||
for sync jobs is stored at ``/etc/proxmox-backup/sync.cfg``. To create a new
|
for sync jobs is stored at ``/etc/proxmox-backup/sync.cfg``. To create a new
|
||||||
sync job, click the add button in the GUI, or use the ``create`` subcommand.
|
sync job, click the add button in the GUI, or use the ``create`` subcommand.
|
||||||
After creating a sync job, you can either start it manually from the GUI or
|
After creating a sync job, you can either start it manually from the GUI or
|
||||||
provide it with a schedule (see :ref:`calendar-events`) to run regularly.
|
provide it with a schedule (see :ref:`calendar-event-scheduling`) to run regularly.
|
||||||
|
|
||||||
.. code-block:: console
|
.. code-block:: console
|
||||||
|
|
||||||
|
24
docs/output-format.rst
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
Most commands producing output supports the ``--output-format``
|
||||||
|
parameter. It accepts the following values:
|
||||||
|
|
||||||
|
:``text``: Text format (default). Structured data is rendered as a table.
|
||||||
|
|
||||||
|
:``json``: JSON (single line).
|
||||||
|
|
||||||
|
:``json-pretty``: JSON (multiple lines, nicely formatted).
|
||||||
|
|
||||||
|
|
||||||
|
Also, the following environment variables can modify output behavior:
|
||||||
|
|
||||||
|
``PROXMOX_OUTPUT_FORMAT``
|
||||||
|
Defines the default output format.
|
||||||
|
|
||||||
|
``PROXMOX_OUTPUT_NO_BORDER``
|
||||||
|
If set (to any value), do not render table borders.
|
||||||
|
|
||||||
|
``PROXMOX_OUTPUT_NO_HEADER``
|
||||||
|
If set (to any value), do not render table headers.
|
||||||
|
|
||||||
|
.. note:: The ``text`` format is designed to be human readable, and
|
||||||
|
not meant to be parsed by automation tools. Please use the ``json``
|
||||||
|
format if you need to process the output.
|
@ -29,6 +29,8 @@ update``.
|
|||||||
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.
|
||||||
|
|
||||||
|
.. _package_repos_secure_apt:
|
||||||
|
|
||||||
SecureApt
|
SecureApt
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
@ -69,10 +71,12 @@ Here, the output should be:
|
|||||||
|
|
||||||
f3f6c5a3a67baf38ad178e5ff1ee270c /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
f3f6c5a3a67baf38ad178e5ff1ee270c /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
|
||||||
|
|
||||||
|
.. _sysadmin_package_repos_enterprise:
|
||||||
|
|
||||||
`Proxmox Backup`_ Enterprise Repository
|
`Proxmox Backup`_ Enterprise Repository
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
This will be the default, stable, and recommended repository. It is available for
|
This is the stable, recommended repository. It is available for
|
||||||
all `Proxmox Backup`_ subscription users. It contains the most stable packages,
|
all `Proxmox Backup`_ subscription users. It contains the most stable packages,
|
||||||
and is suitable for production use. The ``pbs-enterprise`` repository is
|
and is suitable for production use. The ``pbs-enterprise`` repository is
|
||||||
enabled by default:
|
enabled by default:
|
||||||
@ -137,3 +141,40 @@ You can access this repository by adding the following line to
|
|||||||
:caption: sources.list entry for ``pbstest``
|
:caption: sources.list entry for ``pbstest``
|
||||||
|
|
||||||
deb http://download.proxmox.com/debian/pbs buster 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.
|
||||||
|
|
||||||
|
This repository is tested with:
|
||||||
|
|
||||||
|
- Debian Buster
|
||||||
|
- Ubuntu 20.04 LTS
|
||||||
|
|
||||||
|
It may work with older, and should work with more recent released versions.
|
||||||
|
|
||||||
|
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.
|
||||||
|
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
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Copyright and Disclaimer
|
Copyright and Disclaimer
|
||||||
========================
|
========================
|
||||||
|
|
||||||
Copyright (C) 2007-2019 Proxmox Server Solutions GmbH
|
Copyright (C) 2007-2021 Proxmox Server Solutions GmbH
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU Affero General Public License as
|
it under the terms of the GNU Affero General Public License as
|
||||||
|
2
docs/pmt/description.rst
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
The ``pmt`` command controls Linux tape devices.
|
||||||
|
|
42
docs/pmt/man1.rst
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
==========================
|
||||||
|
pmt
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Control Linux Tape Devices
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 1
|
||||||
|
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
.. include:: synopsis.rst
|
||||||
|
|
||||||
|
|
||||||
|
Common Options
|
||||||
|
==============
|
||||||
|
|
||||||
|
.. include:: options.rst
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: description.rst
|
||||||
|
|
||||||
|
|
||||||
|
ENVIRONMENT
|
||||||
|
===========
|
||||||
|
|
||||||
|
:TAPE: If set, replaces the `--device` option.
|
||||||
|
|
||||||
|
:PROXMOX_TAPE_DRIVE: If set, replaces the `--drive` option.
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../pbs-copyright.rst
|
15
docs/pmt/options.rst
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
All commands support the following parameters to specify the tape device:
|
||||||
|
|
||||||
|
--device <path> Path to the Linux tape device
|
||||||
|
|
||||||
|
--drive <name> Use drive from Proxmox Backup Server configuration.
|
||||||
|
|
||||||
|
|
||||||
|
Commands which generate output support the ``--output-format``
|
||||||
|
parameter. It accepts the following values:
|
||||||
|
|
||||||
|
:``text``: Text format (default). Human readable.
|
||||||
|
|
||||||
|
:``json``: JSON (single line).
|
||||||
|
|
||||||
|
:``json-pretty``: JSON (multiple lines, nicely formatted).
|
@ -1,6 +1,3 @@
|
|||||||
Description
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
The ``pmtx`` command controls SCSI media changer devices (tape
|
The ``pmtx`` command controls SCSI media changer devices (tape
|
||||||
autoloader).
|
autoloader).
|
||||||
|
|
||||||
|
@ -18,11 +18,40 @@ Synopsis
|
|||||||
|
|
||||||
.. include:: synopsis.rst
|
.. include:: synopsis.rst
|
||||||
|
|
||||||
|
|
||||||
|
Common Options
|
||||||
|
==============
|
||||||
|
|
||||||
|
All command supports the following parameters to specify the changer device:
|
||||||
|
|
||||||
|
--device <path> Path to Linux generic SCSI device (e.g. '/dev/sg4')
|
||||||
|
|
||||||
|
--changer <name> Use changer from Proxmox Backup Server configuration.
|
||||||
|
|
||||||
|
|
||||||
|
Commands generating output supports the ``--output-format``
|
||||||
|
parameter. It accepts the following values:
|
||||||
|
|
||||||
|
:``text``: Text format (default). Human readable.
|
||||||
|
|
||||||
|
:``json``: JSON (single line).
|
||||||
|
|
||||||
|
:``json-pretty``: JSON (multiple lines, nicely formatted).
|
||||||
|
|
||||||
|
|
||||||
Description
|
Description
|
||||||
============
|
============
|
||||||
|
|
||||||
.. include:: description.rst
|
.. include:: description.rst
|
||||||
|
|
||||||
|
|
||||||
.. include:: ../pbs-copyright.rst
|
ENVIRONMENT
|
||||||
|
===========
|
||||||
|
|
||||||
|
:CHANGER: If set, replaces the `--device` option
|
||||||
|
|
||||||
|
:PROXMOX_TAPE_DRIVE: If set, use the Proxmox Backup Server
|
||||||
|
configuration to find the associcated changer device.
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../pbs-copyright.rst
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
This is just a test.
|
This tool implements a backup server client, i.e. it can connect to a
|
||||||
|
backup servers to issue management commands and to create or restore
|
||||||
.. NOTE:: No further info.
|
backups.
|
||||||
|
|
||||||
|
@ -31,6 +31,12 @@ Those command are available when you start an intercative restore shell:
|
|||||||
.. include:: catalog-shell-synopsis.rst
|
.. include:: catalog-shell-synopsis.rst
|
||||||
|
|
||||||
|
|
||||||
|
Common Options
|
||||||
|
==============
|
||||||
|
|
||||||
|
.. include:: ../output-format.rst
|
||||||
|
|
||||||
|
|
||||||
Description
|
Description
|
||||||
============
|
============
|
||||||
|
|
||||||
|
@ -1,4 +1,2 @@
|
|||||||
This is just a test.
|
This tool exposes the whole backup server management API on the
|
||||||
|
command line.
|
||||||
.. NOTE:: No further info.
|
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
This is just a test.
|
This daemon exposes the whole Proxmox Backup Server API on TCP port
|
||||||
|
8007 using HTTPS. It runs as user ``backup`` and has very limited
|
||||||
.. NOTE:: No further info.
|
permissions. Operation requiring more permissions are forwarded to
|
||||||
|
the local ``proxmox-backup`` service.
|
||||||
|
|
||||||
|
7
docs/proxmox-backup/description.rst
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
This daemon exposes the Proxmox Backup Server management API on
|
||||||
|
``127.0.0.1:82``. It runs as ``root`` and has permission to do all
|
||||||
|
privileged operations.
|
||||||
|
|
||||||
|
NOTE: The daemon listens to a local address only, so you cannot access
|
||||||
|
it from outside. The ``proxmox-backup-proxy`` daemon exposes the API
|
||||||
|
to the outside world.
|
41
docs/proxmox-backup/man1.rst
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
==========================
|
||||||
|
proxmox-backup
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Proxmox Backup Local API Server
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 1
|
||||||
|
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
==========
|
||||||
|
|
||||||
|
This daemon is normally started and managed as ``systemd`` service::
|
||||||
|
|
||||||
|
systemctl start proxmox-backup
|
||||||
|
|
||||||
|
systemctl stop proxmox-backup
|
||||||
|
|
||||||
|
systemctl status proxmox-backup
|
||||||
|
|
||||||
|
For debugging, you can start the daemon in foreground using::
|
||||||
|
|
||||||
|
proxmox-backup-api
|
||||||
|
|
||||||
|
.. NOTE:: You need to stop the service before starting the daemon in
|
||||||
|
foreground.
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
============
|
||||||
|
|
||||||
|
.. include:: description.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../pbs-copyright.rst
|
3
docs/proxmox-file-restore/description.rst
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
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.
|
||||||
|
|
28
docs/proxmox-file-restore/man1.rst
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
==========================
|
||||||
|
proxmox-file-restore
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../epilog.rst
|
||||||
|
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
Command line tool for restoring files and directories from PBS archives
|
||||||
|
-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 1
|
||||||
|
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. include:: synopsis.rst
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
============
|
||||||
|
|
||||||
|
.. include:: description.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../pbs-copyright.rst
|
1
docs/proxmox-tape/description.rst
Normal file
@ -0,0 +1 @@
|
|||||||
|
This tool can configure and manage tape backups.
|
28
docs/proxmox-tape/man1.rst
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
==========================
|
||||||
|
proxmox-tape
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. include:: ../epilog.rst
|
||||||
|
|
||||||
|
-------------------------------------------------------------
|
||||||
|
Proxmox Tape Backup Command Line Tool
|
||||||
|
-------------------------------------------------------------
|
||||||
|
|
||||||
|
:Author: |AUTHOR|
|
||||||
|
:Version: Version |VERSION|
|
||||||
|
:Manual section: 1
|
||||||
|
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
========
|
||||||
|
|
||||||
|
.. include:: synopsis.rst
|
||||||
|
|
||||||
|
Description
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. include:: description.rst
|
||||||
|
|
||||||
|
|
||||||
|
.. include:: ../pbs-copyright.rst
|
||||||
|
|
@ -3,6 +3,26 @@
|
|||||||
`Proxmox VE`_ Integration
|
`Proxmox VE`_ Integration
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
A Proxmox Backup Server can be integrated into a Proxmox VE setup by adding the
|
||||||
|
former as a storage in a Proxmox VE standalone or cluster setup.
|
||||||
|
|
||||||
|
See also the `Proxmox VE Storage - Proxmox Backup Server
|
||||||
|
<https://pve.proxmox.com/pve-docs/pve-admin-guide.html#storage_pbs>`_ section
|
||||||
|
of the Proxmox VE Administration Guide for Proxmox VE specific documentation.
|
||||||
|
|
||||||
|
|
||||||
|
Using the Proxmox VE Web-Interface
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Proxmox VE has native API and web-interface integration of Proxmox Backup
|
||||||
|
Server since the `Proxmox VE 6.3 release
|
||||||
|
<https://pve.proxmox.com/wiki/Roadmap#Proxmox_VE_6.3>`_.
|
||||||
|
|
||||||
|
A Proxmox Backup Server can be added under ``Datacenter -> Storage``.
|
||||||
|
|
||||||
|
Using the Proxmox VE Command-Line
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
You need to define a new storage with type 'pbs' on your `Proxmox VE`_
|
You need to define a new storage with type 'pbs' on your `Proxmox VE`_
|
||||||
node. The following example uses ``store2`` as storage name, and
|
node. The following example uses ``store2`` as storage name, and
|
||||||
assumes the server address is ``localhost``, and you want to connect
|
assumes the server address is ``localhost``, and you want to connect
|
||||||
@ -41,9 +61,9 @@ After that you should be able to see storage status with:
|
|||||||
Name Type Status Total Used Available %
|
Name Type Status Total Used Available %
|
||||||
store2 pbs active 3905109820 1336687816 2568422004 34.23%
|
store2 pbs active 3905109820 1336687816 2568422004 34.23%
|
||||||
|
|
||||||
Having added the PBS datastore to `Proxmox VE`_, you can backup VMs and
|
Having added the Proxmox Backup Server datastore to `Proxmox VE`_, you can
|
||||||
containers in the same way you would for any other storage device within the
|
backup VMs and containers in the same way you would for any other storage
|
||||||
environment (see `PVE Admin Guide: Backup and Restore
|
device within the environment (see `Proxmox VE Admin Guide: Backup and Restore
|
||||||
<https://pve.proxmox.com/pve-docs/pve-admin-guide.html#chapter_vzdump>`_.
|
<https://pve.proxmox.com/pve-docs/pve-admin-guide.html#chapter_vzdump>`_.
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
Description
|
|
||||||
^^^^^^^^^^^
|
|
||||||
|
|
||||||
``pxar`` is a command line utility to create and manipulate archives in the
|
``pxar`` is a command line utility to create and manipulate archives in the
|
||||||
:ref:`pxar-format`.
|
:ref:`pxar-format`.
|
||||||
It is inspired by `casync file archive format
|
It is inspired by `casync file archive format
|
||||||
@ -80,7 +77,7 @@ These files must contain one pattern per line, again later patterns win over
|
|||||||
previous ones.
|
previous ones.
|
||||||
The patterns control file exclusions of files present within the given directory
|
The patterns control file exclusions of files present within the given directory
|
||||||
or further below it in the tree.
|
or further below it in the tree.
|
||||||
The behavior is the same as described in :ref:`creating-backups`.
|
The behavior is the same as described in :ref:`client_creating_backups`.
|
||||||
|
|
||||||
Extracting an Archive
|
Extracting an Archive
|
||||||
^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
@ -4,6 +4,9 @@ pxar
|
|||||||
|
|
||||||
.. include:: ../epilog.rst
|
.. include:: ../epilog.rst
|
||||||
|
|
||||||
|
.. Avoid errors with sphinx ref role
|
||||||
|
.. role:: ref(emphasis)
|
||||||
|
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
Proxmox File Archive Command Line Tool
|
Proxmox File Archive Command Line Tool
|
||||||
-------------------------------------------------------------
|
-------------------------------------------------------------
|
||||||
@ -25,4 +28,3 @@ Description
|
|||||||
|
|
||||||
|
|
||||||
.. include:: ../pbs-copyright.rst
|
.. include:: ../pbs-copyright.rst
|
||||||
|
|
||||||
|
@ -6,3 +6,9 @@ Service Daemons
|
|||||||
|
|
||||||
.. include:: proxmox-backup-proxy/description.rst
|
.. include:: proxmox-backup-proxy/description.rst
|
||||||
|
|
||||||
|
|
||||||
|
``proxmox-backup``
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. include:: proxmox-backup/description.rst
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
Storage
|
Backup Storage
|
||||||
=======
|
==============
|
||||||
|
|
||||||
.. _storage_disk_management:
|
.. _storage_disk_management:
|
||||||
|
|
||||||
@ -119,8 +119,8 @@ directory on the filesystem. Each datastore also has associated retention
|
|||||||
settings of how many backup snapshots for each interval of ``hourly``,
|
settings of how many backup snapshots for each interval of ``hourly``,
|
||||||
``daily``, ``weekly``, ``monthly``, ``yearly`` as well as a time-independent
|
``daily``, ``weekly``, ``monthly``, ``yearly`` as well as a time-independent
|
||||||
number of backups to keep in that store. :ref:`backup-pruning` and
|
number of backups to keep in that store. :ref:`backup-pruning` and
|
||||||
:ref:`garbage collection <garbage-collection>` can also be configured to run
|
:ref:`garbage collection <client_garbage-collection>` can also be configured to run
|
||||||
periodically based on a configured schedule (see :ref:`calendar-events`) per datastore.
|
periodically based on a configured schedule (see :ref:`calendar-event-scheduling`) per datastore.
|
||||||
|
|
||||||
|
|
||||||
.. _storage_datastore_create:
|
.. _storage_datastore_create:
|
||||||
|
@ -25,4 +25,7 @@ either explain things which are different on `Proxmox Backup`_, or
|
|||||||
tasks which are commonly used on `Proxmox Backup`_. For other topics,
|
tasks which are commonly used on `Proxmox Backup`_. For other topics,
|
||||||
please refer to the standard Debian documentation.
|
please refer to the standard Debian documentation.
|
||||||
|
|
||||||
|
|
||||||
.. include:: local-zfs.rst
|
.. include:: local-zfs.rst
|
||||||
|
|
||||||
|
.. include:: services.rst
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
|
.. _tech_design_overview:
|
||||||
|
|
||||||
Technical Overview
|
Technical Overview
|
||||||
==================
|
==================
|
||||||
|
|
||||||
.. _technical_overview:
|
|
||||||
|
|
||||||
Datastores
|
Datastores
|
||||||
----------
|
----------
|
||||||
|
|
||||||
A Datastore is the logical place where :ref:`Backup Snapshots
|
A Datastore is the logical place where :ref:`Backup Snapshots
|
||||||
<backup_snapshot>` and their chunks are stored. Snapshots consist of a
|
<term_backup_snapshot>` and their chunks are stored. Snapshots consist of a
|
||||||
manifest, blobs, dynamic- and fixed-indexes (see :ref:`terminology`), and are
|
manifest, blobs, dynamic- and fixed-indexes (see :ref:`terms`), and are
|
||||||
stored in the following directory structure:
|
stored in the following directory structure:
|
||||||
|
|
||||||
<datastore-root>/<type>/<id>/<time>/
|
<datastore-root>/<type>/<id>/<time>/
|
||||||
@ -100,7 +100,7 @@ can be encrypted, and they are handled in a slightly different manner than
|
|||||||
normal chunks.
|
normal chunks.
|
||||||
|
|
||||||
The hashes of encrypted chunks are calculated not with the actual (encrypted)
|
The hashes of encrypted chunks are calculated not with the actual (encrypted)
|
||||||
chunk content, but with the plaintext content concatenated with the encryption
|
chunk content, but with the plain-text content concatenated with the encryption
|
||||||
key. This way, two chunks of the same data encrypted with different keys
|
key. This way, two chunks of the same data encrypted with different keys
|
||||||
generate two different checksums and no collisions occur for multiple
|
generate two different checksums and no collisions occur for multiple
|
||||||
encryption keys.
|
encryption keys.
|
||||||
@ -138,7 +138,7 @@ will see that the probability of a collision in that scenario is:
|
|||||||
|
|
||||||
For context, in a lottery game of guessing 6 out of 45, the chance to correctly
|
For context, in a lottery game of guessing 6 out of 45, the chance to correctly
|
||||||
guess all 6 numbers is only :math:`1.2277 * 10^{-7}`, that means the chance of
|
guess all 6 numbers is only :math:`1.2277 * 10^{-7}`, that means the chance of
|
||||||
collission is about the same as winning 13 such lotto games *in a row*.
|
a collision is about the same as winning 13 such lotto games *in a row*.
|
||||||
|
|
||||||
In conclusion, it is extremely unlikely that such a collision would occur by
|
In conclusion, it is extremely unlikely that such a collision would occur by
|
||||||
accident in a normal datastore.
|
accident in a normal datastore.
|
||||||
|