diff options
author | Robert Yang <liezhi.yang@windriver.com> | 2016-11-23 00:57:39 -0800 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-05-18 13:07:32 +0100 |
commit | 3305872894552d7d1d486ca4441b1a7c5a39bf6e (patch) | |
tree | e8cf1c20cde362f3d403207da47b5cd484a98848 /scripts | |
parent | 8a2eb1a75e3fe0020f50e348d4a2c7d49fd5f276 (diff) | |
download | poky-3305872894552d7d1d486ca4441b1a7c5a39bf6e.tar.gz |
runqemu: support multiple qemus running when nfs
Fixed:
* In build1:
$ runqemu nfs qemux86-64
In build2:
$ runqemu nfs qemux86-64
It would fail before since the port numerbs and conf files are
conflicted, now make runqemu-export-rootfs work together with runqemu to
fix the problem.
* And we don't need export PSEUDO_LOCALSTATEDIR in runqemu, the
runqemu-export-rootfs can handle it well based on NFS_EXPORT_DIR.
* Remove "async" option from unfsd to fix warning in syslog:
Warning: unknown exports option `async' ignored
* Fixed typos
Both slirp and tap can work.
(From OE-Core rev: f3a9ff2cea88cf4c90b1037b3ca17e6a63ea33ee)
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/runqemu | 57 | ||||
-rwxr-xr-x | scripts/runqemu-export-rootfs | 10 |
2 files changed, 43 insertions, 24 deletions
diff --git a/scripts/runqemu b/scripts/runqemu index dbe17abfc5..1df6875111 100755 --- a/scripts/runqemu +++ b/scripts/runqemu | |||
@@ -676,17 +676,35 @@ class BaseConfig(object): | |||
676 | else: | 676 | else: |
677 | self.nfs_server = '192.168.7.1' | 677 | self.nfs_server = '192.168.7.1' |
678 | 678 | ||
679 | nfs_instance = int(self.nfs_instance) | 679 | # Figure out a new nfs_instance to allow multiple qemus running. |
680 | 680 | # CentOS 7.1's ps doesn't print full command line without "ww" | |
681 | mountd_rpcport = 21111 + nfs_instance | 681 | # when invoke by subprocess.Popen(). |
682 | nfsd_rpcport = 11111 + nfs_instance | 682 | cmd = "ps auxww" |
683 | nfsd_port = 3049 + 2 * nfs_instance | 683 | ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE).stdout.read().decode('utf-8') |
684 | mountd_port = 3048 + 2 * nfs_instance | 684 | pattern = '/bin/unfsd .* -i .*\.pid -e .*/exports([0-9]+) ' |
685 | unfs_opts="nfsvers=3,port=%s,mountprog=%s,nfsprog=%s,udp,mountport=%s" % (nfsd_port, mountd_rpcport, nfsd_rpcport, mountd_port) | 685 | all_instances = re.findall(pattern, ps, re.M) |
686 | self.unfs_opts = unfs_opts | 686 | if all_instances: |
687 | all_instances.sort(key=int) | ||
688 | self.nfs_instance = int(all_instances.pop()) + 1 | ||
689 | |||
690 | mountd_rpcport = 21111 + self.nfs_instance | ||
691 | nfsd_rpcport = 11111 + self.nfs_instance | ||
692 | nfsd_port = 3049 + 2 * self.nfs_instance | ||
693 | mountd_port = 3048 + 2 * self.nfs_instance | ||
694 | |||
695 | # Export vars for runqemu-export-rootfs | ||
696 | export_dict = { | ||
697 | 'NFS_INSTANCE': self.nfs_instance, | ||
698 | 'MOUNTD_RPCPORT': mountd_rpcport, | ||
699 | 'NFSD_RPCPORT': nfsd_rpcport, | ||
700 | 'NFSD_PORT': nfsd_port, | ||
701 | 'MOUNTD_PORT': mountd_port, | ||
702 | } | ||
703 | for k, v in export_dict.items(): | ||
704 | # Use '%s' since they are integers | ||
705 | os.putenv(k, '%s' % v) | ||
687 | 706 | ||
688 | p = '%s/.runqemu-sdk/pseudo' % os.getenv('HOME') | 707 | self.unfs_opts="nfsvers=3,port=%s,mountprog=%s,nfsprog=%s,udp,mountport=%s" % (nfsd_port, mountd_rpcport, nfsd_rpcport, mountd_port) |
689 | os.putenv('PSEUDO_LOCALSTATEDIR', p) | ||
690 | 708 | ||
691 | # Extract .tar.bz2 or .tar.bz if no self.nfs_dir | 709 | # Extract .tar.bz2 or .tar.bz if no self.nfs_dir |
692 | if not self.nfs_dir: | 710 | if not self.nfs_dir: |
@@ -714,7 +732,7 @@ class BaseConfig(object): | |||
714 | self.nfs_dir = dest | 732 | self.nfs_dir = dest |
715 | 733 | ||
716 | # Start the userspace NFS server | 734 | # Start the userspace NFS server |
717 | cmd = 'runqemu-export-rootfs restart %s' % self.nfs_dir | 735 | cmd = 'runqemu-export-rootfs start %s' % self.nfs_dir |
718 | logger.info('Running %s...' % cmd) | 736 | logger.info('Running %s...' % cmd) |
719 | if subprocess.call(cmd, shell=True) != 0: | 737 | if subprocess.call(cmd, shell=True) != 0: |
720 | raise Exception('Failed to run %s' % cmd) | 738 | raise Exception('Failed to run %s' % cmd) |
@@ -723,6 +741,8 @@ class BaseConfig(object): | |||
723 | 741 | ||
724 | 742 | ||
725 | def setup_slirp(self): | 743 | def setup_slirp(self): |
744 | """Setup user networking""" | ||
745 | |||
726 | if self.fstype == 'nfs': | 746 | if self.fstype == 'nfs': |
727 | self.setup_nfs() | 747 | self.setup_nfs() |
728 | self.kernel_cmdline_script += ' ip=dhcp' | 748 | self.kernel_cmdline_script += ' ip=dhcp' |
@@ -790,14 +810,13 @@ class BaseConfig(object): | |||
790 | logger.error("Failed to setup tap device. Run runqemu-gen-tapdevs to manually create.") | 810 | logger.error("Failed to setup tap device. Run runqemu-gen-tapdevs to manually create.") |
791 | return 1 | 811 | return 1 |
792 | self.tap = tap | 812 | self.tap = tap |
793 | n0 = tap[3:] | 813 | tapnum = int(tap[3:]) |
794 | n1 = int(n0) * 2 + 1 | 814 | gateway = tapnum * 2 + 1 |
795 | n2 = n1 + 1 | 815 | client = gateway + 1 |
796 | self.nfs_instance = n0 | ||
797 | if self.fstype == 'nfs': | 816 | if self.fstype == 'nfs': |
798 | self.setup_nfs() | 817 | self.setup_nfs() |
799 | self.kernel_cmdline_script += " ip=192.168.7.%s::192.168.7.%s:255.255.255.0" % (n2, n1) | 818 | self.kernel_cmdline_script += " ip=192.168.7.%s::192.168.7.%s:255.255.255.0" % (client, gateway) |
800 | mac = "52:54:00:12:34:%02x" % n2 | 819 | mac = "52:54:00:12:34:%02x" % client |
801 | qb_tap_opt = self.get('QB_TAP_OPT') | 820 | qb_tap_opt = self.get('QB_TAP_OPT') |
802 | if qb_tap_opt: | 821 | if qb_tap_opt: |
803 | qemu_tap_opt = qb_tap_opt.replace('@TAP@', tap).replace('@MAC@', mac) | 822 | qemu_tap_opt = qb_tap_opt.replace('@TAP@', tap).replace('@MAC@', mac) |
@@ -840,11 +859,11 @@ class BaseConfig(object): | |||
840 | vm_drive = '-drive if=none,id=hd,file=%s,format=%s -device virtio-scsi-pci,id=scsi -device scsi-hd,drive=hd' \ | 859 | vm_drive = '-drive if=none,id=hd,file=%s,format=%s -device virtio-scsi-pci,id=scsi -device scsi-hd,drive=hd' \ |
841 | % (self.rootfs, rootfs_format) | 860 | % (self.rootfs, rootfs_format) |
842 | elif subprocess.call(cmd2, shell=True) == 0: | 861 | elif subprocess.call(cmd2, shell=True) == 0: |
843 | logger.info('Using scsi drive') | 862 | logger.info('Using ide drive') |
844 | vm_drive = "%s,format=%s" % (self.rootfs, rootfs_format) | 863 | vm_drive = "%s,format=%s" % (self.rootfs, rootfs_format) |
845 | else: | 864 | else: |
846 | logger.warn("Can't detect drive type %s" % self.rootfs) | 865 | logger.warn("Can't detect drive type %s" % self.rootfs) |
847 | logger.warn('Tring to use virtio block drive') | 866 | logger.warn('Trying to use virtio block drive') |
848 | vm_drive = '-drive if=virtio,file=%s,format=%s' % (self.rootfs, rootfs_format) | 867 | vm_drive = '-drive if=virtio,file=%s,format=%s' % (self.rootfs, rootfs_format) |
849 | self.rootfs_options = '%s -no-reboot' % vm_drive | 868 | self.rootfs_options = '%s -no-reboot' % vm_drive |
850 | self.kernel_cmdline = 'root=%s rw highres=off' % (self.get('QB_KERNEL_ROOT')) | 869 | self.kernel_cmdline = 'root=%s rw highres=off' % (self.get('QB_KERNEL_ROOT')) |
diff --git a/scripts/runqemu-export-rootfs b/scripts/runqemu-export-rootfs index 0dd3eba8b6..7ebc07194d 100755 --- a/scripts/runqemu-export-rootfs +++ b/scripts/runqemu-export-rootfs | |||
@@ -78,13 +78,13 @@ if [ ! -d "$PSEUDO_LOCALSTATEDIR" ]; then | |||
78 | fi | 78 | fi |
79 | 79 | ||
80 | # rpc.mountd RPC port | 80 | # rpc.mountd RPC port |
81 | MOUNTD_RPCPORT=$[ 21111 + $NFS_INSTANCE ] | 81 | MOUNTD_RPCPORT=${MOUNTD_RPCPORT:=$[ 21111 + $NFS_INSTANCE ]} |
82 | # rpc.nfsd RPC port | 82 | # rpc.nfsd RPC port |
83 | NFSD_RPCPORT=$[ 11111 + $NFS_INSTANCE ] | 83 | NFSD_RPCPORT=${NFSD_RPCPORT:=$[ 11111 + $NFS_INSTANCE ]} |
84 | # NFS server port number | 84 | # NFS server port number |
85 | NFSD_PORT=$[ 3049 + 2 * $NFS_INSTANCE ] | 85 | NFSD_PORT=${NFSD_PORT:=$[ 3049 + 2 * $NFS_INSTANCE ]} |
86 | # mountd port number | 86 | # mountd port number |
87 | MOUNTD_PORT=$[ 3048 + 2 * $NFS_INSTANCE ] | 87 | MOUNTD_PORT=${MOUNTD_PORT:=$[ 3048 + 2 * $NFS_INSTANCE ]} |
88 | 88 | ||
89 | ## For debugging you would additionally add | 89 | ## For debugging you would additionally add |
90 | ## --debug all | 90 | ## --debug all |
@@ -109,7 +109,7 @@ case "$1" in | |||
109 | fi | 109 | fi |
110 | 110 | ||
111 | echo "Creating exports file..." | 111 | echo "Creating exports file..." |
112 | echo "$NFS_EXPORT_DIR (rw,async,no_root_squash,no_all_squash,insecure)" > $EXPORTS | 112 | echo "$NFS_EXPORT_DIR (rw,no_root_squash,no_all_squash,insecure)" > $EXPORTS |
113 | 113 | ||
114 | echo "Starting User Mode nfsd" | 114 | echo "Starting User Mode nfsd" |
115 | echo " $PSEUDO $PSEUDO_OPTS $OECORE_NATIVE_SYSROOT/usr/bin/unfsd $UNFSD_OPTS" | 115 | echo " $PSEUDO $PSEUDO_OPTS $OECORE_NATIVE_SYSROOT/usr/bin/unfsd $UNFSD_OPTS" |