1 use anyhow
::{bail, Error}
;
4 use proxmox
::try_block
;
5 use proxmox
::api
::RpcEnvironmentType
;
7 //use proxmox_backup::tools;
8 //use proxmox_backup::api_schema::config::*;
9 use proxmox_backup
::server
::{
11 auth
::default_api_auth
,
14 use proxmox_backup
::tools
::daemon
;
15 use proxmox_backup
::auth_helpers
::*;
16 use proxmox_backup
::config
;
17 use proxmox_backup
::buildcfg
;
20 proxmox_backup
::tools
::setup_safe_path_env();
22 if let Err(err
) = proxmox_backup
::tools
::runtime
::main(run()) {
23 eprintln
!("Error: {}", err
);
24 std
::process
::exit(-1);
28 async
fn run() -> Result
<(), Error
> {
29 if let Err(err
) = syslog
::init(
30 syslog
::Facility
::LOG_DAEMON
,
31 log
::LevelFilter
::Info
,
32 Some("proxmox-backup-api")) {
33 bail
!("unable to inititialize syslog - {}", err
);
36 server
::create_task_log_dirs()?
;
38 config
::create_configdir()?
;
40 config
::update_self_signed_cert(false)?
;
42 proxmox_backup
::tools
::create_run_dir()?
;
44 proxmox_backup
::rrd
::create_rrdb_dir()?
;
45 proxmox_backup
::server
::jobstate
::create_jobstate_dir()?
;
46 proxmox_backup
::tape
::create_tape_status_dir()?
;
47 proxmox_backup
::tape
::create_drive_state_dir()?
;
48 proxmox_backup
::tape
::create_changer_state_dir()?
;
50 if let Err(err
) = generate_auth_key() {
51 bail
!("unable to generate auth key - {}", err
);
53 let _
= private_auth_key(); // load with lazy_static
55 if let Err(err
) = generate_csrf_key() {
56 bail
!("unable to generate csrf key - {}", err
);
58 let _
= csrf_secret(); // load with lazy_static
60 let mut config
= server
::ApiConfig
::new(
62 &proxmox_backup
::api2
::ROUTER
,
63 RpcEnvironmentType
::PRIVILEGED
,
67 let mut commando_sock
= server
::CommandoSocket
::new(server
::our_ctrl_sock());
69 config
.enable_file_log(buildcfg
::API_ACCESS_LOG_FN
, &mut commando_sock
)?
;
71 let rest_server
= RestServer
::new(config
);
73 // http server future:
74 let server
= daemon
::create_daemon(
75 ([127,0,0,1], 82).into(),
76 move |listener
, ready
| {
77 let incoming
= proxmox_backup
::tools
::async_io
::StaticIncoming
::from(listener
);
79 .and_then(|_
| hyper
::Server
::builder(incoming
)
81 .with_graceful_shutdown(server
::shutdown_future())
86 eprintln
!("server error: {}", e
);
91 "proxmox-backup.service",
94 server
::write_pid(buildcfg
::PROXMOX_BACKUP_API_PID_FN
)?
;
95 daemon
::systemd_notify(daemon
::SystemdNotify
::Ready
)?
;
97 let init_result
: Result
<(), Error
> = try_block
!({
98 server
::register_task_control_commands(&mut commando_sock
)?
;
99 commando_sock
.spawn()?
;
100 server
::server_state_init()?
;
104 if let Err(err
) = init_result
{
105 bail
!("unable to start daemon - {}", err
);
109 log
::info
!("server shutting down, waiting for active workers to complete");
110 proxmox_backup
::server
::last_worker_future().await?
;
112 log
::info
!("done - exit server");