docs: def get_base_config(self):
  		"""Responsible for getting core configuration from config files.
  		"""
  		shutit_global.shutit_global_object.yield_to_draw()
  		cp = self.config_parser
  		# TODO: what happens if a command-line arg was already set?
  		# BEGIN Read from config files
  		# build - details relating to the build
  		self.build['privileged']                 = cp.getboolean('build', 'privileged')
  		self.build['base_image']                 = cp.get('build', 'base_image')
  		self.build['dotest']                     = cp.get('build', 'dotest')
  		self.build['net']                        = cp.get('build', 'net')
  		# Take a command-line arg if given, else default.
  		if self.build['conn_module'] is None:
  			self.build['conn_module']            = cp.get('build', 'conn_module')
  		# target - the target of the build, ie the container
  		self.target['hostname']                  = cp.get('target', 'hostname')
  		self.target['ports']                     = cp.get('target', 'ports')
  		self.target['volumes']                   = cp.get('target', 'volumes')
  		self.target['volumes_from']              = cp.get('target', 'volumes_from')
  		self.target['name']                      = cp.get('target', 'name')
  		self.target['rm']                        = cp.getboolean('target', 'rm')
  		# host - the host on which the shutit script is run
  		self.host['add_shutit_to_path']          = cp.getboolean('host', 'add_shutit_to_path')
  		self.host['docker_executable']           = cp.get('host', 'docker_executable')
  		self.host['dns']                         = cp.get('host', 'dns')
  		self.host['password']                    = cp.get('host', 'password')
  		if isinstance(self.host['password'],str):
  			shutit_global.shutit_global_object.secret_words_set.add(self.host['password'])
  		self.logfile = cp.get('host', 'logfile')
  		self.host['shutit_module_path']          = cp.get('host', 'shutit_module_path').split(':')
  
  		# repository - information relating to docker repository/registry
  		self.repository['name']                  = cp.get('repository', 'name')
  		self.repository['server']                = cp.get('repository', 'server')
  		self.repository['push']                  = cp.getboolean('repository', 'push')
  		self.repository['tag']                   = cp.getboolean('repository', 'tag')
  		self.repository['export']                = cp.getboolean('repository', 'export')
  		self.repository['save']                  = cp.getboolean('repository', 'save')
  		self.repository['suffix_date']           = cp.getboolean('repository', 'suffix_date')
  		self.repository['suffix_format']         = cp.get('repository', 'suffix_format')
  		self.repository['user']                  = cp.get('repository', 'user')
  		self.repository['password']              = cp.get('repository', 'password')
  		if isinstance(self.repository['password'],str):
  			shutit_global.shutit_global_object.secret_words_set.add(self.repository['password'])
  		self.repository['email']                 = cp.get('repository', 'email')
  		self.repository['tag_name']              = cp.get('repository', 'tag_name')
  		# END Read from config files
  
  		# BEGIN tidy configs up
  		if self.target['docker_image'] == '':
  			self.target['docker_image'] = self.build['base_image']
  		# END tidy configs up
  
  		# FAILS begins
  		# rm is incompatible with repository actions
  		if self.target['rm'] and (self.repository['tag'] or self.repository['push'] or self.repository['save'] or self.repository['export']): # pragma: no cover
  			shutit_global.shutit_global_object.shutit_print("Can't have [target]/rm and [repository]/(push/save/export) set to true")
  			shutit_global.shutit_global_object.handle_exit(exit_code=1)
  		if self.target['hostname'] != '' and self.build['net'] != '' and self.build['net'] != 'bridge': # pragma: no cover
  			shutit_global.shutit_global_object.shutit_print('\n\ntarget/hostname or build/net configs must be blank\n\n')
  			shutit_global.shutit_global_object.handle_exit(exit_code=1)