mirror of
				https://github.com/xcat2/confluent.git
				synced 2025-10-30 10:52:34 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			61 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/python
 | ||
| 
 | ||
| import os
 | ||
| import sys
 | ||
| import yaml
 | ||
| 
 | ||
| def mkdirp(path):
 | ||
|     try:
 | ||
|         os.makedirs(path)
 | ||
|     except OSError as e:
 | ||
|         if e.errno != 17:
 | ||
|             raise
 | ||
| 
 | ||
| def makeboot_tree(distribution, profiledir):
 | ||
|     bootdir = os.path.join(profiledir, 'boot')
 | ||
|     efisrc = os.path.join(distribution, 'EFI')
 | ||
|     efidir = os.path.join(bootdir, 'efi/boot')
 | ||
|     mkdirp(efidir)
 | ||
|     initrfsdir = os.path.join(bootdir, 'initramfs')
 | ||
|     mkdirp(initrfsdir)
 | ||
|     for directory in os.walk(efisrc):
 | ||
|         for filename in directory[2]:
 | ||
|             if filename.lower() == 'bootx64.efi':
 | ||
|                 srcfile = os.path.join(directory[0], filename)
 | ||
|                 trgfile = os.path.join(efidir, 'bootx64.efi')
 | ||
|                 os.link(srcfile, trgfile)
 | ||
|             elif filename.lower() == 'grubx64.efi':
 | ||
|                 srcfile = os.path.join(directory[0], filename)
 | ||
|                 trgfile = os.path.join(efidir, 'grubx64.efi')
 | ||
|                 os.link(srcfile, trgfile)
 | ||
|     netbootdir = os.path.join(distribution, 'images/pxeboot')
 | ||
|     srckern = os.path.join(netbootdir, 'vmlinuz')
 | ||
|     srcinitramfs = os.path.join(netbootdir, 'initrd.img')
 | ||
|     trgkern = os.path.join(bootdir, 'kernel')
 | ||
|     trginitramfs = os.path.join(initrfsdir, 'initrd.img')
 | ||
|     os.link(srckern, trgkern)
 | ||
|     os.link(srcinitramfs, trginitramfs)
 | ||
|     trginitramfs = os.path.join(initrfsdir, 'site-initramfs.gz')
 | ||
|     os.link('/var/lib/confluent/public/site/site-initramfs.gz', trginitramfs)
 | ||
|     profileinfo = os.path.join(profiledir, 'profile.yaml')
 | ||
|     with open(profileinfo) as info:
 | ||
|         profile = yaml.safe_load(info)
 | ||
|     cfgfile = os.path.join(efidir, 'grub.cfg')
 | ||
|     with open(cfgfile, 'w') as grubcfg:
 | ||
|         grubcfg.write('set timeout=5\n')
 | ||
|         grubcfg.write("menuentry '{0}' {{\n".format(
 | ||
|             profile.get('label', 'Unknown')))
 | ||
|         grubcfg.write('    linuxefi /kernel {0}\n'.format(profile.get(
 | ||
|                      'kernelargs', 'quiet')))
 | ||
|         initrds = ' '.join(
 | ||
|             ['/initramfs/{0}'.format(x) for x in os.listdir(initrfsdir)])
 | ||
|         grubcfg.write('    initrdefi {0}\n}}'.format(initrds))
 | ||
|     #TODO: create the netboot grub.cfg, is there a way to use grub http
 | ||
|     # without putting the server in the cfg?
 | ||
|     # If server is omitted, value of environment variable ‘net_default_server’
 | ||
|     # is used
 | ||
| 
 | ||
| 
 | ||
| if __name__ == '__main__':
 | ||
|     makeboot_tree(sys.argv[1], sys.argv[2])
 |