add daily update and maintenance task
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
parent
86d602457a
commit
bc00289bce
3
Makefile
3
Makefile
|
@ -19,7 +19,8 @@ USR_SBIN := \
|
||||||
SERVICE_BIN := \
|
SERVICE_BIN := \
|
||||||
proxmox-backup-api \
|
proxmox-backup-api \
|
||||||
proxmox-backup-banner \
|
proxmox-backup-banner \
|
||||||
proxmox-backup-proxy
|
proxmox-backup-proxy \
|
||||||
|
proxmox-daily-update \
|
||||||
|
|
||||||
ifeq ($(BUILD_MODE), release)
|
ifeq ($(BUILD_MODE), release)
|
||||||
CARGO_BUILD_ARGS += --release
|
CARGO_BUILD_ARGS += --release
|
||||||
|
|
|
@ -6,5 +6,6 @@ set -e
|
||||||
|
|
||||||
# modeled after dh_systemd_start output
|
# modeled after dh_systemd_start output
|
||||||
if [ -d /run/systemd/system ] && [ "$1" = remove ]; then
|
if [ -d /run/systemd/system ] && [ "$1" = remove ]; then
|
||||||
deb-systemd-invoke stop 'proxmox-backup-banner.service' 'proxmox-backup-proxy.service' 'proxmox-backup.service' >/dev/null || true
|
deb-systemd-invoke stop 'proxmox-backup-banner.service' 'proxmox-backup-proxy.service' \
|
||||||
|
'proxmox-backup.service' 'proxmox-backup-daily-update.timer' >/dev/null || true
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,10 +1,13 @@
|
||||||
etc/proxmox-backup-proxy.service /lib/systemd/system/
|
etc/proxmox-backup-proxy.service /lib/systemd/system/
|
||||||
etc/proxmox-backup.service /lib/systemd/system/
|
etc/proxmox-backup.service /lib/systemd/system/
|
||||||
etc/proxmox-backup-banner.service /lib/systemd/system/
|
etc/proxmox-backup-banner.service /lib/systemd/system/
|
||||||
|
etc/proxmox-backup-daily-update.service /lib/systemd/system/
|
||||||
|
etc/proxmox-backup-daily-update.timer /lib/systemd/system/
|
||||||
etc/pbstest-beta.list /etc/apt/sources.list.d/
|
etc/pbstest-beta.list /etc/apt/sources.list.d/
|
||||||
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-api
|
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-api
|
||||||
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-proxy
|
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-proxy
|
||||||
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-banner
|
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-banner
|
||||||
|
usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-daily-update
|
||||||
usr/sbin/proxmox-backup-manager
|
usr/sbin/proxmox-backup-manager
|
||||||
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
|
||||||
|
|
|
@ -38,6 +38,7 @@ override_dh_auto_install:
|
||||||
LIBDIR=/usr/lib/$(DEB_HOST_MULTIARCH)
|
LIBDIR=/usr/lib/$(DEB_HOST_MULTIARCH)
|
||||||
|
|
||||||
override_dh_installsystemd:
|
override_dh_installsystemd:
|
||||||
|
dh_installsystemd -pproxmox-backup-server proxmox-backup-daily-update.timer
|
||||||
# note: we start/try-reload-restart services manually in postinst
|
# note: we start/try-reload-restart services manually in postinst
|
||||||
dh_installsystemd --no-start --no-restart-after-upgrade
|
dh_installsystemd --no-start --no-restart-after-upgrade
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
include ../defines.mk
|
include ../defines.mk
|
||||||
|
|
||||||
UNITS :=
|
UNITS := \
|
||||||
|
proxmox-backup-daily-update.timer \
|
||||||
|
|
||||||
DYNAMIC_UNITS := \
|
DYNAMIC_UNITS := \
|
||||||
proxmox-backup-banner.service \
|
proxmox-backup-banner.service \
|
||||||
|
proxmox-backup-daily-update.service \
|
||||||
proxmox-backup.service \
|
proxmox-backup.service \
|
||||||
proxmox-backup-proxy.service
|
proxmox-backup-proxy.service
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Daily Proxmox Backup Server update and maintenance activities
|
||||||
|
After=network-online.target
|
||||||
|
Wants=network-online.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=%LIBEXECDIR%/proxmox-backup/proxmox-daily-update
|
|
@ -0,0 +1,10 @@
|
||||||
|
[Unit]
|
||||||
|
Description=Daily Proxmox Backup Server update and maintenance activities
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=*-*-* 1:00
|
||||||
|
RandomizedDelaySec=5h
|
||||||
|
Persistent=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
|
@ -24,6 +24,7 @@ use crate::server::WorkerTask;
|
||||||
use crate::tools;
|
use crate::tools;
|
||||||
use crate::tools::ticket::{self, Empty, Ticket};
|
use crate::tools::ticket::{self, Empty, Ticket};
|
||||||
|
|
||||||
|
pub mod apt;
|
||||||
pub mod disks;
|
pub mod disks;
|
||||||
pub mod dns;
|
pub mod dns;
|
||||||
pub mod network;
|
pub mod network;
|
||||||
|
@ -32,7 +33,6 @@ pub mod subscription;
|
||||||
|
|
||||||
pub(crate) mod rrd;
|
pub(crate) mod rrd;
|
||||||
|
|
||||||
mod apt;
|
|
||||||
mod journal;
|
mod journal;
|
||||||
mod services;
|
mod services;
|
||||||
mod status;
|
mod status;
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
use anyhow::Error;
|
||||||
|
use serde_json::{json, Value};
|
||||||
|
|
||||||
|
use proxmox::api::{cli::*, RpcEnvironment, ApiHandler};
|
||||||
|
|
||||||
|
use proxmox_backup::api2;
|
||||||
|
use proxmox_backup::tools::subscription;
|
||||||
|
|
||||||
|
async fn wait_for_local_worker(upid_str: &str) -> Result<(), Error> {
|
||||||
|
let upid: proxmox_backup::server::UPID = upid_str.parse()?;
|
||||||
|
let sleep_duration = core::time::Duration::new(0, 100_000_000);
|
||||||
|
|
||||||
|
loop {
|
||||||
|
if !proxmox_backup::server::worker_is_active_local(&upid) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tokio::time::delay_for(sleep_duration).await;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Daily update
|
||||||
|
async fn do_update(
|
||||||
|
rpcenv: &mut dyn RpcEnvironment,
|
||||||
|
) -> Result<Value, Error> {
|
||||||
|
let param = json!({});
|
||||||
|
|
||||||
|
let method = &api2::node::subscription::API_METHOD_CHECK_SUBSCRIPTION;
|
||||||
|
let _res = match method.handler {
|
||||||
|
ApiHandler::Sync(handler) => (handler)(param, method, rpcenv)?,
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let notify = match subscription::read_subscription() {
|
||||||
|
Ok(Some(subscription)) => subscription.status == subscription::SubscriptionStatus::ACTIVE,
|
||||||
|
Ok(None) => false,
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("Error reading subscription - {}", err);
|
||||||
|
false
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let param = json!({
|
||||||
|
"notify": notify,
|
||||||
|
});
|
||||||
|
let method = &api2::node::apt::API_METHOD_APT_UPDATE_DATABASE;
|
||||||
|
let upid = match method.handler {
|
||||||
|
ApiHandler::Sync(handler) => (handler)(param, method, rpcenv)?,
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
|
wait_for_local_worker(upid.as_str().unwrap()).await?;
|
||||||
|
|
||||||
|
// TODO: certificate checks/renewal/... ?
|
||||||
|
|
||||||
|
// TODO: cleanup tasks like in PVE?
|
||||||
|
|
||||||
|
Ok(Value::Null)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
proxmox_backup::tools::setup_safe_path_env();
|
||||||
|
|
||||||
|
let mut rpcenv = CliEnvironment::new();
|
||||||
|
rpcenv.set_auth_id(Some(String::from("root@pam")));
|
||||||
|
|
||||||
|
match proxmox_backup::tools::runtime::main(do_update(&mut rpcenv)) {
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("error during update: {}", err);
|
||||||
|
std::process::exit(1);
|
||||||
|
},
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue