#!/usr/bin/env python3 # Copyright 2015 Canonical, Ltd. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import argparse import sys import logging import signal from subiquitycore.log import setup_logger, LOGFILE from subiquitycore import __version__ as VERSION from subiquitycore.core import Controller as Subiquity from subiquitycore.core import CoreControllerError from subiquitycore.ui.frame import SubiquityUI from subiquitycore.utils import environment_check def parse_options(argv): parser = argparse.ArgumentParser( description='SUbiquity - Ubiquity for Servers', prog='subiquity') parser.add_argument('--dry-run', action='store_true', dest='dry_run', help='menu-only, do not call installer function') # XXX Defaults to firstboot mode unless one runs subiquity --install. parser.add_argument('--install', action='store_false', dest='firstboot', default=True, help='run installer in firstboot mode') parser.add_argument('--serial', action='store_true', dest='run_on_serial', help='Run the installer over serial console.') parser.add_argument('--machine-config', metavar='CONFIG', dest='machine_config', help="Don't Probe. Use probe data file") parser.add_argument('--uefi', action='store_true', dest='uefi', help='run in uefi support mode') return parser.parse_args(argv) def control_c_handler(signum, frame): sys.exit(1) def main(): opts = parse_options(sys.argv[1:]) setup_logger() logger = logging.getLogger('subiquity') logger.info("Starting SUbiquity v{}".format(VERSION)) logger.info("Arguments passed: {}".format(sys.argv)) signal.signal(signal.SIGINT, control_c_handler) env_ok = environment_check() if env_ok is False and not opts.dry_run: print('Failed environment check. ' 'Check {} for errors.'.format(LOGFILE)) return 1 ui = SubiquityUI() try: subiquity_interface = Subiquity(ui, opts) except CoreControllerError as e: logger.exception('Failed to load Subiquity interface') print(e) return 1 subiquity_interface.run() if __name__ == '__main__': sys.exit(main())