You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
calculate-utils-2.1-server/setup.py

221 lines
7.7 KiB

#!/usr/bin/env python
# setup.py --- Setup script for calculate-server
# Copyright 2008-2010 Mir Calculate. http://www.calculate-linux.org
#
# 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 os
import glob
import sys
import re
from distutils.core import setup
from distutils.command.build_scripts import build_scripts
from distutils.command.install_scripts import install_scripts
from distutils.command.install_data import install_data
data_files = []
var_data_files = [("/var/calculate/server-profile",[]),
("/var/calculate/server-data",[])]
data_dirs_local = ['profile','ldif']
share_calculate_dir = "/usr/share/calculate-2.0/"
data_dirs_share = ['i18n']
data_files += var_data_files
def scanDirs(profilesDirs):
"""Recursive scanning directories"""
dirs = []
class dirProf:
def __init__(self):
self.baseDir = False
self.dirs = []
self.files = []
def getFilesDir(dirP, dirname,names):
if '/.svn' in dirname:
return False
for nameFile in names:
absNameFile = dirname + "/" + nameFile
if '/.svn' in absNameFile:
continue
if os.path.isfile(absNameFile):
dirP.files.append(absNameFile)
elif os.path.isdir(absNameFile):
dirP.dirs.append(absNameFile)
return True
for profileDir in profilesDirs:
if profileDir:
dirP = dirProf()
dirP.baseDir = profileDir
dirs.append(dirP)
os.path.walk(profileDir,getFilesDir, dirP)
return dirs
def create_data_files (data_dirs, prefix=""):
test1_files = []
data_files = []
dirs = scanDirs(data_dirs)
i = 0
for obj in dirs:
if not obj.dirs:
obj.dirs.append(data_dirs[i])
i += 1
for obj in dirs:
files_obj_dirs = []
for dir_name in obj.dirs:
for file_name in obj.files:
if re.match(dir_name,file_name):
files_obj_dirs.append(dir_name)
break
for files_obj_dir in files_obj_dirs:
obj.dirs.remove(files_obj_dir)
files_obj_dirs.sort(lambda x, y: cmp(len(y), len(x)))
for dir_name in files_obj_dirs:
wr_sp = (prefix+dir_name,[])
file_dirs = []
for file_name in obj.files:
if re.match(dir_name,file_name):
file_dirs.append(file_name)
for file_name in file_dirs:
wr_sp[1].append(file_name)
obj.files.remove(file_name)
test1_files.append(wr_sp)
test1_files.reverse()
test2_files = []
for obj in dirs:
for dir_name in obj.dirs:
wr_sp = (prefix+dir_name,[])
test2_files.append(wr_sp)
test1_files = test2_files + test1_files
return test1_files
data_files += create_data_files (data_dirs_local)
data_files += create_data_files (data_dirs_share, share_calculate_dir)
data_files += [('/etc/conf.d', ['data/sortmilter.conf']),
('/etc/init.d', ['data/sortmilter.init'])]
class cl_build_scripts(build_scripts):
"""Class for build scripts"""
def run (self):
scripts = ['./scripts/proxy', './scripts/dhcp',
'./scripts/execserv',
'./scripts/execsamba']
backup_build_dir = self.build_dir
backup_scripts = filter(lambda x: not x in scripts, self.scripts)
self.scripts = scripts
self.build_dir = self.build_dir + "-bin"
build_scripts.run(self)
self.scripts = backup_scripts
self.build_dir = backup_build_dir
build_scripts.run(self)
class cl_install_scripts(install_scripts):
"""Class for install scripts"""
def run (self):
backup_install_dir = self.install_dir
backup_build_dir = self.build_dir
cl_cmd_obj = self.distribution.get_command_obj("install")
self.build_dir = self.build_dir + "-bin"
self.install_dir = os.path.join(cl_cmd_obj.install_data,"bin")
install_scripts.run(self)
self.build_dir = backup_build_dir
self.install_dir = backup_install_dir
install_scripts.run(self)
class cl_install_data(install_data):
def run (self):
install_data.run(self)
data_file = \
[("/etc/init.d/sortmilter.init","sortmilter",0755),
("/etc/conf.d/sortmilter.conf","sortmilter",None)]
data_find = \
dict(
map(lambda x:(os.path.basename(x[0]),
[list(reversed(filter(lambda y:y,x[0].split("/")))),
x[1],
x[2]]),
data_file))
for path in self.get_outputs():
nameFile = os.path.split(path)[1]
if nameFile in data_find.keys():
data = data_find[nameFile][0]
newname = data_find[nameFile][1]
mode = data_find[nameFile][2]
flagFound = True
iMax = len(data)
pathFile = path
for i in range(iMax):
if data[i] != os.path.split(pathFile)[1]:
flagFound = False
break
pathFile = os.path.split(pathFile)[0]
if flagFound:
if not mode is None:
os.chmod(path, mode)
if not newname is None:
newname = os.path.join(os.path.dirname(path),newname)
os.rename(path,newname)
setup(
name = 'calculate-server',
version = "2.1.16",
description = "The program for configuring server-data linux",
author = "Calculate Pack",
author_email = "support@calculate.ru",
url = "http://www.calculate-linux.org",
license = "http://www.apache.org/licenses/LICENSE-2.0",
package_dir = {'calculate-server': "."},
packages = ['calculate-server.pym'],
data_files = data_files,
scripts=["./scripts/cl-useradd",
"./scripts/cl-userdel",
"./scripts/cl-usermod",
"./scripts/cl-groupadd",
"./scripts/cl-groupmod",
"./scripts/cl-groupdel",
"./scripts/cl-passwd",
"./scripts/cl-setup",
"./scripts/cl-backup-server",
"./scripts/cl-update-server",
"./scripts/cl-rebuild",
"./scripts/cl-replication",
"./scripts/execserv",
"./scripts/execsamba",
"./scripts/replcron",
"./scripts/cl-info",
"./scripts/proxy",
"./scripts/cl-dns-recadd",
"./scripts/cl-dns-recdel",
"./scripts/cl-dns-recmod",
"./scripts/cl-dns-zoneadd",
"./scripts/cl-dns-zonedel",
"./scripts/cl-dns-zonemod",
"./scripts/cl-dhcp-netadd",
"./scripts/cl-dhcp-netdel",
"./scripts/cl-dhcp-netmod",
"./scripts/cl-dhcp-hostadd",
"./scripts/cl-dhcp-hostdel",
"./scripts/cl-dhcp-hostmod",
"./scripts/dhcp",
"./scripts/sortmilter"],
cmdclass={
'build_scripts':cl_build_scripts,
'install_scripts':cl_install_scripts,
'install_data': cl_install_data},
)