diff options
| -rwxr-xr-x | bitbake/bin/bitbake | 10 | ||||
| -rw-r--r-- | bitbake/lib/bb/server/xmlrpc.py | 33 |
2 files changed, 39 insertions, 4 deletions
diff --git a/bitbake/bin/bitbake b/bitbake/bin/bitbake index cca2b8d29b..a0a2baa4bc 100755 --- a/bitbake/bin/bitbake +++ b/bitbake/bin/bitbake | |||
| @@ -302,6 +302,7 @@ def main(): | |||
| 302 | # we start a stub server that is actually a XMLRPClient that connects to a real server | 302 | # we start a stub server that is actually a XMLRPClient that connects to a real server |
| 303 | server = servermodule.BitBakeXMLRPCClient(configParams.observe_only) | 303 | server = servermodule.BitBakeXMLRPCClient(configParams.observe_only) |
| 304 | server.saveConnectionDetails(configParams.remote_server) | 304 | server.saveConnectionDetails(configParams.remote_server) |
| 305 | server.saveConnectionConfigParams(configParams) | ||
| 305 | 306 | ||
| 306 | if not configParams.server_only: | 307 | if not configParams.server_only: |
| 307 | # Collect the feature set for the UI | 308 | # Collect the feature set for the UI |
| @@ -312,11 +313,20 @@ def main(): | |||
| 312 | server_connection = server.establishConnection(featureset) | 313 | server_connection = server.establishConnection(featureset) |
| 313 | except: | 314 | except: |
| 314 | sys.exit(1) | 315 | sys.exit(1) |
| 316 | if not server_connection: | ||
| 317 | sys.exit(1) | ||
| 315 | server_connection.terminate() | 318 | server_connection.terminate() |
| 316 | sys.exit(0) | 319 | sys.exit(0) |
| 317 | 320 | ||
| 318 | # Setup a connection to the server (cooker) | 321 | # Setup a connection to the server (cooker) |
| 319 | server_connection = server.establishConnection(featureset) | 322 | server_connection = server.establishConnection(featureset) |
| 323 | if not server_connection: | ||
| 324 | if configParams.kill_server: | ||
| 325 | bb.fatal("Server already killed") | ||
| 326 | configParams.bind = configParams.remote_server | ||
| 327 | start_server(servermodule, configParams, configuration) | ||
| 328 | bb.event.ui_queue = [] | ||
| 329 | server_connection = server.establishConnection(featureset) | ||
| 320 | 330 | ||
| 321 | # Restore the environment in case the UI needs it | 331 | # Restore the environment in case the UI needs it |
| 322 | for k in cleanedvars: | 332 | for k in cleanedvars: |
diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py index 82c0e8d8a6..3a67ab0cf2 100644 --- a/bitbake/lib/bb/server/xmlrpc.py +++ b/bitbake/lib/bb/server/xmlrpc.py | |||
| @@ -338,13 +338,38 @@ class BitBakeXMLRPCClient(BitBakeBaseServer): | |||
| 338 | def saveConnectionDetails(self, remote): | 338 | def saveConnectionDetails(self, remote): |
| 339 | self.remote = remote | 339 | self.remote = remote |
| 340 | 340 | ||
| 341 | def saveConnectionConfigParams(self, configParams): | ||
| 342 | self.configParams = configParams | ||
| 343 | |||
| 341 | def establishConnection(self, featureset): | 344 | def establishConnection(self, featureset): |
| 342 | # The format of "remote" must be "server:port" | 345 | # The format of "remote" must be "server:port" |
| 343 | try: | 346 | try: |
| 344 | [host, port] = self.remote.split(":") | 347 | [host, port] = self.remote.split(":") |
| 345 | port = int(port) | 348 | port = int(port) |
| 346 | except: | 349 | except Exception as e: |
| 347 | return None | 350 | bb.fatal("Failed to read remote definition (%s)" % str(e)) |
| 351 | |||
| 352 | # use automatic port if port set to -1, meaning read it from | ||
| 353 | # the bitbake.lock file | ||
| 354 | if port == -1: | ||
| 355 | lock_location = "%s/bitbake.lock" % self.configParams.environment.get('BUILDDIR') | ||
| 356 | lock = bb.utils.lockfile(lock_location, False, False) | ||
| 357 | if lock: | ||
| 358 | # This means there is no server running which we can | ||
| 359 | # connect to on the local system. | ||
| 360 | bb.utils.unlockfile(lock) | ||
| 361 | return None | ||
| 362 | |||
| 363 | try: | ||
| 364 | lf = open(lock_location, 'r') | ||
| 365 | remotedef = lf.readline() | ||
| 366 | [host, port] = remotedef.split(":") | ||
| 367 | port = int(port) | ||
| 368 | lf.close() | ||
| 369 | self.remote = remotedef | ||
| 370 | except Exception as e: | ||
| 371 | bb.fatal("Failed to read bitbake.lock (%s)" % str(e)) | ||
| 372 | |||
| 348 | # We need our IP for the server connection. We get the IP | 373 | # We need our IP for the server connection. We get the IP |
| 349 | # by trying to connect with the server | 374 | # by trying to connect with the server |
| 350 | try: | 375 | try: |
| @@ -352,8 +377,8 @@ class BitBakeXMLRPCClient(BitBakeBaseServer): | |||
| 352 | s.connect((host, port)) | 377 | s.connect((host, port)) |
| 353 | ip = s.getsockname()[0] | 378 | ip = s.getsockname()[0] |
| 354 | s.close() | 379 | s.close() |
| 355 | except: | 380 | except Exception as e: |
| 356 | return None | 381 | bb.fatal("Could not create socket for %s:%s (%s)" % (host, port, str(e))) |
| 357 | try: | 382 | try: |
| 358 | self.serverImpl = XMLRPCProxyServer(host, port) | 383 | self.serverImpl = XMLRPCProxyServer(host, port) |
| 359 | self.connection = BitBakeXMLRPCServerConnection(self.serverImpl, (ip, 0), self.observer_only, featureset) | 384 | self.connection = BitBakeXMLRPCServerConnection(self.serverImpl, (ip, 0), self.observer_only, featureset) |
