#
#coding:utf-8
#
#Author : QCSun
#Email : qcsun@sunhpc.com
#Times : 2023-04-14 05:21:02
#WebSite : https://www.sunhpc.com
import os
import sys
import sunhpc
import shutil
class command(sunhpc.commands.soft.command):
pass
class Command(command):
"""
Build the Gaussian software.
Specifies the software version. e.g,, version=03/09/16
Specifies the software install path.
Specifies the software env path.
Specifies the software source path. e.g,, /mnt/usb
install the gaussian software.
"""
def run(self, params, args):
(prefix, version, source, envs) = self.fillParams([
('prefix', '/share/apps/soft'),
('version', None),
('source', '/mnt/usb'),
('envs', '/share/apps/envs'),
])
if not version:
self.msg('must supply an "Gaussian version" e.g,, version=03/09/16', 'a')
try:
os.makedirs(prefix)
self.msg("The %s directory does not exist,and it will be created." % prefix, 'w')
except FileExistsError:
pass
if not os.path.exists(envs):
os.makedirs(envs)
softname = 'Gaussian%s' % version
softdirs = os.path.join(source, 'hpcsoft')
softlist = os.listdir(softdirs)
if 'Gaussian' not in softlist:
self.msg('The "%s" software was not found in the %s directory.' % (softname, softdirs), 'a')
gspathname = os.path.join(softdirs, 'Gaussian', softname, 'Gaussian16-a03.tbz')
gaussian = os.path.join(prefix, 'g%s' % version)
if os.path.exists(gaussian):
self.msg('The %s already exists,to reinstall it, remove it first.' % gaussian)
else:
self.msg('Start installing the %s software to the %s directory...' % (softname, prefix))
os.system('tar -xf %s -C %s' % (gspathname, prefix))
gsenv = os.path.join(envs, 'g16-env.sh')
with open(gsenv, 'w') as f:
f.write('#!/bin/sh\n')
f.write('#\n# %s env config\n#\n\n' % gaussian)
f.write('export g%sroot=%s\n' % (version, prefix))
f.write('source $g%sroot/g%s/bsd/g%s.profile\n\n' % (version, version, version))
f.write('export GAUSS_SCDIR=~/gstmp\n')
# create shared user and group.
self.msg('Create a shared group to run the %s software.' % softname)
self.msg(' 1, groupadd -g 888 public ')
self.msg(' 2, usermod -G public dell ')
self.msg(' 3, chown -R root:public %s/g%s' % (prefix, version))