Prototype 2 for backup script
This commit is contained in:
parent
68e063b3e2
commit
ab3eed008c
24
bin/backup
24
bin/backup
@ -19,6 +19,7 @@ import sys
|
|||||||
|
|
||||||
from rbackup.hierarchy.repository import Repository
|
from rbackup.hierarchy.repository import Repository
|
||||||
from rbackup.rsync import rsync
|
from rbackup.rsync import rsync
|
||||||
|
from subprocess import CalledProcessError
|
||||||
|
|
||||||
# ========== Constants ==========
|
# ========== Constants ==========
|
||||||
LOGFORMAT = "==> %(levelname)s %(message)s"
|
LOGFORMAT = "==> %(levelname)s %(message)s"
|
||||||
@ -28,7 +29,7 @@ RSYNC_DEFAULT_OPTS = [
|
|||||||
"--backup",
|
"--backup",
|
||||||
"--hard-links",
|
"--hard-links",
|
||||||
"--ignore-missing-args",
|
"--ignore-missing-args",
|
||||||
"--prune-dirs",
|
"--prune-empty-dirs",
|
||||||
"--suffix=.old",
|
"--suffix=.old",
|
||||||
"--xattrs",
|
"--xattrs",
|
||||||
]
|
]
|
||||||
@ -41,6 +42,8 @@ EXTRA_RSYNC_OPTS = {
|
|||||||
|
|
||||||
ETC_INCLUDE_FILE = "/etc/rbackup/etc-include.conf"
|
ETC_INCLUDE_FILE = "/etc/rbackup/etc-include.conf"
|
||||||
|
|
||||||
|
E_FAILED_PROCESS = 1
|
||||||
|
|
||||||
# ========== Logging Setup ==========
|
# ========== Logging Setup ==========
|
||||||
console_formatter = logging.Formatter(LOGFORMAT)
|
console_formatter = logging.Formatter(LOGFORMAT)
|
||||||
syslog = logging.getLogger("rbackup")
|
syslog = logging.getLogger("rbackup")
|
||||||
@ -60,21 +63,26 @@ syslog.addHandler(stderr_handler)
|
|||||||
|
|
||||||
|
|
||||||
# ========== Functions ==========
|
# ========== Functions ==========
|
||||||
def backup_all(s, rsync_opts):
|
def backup_all(s, prev, rsync_opts):
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
def backup_etc(s, rsync_opts):
|
def backup_etc(s, prev, rsync_opts):
|
||||||
"""Create a backup of /etc
|
"""Create a backup of /etc
|
||||||
|
|
||||||
:param s: snapshot to back up to
|
:param s: snapshot to back up to
|
||||||
:type s: Snapshot object
|
:type s: Snapshot object
|
||||||
|
:param prev: previous snapshot for hardlinking
|
||||||
|
:type prev: Snapshot object or None
|
||||||
:param opts: options to pass to rsync
|
:param opts: options to pass to rsync
|
||||||
:type opts: list
|
:type opts: list
|
||||||
"""
|
"""
|
||||||
local_opts = rsync_opts
|
local_opts = rsync_opts
|
||||||
local_opts.append(f"--files-from={ETC_INCLUDE_FILE}")
|
local_opts.append(f"--files-from={ETC_INCLUDE_FILE}")
|
||||||
|
|
||||||
|
if prev is not None:
|
||||||
|
rsync_opts.append(f"--link-dest={prev_snapshot.etc_dir}")
|
||||||
|
|
||||||
syslog.debug("Creating directory {s.etc_dir}")
|
syslog.debug("Creating directory {s.etc_dir}")
|
||||||
s.etc_dir.mkdir(parents=True, exist_ok=False)
|
s.etc_dir.mkdir(parents=True, exist_ok=False)
|
||||||
rsync(*local_opts, "/etc/", str(s.etc_dir))
|
rsync(*local_opts, "/etc/", str(s.etc_dir))
|
||||||
@ -161,10 +169,14 @@ if __name__ == "__main__":
|
|||||||
repo.create_snapshot()
|
repo.create_snapshot()
|
||||||
curr_snapshot = repo.curr_snapshot
|
curr_snapshot = repo.curr_snapshot
|
||||||
|
|
||||||
rsync_opts.append(f"--link-dest={prev_snapshot.path}")
|
|
||||||
rsync_opts.append("--backup-dir=backup")
|
rsync_opts.append("--backup-dir=backup")
|
||||||
|
|
||||||
DISPATCHER[args.operation](curr_snapshot, rsync_opts)
|
try:
|
||||||
|
DISPATCHER[args.operation](curr_snapshot, prev_snapshot, rsync_opts)
|
||||||
|
except CalledProcessError as e:
|
||||||
|
syslog.error("Backup process failed")
|
||||||
|
syslog.info(f"Failing command: {e.cmd}")
|
||||||
|
exit(E_FAILED_PROCESS)
|
||||||
|
|
||||||
snapshot_symlink = repo.path / "current"
|
snapshot_symlink = repo.path / "current"
|
||||||
|
|
||||||
@ -173,7 +185,7 @@ if __name__ == "__main__":
|
|||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
snapshot_symlink.symlink_to(curr_snapshot, target_is_directory=True)
|
snapshot_symlink.symlink_to(curr_snapshot.path, target_is_directory=True)
|
||||||
|
|
||||||
if args.run_post_sync:
|
if args.run_post_sync:
|
||||||
os.sync()
|
os.sync()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user