Added PVE-to-PBS-Backup & OVHCloud-DDNS-API-Setup
This commit is contained in:
6
Linux/Proxmox/PVE-BackupToPBS/Backup.service
Normal file
6
Linux/Proxmox/PVE-BackupToPBS/Backup.service
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=PVE to PBS Backup
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/bin/bash /opt/PVEtoPBS.sh
|
||||||
9
Linux/Proxmox/PVE-BackupToPBS/Backup.timer
Normal file
9
Linux/Proxmox/PVE-BackupToPBS/Backup.timer
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Scheduled PVE to PBS Backup
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=weekly
|
||||||
|
Persistent=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
||||||
55
Linux/Proxmox/PVE-BackupToPBS/BackupScipt.sh
Normal file
55
Linux/Proxmox/PVE-BackupToPBS/BackupScipt.sh
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#List of files to in/exclude form the backup located /.pxarexclude
|
||||||
|
|
||||||
|
#Scipt config
|
||||||
|
PBS_Host=<PBS_IP/Hostname>
|
||||||
|
PBS_Datastore=<DataStoreName>
|
||||||
|
PBS_User=root@pam!<APIKeyName>
|
||||||
|
export PBS_PASSWORD="<APIKey/Password>"
|
||||||
|
export PBS_FINGERPRINT="<PBS Fingerprint>"
|
||||||
|
PBS_NameSpace=PVE-Hosts
|
||||||
|
Run_Purge=false
|
||||||
|
Purge_DryRun=true
|
||||||
|
Run_GarbageColletion=false
|
||||||
|
|
||||||
|
##end of config
|
||||||
|
|
||||||
|
export PBS_LOG=info #Possible values are off, error, warn, info, debug and trace
|
||||||
|
export PBS_REPOSITORY="$PBS_User@$PBS_Host:$PBS_Datastore"
|
||||||
|
PVE_Hostname=$(hostname)
|
||||||
|
PBS_NameSpace=$PBS_NameSpace/"$PVE_Hostname"
|
||||||
|
|
||||||
|
echo "Generating package(APT) report"
|
||||||
|
apt-mark showmanual > /SystemRepport-APT
|
||||||
|
|
||||||
|
echo "Generating PVE report"
|
||||||
|
pvereport 2> /dev/null > /SystemRepport-PVE
|
||||||
|
|
||||||
|
echo "Running backup"
|
||||||
|
proxmox-backup-client backup root.pxar:/ --include-dev /etc/pve --ns $PBS_NameSpace
|
||||||
|
|
||||||
|
##Prunne while runing instead of using jobs in PBS
|
||||||
|
# Docs: https://pbs.proxmox.com/docs/backup-client.html#pruning-and-removing-backups
|
||||||
|
#
|
||||||
|
# Prune options --keep-last <N> --keep-hourly <N> --keep-daily <N> --keep-weekly <N> --keep-monthly <N> --keep-yearly <N>
|
||||||
|
#
|
||||||
|
# To test and generate a repport set Run_Purge and Purge_DryRun to true
|
||||||
|
# To use Run_Purge to true Purge_DryRun to false
|
||||||
|
|
||||||
|
|
||||||
|
if $Run_Purge; then
|
||||||
|
if ! $Purge_DryRun; then
|
||||||
|
echo purge
|
||||||
|
proxmox-backup-client prune host/"$PVE_Hostname" --keep-daily 1 --keep-weekly 3 --ns $PBS_NameSpace
|
||||||
|
else
|
||||||
|
echo dry
|
||||||
|
proxmox-backup-client prune host/"$PVE_Hostname" --dry-run --keep-daily 1 --keep-weekly 3 --ns $PBS_NameSpace | tee Pruge-DryRun
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if $Run_GarbageColletion; then
|
||||||
|
proxmox-backup-client garbage-collect
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm /SystemRepport-PVE /SystemRepport-APT
|
||||||
31
Linux/Proxmox/PVE-BackupToPBS/ReadMe.md
Normal file
31
Linux/Proxmox/PVE-BackupToPBS/ReadMe.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
## Instalation
|
||||||
|
### PVE Setup
|
||||||
|
Put the following files on the Proxmox-VE server
|
||||||
|
* `pxarexclude` as `/.pxarexclude
|
||||||
|
* `BackupScipt.sh` as `/opt/PVEtoPBS.sh`
|
||||||
|
* `Backup.service` as `/etc/systemd/system/PVEtoPBS.service`
|
||||||
|
* `Backup.timer` as `/etc/systemd/system/PVEtoPBS.timer`
|
||||||
|
|
||||||
|
Edit `/opt/PVEtoPBS.sh` to configure the backups.
|
||||||
|
Edit `/etc/systemd/system/PVEtoPBS.timer` to set-up the schedule the backups,
|
||||||
|
change OnCalendar (examples yearly,monthly,weekly,daily,hourly or *-01-01 00:00:00)
|
||||||
|
|
||||||
|
Run `systemctl enable --now PVEtoPBS.timer`.
|
||||||
|
To run a backup now run `systemctl start PVEtoPBS.service` or `bash /opt/PVEtoPBS.sh`
|
||||||
|
|
||||||
|
### PBS Setup
|
||||||
|
using name space for PVE with nested 1 for hostname,
|
||||||
|
This is done for permission managment
|
||||||
|
|
||||||
|
### Required permission for api token/user
|
||||||
|
| **Used for?** | **Path** | **Role** |
|
||||||
|
|------------------------------|---------------------------------------------------|--------------------|
|
||||||
|
| Basic usage | /system/status | Audit |
|
||||||
|
| Creating backups | /datastore/`<datastoreName>`/PVE-Hosts/PVE-Hostname | DatastoreBackup |
|
||||||
|
| Creating and purging backups | /datastore/`<datastoreName>`/PVE-Hosts/PVE-Hostname | DatastorePowerUser |
|
||||||
|
| Run garbage collection | /datastore/`<datastoreName>` | DatastoreAdmin |
|
||||||
|
|
||||||
|
### Source/Inspriration
|
||||||
|
* https://github.com/DerDanilo/proxmox-stuff/blob/master/prox_config_backup.sh
|
||||||
|
* https://pbs.proxmox.com/docs/backup-client.html
|
||||||
|
|
||||||
16
Linux/Proxmox/PVE-BackupToPBS/pxarexclude
Normal file
16
Linux/Proxmox/PVE-BackupToPBS/pxarexclude
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
*
|
||||||
|
!/etc
|
||||||
|
!/etc/**
|
||||||
|
!/root
|
||||||
|
!/root/**
|
||||||
|
!/opt
|
||||||
|
!/opt/**
|
||||||
|
!/var/
|
||||||
|
!/var/lib/
|
||||||
|
!/var/lib/pve-cluster
|
||||||
|
!/var/lib/pve-cluster/**
|
||||||
|
!/usr/
|
||||||
|
!/usr/share/
|
||||||
|
!/usr/share/kvm/
|
||||||
|
!/usr/share/kvm/*.vbios
|
||||||
|
!/SystemRepport-*
|
||||||
61
OVHCloud/SetupAPI-Key_ddns-updater.md
Normal file
61
OVHCloud/SetupAPI-Key_ddns-updater.md
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
# OVHCloud api DDNS Setup
|
||||||
|
This system uses OVH's API v1 and [ddns-updater](https://github.com/qdm12/ddns-updater "Lightweight universal DDNS Updater program
|
||||||
|
")
|
||||||
|
## Get record ID(s) in preparation for generating the API keys
|
||||||
|
* First make sure the required `A` and `AAAA` for the (sub)domain exist in OVHCloud's manager.
|
||||||
|
* Go to OVHCloud API Console's [Auth page]( "OVHCloud API Console").
|
||||||
|
* Click `Login with OVHCloud SSO`, and follow the steps.
|
||||||
|
* Go to OVHCloud API Console's [List record]("OVHCloud API Console").
|
||||||
|
* Enter the domain name (without subdomain) under `zoneName`.
|
||||||
|
* If you want to update a subdomain enter this in `subDomain`.
|
||||||
|
* Enter `A` in the `fieldType` field
|
||||||
|
* Click the Blue `EXECUTE` button
|
||||||
|
* Note the number given in the response field
|
||||||
|
* If you also want to update IPv6 record enter `AAAA` in the ` fieldType` field
|
||||||
|
* Click the Blue `EXECUTE` button
|
||||||
|
* Note the number given in the response field
|
||||||
|
|
||||||
|
## Generating the API keys
|
||||||
|
|
||||||
|
* Go to the OVHCloud [API Key generator]("OVHCloud Auth")
|
||||||
|
* Enter a Application name (example: "mydomain-subdomain-DDNS").
|
||||||
|
* Enter a Application Description (example: "subdomain.mydomain.com DNS Updater").
|
||||||
|
* Set Validity to `Unlimited`
|
||||||
|
* Add the following rights:
|
||||||
|
```
|
||||||
|
GET: /domain/zone/<DomainName>/record
|
||||||
|
PUT: /domain/zone/<DomainName>/record/<IPv4 Record ID>
|
||||||
|
PUT: /domain/zone/<DomainName>/record/<IPv6 Record ID>
|
||||||
|
POST: /domain/zone/<DomainName>/refresh
|
||||||
|
```
|
||||||
|
|
||||||
|
## ddns-updater example config
|
||||||
|
```
|
||||||
|
{
|
||||||
|
"settings": [
|
||||||
|
{
|
||||||
|
"provider": "ovh",
|
||||||
|
"mode": "api",
|
||||||
|
"domain": "quartz.nxdi.nl",
|
||||||
|
"api_endpoint": "ovh-eu",
|
||||||
|
"app_key": "<app_key>",
|
||||||
|
"app_secret": "<app_secret>",
|
||||||
|
"consumer_key": "<consumer_key>",
|
||||||
|
"ip_version": "ipv4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"provider": "ovh",
|
||||||
|
"mode": "api",
|
||||||
|
"domain": "quartz.nxdi.nl",
|
||||||
|
"api_endpoint": "ovh-eu",
|
||||||
|
"app_key": "<app_key>",
|
||||||
|
"app_secret": "<app_secret>",
|
||||||
|
"consumer_key": "<consumer_key>",
|
||||||
|
"ip_version": "ipv6",
|
||||||
|
"ipv6_suffix": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user