'Starts all the components then logs stderr to the console forever.
The subsystems are in forked processes disassociated from this, so will
continue running even after this process exists. Only the stderr logging
to console will stop once this process is terminated. However, the
logging will still continue into the LOG_DIR.'

def start_all(self, options):

    ValidateConfig(self.configurator).check_validate()
    self.configurator.update_deck_settings()
    ignore_tail_jobs = self.tail_error_logs()
    super(DevRunner, self).start_all(options)
    deck_port = self.installation.DECK_PORT
    print 'Waiting    for    deck    to    start    on    port    {port}'.format(port=deck_port)
    deck_log_path = os.path.join(self.installation.LOG_DIR, 'deck.log')
    while (not os.path.exists(deck_log_path)):
        time.sleep(0.1)
    ignore_tail_jobs.append(self.start_tail(deck_log_path))
    while True:
        (code, ignore) = fetch('http://localhost:{port}/'.format(port=deck_port))
        if (code == 200):
            break
        else:
            time.sleep(0.1)
    print 'Spinnaker    is    now    ready    on    port    {port}.\n\nYou    can    ^C    (ctrl-c)    to    finish    the    script,    which    will    stop    emitting    errors.\nSpinnaker    will    continue    until    you    run    ./spinnaker/dev/stop_dev.sh\n'.format(port=deck_port)
    while True:
        time.sleep(3600)
