develop
asamoukin 16 years ago
parent 00185b7e28
commit 1233fd04d7

File diff suppressed because it is too large Load Diff

@ -0,0 +1,107 @@
#-*- coding: utf-8 -*-
#Copyright 2008 Calculate Pack, http://www.calculate-linux.ru
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import re
import cl_utils
import cl_base
class fillVars(object, cl_base.glob_attr):
def get_os_net_domain(self):
''' Определим домен'''
domain=self._runos("%s hostname -d 2>&1"%self.path_env)
if re.search("^hostname: ",domain):
return "local"
else:
return domain
def get_os_linux_shortname(self):
'''Получить переменную короткого названия системы'''
path = '/etc/issue'
sp="""Welcome to \\\\n.\\\\O \(([a-zA-Z ]+) ([^\s\)]+)"""
res=self._runos('%scat %s | grep "Welcome to "'%\
(self.path_env, path))
dist_ver = {'CLD':"Calculate Linux Desktop",
'CDS':"Calculate Directory Server",
'AcoolA':"Calculate Web Server"}
if res:
if re.search(sp,res):
vals=re.search(sp,res).groups()
issuename=vals[0]
for i in dist_ver.keys():
if dist_ver[i]==issuename:
return i
spl=issuename.split(" ")
nname=""
if len(spl)>1:
for i in spl:
nname+=i[1]
return nname
else:
return issuename
return "CLD"
def get_os_net_hostname(self):
'''Считать имя компьютера net_host'''
hostname=self._runos("""%s hostname -s 2>&1"""%self.path_env)
#Set('net_host',hostname, True)
#упрощенный вариант, следует выполнять только если не указан домен
#в системе
if re.search("^hostname: ",hostname):
hostname=self._runos("""%s hostname 2>&1"""%self.path_env)
if re.search("^hostname: ",hostname):
return self.Get('os_linux_shortname')
else:
if hostname=='livecd':
return self.Get('os_linux_shortname')
return hostname
# Разрешенные сети (в данном случае все сети)
def get_os_net_allow(self):
"""Разрешенные сети"""
net={'255.255.0.0':'/16',
'255.255.255.0':'/24',
'255.255.255.128':'/25',
'255.255.255.252':'/30',
'255.255.255.255':''}
networks=""
netInterfaces=cl_utils.getdirlist("/sys/class/net/")
for i in netInterfaces:
res=self._runos("/sbin/ifconfig %s"%i)
for j in res:
s_ip=re.search('addr:([0-9\.]+).+Bcast:.+Mask:([0-9\.]+)'\
,j)
if s_ip:
ip, netmask=s_ip.groups()
ip=ip.split('.');
if ip[0]=='10' or\
(ip[0]=='172' and int(ip[1])>=16 and int(ip[1])<=31)or\
(ip[0]=='192' and ip[1]=='168'):
if netmask=='255.255.255.255':
networks+=ip+" "
elif netmask=='255.255.255.252':
networks+=ip[0]+"."+ip[1]+"."+ip[2]+"."+"252"+\
net[netmask]
elif netmask=='255.255.255.128':
networks+=ip[0]+"."+ip[1]+"."+ip[2]+"."+"128"+\
net[netmask]
elif netmask=='255.255.255.0':
networks+=ip[0]+"."+ip[1]+"."+ip[2]+"."+"0"+\
net[netmask]
elif netmask=='255.255.0.0':
networks+=ip[0]+"."+ip[1]+".0.0"+net[netmask]
return networks

@ -27,6 +27,7 @@ tr = cl_base.lang()
tr.setLocalDomain('cl_lib')
tr.setLanguage(sys.modules[__name__])
class _error:
# Здесь ошибки, если они есть
error = []
@ -1163,6 +1164,14 @@ class xmlDoc:
else:
return False
def getNameArea(self, xmlArea):
"""Выдает имя области"""
xmlNameAreas = xpath.Evaluate('child::caption/name', xmlArea)
if xmlNameAreas and xmlNameAreas[0].firstChild:
return xmlNameAreas[0].firstChild.nodeValue
else:
return False
def xmlToText(self, xmlAreas, text):
"""Преобразует список XML областей в текст"""
def getQuotesArea(xmlArea):
@ -1847,8 +1856,9 @@ class profile(_file, _terms):
# Объект с переменными
self.objVar = objVar
# Базовая директория переноса профилей "/mnt/calculate" или "/" и.т.д
baseDir = self.objVar.Get("setup_path_install")
self._baseDir = os.path.split(baseDir)[0]
baseDir = self.objVar.Get("cl_root_path")
#self._baseDir = os.path.split(baseDir)[0]
self._baseDir = baseDir
if self._baseDir == "/":
self._baseDir = ""
# Последняя часть директории профиля (имя сервиса: samba, mail)
@ -1951,21 +1961,10 @@ class profile(_file, _terms):
def applyProfiles(self):
"""Применяет профили к конфигурационным файлам"""
if not self.objVar.defined("setup_path_profinstall"):
self.setError (_("not defined Var: ") + "setup_path_profinstall")
return False
dirsProfInstall = self.objVar.Get("setup_path_profinstall")
if not self.objVar.defined("setup_path_profuser"):
self.setError (_("not defined Var: ") + "setup_path_profuser")
if not self.objVar.defined("cl_profile_path"):
self.setError (_("not defined Var: ") + "cl_profile_path")
return False
dirsProfUser = self.objVar.Get("setup_path_profuser")
# Получаем директории профиля
if dirsProfInstall and dirsProfUser:
dirsProfiles = dirsProfInstall + dirsProfUser
elif dirsProfInstall:
dirsProfiles = dirsProfInstall
elif dirsProfUser:
dirsProfiles = dirsProfUser
dirsProfiles = self.objVar.Get("cl_profile_path")
if self._servDir:
tmpDirsProfiles = []
for dirP in dirsProfiles:
@ -1997,7 +1996,7 @@ class profile(_file, _terms):
listProfTitle = dirObj.baseDir.split("/")[-2:]
profTitle = '"' + "/".join(listProfTitle) + '"'
self.join(fileProfile, oldFile,
(self.objVar.Get("setup_name"),profTitle))
(self.objVar.Get("cl_ver"),profTitle))
else:
if self.getError():
print self.getError()
@ -3448,3 +3447,45 @@ class procmail(objShare):
if isinstance(procmailObj, procmail):
#print self.docObj.doc.toprettyxml()
self.docObj.joinDoc(procmailObj.doc)
class kde(samba):
"""Класс для обработки конфигурационного файла типа kde
"""
_comment = "#"
configName = "kde"
configVersion = "0.1"
reHeader = re.compile("^[\t ]*\[[^\[\]]+\].*\n",re.M)
reBody = re.compile(".+",re.M|re.S)
reComment = re.compile("\s*%s.*"%(_comment))
reSeparator = re.compile("=")
sepFields = "\n"
reSepFields = re.compile(sepFields)
def __init__(self,text):
samba.__init__(self,text)
def join(self, kdeObj):
"""Объединяем конфигурации"""
if isinstance(kdeObj, kde):
self.docObj.joinDoc(kdeObj.doc)
# Для добавления перевода строки между областями если его нет
#print self.docObj.body.toprettyxml()
xmlAreas = xpath.Evaluate("child::area", self.docObj.body)
if xmlAreas and len(xmlAreas)>1:
for xmlArea in xmlAreas[-1:]:
if xmlArea.previousSibling and\
self.docObj.getTypeField(xmlArea.previousSibling) == "br":
continue
xmlFields = xpath.Evaluate("child::field", xmlArea)
if not (xmlFields and\
(self.docObj.getTypeField(xmlFields[-1])=="br" or\
self.docObj.getTypeField(xmlFields[-1])=="comment")):
if xmlArea.nextSibling:
parentNode = xmlArea.parentNode
nextNode = xmlArea.nextSibling
parentNode.insertBefore(\
self.docObj.createField("br",
[],"",[],
False,False),
nextNode)

@ -19,396 +19,28 @@
# w-переназначается из командной строки
# type - тип переменной состоит из двух элементов(что это и для чего
# это)
# value - дефоултное значение переменной
# select - список допустимых значений переменной
# official - флаг того, что данная переменная служебная и не отображается
# при печати списка значений переменных
# printval - печатное значение переменной(значение выводимое при печати
# списка значений переменных)
# value - значение переменной
class Data:
#старое значение файла grub_device.map
boot_devicemap_old={'mode':"r",
'type':('conf','boot'),
}
#новое значение файла device.map
boot_devicemap= {'mode':"w",
'type':('conf','boot'),
}
#альтернативные строчки загрузчика grub
boot_grub_another= {'mode':"r",
'type':('conf','boot'),
}
#диск с которого загружена система в формате загрузчика grub
boot_grub_loaddev= {'mode':"r",
'type':('param','boot'),
}
#раздел с которого загружена система в формате загрузчика grub
boot_grub_loadnum= {'mode':"r",
'type':('param','boot'),
}
#диск для установки системы в формате загрузчика grub
boot_grub_setupdev={'mode':"r",
'type':('param','boot'),
}
#раздел для установки системы в формате загрузчика grub
boot_grub_setupnum={'mode':"r",
'type':('param','boot'),
}
#модель материнской платы
hrd_board_model= {'mode':"r",
'type':('info','matherboard'),
}
#производитель материнской платы
hrd_board_vendor= {'mode':"r",
'type':('info','matherboard'),
}
#количество процессоров на ПК
hrd_cpu_num= {'mode':"w",
'type':('param','cpu'),
}
#количество процессоров на ПК
hrd_laptop_model= {'mode':"r",
'type':('info','hardware'),
}
#производитель ноутбука
hrd_laptop_vendor= {'mode':"r",
'type':('info','hardware'),
}
#обозначение видео карты для настроек OpenGL
hrd_opengl_set= {'mode':"r",
'type':('param','video'),
}
#описание материнской платы
hrd_pc_vendor= {'mode':"r",
'type':('info','matherboard'),
}
#видео драйвер
hrd_video_drv= {'mode':"w",
'type':('param','video'),
}
#видео карта
hrd_video_name= {'mode':"r",
'type':('info','video'),
}
#разрешение экрана
hrd_video_res= {'mode':"w",
'type':('param','screen'),
}
#подключен USB Hewlett-Packard
hrd_usb_hp= {'mode':"w",
'type':('info','hardware')}
#подключен USB Bluetooth
hrd_usb_bluetooth= {'mode':"w",
'type':('info','hardware')}
#DNS имя сервера CDS
net_cds= {'mode':"w",
'type':('param','lan'),
}
#сетевые настройки файла /etc/conf.d/net
net_conf= {'mode':"r",
'type':('conf','lan'),
}
#сетевое устройство, через которое пакеты попадают на шлюз
net_gw_dev= {'mode':"r",
'type':('param','network'),
}
#адрес шлюза
net_gw= {'mode':"w",
'type':('param','lan'),
}
#имя компьютера
net_host= {'mode':"w",
'type':('param','lan'),
}
#разрешенная сеть
net_hosts_allow= {'mode':"r",
'type':('param','lan'),
}
#активное сетевое устройство (выбириется в порядке приоритета eth0-9,
#wlan0-9)
net_lan= {'mode':"r",
'type':('param','lan'),
}
#текущая сеть
net_networks= {'mode':"r",
'type':('conf','lan'),
}
#DNS имя NFS сервера
net_nfs= {'mode':"w",
'type':('conf','lan'),
}
#DNS имя сервера времени#
# BD's definitions
net_ntp= {'mode':"w",
'type':('conf','lan'),
}
#порт proxy сервера
net_proxy_port= {'mode':"w",
'type':('param','lan'),
}
#строка для настройки proxy сервера
net_proxy_url= {'mode':"r",
'type':('param','lan'),
}
#DNS имя proxy сервера
net_proxy= {'mode':"w",
'type':('param','lan'),
}
#файловая система root раздела
setup_formatfs= {'mode':"w",
'type':('param','install'),
}
#диск и раздел для установки
setup_installdev= {'mode':"w",
'type':('param','install'),
}
#имя ISO-файла для создания загружаемого образа системы
setup_iso_name= {'mode':"r",
'type':('param','install'),
}
#версия системы (в зависимости от операции - обновление установка, сборка)
setup_linux_ver= {'mode':"w",
'type':('param','system'),
}
#имя tar-архива с образом устанавливаемой системы
setup_linuxpkg= {'mode':"r",
'type':('param','install'),
}
#установлено в ram в случае, если установка профиля производится в RAM-диск
#(настройка сеанса CDROM)
setup_location= {'mode':"r",
'type':('param','system'),
'value':""}
#значение флага -j команды make
setup_makeopts= {'mode':"w",
'type':('param','install'),
}
#архитектура процессора (в зависимости от операции - обновление установка,
#сборка)
setup_march= {'mode':"w",
'type':('param','system'),
}
#имя и версия программы
setup_name= {'mode':"r",
'type':('info','install'),
}
#название системы из-под которой запущена программа
setup_os_current= {'mode':"r",
'type':('info','system'),
}
#этап запуска (установка, сборка или обновление)
setup_pass= {'mode':"r",
'type':('param','install'),
}
#путь к директории с профилями
setup_path_profuser={'mode':"r",
'type':('path','install'),
}
#путь к спискам пакетов для сборки новой системы
setup_path_constpkg={'mode':"r",
'type':('path','install'),
}
#директория сборки новой системы
setup_path_constructor={'mode':"w",
'type':('path','install'),
'value':'/mnt/calculate'}
#путь к исходным файлам пакетов программ
setup_path_distfiles={'mode':"r",
'type':('path','install'),
}
#пути переменной окружения PATH (изменяются в случае запуска программы на
#сильно измененной Linux системе)
setup_path_env= {'mode':"r",
'type':('cmd','install'),
}
#путь к директории точки монтирования для установки новой системы
setup_path_install={'mode':"w",
'type':('path','install')}
#путь к дистрибутивам
setup_path_linuxpkg={'mode':"r",
'type':('path','install'),
}
#директория к патчам (выполняемым скриптам, содержащим определенные
#инструкции для внесения изменений в систему)
setup_path_patch= {'mode':"w",
'type':('path','install'),
}
#путь к бинарным пакетам программ
setup_path_pkg= {'mode':"r",
'type':('path','install'),
}
#путь к портежам
setup_path_portage={'mode':"r",
'type':('path','install'),
}
#директория временных файлов
setup_path_tmp= {'mode':"w",
'type':('path','install'),
}
#список накладываемых профилей при установке, наложении профилей
setup_path_profinstall= {'mode':"r",
'type':('path','install'),
}
#флаг установки MBR записи для загрузки системы (по умолчанию установлен)
setup_set_mbr= {'mode':"w",
'type':('bool','install'),
}
#имя сборки
setup_sys_fullname={'mode':"r",
'type':('info','system'),
}
#короткое название системы (CLD)
setup_sys_shortname={'mode':"r",
'type':('param','system'),
}
#emerge флаг размаскировки пакетов (меняется при установке, сборке,
#обновлении)
setup_unmask= {'mode':"r",
'type':('param','install'),
}
#номер версии программы
setup_ver= {'mode':"r",
'type':('param','install'),
'value':"0.0.1 alpha 1"}
#версия загруженной системы
sys_current_ver= {'mode':"r",
'type':('param','system'),
}
#домен
sys_domain= {'mode':"w",
'type':('param','system'),
}
#тип операционной системы
sys_linux_type= {'mode':"r",
'type':('param','system'),
}
# раздел, с которого загрузились
sys_loaddev= {'mode':"r",
'type':('param','system')}
#носитель в значение ram в случае загрузки с CD_DVD
sys_load= {'mode':"r",
'type':('param','system'),
}
#монтируемые диски (в т.ч. сетевые) в системе
sys_mount_dev= {'mode':"r",
'type':('param','system'),
}
#дополнительные настройки монтируемых дисков файла /etc/fstab
sys_mount_line= {'mode':"r",
'type':('param','system'),
}
#флаг переноса подключений из fstab
sys_set_movefstab= {'mode':"w",
'type':('bool','system'),
'value':True}
#раздел подкачки (swap)
sys_swap_dev= {'mode':"w",
'type':('param','system'),
}
#строка инициализации swap-раздела файла /etc/fstab
sys_swap_line= {'mode':"r",
'type':('conf','system'),
}
#-----------------------------------------------------
#Служебные переменные
#-----------------------------------------------------
# переменная флаг, архитектура указанная пользователем
# не совпадает с полученной из системы
dif_march= {'mode':"r",
'type':('param','system'),
'official':True}
#хэш доступных grub-у дисков
boot_grub_map= {'mode':"r",
'type':('param','install'),
'official':True}
#путь к программе host
cmd_exec_host= {'mode':"r",
'type':('cmd','install'),
'official':True}
#путь к программе nmap
cmd_exec_nmap= {'mode':"r",
'type':('cmd','install'),
'official':True}
#строка запуска emerge при сборке новой системы
cmd_run_emerge1= {'mode':"r",
'type':('cmd','install'),
'official':True}
#строка запуска emerge при сборке новой системы
cmd_run_emerge2= {'mode':"r",
'type':('cmd','install'),
'official':True}
#команда форматирования диска
cmd_run_format= {'mode':"r",
'type':('cmd','install'),
'official':True}
#команда инициализации OpenGL
cmd_run_opengl= {'mode':"r",
'type':('cmd','install'),
'official':True}
#хэш конвертации устаревшего формата hda на sda
setup_ata= {'mode':"r",
'type':('param','install'),
'official':False}
#версии сборок с сокращенным и полным именем
setup_dist_ver= {'mode':"r",
'type':('param','system'),
'value':{'CLD':"Calculate Linux Desktop",
'CDS':"Calculate Directory Server",
'CWS':"Calculate Web Server",
'AcoolA':"Calculate Web Server"},
'official':True}
#версии сборок с сокращенным и полным именем
setup_path_other= {'mode':"r",
'type':('param','system'),
'value':{'profile':["/usr/calculate2/profile/",
"/usr/share/calculate/profile/"]
},
'official':True}
#разделительная линия в комментариях
setup_mesline= {'mode':"w",
'type':('info','install'),
'official':True}
#текст заголовка изменяемых конфигурационных файлов
setup_mestitle= {'mode':"w",
'type':('info','install'),
'official':True}
#символ разделителя версии и патча
setup_ospatchsplit={'mode':"r",
'type':('param','install'),
'official':True}
#список доступных патчей
setup_patches= {'mode':"r",
'type':('param','system'),
'official':True}
#номер патча текущей системы
sys_patchcur= {'mode':"r",
'type':('param','system'),
'official':True}
#номер последнего установленного патча
sys_patchlast= {'mode':"r",
'type':('param','system'),
'official':True}
#директории точек монтирования в системе
sys_path_mounts= {'mode':"r",
'type':('path','system'),
'official':True}
#номер прохода при наложении профиля
setup_pass_parser= {'mode':"r",
'type':('param','install'),
'official':True}
#путь к файлу calculate.ini
sys_calculate_ini= {'mode':"r",
'type':('path','system'),
'official':True,
'value':'etc/calculate/calculate.env'}
#локальный путь к файлу calculate.ini
sys_calculate_ini_local= {'mode':"r",
'type':('path','system'),
'official':True,
'value':'var/calculate/setup/calculate.env'}
#Удаленный путь к файлу calculate.ini
sys_calculate_ini_remote= {'mode':"r",
'type':('path','system'),
'official':True,
'value':'var/calculate/remote/setup/calculate.env'}
##имя компьютера
#net_host
os_net_hostname = {'mode':"w"}
##текущая сеть
# разрешенные сети
#net_networks
os_net_allow = {}
##короткое название системы (CLD)
#setup_sys_shortname
os_linux_shortname={}
##домен
#sys_domain
os_net_domain = {'mode':"w"}
# Пути к ini файлам
cl_env_path = {'value':['/var/calculate/remote/calculate.env',
'/var/calculate/calculate.env',
'/etc/calculate/calculate.env']}

Loading…
Cancel
Save