def OpenRoot(): if 0 != os.system("passwd root"): return "Failed to change password of root" #修改第一个文件项 szConfig, szErr = maker_public.readTxtFile( "/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf") if 0 < len(szErr): return szErr if None==re.search("\n[ \\t]*greeter-show-manual-login[ \\t]*=[ \\t]*.+", szConfig) and \ None==re.search("^[ \\t]*greeter-show-manual-login[ \\t]*=[ \\t]*.+", szConfig): szConfig += "\ngreeter-show-manual-login=true" if None==re.search("\n[ \\t]*all-guest[ \\t]*=[ \\t]*.+", szConfig) and \ None==re.search("^[ \\t]*all-guest[ \\t]*=[ \\t]*.+", szConfig): szConfig += "\nall-guest=false" szErr = maker_public.writeTxtFile( "/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf", szConfig) if 0 < len(szErr): return szErr #修改第二个文件项 szConfig, szErr = maker_public.readTxtFile("/etc/pam.d/gdm-autologin") if 0 < len(szErr): return szErr szConfig = re.sub("\n[ \\t]*auth[ \\t]+required[ \\t]+pam_succeed_if.so[ \\t]+user[ \\t]+!=[ \\t]+root[ \\t]+quiet_success", \ "\n#auth required pam_succeed_if.so user != root quiet_success", szConfig) szConfig = re.sub("^[ \\t]*auth[ \\t]+required[ \\t]+pam_succeed_if.so[ \\t]+user[ \\t]+!=[ \\t]+root[ \\t]+quiet_success", \ "#auth required pam_succeed_if.so user != root quiet_success", szConfig) szErr = maker_public.writeTxtFile("/etc/pam.d/gdm-password", szConfig) if 0 < len(szErr): return szErr #修改第三个文件 szConfig, szErr = maker_public.readTxtFile("/etc/pam.d/gdm-password") if 0 < len(szErr): return szErr szConfig = re.sub("\n[ \\t]*auth[ \\t]+required[ \\t]+pam_succeed_if.so[ \\t]+user[ \\t]+!=[ \\t]+root[ \\t]+quiet_success", \ "\n#auth required pam_succeed_if.so user != root quiet_success", szConfig) szConfig = re.sub("^[ \\t]*auth[ \\t]+required[ \\t]+pam_succeed_if.so[ \\t]+user[ \\t]+!=[ \\t]+root[ \\t]+quiet_success", \ "#auth required pam_succeed_if.so user != root quiet_success", szConfig) szErr = maker_public.writeTxtFile("/etc/pam.d/gdm-password", szConfig) if 0 < len(szErr): return szErr #修改第四个文件 szConfig, szErr = maker_public.readTxtFile("/root/.profile") if 0 < len(szErr): return szErr if None==re.search("\n[ \\t]*tty[ \\t]+-s[ \\t]*&&[ \\t]*mesg[ \\t]+n[ \\t]+\\|\\|[ \\t]+.+", szConfig) and \ None==re.search("^[ \\t]*tty[ \\t]+-s[ \\t]*&&[ \\t]*mesg[ \\t]+n[ \\t]+\\|\\|[ \\t]+.+", szConfig): szConfig = re.sub("\n[ \\t]*mesg[ \\t]+n[ \\t]+\\|\\|[ \\t]+.+", "\ntty -s&&mesg n || true", szConfig) szConfig = re.sub("^[ \\t]*mesg[ \\t]+n[ \\t]+\\|\\|[ \\t]+.+", "\ntty -s&&mesg n || true", szConfig) szErr = maker_public.writeTxtFile("/root/.profile", szConfig) if 0 < len(szErr): return szErr # return ""
def ConfigRepo(): #安装epel扩展库 szErr = installOrUpdateRpm("epel-release", "noarch", "") if 0 < len(szErr): return szErr #安装WANGdisco os.system("rm -f /tmp/vscode_tmp") os.system("rpm -q centos-release >> /tmp/vscode_tmp") szCentOSVer, _ = maker_public.readTxtFile("/tmp/vscode_tmp") MatchList = re.match("^centos\\-release\\-([\\d]+)\\-[\\d]+\\.[\\d]+"+\ "\\.[\\d]+\\.[^\\.]+\\.centos\\.[^\\.^\\s]+$", szCentOSVer) if None == MatchList: return ("Unknow OS:%s" % szCentOSVer) szRpmPath = ("http://opensource.wandisco.com/centos/%s"\ "/git/x86_64/wandisco-git-release-%s-2.noarch.rpm" %(MatchList.group(1),MatchList.group(1))) szErr = installOrUpdateRpm("wandisco-git-release", "noarch", szRpmPath) if 0 >= len(szErr): return "" szRpmPath = ("http://opensource.wandisco.com/centos/%s"\ "/git/x86_64/wandisco-git-release-%s-1.noarch.rpm" %(MatchList.group(1),MatchList.group(1))) szErr = installOrUpdateRpm("wandisco-git-release", "noarch", szRpmPath) if 0 < len(szErr): return szErr # return ""
def installOrUpdateRpm(szRpmName, szMacVer, szRpmPath): #获取RPM包的安装信息 os.system("rm -f /tmp/vscode_tmp") os.system("yum list installed | grep -E \"" + szRpmName + "\\." + szMacVer + "\" >> /tmp/vscode_tmp") szRpmInfo, _ = maker_public.readTxtFile("/tmp/vscode_tmp") szRpmInfoArr = szRpmInfo.split("\n") InstalledMatchList = None for szCurRpm in szRpmInfoArr: InstalledMatchList = re.match("^"+szRpmName+"\\."+szMacVer+\ "[\\s]{1,}([^\\s]{1,})[\\s]{1,}[^\\s]{1,}", szCurRpm) if None != InstalledMatchList: break os.system("rm -f /tmp/vscode_tmp") #如果没有安装则进行安装,否则就进行升级 if None == InstalledMatchList: if 0 >= len(szRpmPath): if 0 != os.system("yum -y install %s.%s" % (szRpmName, szMacVer)): return ("Failed to Install %s.%s" % (szRpmName, szMacVer)) else: if 0 != os.system("yum -y install %s" % (szRpmPath)): return ("Install %s.%s failed" % (szRpmName, szMacVer)) else: if 0 >= len(szRpmPath): if 0 != os.system("yum -y update %s.%s" % (szRpmName, szMacVer)): return ("Update %s.%s failed" % (szRpmName, szMacVer)) else: if 0 != os.system("yum -y update %s" % (szRpmPath)): return ("Update %s.%s failed" % (szRpmName, szMacVer)) #打印安装成功信息 print("Install/Update %s success\n" % (szRpmName)) #返回 return ""
def ConfigSshd(): #安装 if 0 != os.system("apt-get -y install openssh-server"): return "Install openssh-server failed" #读取配置文件 szSshdConf, szErr = maker_public.readTxtFile("/etc/ssh/sshd_config") if 0 < len(szErr): return szErr #修正配置文件内容 # szSshdConf = re.sub("\\n[ \\t]*PubkeyAuthentication.+", \ "\nPubkeyAuthentication yes", szSshdConf) szSshdConf = re.sub("\\n[ \\t]*#[ \\t]*PubkeyAuthentication.+", \ "\nPubkeyAuthentication yes", szSshdConf) # szSshdConf = re.sub("\\n[ \\t]*AllowTcpForwarding.+", \ "\nAllowTcpForwarding yes", szSshdConf) szSshdConf = re.sub("\\n[ \\t]*#[ \\t]*AllowTcpForwarding.+", \ "\nAllowTcpForwarding yes", szSshdConf) # szSshdConf = re.sub("\\n[ \\t]*AuthorizedKeysFile.+", \ "\nAuthorizedKeysFile .ssh/authorized_keys", szSshdConf) szSshdConf = re.sub("\\n[ \\t]*#[ \\t]*AuthorizedKeysFile.+", \ "\nAuthorizedKeysFile .ssh/authorized_keys", szSshdConf) #写入配置文件 szErr = maker_public.writeTxtFile("/etc/ssh/sshd_config", szSshdConf) if 0 < len(szErr): return szErr #重启服务 if 0 != os.system("systemctl restart sshd"): return "restart sshd failed" return ""
def ConfigGolang(): #安装 golang if False == os.path.exists("./go1.13.6.linux-amd64.tar.gz"): if 0 != os.system( "wget https://studygolang.com/dl/golang/go1.13.6.linux-amd64.tar.gz" ): return "Failed to download golang1.13.6" if -1 == maker_public.execCmdAndGetOutput(\ "su -c \"/usr/local/go/bin/go version\"").find("go1.13.6"): os.system("rm -Rf /usr/local/go") if 0 != os.system( "tar -C /usr/local -zxvf ./go1.13.6.linux-amd64.tar.gz"): return "Failed to uncompress golang1.13.6" #设置环境变量 szConfig, szErr = maker_public.readTxtFile("/etc/profile") if 0 < len(szErr): return szErr if None == re.search("\\nexport[ \\t]+GOPATH[ \\t]*=[ \\t]*\\/root/go", szConfig): szConfig += "\nexport GOPATH=/root/go" if None == re.search( "\\nexport[ \\t]+PATH[ \\t]*=[ \\t]*\\$PATH:\\$GOPATH/bin:/usr/local/go/bin", szConfig): szConfig += "\nexport PATH=$PATH:$GOPATH/bin:/usr/local/go/bin" szErr = maker_public.writeTxtFile("/etc/profile", szConfig) if 0 < len(szErr): return szErr #安装工具 szErr = maker_public.installGolangTools("/usr/local/go/bin/go") if 0 < len(szErr): return szErr # return ""
def makeMakefile(szAppType, szProjPath): #检测 if "app"!=szAppType and "shared"!=szAppType and "static"!=szAppType: return ("Invalid output(%s)" %(szAppType)) #读取基础的makefile文件 szMakeCont,szErr = maker_public.readTxtFile( os.path.dirname(sys.argv[0])+"/golang_maker/makefile.conf" ) if 0 < len(szErr): return szErr #替换编译选项 if "app" == szAppType: szMakeCont = re.sub("\\n[ \\t]*GOFLAGS[ \\t]*:=.*", \ "\nGOFLAGS := -a -v -gcflags \"-N -l\" -ldflags \"-w -s\"", szMakeCont) szMakeCont = re.sub("\\n[ \\t]*GOFLAGS_DBG[ \\t]*:=.*", \ "\nGOFLAGS_DBG := -v -gcflags \"-N -l\"", szMakeCont) elif "shared" == szAppType: szMakeCont = re.sub("\\n[ \\t]*GOFLAGS[ \\t]*:=.*", \ "\nGOFLAGS := -a -v -gcflags \"-N -l\" -ldflags \"-w -s\" -buildmode=plugin", szMakeCont) szMakeCont = re.sub("\\n[ \\t]*GOFLAGS_DBG[ \\t]*:=.*", \ "\nGOFLAGS_DBG := -v -gcflags \"-N -l\" -buildmode=plugin", szMakeCont) else: szMakeCont = re.sub("\\n[ \\t]*GOFLAGS[ \\t]*:=.*", \ "\nGOFLAGS := -a -v -gcflags \"-N -l\" -ldflags \"-w -s\" -buildmode=archive", szMakeCont) szMakeCont = re.sub("\\n[ \\t]*GOFLAGS_DBG[ \\t]*:=.*", \ "\nGOFLAGS_DBG := -i -v -gcflags \"-N -l\" -buildmode=archive", szMakeCont) #替换编译命令 if "app" == szAppType: szMakeCont = re.sub("\\n\\t\\$\\(GO\\)[ \\t]*\\$\\(GOFLAGS\\)[ \\t]*\\$\\(LIBS\\).*", \ "\n\t$(GO) $(GOFLAGS) $(LIBS) ./...;\\\n\tcp -f $(TOP_DIR)/bin/main $(TOP_DIR)/bin/"+os.path.basename(szProjPath), \ szMakeCont) szMakeCont = re.sub("\\n\\t\\$\\(GO\\)[ \\t]*\\$\\(GOFLAGS_DBG\\)[ \\t]*\\$\\(LIBS\\).*", \ "\n\t$(GO) $(GOFLAGS_DBG) $(LIBS) ./...;\\\n\tcp -f $(TOP_DIR)/bin/main $(TOP_DIR)/bin/"+os.path.basename(szProjPath), \ szMakeCont) elif "shared" == szAppType: szMakeCont = re.sub("\\n\\t\\$\\(GO\\)[ \\t]*\\$\\(GOFLAGS\\)[ \\t]*\\$\\(LIBS\\).*", \ "\n\t$(GO) $(GOFLAGS) $(LIBS) main;\\\n\tcp -f $(TOP_DIR)/pkg/linux_amd64_dynlink/main.a "\ "$(TOP_DIR)/pkg/linux_amd64_dynlink/"+os.path.basename(szProjPath)+".a", \ szMakeCont) szMakeCont = re.sub("\\n\\t\\$\\(GO\\)[ \\t]*\\$\\(GOFLAGS_DBG\\)[ \\t]*\\$\\(LIBS\\).*", \ "\n\t$(GO) $(GOFLAGS_DBG) $(LIBS) main;\\\n\tcp -f $(TOP_DIR)/pkg/linux_amd64_dynlink/main.a "\ "$(TOP_DIR)/pkg/linux_amd64_dynlink/"+os.path.basename(szProjPath)+".a", \ szMakeCont) #else: #替换GOPATH szMakeCont = re.sub("\\n[ \\t]*GOPATH[ \\t]*:=.*", ("\nGOPATH := %s:%s" %(szProjPath, os.environ["HOME"]+"/go")), szMakeCont) #写入makefile文件 szErr = maker_public.writeTxtFile(szProjPath+"/makefile", szMakeCont) return szErr
def ConfigJava(): szCurWorkPath = os.path.dirname(os.path.realpath(sys.argv[0])) print( "First:Please download JDK for https://www.oracle.com/java/technologies/javase-downloads.html." ) print("Second: Move the RPM filr to %s." % (szCurWorkPath)) raw_input("Last: Press any key to continue...") #获取JDKRPM包的名称 szJdkRpm = "" szJdkName = "" FileList = os.listdir(os.path.dirname(os.path.realpath(sys.argv[0]))) for szCurFile in FileList: if None != re.search("jdk\\-.+_linux\\-x64_bin\\.rpm", szCurFile): szJdkRpm = str( os.path.dirname(os.path.realpath(sys.argv[0])) + "/" + szCurFile) szJdkName = str(re.sub("_linux\\-x64_bin\\.rpm", "", szCurFile)) break if 0 >= len(szJdkRpm): return "Can not find any file like jdk_xx.xx.xx_linux-x64_bin.rpm" #安装RPM包 szErr = installOrUpdateRpm(szJdkName, "x86_64", szJdkRpm) if 0 < len(szErr): return szErr #设置配置文件 szProFileConf, szErr = maker_public.readTxtFile("/etc/profile") if 0 < len(szErr): return szErr if None == re.search("\\nexport[ \\t]+JAVA_HOME[ \\t]*=.+", szProFileConf): szProFileConf += "\n\nexport JAVA_HOME=/usr/java/" + szJdkName else: szProFileConf = re.sub("\\nexport[ \\t]+JAVA_HOME[ \\t]*=.+", \ "\nexport JAVA_HOME=/usr/java/"+szJdkName, szProFileConf) szErr = maker_public.writeTxtFile("/etc/profile", szProFileConf) if 0 < len(szErr): return szErr #返回 return ""
def UpdateSystem(): os.system("yum clean all") if 0 != os.system("yum -y update"): return "Update CentOS failed" #关闭防火墙 os.system("systemctl stop firewalld.service") if 0 != os.system("systemctl disable firewalld.service"): return "Disable firewalld failed" #关闭SELINUX szSelinux, szErr = maker_public.readTxtFile("/etc/selinux/config") if 0 < len(szErr): return "Disable SELINUX failed" szSelinux = re.sub("\\n[ \\t]*SELINUX[ \\t]*=[ \\t]*.+", "\nSELINUX=disabled", szSelinux) szErr = maker_public.writeTxtFile("/etc/selinux/config", szSelinux) if 0 < len(szErr): return "Disable SELINUX failed" #配置时钟同步 os.system("systemctl enable ntpd.service") os.system("systemctl stop ntpd.service") os.system("systemctl start ntpd.service") os.system("systemctl status ntpd.service") return ""
def makeMakefile(szAppType, szProjPath, szComplier, szSuffix, szStd): #检测 if "app" != szAppType and "shared" != szAppType and "static" != szAppType: return ("Invalid output(%s)" % (szAppType)) #读取基础的makefile文件 szMakeCont, szErr = maker_public.readTxtFile( os.path.dirname(sys.argv[0]) + "/cxx_maker/makefile.conf") if 0 < len(szErr): return szErr #替换编译器 szMakeCont = re.sub("\\n[ \\t]*CXX[ \\t]*:=.*", ("\nCXX := %s" % (szComplier)), szMakeCont) #替换后缀 szMakeCont = re.sub("\\n[ \\t]*SUFFIX[ \\t]*:=.*", ("\nSUFFIX := %s" % (szSuffix)), szMakeCont) #替换编译选项 if "app" == szAppType: szMakeCont = re.sub("\\n[ \\t]*CXXFLAGS[ \\t]*:=.*", \ ("\nCXXFLAGS := -std=%s -Wall -m64 -O2 -fPIC -fmessage-length=0" %(szStd)), szMakeCont) szMakeCont = re.sub("\\n[ \\t]*CXXFLAGS_DBG[ \\t]*:=.*", \ ("\nCXXFLAGS_DBG := -std=%s -Wall -m64 -O0 -g3 -fPIC -fmessage-length=0" %(szStd)), szMakeCont) elif "shared" == szAppType: szMakeCont = re.sub("\\n[ \\t]*CXXFLAGS[ \\t]*:=.*", \ ("\nCXXFLAGS := -std=%s -Wall -m64 -O2 -fPIC -fmessage-length=0 -fvisibility=hidden" %(szStd)), szMakeCont) szMakeCont = re.sub("\\n[ \\t]*CXXFLAGS_DBG[ \\t]*:=.*", \ ("\nCXXFLAGS_DBG := -std=%s -Wall -m64 -O0 -g3 -fPIC -fmessage-length=0 -fvisibility=hidden" %(szStd)), szMakeCont) else: szMakeCont = re.sub("\\n[ \\t]*CXXFLAGS[ \\t]*:=.*", \ ("\nCXXFLAGS := -std=%s -Wall -m64 -O2 -fPIC -fmessage-length=0" %(szStd)), szMakeCont) szMakeCont = re.sub("\\n[ \\t]*CXXFLAGS_DBG[ \\t]*:=.*", \ ("\nCXXFLAGS_DBG := -std=%s -Wall -m64 -O0 -g3 -fPIC -fmessage-length=0" %(szStd)), szMakeCont) #替换链接器 if "app" == szAppType or "shared" == szAppType: szMakeCont = re.sub("\\n[ \\t]*LD[ \\t]*:=.*", "\nLD := gcc", szMakeCont) szMakeCont = re.sub("\\n[ \\t]*LDOUTFLG[ \\t]*:=.*", "\nLDOUTFLG := -o", szMakeCont) else: szMakeCont = re.sub("\\n[ \\t]*LD[ \\t]*:=.*", "\nLD := ar", szMakeCont) szMakeCont = re.sub("\\n[ \\t]*LDOUTFLG[ \\t]*:=.*", "\nLDOUTFLG := ", szMakeCont) #替换链接选项 if "app" == szAppType: szMakeCont = re.sub("\\n[ \\t]*LDFLAGS[ \\t]*:=.*", "\nLDFLAGS := -Wl,-rpath,./", szMakeCont) elif "shared" == szAppType: szMakeCont = re.sub("\\n[ \\t]*LDFLAGS[ \\t]*:=.*", "\nLDFLAGS := -Wl,-rpath,./ -shared", szMakeCont) else: szMakeCont = re.sub("\\n[ \\t]*LDFLAGS[ \\t]*:=.*", "\nLDFLAGS := -crv", szMakeCont) #替换最终目标 szTarget = os.path.basename(szProjPath) if "app" == szAppType: szMakeCont = re.sub("\\n[ \\t]*TARGET[ \\t]*:=.*", ("\nTARGET := $(BIN_DIR)/%s" % (szTarget)), szMakeCont) szMakeCont = re.sub("\\n[ \\t]*TARGET_DBG[ \\t]*:=.*", ("\nTARGET_DBG := $(BIN_DIR_DBG)/%s" % (szTarget)), szMakeCont) elif "shared" == szAppType: szMakeCont = re.sub("\\n[ \\t]*TARGET[ \\t]*:=.*", ("\nTARGET := $(BIN_DIR)/lib%s.so" % (szTarget)), szMakeCont) szMakeCont = re.sub("\\n[ \\t]*TARGET_DBG[ \\t]*:=.*", ("\nTARGET_DBG := $(BIN_DIR_DBG)/lib%s.so" % (szTarget)), szMakeCont) else: szMakeCont = re.sub("\\n[ \\t]*TARGET[ \\t]*:=.*", ("\nTARGET := $(BIN_DIR)/lib%s.a" % (szTarget)), szMakeCont) szMakeCont = re.sub("\\n[ \\t]*TARGET_DBG[ \\t]*:=.*", ("\nTARGET_DBG := $(BIN_DIR_DBG)/lib%s.a" % (szTarget)), szMakeCont) #写入makefile文件 szErr = maker_public.writeTxtFile(szProjPath + "/makefile", szMakeCont) return szErr