|
|
|
@ -36,9 +36,12 @@ import time
|
|
|
|
|
# Для ввода символа
|
|
|
|
|
import tty
|
|
|
|
|
import termios
|
|
|
|
|
# Работа со временем
|
|
|
|
|
import time
|
|
|
|
|
import datetime
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Version = "calculate-server 0.0.5"
|
|
|
|
|
Version = "calculate-server 2.0.5"
|
|
|
|
|
|
|
|
|
|
tr = cl_base.lang()
|
|
|
|
|
tr.setLanguage(sys.modules[__name__])
|
|
|
|
@ -495,6 +498,7 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
def startServices(self, servInstalled, printSuccess=True):
|
|
|
|
|
"""Запускает все сервисы поданные на вход этому методу
|
|
|
|
|
|
|
|
|
|
Также прописывает в автозагрузку
|
|
|
|
|
Входные даннные - список названий сервисов
|
|
|
|
|
"""
|
|
|
|
|
if 'ldap' in servInstalled:
|
|
|
|
@ -1085,6 +1089,8 @@ class shareLdap(imp_cl_err, imp_cl_xml, imp_cl_help, imp_cl_smcon):
|
|
|
|
|
lines = FD.readlines()
|
|
|
|
|
FD.close()
|
|
|
|
|
for line in lines:
|
|
|
|
|
if not line in ":":
|
|
|
|
|
continue
|
|
|
|
|
num = int(line.split(":")[numEl])
|
|
|
|
|
if num<=numMax and num>=numMin:
|
|
|
|
|
lst.append(num)
|
|
|
|
@ -4903,7 +4909,7 @@ class servLdap(shareLdap):
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def getServiceSetupPathProfiles(self):
|
|
|
|
|
"""находим пути к профилям установленных сервисов
|
|
|
|
|
"""Находим пути к профилям установленных сервисов
|
|
|
|
|
|
|
|
|
|
Выдаем два списка ([пути к профилям сервисов],[установленные сервисы])
|
|
|
|
|
"""
|
|
|
|
@ -4922,6 +4928,64 @@ class servLdap(shareLdap):
|
|
|
|
|
servInstalled.append(serv)
|
|
|
|
|
return (servicePaths, servInstalled)
|
|
|
|
|
|
|
|
|
|
def rebuildServer(self, options):
|
|
|
|
|
"""Перегенерирует конфигурационные файлы, и базу данных LDAP"""
|
|
|
|
|
bFile = self.getArchFile()
|
|
|
|
|
if not bFile:
|
|
|
|
|
return False
|
|
|
|
|
self.printSUCCESS(_("Used backup file %s")%str(bFile))
|
|
|
|
|
archFileTime = time.localtime(os.stat(bFile)[stat.ST_MTIME])
|
|
|
|
|
timeFile = datetime.datetime(archFileTime[0],archFileTime[1],
|
|
|
|
|
archFileTime[2],archFileTime[3],
|
|
|
|
|
archFileTime[4],archFileTime[5])
|
|
|
|
|
localTime = time.localtime()
|
|
|
|
|
timeLocal = datetime.datetime(localTime[0],localTime[1],
|
|
|
|
|
localTime[2],localTime[3],
|
|
|
|
|
localTime[4],localTime[5])
|
|
|
|
|
if timeLocal < timeFile:
|
|
|
|
|
self.printERROR(_("Incorrect system time or time create file %s")\
|
|
|
|
|
%bFile)
|
|
|
|
|
return False
|
|
|
|
|
deltaTime = timeLocal - timeFile
|
|
|
|
|
if deltaTime.days == 0:
|
|
|
|
|
deltaSec = deltaTime.seconds
|
|
|
|
|
dHours = int(deltaSec/3600)
|
|
|
|
|
dMinutes = int((deltaSec - dHours*3600)/60)
|
|
|
|
|
dSeconds = deltaSec - dHours*3600 - dMinutes*60
|
|
|
|
|
hours = _("hours")
|
|
|
|
|
minutes = _("minutes")
|
|
|
|
|
seconds = _("seconds")
|
|
|
|
|
if dHours:
|
|
|
|
|
timeBackup = "%s %s %s %s %s %s"%\
|
|
|
|
|
(dHours,hours,dMinutes,minutes,dSeconds,seconds)
|
|
|
|
|
elif dMinutes:
|
|
|
|
|
timeBackup = "%s %s %s %s"%(dMinutes,minutes,dSeconds,seconds)
|
|
|
|
|
elif dSeconds:
|
|
|
|
|
timeBackup = "%s %s"%(dSeconds,seconds)
|
|
|
|
|
self.printWARNING(_("The backup file is created %s ago")%timeBackup)
|
|
|
|
|
else:
|
|
|
|
|
self.printWARNING(_("The backup file is created %s days ago")\
|
|
|
|
|
%deltaTime.days)
|
|
|
|
|
self.printWARNING(_("cl-rebuld uses a file backup, make sure it is not \
|
|
|
|
|
outdated. If the backup is obsolete, use cl-backup."))
|
|
|
|
|
messDialog = \
|
|
|
|
|
_("If you are ready to continue executing the program")+", "+\
|
|
|
|
|
_("input 'yes'") +", "+ _("if not 'no'")
|
|
|
|
|
if not self.dialogYesNo(messDialog):
|
|
|
|
|
return True
|
|
|
|
|
# Восстанавливаем сервисы не запуская их и не прописывая в автозагрузку
|
|
|
|
|
if not self.restoreServer(False):
|
|
|
|
|
return False
|
|
|
|
|
if not self.updateServer({}, "all"):
|
|
|
|
|
return False
|
|
|
|
|
self.printOK(_("Rebuilding all services") + " ...")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def rebuildLdapServer(self, options):
|
|
|
|
|
"""Перегенерирует конфигурационные файлы, и базу данных LDAP"""
|
|
|
|
|
return self.rebuildServer(options)
|
|
|
|
|
|
|
|
|
|
def updateServer(self, options, serviceUpdate):
|
|
|
|
|
"""Перегенерируем конфигурационные файлы
|
|
|
|
|
|
|
|
|
@ -4974,15 +5038,21 @@ class servLdap(shareLdap):
|
|
|
|
|
if not flagError and not self.applyProfilesFromService(service):
|
|
|
|
|
flagError = True
|
|
|
|
|
break
|
|
|
|
|
self.printOK(_("Update config from service %s")\
|
|
|
|
|
self.printOK(_("Updating config from service %s")\
|
|
|
|
|
%service.capitalize())
|
|
|
|
|
self.stopServices([service])
|
|
|
|
|
self.startServices([service], False)
|
|
|
|
|
if not self.stopServices([service]):
|
|
|
|
|
return False
|
|
|
|
|
if not self.startServices([service], False):
|
|
|
|
|
return False
|
|
|
|
|
self.printOK(_("Restarting service %s")%service.capitalize())
|
|
|
|
|
# Перезапускаем ldap
|
|
|
|
|
if not flagError:
|
|
|
|
|
service = "ldap"
|
|
|
|
|
self.stopServices([service])
|
|
|
|
|
self.startServices([service], False)
|
|
|
|
|
if not self.stopServices([service]):
|
|
|
|
|
return False
|
|
|
|
|
if not self.startServices([service], False):
|
|
|
|
|
return False
|
|
|
|
|
self.printOK(_("Restarting service %s")%service.capitalize())
|
|
|
|
|
#запишем переменные для сервера
|
|
|
|
|
if not flagError:
|
|
|
|
|
self.clVars.Write("sr_jabber_history",
|
|
|
|
@ -5055,6 +5125,14 @@ class servLdap(shareLdap):
|
|
|
|
|
for iniFile in iniFiles:
|
|
|
|
|
if os.path.exists(iniFile):
|
|
|
|
|
allArchFiles.append(iniFile)
|
|
|
|
|
profileDirs = self.clVars.Get("cl_profile_path")
|
|
|
|
|
if len(profileDirs)>1:
|
|
|
|
|
profileDirs = profileDirs[1:]
|
|
|
|
|
# Добавляем в архивацию профили клиента
|
|
|
|
|
profileDirs.append('/var/calculate/remote/client-profile')
|
|
|
|
|
for pDir in profileDirs:
|
|
|
|
|
if os.path.exists(pDir):
|
|
|
|
|
scanPrivDirs.append(pDir)
|
|
|
|
|
if "samba" in servInstalled:
|
|
|
|
|
scanPrivDirs.append(self.sambaPrivate)
|
|
|
|
|
if "mail" in servInstalled:
|
|
|
|
@ -5109,10 +5187,8 @@ class servLdap(shareLdap):
|
|
|
|
|
servInstalled = self.getServiceSetup()
|
|
|
|
|
return self.startServices(servInstalled)
|
|
|
|
|
|
|
|
|
|
def restoreServer(self):
|
|
|
|
|
"""Восстанавливает из архива все установленные сервисы
|
|
|
|
|
|
|
|
|
|
Восстановленные сервисы будут запущены
|
|
|
|
|
def getArchFile(self):
|
|
|
|
|
"""Возвращает имя архивного файла из директории backup
|
|
|
|
|
"""
|
|
|
|
|
if not os.path.exists(self.backupDirectory):
|
|
|
|
|
self.printERROR(_("Path for backup is not found") + ": " +\
|
|
|
|
@ -5139,6 +5215,16 @@ class servLdap(shareLdap):
|
|
|
|
|
self.printERROR(_("Backup file is not found") + ": " +\
|
|
|
|
|
str(bFile))
|
|
|
|
|
return False
|
|
|
|
|
return bFile
|
|
|
|
|
|
|
|
|
|
def restoreServer(self, startServices=True):
|
|
|
|
|
"""Восстанавливает из архива все установленные сервисы
|
|
|
|
|
|
|
|
|
|
Восстановленные сервисы будут запущены
|
|
|
|
|
"""
|
|
|
|
|
bFile = self.getArchFile()
|
|
|
|
|
if not bFile:
|
|
|
|
|
return False
|
|
|
|
|
# Создаем объект переменных clVars
|
|
|
|
|
self.createClVars()
|
|
|
|
|
# останавливаем сервисы
|
|
|
|
@ -5199,11 +5285,13 @@ class servLdap(shareLdap):
|
|
|
|
|
os.remove(self.tmpListFile)
|
|
|
|
|
if os.path.exists(self.archLdifFile):
|
|
|
|
|
os.remove(self.archLdifFile)
|
|
|
|
|
# Стартуем все сервисы и прописываем в автозагрузку
|
|
|
|
|
# считаем переменные из ini файлов
|
|
|
|
|
self.clVars.flIniFile()
|
|
|
|
|
if not self.startAllSetupServices():
|
|
|
|
|
return False
|
|
|
|
|
self.printOK(_("Restored all installed services") + " ...")
|
|
|
|
|
if startServices:
|
|
|
|
|
# Стартуем все сервисы и прописываем в автозагрузку
|
|
|
|
|
if not self.startAllSetupServices():
|
|
|
|
|
return False
|
|
|
|
|
self.printOK(_("Restored all installed services") + " ...")
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
@ -5407,6 +5495,7 @@ class cl_ldap(shareLdap):
|
|
|
|
|
'cl-passwd':7,
|
|
|
|
|
'cl-backup':8,
|
|
|
|
|
'cl-update':9,
|
|
|
|
|
'cl-rebuild':10,
|
|
|
|
|
}
|
|
|
|
|
# Cвязь сервисов и действующих опций
|
|
|
|
|
self.relServices = {"samba":[_("Common options"),
|
|
|
|
@ -6308,6 +6397,11 @@ the password will be changed only for Samba account")
|
|
|
|
|
'helpChapter':_("Usage"),
|
|
|
|
|
'help': cmdName + " " + _("service")
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'progAccess':(10,),
|
|
|
|
|
'helpChapter':_("Usage"),
|
|
|
|
|
'help': cmdName
|
|
|
|
|
},
|
|
|
|
|
# Function
|
|
|
|
|
{
|
|
|
|
|
'progAccess':(0,),
|
|
|
|
@ -6359,6 +6453,12 @@ the password will be changed only for Samba account")
|
|
|
|
|
'helpChapter':"Function",
|
|
|
|
|
'help':_("Updates configuration files for the service")
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'progAccess':(10,),
|
|
|
|
|
'helpChapter':"Function",
|
|
|
|
|
'help':_("Rebuild configuration files and LDAP database for all \
|
|
|
|
|
services")
|
|
|
|
|
},
|
|
|
|
|
# Примеры
|
|
|
|
|
{
|
|
|
|
|
'progAccess':(0,),
|
|
|
|
@ -6432,6 +6532,13 @@ the password will be changed only for Samba account")
|
|
|
|
|
"# "+_("update config files from Samba services") + ".",
|
|
|
|
|
self.consolewidth-self.column_width)
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
'progAccess':(10,),
|
|
|
|
|
'helpChapter':_("Examples"),
|
|
|
|
|
'help':pcs(" cl-rebuild", self.column_width,
|
|
|
|
|
"# "+_("rebuild all services") + ".",
|
|
|
|
|
self.consolewidth-self.column_width)
|
|
|
|
|
},
|
|
|
|
|
#{
|
|
|
|
|
#'helpChapter':_("Examples"),
|
|
|
|
|
#'help':pcs(" " + cmdName + " --env boot", self.column_width,
|
|
|
|
|