checkin so i can checkout RO elsewhere

This commit is contained in:
brent s. 2016-11-21 01:35:45 -05:00
parent b626fcc8be
commit e94fe963b9
5 changed files with 49 additions and 14 deletions

20
bdisk/__main__.py Executable file
View File

@ -0,0 +1,20 @@
import host
import prep
import bchroot

# we need to:
# 1.) import the config- this gives us info about things like build paths, etc. host.parseConfig(host.getConfig()) should do this
# 2.) prep.dirChk
# 3.) prep.downloadTarball
# 4.) prep.unpackTarball
# 5.) prep.buildChroot
# 6.) prep.prepChroot
# 7.) prep.chrootCmd (TODO)- this should run the <chroot>/root/pre-build.sh script
# 7.5) ....figure out a way to get those dirs to *un*mount... and only mount in 7. if they're not currently mounted.
# 8.) build.chrootClean (TODO) see jenny_craig in old bdisk. i can *probably* do this within the chroot for the most part as part of pre-build.sh
# 9.) build.genImg (TODO)- build the squashed image, etc. see will_it_blend in old bdisk
# 10.) build.genUEFI (TODO)- build the uefi binary/bootloading. see stuffy in old bdisk
# 11.) build.genISO (TODO)- build the .iso file (full boot). see yo_dj in old bdisk
#
# we also need to figure out how to implement "mentos" (old bdisk) like functionality, letting us reuse an existing chroot install if possible to save time for future builds.
# if not, though, it's no big deal.

View File

@ -10,6 +10,7 @@ import sys
import psutil import psutil
#from pychroot.base import Chroot #from pychroot.base import Chroot
import pychroot import pychroot
import subprocess


#class mountpoints(argparse.Action): #class mountpoints(argparse.Action):
# #
@ -59,3 +60,9 @@ def chroot(chrootdir, chroot_hostname, cmd = '/root/pre-build.sh'):
import os import os
os.system(cmd) os.system(cmd)
chroot.cleanup() chroot.cleanup()
return(chrootdir, cmnts)

#def chrootUnmount(chrootdir, cmnts):
def chrootUnmount(chrootdir):
# TODO: https://github.com/pkgcore/pychroot/issues/22 try to do this more pythonically. then we can remove subprocess
subprocess.call(['umount', '-lR', chrootdir])

View File

@ -37,7 +37,8 @@ def getConfig(conf_file='/etc/bdisk/build.ini'):
else: else:
conf = conf_file conf = conf_file
if not conf: if not conf:
# okay, so let's check for distributed/"blank" ini's then since we can't seem to find one. # okay, so let's check for distributed/"blank" ini's
# since we can't seem to find one.
dist_conf_paths = [re.sub('(build\.ini)','dist.\\1', s) for s in default_conf_paths] dist_conf_paths = [re.sub('(build\.ini)','dist.\\1', s) for s in default_conf_paths]
for q in dist_conf_paths: for q in dist_conf_paths:
if os.path.isfile(q): if os.path.isfile(q):
@ -53,8 +54,8 @@ def parseConfig(conf):
config_dict = {s:dict(config.items(s)) for s in config.sections()} config_dict = {s:dict(config.items(s)) for s in config.sections()}
# Convert the booleans to pythonic booleans in the dict... # Convert the booleans to pythonic booleans in the dict...
config_dict['bdisk']['user'] = config['bdisk'].getboolean('user') config_dict['bdisk']['user'] = config['bdisk'].getboolean('user')
conifg_dict['build']['i_am_a_racecar'] = config['build'].getboolean('i_am_a_racecar') config_dict['build']['i_am_a_racecar'] = config['build'].getboolean('i_am_a_racecar')
conifg_dict['build']['multiarch'] = config['build'].getboolean('multiarch') config_dict['build']['multiarch'] = config['build'].getboolean('multiarch')
for i in ('http', 'tftp', 'rsync', 'git'): for i in ('http', 'tftp', 'rsync', 'git'):
config_dict['sync'][i] = config['sync'].getboolean(i) config_dict['sync'][i] = config['sync'].getboolean(i)
config_dict['ipxe']['iso'] = config['ipxe'].getboolean('iso') config_dict['ipxe']['iso'] = config['ipxe'].getboolean('iso')
@ -76,7 +77,7 @@ def parseConfig(conf):
exit(('ERROR: {0} is not a valid host and cannot be used for rsyncing.' + exit(('ERROR: {0} is not a valid host and cannot be used for rsyncing.' +
'Check your configuration.').format(config_dict['rsync']['host'])) 'Check your configuration.').format(config_dict['rsync']['host']))
# Validate the URI. # Validate the URI.
if config_dict['sync']['ipxe']: if config_dict['build']['ipxe']:
# so this won't validate e.g. custom LAN domains (https://pxeserver/bdisk.php). TODO. # so this won't validate e.g. custom LAN domains (https://pxeserver/bdisk.php). TODO.
if not validators.url(config_dict['ipxe']['uri']): if not validators.url(config_dict['ipxe']['uri']):
if not re.match('^https?://localhost(/.*)?$'): if not re.match('^https?://localhost(/.*)?$'):
@ -105,6 +106,4 @@ def parseConfig(conf):
if not os.path.isfile(config_dict['ipxe']['ssl_ca']): if not os.path.isfile(config_dict['ipxe']['ssl_ca']):
exit(('ERROR: {0} is not an existing file. Check your' + exit(('ERROR: {0} is not an existing file. Check your' +
'configuration.').format(config_dict['ipxe']['ssl_ca'])) 'configuration.').format(config_dict['ipxe']['ssl_ca']))


return(config, config_dict) return(config, config_dict)

View File

@ -17,6 +17,15 @@ def archChk(arch):
else: else:
exit("{0} is not a valid architecture. Must be one of i686 or x86_64.".format(arch)) exit("{0} is not a valid architecture. Must be one of i686 or x86_64.".format(arch))


def dirChk(config_dict):
# Make dirs if they don't exist
for d in ('archboot', 'isodir', 'mountpt', 'srcdir', 'tempdir'):
os.makedirs(config_dict['build'][d], exists_ok = True)
# Make dirs for sync staging if we need to
for x in ('http', 'tftp'):
if config_dict['sync'][x]:
os.makedirs(config_dict[x]['path'], exist_ok = True)

def downloadTarball(arch, dlpath): def downloadTarball(arch, dlpath):
# arch - should be i686 or x86_64 # arch - should be i686 or x86_64
# returns path/filename e.g. /some/path/to/file.tar.gz # returns path/filename e.g. /some/path/to/file.tar.gz

View File

@ -87,7 +87,7 @@ root_password =
; yes|no ; yes|no
; true|false ; true|false
; 1|0 ; 1|0
; If it is undefined/commented out, it is assumed to be no. ; If it is undefined, it is assumed to be no.
user = yes user = yes




@ -167,7 +167,7 @@ mountpt = /mnt/${bdisk:uxname}
; yes|no ; yes|no
; true|false ; true|false
; 1|0 ; 1|0
; If it is undefined/commented out, it is assumed to be no. ; If it is undefined, it is assumed to be no.
multiarch = yes multiarch = yes


; Would you like to enable iPXE functionality? ; Would you like to enable iPXE functionality?
@ -177,7 +177,7 @@ multiarch = yes
; yes|no ; yes|no
; true|false ; true|false
; 1|0 ; 1|0
; If it is undefined/commented out, it is assumed to be no. ; If it is undefined, it is assumed to be no.
ipxe = yes ipxe = yes


; This option should only be enabled if you are on a fairly ; This option should only be enabled if you are on a fairly
@ -190,7 +190,7 @@ ipxe = yes
; yes|no ; yes|no
; true|false ; true|false
; 1|0 ; 1|0
; If it is undefined/commented out, it is assumed to be no. ; If it is undefined, it is assumed to be no.
i_am_a_racecar = yes i_am_a_racecar = yes




@ -208,7 +208,7 @@ i_am_a_racecar = yes
; yes|no ; yes|no
; true|false ; true|false
; 1|0 ; 1|0
; If it is undefined/commented out, it is assumed to be no. ; If it is undefined, it is assumed to be no.
http = yes http = yes


; Should we generate/prepare TFTP files? ; Should we generate/prepare TFTP files?
@ -219,7 +219,7 @@ http = yes
; yes|no ; yes|no
; true|false ; true|false
; 1|0 ; 1|0
; If it is undefined/commented out, it is assumed to be no. ; If it is undefined, it is assumed to be no.
tftp = yes tftp = yes


; Enable automatic Git pushing for any changes done to the ; Enable automatic Git pushing for any changes done to the
@ -230,7 +230,7 @@ tftp = yes
; yes|no ; yes|no
; true|false ; true|false
; 1|0 ; 1|0
; If it is undefined/commented out, it is assumed to be no. ; If it is undefined, it is assumed to be no.
git = yes git = yes


; Enable rsync pushing for the ISO (and other files, if ; Enable rsync pushing for the ISO (and other files, if
@ -298,7 +298,7 @@ group = root
; yes|no ; yes|no
; true|false ; true|false
; 1|0 ; 1|0
; If it is undefined/commented out, it is assumed to be no. ; If it is undefined, it is assumed to be no.
iso = yes iso = yes


; Build a "mini-USB" image? Same concept as the ISO file ; Build a "mini-USB" image? Same concept as the ISO file