def configureNetworking(device, config): if device == 'all': config = 'dhcp' config_dict = None try: if config.startswith('static:'): config_dict = {'gateway': None, 'dns': None, 'domain': None} for el in config[7:].split(';'): k, v = el.split('=', 1) config_dict[k] = v if 'dns' in config_dict: config_dict['dns'] = config_dict['dns'].split(',') assert 'ip' in config_dict and 'netmask' in config_dict except: pass nethw = netutil.scanConfiguration() netcfg = {} for i in nethw.keys(): if (device == i or device == nethw[i].hwaddr) and config_dict: netcfg[i] = NetInterface(NetInterface.Static, nethw[i].hwaddr, config_dict['ip'], config_dict['netmask'], config_dict['gateway'], config_dict['dns'], config_dict['domain']) else: netcfg[i] = NetInterface(NetInterface.DHCP, nethw[i].hwaddr) netutil.writeDebStyleInterfaceFile(netcfg, '/etc/network/interfaces') netutil.writeResolverFile(netcfg, '/etc/resolv.conf') if device == 'all': for i in nethw.keys(): netutil.ifup(i) elif device.startswith('eth'): if nethw.has_key(device): netutil.ifup(device) else: # MAC address matching_list = filter(lambda x: x.hwaddr == device, nethw.values()) if len(matching_list) == 1: netutil.ifup(matching_list[0].name)
def requireNetworking(answers, defaults=None, msg=None, keys=['net-admin-interface', 'net-admin-configuration']): """ Display the correct sequence of screens to get networking configuration. Bring up the network according to this configuration. If answers is a dictionary, set answers[keys[0]] to the interface chosen, and answers[keys[1]] to the interface configuration chosen, and answers['runtime-iface-configuration'] to current manual network config, in format (all-dhcp, manual-config). If defaults.has_key[keys[0]] then use defaults[keys[0]] as the default network interface. If defaults.has_key[keys[1]] then use defaults[keys[1]] as the default network interface configuration.""" interface_key = keys[0] config_key = keys[1] nethw = answers['network-hardware'] if len(nethw.keys()) == 0: tui.progress.OKDialog("Networking", "No available ethernet device found") return REPEAT_STEP # Display a screen asking which interface to configure, then what the # configuration for that interface should be: def select_interface(answers, default, msg): """ Show the dialog for selecting an interface. Sets answers['interface'] to the name of the interface selected (a string). """ if answers.has_key('interface'): default = answers['interface'] if msg == None: msg = "%s Setup needs network access to continue.\n\nWhich network interface would you like to configure to access your %s product repository?" % (version.PRODUCT_BRAND or version.PLATFORM_NAME, version.PRODUCT_BRAND or version.PLATFORM_NAME) direction, iface = select_netif(msg, nethw, True, default) if direction == RIGHT_FORWARDS: answers['reuse-networking'] = (iface == None) if iface: answers['interface'] = iface return direction def specify_configuration(answers, txt, defaults): """ Show the dialog for setting nic config. Sets answers['config'] to the configuration used. Assumes answers['interface'] is a string identifying by name the interface to configure. """ if 'reuse-networking' in answers and answers['reuse-networking']: return RIGHT_FORWARDS direction, conf = get_iface_configuration(nethw[answers['interface']], txt, defaults=defaults, include_dns=True) if direction == RIGHT_FORWARDS: answers['config'] = conf return direction conf_dict = {} def_iface = None def_conf = None if type(defaults) == dict: if defaults.has_key(interface_key): def_iface = defaults[interface_key] if defaults.has_key(config_key): def_conf = defaults[config_key] if len(nethw.keys()) > 1 or netutil.networkingUp(): seq = [ uicontroller.Step(select_interface, args=[def_iface, msg]), uicontroller.Step(specify_configuration, args=[None, def_conf]) ] else: text = "%s Setup needs network access to continue.\n\nHow should networking be configured at this time?" % (version.PRODUCT_BRAND or version.PLATFORM_NAME) conf_dict['interface'] = nethw.keys()[0] seq = [ uicontroller.Step(specify_configuration, args=[text, def_conf]) ] direction = uicontroller.runSequence(seq, conf_dict) if direction == RIGHT_FORWARDS and 'config' in conf_dict: netutil.writeDebStyleInterfaceFile( {conf_dict['interface']: conf_dict['config']}, '/etc/network/interfaces' ) netutil.writeResolverFile( {conf_dict['interface']: conf_dict['config']}, '/etc/resolv.conf' ) tui.progress.showMessageDialog( "Networking", "Configuring network interface, please wait...", ) netutil.ifdown(conf_dict['interface']) # check that we have *some* network: if netutil.ifup(conf_dict['interface']) != 0 or not netutil.interfaceUp(conf_dict['interface']): tui.progress.clearModelessDialog() tui.progress.OKDialog("Networking", "The network still does not appear to be active. Please check your settings, and try again.") direction = REPEAT_STEP else: if answers and type(answers) == dict: # write out results answers[interface_key] = conf_dict['interface'] answers[config_key] = conf_dict['config'] # update cache of manual configurations manual_config = {} all_dhcp = False if answers.has_key('runtime-iface-configuration'): manual_config = answers['runtime-iface-configuration'][1] manual_config[conf_dict['interface']] = conf_dict['config'] answers['runtime-iface-configuration'] = (all_dhcp, manual_config) tui.progress.clearModelessDialog() return direction