예제 #1
0
def setup_for_centos7(params): 
  if(not os.path.isdir(centos7_dir)):
    sys.stderr.write('ERROR: the contents of a CentOS-7 iso must be unpacked in the directory: '+centos7_dir+'\n');
    raise Exception('Missing directory containing CentOS-7 iso contents');
  try:
    os.mkdir(centos7_ks_scripts_dir, 0755);
  except OSError:
    pass
  #PXE boot changes
  fix_pxe_bug();
  fix_install_action();
  #ssh public key
  shutil.rmtree(centos7_ks_scripts_dir+'/ssh_public_keys', ignore_errors=True);
  try:
    os.remove(centos7_ks_scripts_dir+'/ssh_public_keys');
  except Exception:
    pass
  if('ssh_public_keys_file' in params):
    shutil.copy(params['ssh_public_keys_file'], centos7_ks_scripts_dir+'/ssh_public_keys');
  #Get root password
  root_passwd='$6$CdGXnN6zABQ0Pc/7$lsUtU27wSxwpGNrLQq00Mzpwb27ujgkV5Trq8wlZrqOmrmFuX6q5X0hebNKKs5DSk8.fU3o.b6Z0ISOfNnpTl.';
  sys.stderr.write('Enter the root password to be set for your cluster by kickstart\n');
  pid = subprocess.Popen('grub-crypt --sha-512', shell=True, stdout=subprocess.PIPE);
  stdout_str = pid.communicate()[0];
  if(pid.returncode == 0):
    root_passwd = stdout_str.strip();
  else:
    sys.stderr.write('ERROR: could not obtain root password, using a random string. Re-run the program to set your root passwd\n');
  #Copy disk.py file for partitioning
  shutil.copy(centos7_templates_dir+'/scripts/disk.py', centos7_ks_scripts_dir+'/disk.py');
  #Create files from templates
  shutil.copy(centos7_templates_dir+'/ks_template.cfg', centos7_dir+'/ks.cfg');
  shutil.copy(centos7_templates_dir+'/scripts/pre_install_template.sh', centos7_ks_scripts_dir+'/pre_install.sh');
  shutil.copy(centos7_templates_dir+'/scripts/post_install_template.sh', centos7_ks_scripts_dir+'/post_install.sh');
  ks_host = fix_rocks_network.get_rocks_attr('Kickstart_PrivateKickstartHost');
  ks_base_dir = fix_rocks_network.get_rocks_attr('Kickstart_PrivateKickstartBasedir');
  cmd = 'sed -i -e \'s/Kickstart_PrivateKickstartHost/'+ks_host+'/g\' -e \'s/Kickstart_PrivateKickstartBasedir/'+ks_base_dir+'/g\' '+centos7_ks_scripts_dir+'/post_install.sh '+centos7_ks_scripts_dir+'/pre_install.sh '+centos7_dir+'/ks.cfg';
  status = subprocess.call(cmd, shell=True);
  if(status != 0):
    sys.stderr.write('ERROR: could not setup pre/post install scripts and kickstart file\n');
    raise Exception('Could not setup pre/post install scripts and kickstart file');
  if('timezone' in params):
    cmd = 'sed -i -e \'/^timezone/c\\\ntimezone '+params['timezone']+'\' '+centos7_dir+'/ks.cfg' 
    status = subprocess.call(cmd, shell=True);
    if(status != 0):
      sys.stderr.write('ERROR: could not setup timezone in kickstart file\n');
      raise Exception('Could not setup timezone in kickstart file');
  with open(centos7_dir+'/ks.cfg', 'ab') as fptr:
    fptr.write('rootpw --iscrypted '+root_passwd+' \n');
    fptr.close();
예제 #2
0
def fix_install_action():
    shutil.copy(centos7_pxeboot_dir+'/vmlinuz', pxelinux_kernels_dir+'/vmlinuz-centos7');
    shutil.copy(centos7_pxeboot_dir+'/initrd.img', pxelinux_kernels_dir+'/initrd.img-centos7');
    ks_host = fix_rocks_network.get_rocks_attr('Kickstart_PrivateKickstartHost');
    ks_base_dir = fix_rocks_network.get_rocks_attr('Kickstart_PrivateKickstartBasedir');
    subprocess.call('rocks add bootaction action=install kernel=vmlinuz-centos7 ramdisk=initrd.img-centos7 args="ksdevice=bootif ramdisk_size=16000 ks=http://'+ks_host+'/'+ks_base_dir+'/centos7/ks.cfg"', shell=True);