def net_restart_network(): # ifdown all name_list = net_card_info.net_get_name_list() cmd_line = '' # ifdown phy interface _logger.debug("name list {}".format(name_list)) for i in range(len(name_list)): if net_card_info.net_type_check(name_list[i]) == _NET_TYPE_NAME_PHY: cmd_line += 'ifdown ' + name_list[i] + ';' net_common.get_info_from_syscmd(cmd_line) # del not exist phy interface cfg file net_del_not_exist_cfg_file() # restart net cmd_line = '/etc/init.d/network restart' retval = net_common.get_info_from_syscmd(cmd_line) if retval[0] != 0: _logger.error("get info from sys cmd {} failed,ret value {}".format( cmd_line, retval)) net_common.get_info_from_syscmd('journalctl -xe', 2) return -1 retval = net_restart_service() if retval != 0: _logger.error("net_restart_service failed ret {}".format(retval)) return -1 return 0
def set_root_passwd(passwdinfo): cmdline = 'mount -no remount, rw /boot' retval = net_common.get_info_from_syscmd(cmdline) _logger.debug('remount /boot {} {}'.format(retval[0], retval[1])) tmpfile = '/dev/shm/tempstr' mpasswd = json.loads(passwdinfo) _logger.debug("set root pwd info {} {}".format(passwdinfo, mpasswd)) retval = net_common.set_info_to_file(tmpfile, mpasswd, 'w') if retval != 0: _logger.error('set passwd write file failed,ret {}'.format(retval)) xlogging.raise_system_error('set passwd failed,{}'.format(retval), 'set passwd failed,{}'.format(retval), -1, _logger) cmdline = 'set_passwd -f {}'.format(tmpfile) retval = net_common.get_info_from_syscmd(cmdline) if retval[0] != 0: _logger.error('set passwd failed,ret {} {}'.format( retval[0], retval[1])) xlogging.raise_system_error('set passwd failed,{}'.format(retval[0]), 'set passwd failed,{}'.format(retval[0]), -1, _logger) else: _logger.debug('set passwd success') cmdline = 'umount /boot' retval = net_common.get_info_from_syscmd(cmdline) _logger.debug('umount /boot {} {}'.format(retval[0], retval[1])) cmdline = 'mount -o ro /dev/mapper/boot /boot' retval = net_common.get_info_from_syscmd(cmdline) _logger.debug('mount /dev/mapper/boot /boot {} {}'.format( retval[0], retval[1]))
def smb_del_hostpath(username, hostname): hostpath = smb_get_hostpath(username, hostname) _logger.debug('del host path: user {} host {} host path {}'.format(username, hostname, hostpath)) if os.path.isdir(hostpath): cmdline = 'rm -rf "{hostpath}"'.format(hostpath=hostpath) net_common.get_info_from_syscmd(cmdline) smb_del_userpath(username) return 0, 'success'
def _create_br(self): name = 'takeoverbr0' if _is_adpter_name_exist(name): return net_common.get_info_from_syscmd(r'ip link add takeoverbr0 type bridge') # net_common.get_info_from_syscmd(r'ifconfig takeoverbr0 0.0.0.0 promisc up') net_common.get_info_from_syscmd(r'ifconfig takeoverbr0 {} up'.format( self.__aio_server_ip))
def unmount(self): _cmd_u = 'umount -f -l "{}"'.format(self.mount_point) _fuser_k = 'fuser -k "{}"'.format(self.mount_point) while True: code, _, stderr = net_common.get_info_from_syscmd(_cmd_u, timeout=5) if code == 0 or 'not mounted' in stderr: break net_common.get_info_from_syscmd(_fuser_k) time.sleep(2) _logger.info('unmount {} successful'.format(self.mount_point))
def _create_macvtap(self): rev = net_common.get_info_from_syscmd( 'ip link add link {} name {} address {} type macvtap mode bridge'. format(self._physical_nic_name, self.tap_name, self._mac_address)) if rev[0] != 0: xlogging.raise_system_error('NetMacVTapMgr add tap fail', 'NetMacVTapMgr add tap fail', 131) rev = net_common.get_info_from_syscmd('ip link set dev {} up'.format( self.tap_name)) if rev[0] != 0: xlogging.raise_system_error('NetTap add tap fail', 'NetTap add tap fail', 132)
def ignore_kvm_msrs(): # 启用ignore_msrs value, outs, errs = get_info_from_syscmd( 'echo 1 > /sys/module/kvm/parameters/ignore_msrs') # 查看ignore_msrs信息 if value == 0: value, outs, errs = get_info_from_syscmd( 'cat /sys/module/kvm/parameters/ignore_msrs') if 'Y' in outs: logging.info('启用ignore_msrs成功'.format(outs)) else: logging.warning('启用ignore_msrs失败'.format(errs)) else: logging.warning('启用ignore_msrs失败'.format(errs))
def _create_tap(self): rev = net_common.get_info_from_syscmd( 'ip tuntap add {} mode tap'.format(self.tap_name)) if rev[0] != 0: xlogging.raise_system_error('NetTap add tap fail', 'NetTap add tap fail', 131) rev = net_common.get_info_from_syscmd( 'ip link set {} master takeoverbr0'.format(self.tap_name)) if rev[0] != 0: xlogging.raise_system_error('NetTap add tap fail', 'NetTap add tap fail', 132) rev = net_common.get_info_from_syscmd('ifconfig {} 0.0.0.0 up'.format( self.tap_name)) if rev[0] != 0: xlogging.raise_system_error('NetTap add tap fail', 'NetTap add tap fail', 133)
def net_get_bond_only_attr_one(in_name): cmd_line = 'cat /proc/net/bonding/' + in_name retval = net_common.get_info_from_syscmd(cmd_line) if retval[0] != 0: _logger.error("get_info_from_syscmd failed,cmd {},retval {}".format( cmd_line, retval[0])) return -1 mstr = retval[1] mdict = { 'Bonding Mode:': ['bondmode'], 'Currently Active Slave:': ['curslave'], 'MII Status:': ['miistatus'], 'MII Polling Interval (ms):': ['miiinterval'] } net_common.get_itemdict_from_str(mstr, mdict) for key in mdict: mlist = mdict[key] mlen = len(mlist) if mlist[0] not in bond_only_attr_header: continue if mlen >= 2: if mlist[0] == 'bondmode': if mlist[1] in bond_mode_attr: mstr = bond_mode_attr[mlist[1]] mlist[1] = mstr else: _logger.error("get inavlid bond mode {}".format(mlist[1])) continue net_card_info.net_set_item(in_name, mlist[0], mlist[1]) return 0
def unmount(self): if self.is_mount: net_common.get_info_from_syscmd(r"sync") if self.__cmd_unmount_nbd: cmd_nbd = self.__cmd_unmount_nbd else: if self.use_qemu_nbd: cmd_nbd = "{} -d {}".format(_QEMU_NDB_EXEC_PATH, self.device_path) else: cmd_nbd = "{} -d {}".format(_EXEC_PATH, self.device_path) _logger.info("unmount : {}".format(cmd_nbd)) status = net_common.get_info_from_syscmd(cmd_nbd)[0] _logger.info("unmount end : {} - {}".format(status, cmd_nbd)) if self.use_qemu_nbd and status == 0: self.is_mount = False
def get_ext_vmlinux(src_vm): # 已经是解压缩文件,并且可用。 try: if check_is_elf_file(src_vm): if is_include_setion(src_vm): with open(src_vm, "rb") as f: return io.BytesIO(f.read()) except: # 忽略错误。 pass try: os.makedirs(_TMP_VM_DIR) except: pass exe_sc = os.path.join(loadIce.current_dir, "extract_vmlinux") tmp_file = os.path.join(_TMP_VM_DIR, str(uuid.uuid4().hex)) try: # extract-vmlinux >> /tmp/xxxx.bmp cmd = "{} {} >> {}".format(exe_sc, src_vm, tmp_file) retval, outs, errinfo = net_common.get_info_from_syscmd(cmd) _logger.info("drv3: runcmd {} return:{} out:{} errorinfo:{}".format( retval, cmd, outs, errinfo)) if not check_is_elf_file(tmp_file): _str = "drv3: 不是标准的elf文件:{}".format(tmp_file) _logger.error(_str) raise Exception(_str) # 有可能没有开始CRC 功能。 #if not is_include_setion(tmp_file, "__kcrctab"): # _str = "drv3: elf文件:{}不包含__kcrctab".format(tmp_file) # _logger.error(_str) # raise Exception(_str) f = open(tmp_file, "rb") _vm_iobs = io.BytesIO(f.read()) f.close() os.remove(tmp_file) return _vm_iobs except Exception as e: try: os.remove(tmp_file) except: pass xlogging.raise_system_error( 'drv3: decompress vm ({}) failed{}'.format(src_vm, e), '解开({})vm 失败:{}'.format(src_vm, e), 8, _logger) try: os.remove(tmp_file) except: pass xlogging.raise_system_error( 'drv3: error vmlinux file ({}) failed'.format(src_vm), "错误的vm file({})vm".format(src_vm), 9, _logger)
def smb_clear_all(): # 清理残留的共享目录 while True: rev = net_common.get_info_from_syscmd('grep -qs cifs /proc/mounts', timeout=5) if rev[0] != 0: break net_common.get_info_from_syscmd('umount -a -t cifs -l', timeout=5) time.sleep(2) userlist = smb_get_user_list() _logger.debug('get user list {}'.format(userlist)) for i in range(len(userlist)): name = userlist[i] smb_del_user(name) for k, _ in psutil.net_if_addrs().items(): if k.startswith('sharetap'): net_common.get_info_from_syscmd('ip tuntap del {} mode tap'.format(k))
def smb_umount_path(hostpath): if not os.path.isdir(hostpath): _logger.error('umount host path not exist {}'.format(hostpath)) return 0, 'success' mountlist = psutil.disk_partitions() umountlist = list() for diskpart in mountlist: mountpoint = diskpart.mountpoint if mountpoint.startswith(hostpath): umountlist.append(mountpoint) if len(umountlist) > 0: sortlist = sorted(umountlist, key=(lambda x: len(x)), reverse=True) _logger.debug('umount sort list {}'.format(sortlist)) for mountpoint in sortlist: _logger.debug('umount path {}'.format(mountpoint)) cmdline = 'fuser -k "{mountpoint}";fuser -k "{mountpoint}";fuser -k "{mountpoint}";umount "{mountpoint}"'.format( mountpoint=mountpoint) net_common.get_info_from_syscmd(cmdline)
def depends_forms_modinfo(old_modfile, path0): modinfo_result = get_info_from_syscmd('cd ' + path0 + ';modinfo ' + old_modfile) modinfo_result_list = modinfo_result[1].replace(' ', '').split('\n') dep = [] for filed in modinfo_result_list: temp = filed.split(':') if temp[0] == 'depends': dep = temp[1] return dep
def _sort_files(self): st = time.time() self._logger.debug('sort_files start') result = get_info_from_syscmd( 'python /sbin/aio/logic_service/merge_hash_helper.py {}'.format( self._tmp_dir), 600) if result[0] != 0: xlogging.raise_system_error('生成hash去重文件失败', 'sort fail', 1111) self._logger.debug( 'sort_files end, cost time:{:.1f}s'.format(time.time() - st))
def is_include_setion(elf_file, section_name): cmd = 'readelf -S "{}"'.format(elf_file) retval, outs, errinfo = net_common.get_info_from_syscmd(cmd) _logger.info("drv3: runcmd {} return:{} out:{} errorinfo:{}".format( retval, cmd, outs, errinfo)) if retval != 0: return False if section_name in outs: return True return False
def net_set_dns(in_dns_list): _logger.info("net start set dns {}".format(in_dns_list)) list_len = len(in_dns_list) if list_len <= 0: _logger.warning('dns list is empty, start clean nameserver') net_common.get_info_from_syscmd( "sed -i /nameserver/d /etc/resolv.conf") else: mstr = '' for i in range(list_len): if i > 0: mstr += 'nameserver ' mstr += in_dns_list[i] + '\n' mdict = {'nameserver ': ['ca', mstr]} retval = net_common.set_itemdict_in_file(net_dns_cfg_file, mdict) if retval != 0: _logger.error("net set dns failedret value is {}".format(retval)) return -1 return 0
def net_bond_driver_check(): net_common.get_info_from_syscmd('modprobe bonding') strcmd = "lsmod | grep bonding" _logger.info("start check bond driver with cmd '{}'".format(strcmd)) p = subprocess.Popen(strcmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) retval = p.wait() _logger.info("subprocess ret value {}".format(retval)) for line in p.stdout.readlines(): _logger.info("chech bonding driver success,cmd '{}',retval {}".format( strcmd, line)) return 0 _logger.error( "chech bonding driver failed,with cmd '{}' and no return".format( strcmd)) return -1
def run_tape_cmd(cmd): _logger.info("runcmd {}".format(cmd)) retval, outs, errinfo = get_info_from_syscmd(cmd) _logger.info("runcmd {} return:{} out:{} errorinfo:{}".format( retval, cmd, outs, errinfo)) if retval != 0: str = "runcmd {} return:{} out:{} errorinfo:{}".format( retval, cmd, outs, errinfo) print(str) raise Exception(str) return retval, outs, errinfo
def smb_add_hostpath(user_name, hostname): hostpath = smb_get_hostpath(user_name, hostname) if os.path.exists(hostpath): _logger.error('smb_add_hostpath host {} already exist'.format(hostpath)) return -1, '' cmdline = 'mkdir -p -m 755 "{hostpath}"'.format(hostpath=hostpath) ret = net_common.get_info_from_syscmd(cmdline) if ret[0] != 0: _logger.debug('add hostpath failed {}'.format(ret)) return -1, 'failed' return 0, 'success'
def smb_add_userpath(username, userpwd, read_only): userpath = smb_get_userpath(username) cmd_line = 'useradd {username}; chmod 755 {userpath_dir}; ' \ 'mkdir -p -m 755 "{userpath}";chown {username}:{username} "{userpath}"'.format( username=username, userpath=userpath, userpath_dir=os.path.dirname(userpath)) net_common.get_info_from_syscmd(cmd_line) cmd_line = '(echo "{}";echo "{}")|smbpasswd -a "{}"'.format(userpwd, userpwd, username) net_common.get_info_from_syscmd(cmd_line) retval = smb_add_cfg(username, read_only) if retval != 0: _logger.error("smb user {} create cfg file failed".format(username)) smb_del_userpath(username) return -1, 'create smb cfg file failed,user {}'.format(username) userinfo = net_common.get_info_from_syscmd('pdbedit -L') if userinfo[0] != 0: return -1, 'create smb cfg file failed,user {}'.format(username) if username not in userinfo[1]: return -1, 'create smb cfg file failed,user {}'.format(username) _logger.debug('smb_create_smbuser user {} pwd {} success'.format(username, userpwd)) return 0, 'success'
def smb_del_userpath(user_name): # del sys usr userpath = smb_get_userpath(user_name) have_host = 0 if os.path.isdir(userpath): for hostname in os.listdir(userpath): hostpath = os.path.join(userpath, hostname) if os.path.isdir(hostpath): have_host += 1 break if have_host == 0: # del sys user cmd_line = 'userdel -r -f "{}"'.format(user_name) _logger.debug("start del sys user {},cmd {}".format(user_name, cmd_line)) net_common.get_info_from_syscmd(cmd_line) # del smb user smb_del_cfg(user_name) cmd_line = 'pdbedit -x {}'.format(user_name) _logger.debug("start del smb user {},cmd {}".format(user_name, cmd_line)) net_common.get_info_from_syscmd(cmd_line) cmdline = 'rm -rf "{userpath}"'.format( userpath=userpath) _logger.debug("start user path,cmd {}".format(cmd_line)) net_common.get_info_from_syscmd(cmdline) else: _logger.error('already have {} host,can not del userpath {}'.format(have_host, userpath)) return -1, "failed" return 0, 'success'
def net_get_speed_one(in_name): cmdline = 'ethtool ' + in_name retval = net_common.get_info_from_syscmd(cmdline) if retval[0] == 0: mstr = retval[1] mdict = {'Speed:': [], 'Duplex:': []} net_common.get_itemdict_from_str(mstr, mdict) net_card_info.net_set_item( in_name, 'speed', mdict['Speed:'][0] if len(mdict['Speed:']) else '--') net_card_info.net_set_item( in_name, 'duplex', mdict['Duplex:'][0] if len(mdict['Duplex:']) else '--') return
def smb_get_user_list(): userlist = list() cmd_line = 'pdbedit -L' retval = net_common.get_info_from_syscmd(cmd_line) if retval[0] != 0: _logger.error("get info from cmd {} failed".format(cmd_line)) else: mlist = retval[1].strip().split('\n') for i in range(len(mlist)): mstr = mlist[i] mindex = mstr.find(':') if mindex > 0: muser_name = mstr[:mindex] userlist.append(muser_name) return userlist
def mount(self, readonly=True): """ mount -t cifs //172.29.100.100/wuo/W2003R2PAR_1_2018-08-01T20-30-38.350867 /mnt/smb/ -o username="******",password="******",iocharset=utf8 :return: """ assert self._server_ip check_readonly = 'ro' if not readonly: check_readonly = 'rw' cmd = r'mount -t cifs "//{samba_server}/{samba_user}/{host_name}/" "{dst_point}"' \ r' -o username="******",password="******",iocharset=utf8,{readonly},nomapposix'.format( samba_server=self._server_ip, samba_user=self._key_info['username'], host_name=self._key_info['hostname'], samba_password=self._key_info['userpwd'], dst_point=self.mount_point, readonly=check_readonly) _logger.info('mount cmd info:{}'.format(cmd)) rev = net_common.get_info_from_syscmd(cmd, timeout=5) return rev[0] == 0
def get_dev_detail(dev_path): rs = dict() if not os.path.exists(dev_path): _logger.warning( 'DevDetail get_dict fail, dev:{} is not found'.format( dev_path)) return rs cmd = r"partx -o NR,START {} |grep -v NR".format(dev_path) ret = net_common.get_info_from_syscmd(cmd) if ret[0] == 0: for line in ret[1].splitlines(): item_list = line.strip().split() if len(item_list) == 2: offset = str(int(item_list[1]) * 512) rs[offset] = "{}p{}".format(dev_path, item_list[0]) else: _logger.error('get DevDetail fail:{}'.format(ret[2])) return rs
def mount_fat(self, dev_path, one_line): try: dev_str = dev_path + 'p' + one_line[:5].strip() if not os.path.exists(dev_str): _logger.error('dev {} file not exist'.format(dev_str)) else: # 创建目标目录 # des_path = self.mount_dir + '/' + os.path.basename(dev_str) des_path = self.mount_dir + '/' + 'volume' + one_line[:5].strip( ) cmd_line = 'mkdir -p "{}";mount -o ro,iocharset=utf8,codepage=936 "{}" "{}"'.format( des_path, dev_str, des_path) _logger.debug('mount cmd {}'.format(cmd_line)) ret = net_common.get_info_from_syscmd(cmd_line) if ret[0] == 0: self.mount_dev_list.append(dev_str) else: _logger.debug('cmd {} failed,ret {}'.format(cmd_line, ret)) except Exception as e: _logger.error('except {}'.format(traceback.format_exc()))
def get_real_vermagic(ko_file_path): if not os.path.isfile(ko_file_path): return None cmd = 'modinfo "{}"'.format(ko_file_path) retval, outs, errinfo = net_common.get_info_from_syscmd(cmd) #_logger.info("drv3: runcmd {} return:{} out:{} errorinfo:{}".format(retval, cmd, outs, errinfo)) if retval != 0: str = "runcmd {} return:{} out:{} errorinfo:{}".format( retval, cmd, outs, errinfo) raise Exception(str) all_lines = outs.split("\n") for _l in all_lines: if "vermagic:" not in _l: continue value = _l.replace("vermagic:", " ") # 将value前面的空格删除掉。 for i in range(len(value)): if value[i] == ' ': continue return value[i:] return None
def net_get_cardtype_driver(): global net_cardtype_driver_dict net_cardtype_driver_dict.clear() cmdline = 'lspci -v' retval = net_common.get_info_from_syscmd(cmdline) if retval[0] != 0: _logger.error("get_info_from_syscmd failed,cmd {},retval {}".format( cmdline, retval[0])) return -1 card_check_str = 'Ethernet controller: ' driver_check_str = 'Kernel driver in use: ' mlist = retval[1].split("\n\n") mlist_len = len(mlist) for i in range(mlist_len): mstr = mlist[i] mmlist = mstr.split("\n") mmlist_len = len(mmlist) cardtype_str = '' for j in range(mmlist_len): mmstr = mmlist[j] if len(cardtype_str) <= 0: mindex = mmstr.find(card_check_str) if mindex > 0: cardtype_str = mmstr[mindex + len(card_check_str):] _logger.debug('get a cardtype {}'.format(cardtype_str)) else: mindex = mmstr.find(driver_check_str) if mindex > 0: driver_str = mmstr[mindex + len(driver_check_str):] _logger.debug('get a driver_str {}'.format(driver_str)) if driver_str not in net_cardtype_driver_dict: net_cardtype_driver_dict[driver_str] = cardtype_str for key in net_cardtype_driver_dict: _logger.debug('cardtype_driver key:{},value:{}'.format( key, net_cardtype_driver_dict[key])) return 0
def net_get_cardtype(): global net_cardtype_driver_dict retval = net_get_cardtype_driver() if retval != 0: _logger.error('net_get_cardtype_driver failed') return -1 name_list = net_card_info.net_get_name_list() mlen = len(name_list) for i in range(mlen): mname = name_list[i] if net_card_info.net_type_check(mname) != _NET_TYPE_NAME_PHY: continue cmdline = 'ethtool -i ' + mname + " | grep driver: | awk '{print$2}'" retval = net_common.get_info_from_syscmd(cmdline) if retval[0] != 0: _logger.error('cmd {} failed'.format(cmdline)) else: driver_name = retval[1].strip(' ').strip('\n') if driver_name in net_cardtype_driver_dict: net_card_info.net_set_item( mname, 'cardtype', net_cardtype_driver_dict[driver_name]) else: _logger.error('invalid driver_name {}'.format(driver_name)) return 0