summaryrefslogtreecommitdiffstats
path: root/scripts/runqemu
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/runqemu')
-rwxr-xr-xscripts/runqemu57
1 files changed, 38 insertions, 19 deletions
diff --git a/scripts/runqemu b/scripts/runqemu
index 434b1c2ec7..b176e20845 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -694,17 +694,35 @@ class BaseConfig(object):
694 else: 694 else:
695 self.nfs_server = '192.168.7.1' 695 self.nfs_server = '192.168.7.1'
696 696
697 nfs_instance = int(self.nfs_instance) 697 # Figure out a new nfs_instance to allow multiple qemus running.
698 698 # CentOS 7.1's ps doesn't print full command line without "ww"
699 mountd_rpcport = 21111 + nfs_instance 699 # when invoke by subprocess.Popen().
700 nfsd_rpcport = 11111 + nfs_instance 700 cmd = "ps auxww"
701 nfsd_port = 3049 + 2 * nfs_instance 701 ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout.read().decode('utf-8')
702 mountd_port = 3048 + 2 * nfs_instance 702 pattern = '/bin/unfsd .* -i .*\.pid -e .*/exports([0-9]+) '
703 unfs_opts="nfsvers=3,port=%s,mountprog=%s,nfsprog=%s,udp,mountport=%s" % (nfsd_port, mountd_rpcport, nfsd_rpcport, mountd_port) 703 all_instances = re.findall(pattern, ps, re.M)
704 self.unfs_opts = unfs_opts 704 if all_instances:
705 all_instances.sort(key=int)
706 self.nfs_instance = int(all_instances.pop()) + 1
707
708 mountd_rpcport = 21111 + self.nfs_instance
709 nfsd_rpcport = 11111 + self.nfs_instance
710 nfsd_port = 3049 + 2 * self.nfs_instance
711 mountd_port = 3048 + 2 * self.nfs_instance
712
713 # Export vars for runqemu-export-rootfs
714 export_dict = {
715 'NFS_INSTANCE': self.nfs_instance,
716 'MOUNTD_RPCPORT': mountd_rpcport,
717 'NFSD_RPCPORT': nfsd_rpcport,
718 'NFSD_PORT': nfsd_port,
719 'MOUNTD_PORT': mountd_port,
720 }
721 for k, v in export_dict.items():
722 # Use '%s' since they are integers
723 os.putenv(k, '%s' % v)
705 724
706 p = '%s/.runqemu-sdk/pseudo' % os.getenv('HOME') 725 self.unfs_opts="nfsvers=3,port=%s,mountprog=%s,nfsprog=%s,udp,mountport=%s" % (nfsd_port, mountd_rpcport, nfsd_rpcport, mountd_port)
707 os.putenv('PSEUDO_LOCALSTATEDIR', p)
708 726
709 # Extract .tar.bz2 or .tar.bz if no self.nfs_dir 727 # Extract .tar.bz2 or .tar.bz if no self.nfs_dir
710 if not self.nfs_dir: 728 if not self.nfs_dir:
@@ -732,7 +750,7 @@ class BaseConfig(object):
732 self.nfs_dir = dest 750 self.nfs_dir = dest
733 751
734 # Start the userspace NFS server 752 # Start the userspace NFS server
735 cmd = 'runqemu-export-rootfs restart %s' % self.nfs_dir 753 cmd = 'runqemu-export-rootfs start %s' % self.nfs_dir
736 logger.info('Running %s...' % cmd) 754 logger.info('Running %s...' % cmd)
737 if subprocess.call(cmd, shell=True) != 0: 755 if subprocess.call(cmd, shell=True) != 0:
738 raise Exception('Failed to run %s' % cmd) 756 raise Exception('Failed to run %s' % cmd)
@@ -741,6 +759,8 @@ class BaseConfig(object):
741 759
742 760
743 def setup_slirp(self): 761 def setup_slirp(self):
762 """Setup user networking"""
763
744 if self.fstype == 'nfs': 764 if self.fstype == 'nfs':
745 self.setup_nfs() 765 self.setup_nfs()
746 self.kernel_cmdline_script += ' ip=dhcp' 766 self.kernel_cmdline_script += ' ip=dhcp'
@@ -808,14 +828,13 @@ class BaseConfig(object):
808 logger.error("Failed to setup tap device. Run runqemu-gen-tapdevs to manually create.") 828 logger.error("Failed to setup tap device. Run runqemu-gen-tapdevs to manually create.")
809 return 1 829 return 1
810 self.tap = tap 830 self.tap = tap
811 n0 = tap[3:] 831 tapnum = int(tap[3:])
812 n1 = int(n0) * 2 + 1 832 gateway = tapnum * 2 + 1
813 n2 = n1 + 1 833 client = gateway + 1
814 self.nfs_instance = n0
815 if self.fstype == 'nfs': 834 if self.fstype == 'nfs':
816 self.setup_nfs() 835 self.setup_nfs()
817 self.kernel_cmdline_script += " ip=192.168.7.%s::192.168.7.%s:255.255.255.0" % (n2, n1) 836 self.kernel_cmdline_script += " ip=192.168.7.%s::192.168.7.%s:255.255.255.0" % (client, gateway)
818 mac = "52:54:00:12:34:%02x" % n2 837 mac = "52:54:00:12:34:%02x" % client
819 qb_tap_opt = self.get('QB_TAP_OPT') 838 qb_tap_opt = self.get('QB_TAP_OPT')
820 if qb_tap_opt: 839 if qb_tap_opt:
821 qemu_tap_opt = qb_tap_opt.replace('@TAP@', tap).replace('@MAC@', mac) 840 qemu_tap_opt = qb_tap_opt.replace('@TAP@', tap).replace('@MAC@', mac)
@@ -858,11 +877,11 @@ class BaseConfig(object):
858 vm_drive = '-drive if=none,id=hd,file=%s,format=%s -device virtio-scsi-pci,id=scsi -device scsi-hd,drive=hd' \ 877 vm_drive = '-drive if=none,id=hd,file=%s,format=%s -device virtio-scsi-pci,id=scsi -device scsi-hd,drive=hd' \
859 % (self.rootfs, rootfs_format) 878 % (self.rootfs, rootfs_format)
860 elif subprocess.call(cmd2, shell=True) == 0: 879 elif subprocess.call(cmd2, shell=True) == 0:
861 logger.info('Using scsi drive') 880 logger.info('Using ide drive')
862 vm_drive = "%s,format=%s" % (self.rootfs, rootfs_format) 881 vm_drive = "%s,format=%s" % (self.rootfs, rootfs_format)
863 else: 882 else:
864 logger.warn("Can't detect drive type %s" % self.rootfs) 883 logger.warn("Can't detect drive type %s" % self.rootfs)
865 logger.warn('Tring to use virtio block drive') 884 logger.warn('Trying to use virtio block drive')
866 vm_drive = '-drive if=virtio,file=%s,format=%s' % (self.rootfs, rootfs_format) 885 vm_drive = '-drive if=virtio,file=%s,format=%s' % (self.rootfs, rootfs_format)
867 self.rootfs_options = '%s -no-reboot' % vm_drive 886 self.rootfs_options = '%s -no-reboot' % vm_drive
868 self.kernel_cmdline = 'root=%s rw highres=off' % (self.get('QB_KERNEL_ROOT')) 887 self.kernel_cmdline = 'root=%s rw highres=off' % (self.get('QB_KERNEL_ROOT'))