# #coding:utf-8 # #Author : QCSun #Email : qcsun@sunhpc.com #Times : 2023-04-14 05:21:02 #WebSite : https://www.sunhpc.com import os import re import sys import sunhpc import shutil class command(sunhpc.commands.soft.command): pass class Command(command): """ Compilation and installation of the parallel computing software. Specifies the software version. e.g,, version=x.x.x Specifies the software source path. Default: /mnt/usb Specifies the software install path. Default: /share/apps/soft Specifies the environment variable storage path. Default: /share/apps/envs Build the command line and associated parameters for this software. """ def run(self, params, args): (prefix, source, envs, version) = self.fillParams([ ('prefix', '/share/apps/soft'), ('source', '/mnt/usb'), ('envs', '/share/apps/envs'), ('version', None), ]) softname = 'autodock' suffname = 'tar.gz' dirsname = os.path.join(source, 'hpcsoft', 'AutoDock') try: verslist = self.getVersions(key=softname, suffix=suffname, dirs=dirsname) except FileNotFoundError as e: self.msg(str(e), 'a') if len(args): version = args[0] if not version: self.msg('must supply an "Version Number", e.g,, version=%s' % '/'.join(verslist), 'a') self.create_dirs(prefix, source, envs, version, softname, suffname, dirsname) self.build(prefix) self.clean() def build(self, prefix): """Start build the software.""" self.cwd = os.getcwd() names = os.listdir(self.tmpdirs) if self.basename not in names: self.msg('Unpack the file from the %s to the %s directory.' % (self.filename, prefix)) os.system('tar -xf %s -C %s' % (self.source, prefix)) with open(self.envfile, 'w') as f: f.write('#!/bin/sh\n') f.write('#\n# %s env config\n#\n\n' % self.basename) f.write('export PATH=%s:$PATH\n' % (self.prefix)) # create shared user and group. self.msg('') self.msg('--------------------------------------------------------') self.msg('Create a shared group to run the %s software.' % self.basename) self.msg(' 1, groupadd -g 888 public ') self.msg(' 2, usermod -G public dell ') self.msg(' 3, chown -R root:public %s' % self.prefix) self.msg('--------------------------------------------------------') self.msg('') self.msg(' source %s' % self.envfile) self.msg('--------------------------------------------------------') def create_dirs(self, prefix, source, envs, version, softname, suffname, dirsname): """Create base build directory.""" self.basename = '%s-%s' % (softname, version) self.filename = '%s.%s' % (self.basename, suffname) self.prefix = os.path.join(prefix, softname, version) if not os.path.exists(self.prefix): os.makedirs(self.prefix) self.source = os.path.join(dirsname, self.filename) if not os.path.exists(self.source): self.msg('The %s does not exist,please check it.' % self.source, 'a') if not os.path.exists(envs): os.makedirs(envs) self.envfile = os.path.join(envs, '%s-%s' % (softname, version)) self.tmpdirs = os.path.join(prefix, 'tmpdirs', softname) if not os.path.exists(self.tmpdirs): os.makedirs(self.tmpdirs) def clean(self): """Clean the install tmp directory.""" if os.path.exists(self.tmpdirs): shutil.rmtree(self.tmpdirs)