mirror of
https://github.com/ElvishArtisan/rivendell.git
synced 2025-12-16 09:31:16 +01:00
2024-10-08 Fred Gleason <fredg@paravelsystems.com>
* Added an rdautoback(8) utility. Signed-off-by: Fred Gleason <fredg@paravelsystems.com>
This commit is contained in:
@@ -24905,3 +24905,5 @@
|
|||||||
if the destination drive was already mounted.
|
if the destination drive was already mounted.
|
||||||
2024-10-08 Fred Gleason <fredg@paravelsystems.com>
|
2024-10-08 Fred Gleason <fredg@paravelsystems.com>
|
||||||
* Added a rdautoback(8) man page.
|
* Added a rdautoback(8) man page.
|
||||||
|
2024-10-08 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
* Added an rdautoback(8) utility.
|
||||||
|
|||||||
@@ -688,6 +688,7 @@ AC_CONFIG_FILES([rivendell.spec \
|
|||||||
utils/Makefile \
|
utils/Makefile \
|
||||||
utils/rdalsaconfig/Makefile \
|
utils/rdalsaconfig/Makefile \
|
||||||
utils/rdautoback/Makefile \
|
utils/rdautoback/Makefile \
|
||||||
|
utils/rdautorest/Makefile \
|
||||||
utils/rdcheckcuts/Makefile \
|
utils/rdcheckcuts/Makefile \
|
||||||
utils/rdcleandirs/Makefile \
|
utils/rdcleandirs/Makefile \
|
||||||
utils/rdclilogedit/Makefile \
|
utils/rdclilogedit/Makefile \
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ if ALSA_RD_AM
|
|||||||
endif
|
endif
|
||||||
SUBDIRS = $(ALSACONFIG_RD_OPT)\
|
SUBDIRS = $(ALSACONFIG_RD_OPT)\
|
||||||
rdautoback\
|
rdautoback\
|
||||||
|
rdautorest\
|
||||||
rdcheckcuts\
|
rdcheckcuts\
|
||||||
rdcleandirs\
|
rdcleandirs\
|
||||||
rdclilogedit\
|
rdclilogedit\
|
||||||
|
|||||||
37
utils/rdautorest/Makefile.am
Normal file
37
utils/rdautorest/Makefile.am
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
## Makefile.am
|
||||||
|
##
|
||||||
|
## utils/rdautorest Makefile.am for Rivendell
|
||||||
|
##
|
||||||
|
## (C) Copyright 2024 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify
|
||||||
|
## it under the terms of the GNU General Public License version 2 as
|
||||||
|
## published by the Free Software Foundation.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful,
|
||||||
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
## GNU General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public
|
||||||
|
## License along with this program; if not, write to the Free Software
|
||||||
|
## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
##
|
||||||
|
##
|
||||||
|
## Use automake to process this into a Makefile.in
|
||||||
|
|
||||||
|
install-exec-local:
|
||||||
|
mkdir -p $(DESTDIR)/usr/sbin
|
||||||
|
../../helpers/install_python.sh rdautorest.py $(DESTDIR)/usr/sbin/rdautorest
|
||||||
|
|
||||||
|
uninstall-local:
|
||||||
|
rm -f $(DESTDIR)/usr/sbin/rdautorest
|
||||||
|
|
||||||
|
bin_SCRIPTS = rdautorest.py
|
||||||
|
|
||||||
|
EXTRA_DIST = rdautorest.py
|
||||||
|
|
||||||
|
CLEANFILES = *~
|
||||||
|
|
||||||
|
MAINTAINERCLEANFILES = *~\
|
||||||
|
Makefile.in
|
||||||
128
utils/rdautorest/rdautorest.py
Executable file
128
utils/rdautorest/rdautorest.py
Executable file
@@ -0,0 +1,128 @@
|
|||||||
|
#!%PYTHON_BANGPATH%
|
||||||
|
|
||||||
|
# rdautorest.py
|
||||||
|
#
|
||||||
|
# Unattended restore script for Rivendell
|
||||||
|
#
|
||||||
|
# (C) Copyright 2024 Fred Gleason <fredg@paravelsystems.com>
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License version 2 as
|
||||||
|
# published by the Free Software Foundation.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public
|
||||||
|
# License along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
#
|
||||||
|
|
||||||
|
import configparser
|
||||||
|
import os
|
||||||
|
from pathlib import Path
|
||||||
|
import sys
|
||||||
|
import syslog
|
||||||
|
|
||||||
|
USAGE='USAGE: rdautorest.py [--yes] <backup-mountpoint>'
|
||||||
|
|
||||||
|
yes=False
|
||||||
|
|
||||||
|
if(len(sys.argv)==2):
|
||||||
|
mountpoint=sys.argv[1]
|
||||||
|
else:
|
||||||
|
if(len(sys.argv)==3):
|
||||||
|
if(sys.argv[1]=='--yes'):
|
||||||
|
yes=True
|
||||||
|
mountpoint=sys.argv[2]
|
||||||
|
else:
|
||||||
|
if(sys.argv[2]=='--yes'):
|
||||||
|
yes=True
|
||||||
|
mountpoint=sys.argv[1]
|
||||||
|
else:
|
||||||
|
print(USAGE)
|
||||||
|
exit(1)
|
||||||
|
else:
|
||||||
|
print(USAGE)
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
if(not yes):
|
||||||
|
print('WARNING: This operation will COMPLETELY OVERWRITE the existing')
|
||||||
|
print(' Rivendell data on this system, replacing it with the')
|
||||||
|
print(' contents of the specified data backup. This operation')
|
||||||
|
print(' cannot be undone!')
|
||||||
|
print('')
|
||||||
|
resp=input(' Are you sure you want to proceed (y/N)?')
|
||||||
|
if((resp.upper()!='Y')and(resp.upper()!='YES')):
|
||||||
|
exit(0)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Load rd.conf(5)
|
||||||
|
#
|
||||||
|
rd_config=configparser.ConfigParser(interpolation=None)
|
||||||
|
rd_config.read_file(open('/etc/rd.conf'))
|
||||||
|
|
||||||
|
#
|
||||||
|
# Open the syslog
|
||||||
|
#
|
||||||
|
syslog.openlog('rdautorest.py',logoption=syslog.LOG_PID|syslog.LOG_PERROR,facility=int(rd_config.get('Identity','SyslogFacility',fallback=syslog.LOG_USER)))
|
||||||
|
syslog.syslog(syslog.LOG_INFO,'Starting Rivendell backup to "'+mountpoint+'"')
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Mount backup device
|
||||||
|
#
|
||||||
|
result=os.system(command='findmnt '+mountpoint)
|
||||||
|
if(os.waitstatus_to_exitcode(result)!=0):
|
||||||
|
Path(mountpoint).mkdir(parents=True,exist_ok=True)
|
||||||
|
result=os.system(command='mount '+mountpoint)
|
||||||
|
if(os.waitstatus_to_exitcode(result)!=0):
|
||||||
|
syslog.syslog(syslog.LOG_ERR,'unable to mount backup drive')
|
||||||
|
exit(1)
|
||||||
|
os.system(command='sleep 5')
|
||||||
|
|
||||||
|
#
|
||||||
|
# Stop Rivendell service
|
||||||
|
#
|
||||||
|
result=os.system(command='/bin/systemctl stop rivendell')
|
||||||
|
if(os.waitstatus_to_exitcode(result)!=0):
|
||||||
|
syslog.syslog(syslog.LOG_ERR,'unable to stop Rivendell service')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create new database
|
||||||
|
#
|
||||||
|
sql='drop\ database\ '+rd_config.get('mySQL','Database')+'\;'
|
||||||
|
cmd='echo '+sql+' | mysql -h '+rd_config.get('mySQL','Hostname')+' -u '+rd_config.get('mySQL','Loginname')+' -p'+rd_config.get('mySQL','Password')+' '+rd_config.get('mySQL','Database')
|
||||||
|
os.system(command=cmd)
|
||||||
|
|
||||||
|
sql='create\ database\ '+rd_config.get('mySQL','Database')+'\;'
|
||||||
|
cmd='echo '+sql+' | mysql -h '+rd_config.get('mySQL','Hostname')+' -u '+rd_config.get('mySQL','Loginname')+' -p'+rd_config.get('mySQL','Password')
|
||||||
|
os.system(command=cmd)
|
||||||
|
|
||||||
|
cmd='gzip -cd '+mountpoint+'/db.sql.gz | mysql -h '+rd_config.get('mySQL','Hostname')+' -u '+rd_config.get('mySQL','Loginname')+' -p'+rd_config.get('mySQL','Password')+' '+rd_config.get('mySQL','Database')
|
||||||
|
os.system(command=cmd)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copy Audio Store
|
||||||
|
#
|
||||||
|
cmd='rsync -av --delete '+mountpoint+'/snd/ /var/snd '
|
||||||
|
os.system(command=cmd)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Start Rivendell service
|
||||||
|
#
|
||||||
|
result=os.system(command='/bin/systemctl restart rivendell')
|
||||||
|
if(os.waitstatus_to_exitcode(result)!=0):
|
||||||
|
syslog.syslog(syslog.LOG_ERR,'unable to start Rivendell service')
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
#
|
||||||
|
# Unmount backup device
|
||||||
|
#
|
||||||
|
os.system(command='umount '+mountpoint)
|
||||||
|
os.rmdir(mountpoint)
|
||||||
|
|
||||||
|
syslog.syslog(syslog.LOG_INFO,'Completed Rivendell restore from "'+mountpoint+'"')
|
||||||
Reference in New Issue
Block a user