From ade4aaef9aba7e05276dc2f436a43e0bb7d42da3 Mon Sep 17 00:00:00 2001 From: Tomas Babej Date: Wed, 13 Mar 2013 12:53:24 +0100 Subject: Make sure uninstall script prompts for reboot as last Parts of client uninstall logic could be skipped in attended uninstallation if user agreed to reboot the machine. Particulary, the uninstall script would not try to remove /etc/ipa/default.conf and therefore subsequent installation would fail, client being detected as already configured. https://fedorahosted.org/freeipa/ticket/3462 https://fedorahosted.org/freeipa/ticket/3463 --- ipa-client/ipa-install/ipa-client-install | 54 ++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 19 deletions(-) (limited to 'ipa-client') diff --git a/ipa-client/ipa-install/ipa-client-install b/ipa-client/ipa-install/ipa-client-install index 4433fc717..97332d1a0 100755 --- a/ipa-client/ipa-install/ipa-client-install +++ b/ipa-client/ipa-install/ipa-client-install @@ -611,41 +611,57 @@ def uninstall(options, env): if was_sshd_configured and ipaservices.knownservices.sshd.is_running(): ipaservices.knownservices.sshd.restart() - if not options.unattended: - root_logger.info( - "The original nsswitch.conf configuration has been restored.") - root_logger.info( - "You may need to restart services or reboot the machine.") - if not options.on_master: - if user_input("Do you want to reboot the machine?", False): - try: - run(["/sbin/reboot"]) - except Exception, e: - root_logger.error( - "Reboot command failed to exceute: %s", str(e)) - return CLIENT_UNINSTALL_ERROR - rv = 0 if fstore.has_files(): - root_logger.error('Some files have not been restored, see /var/lib/ipa-client/sysrestore/sysrestore.index') + root_logger.error('Some files have not been restored, see ' + '/var/lib/ipa-client/sysrestore/sysrestore.index') has_state = False for module in statestore.modules.keys(): - root_logger.error('Some installation state for %s has not been restored, see /var/lib/ipa/sysrestore/sysrestore.state' % module) + root_logger.error('Some installation state for %s has not been ' + 'restored, see /var/lib/ipa/sysrestore/sysrestore.state', + module) has_state = True rv = 1 if has_state: - root_logger.warning('Some installation state has not been restored.\nThis may cause re-installation to fail.\nIt should be safe to remove /var/lib/ipa-client/sysrestore.state but it may\nmean your system hasn\'t be restored to its pre-installation state.') + root_logger.warning( + 'Some installation state has not been restored.\n' + 'This may cause re-installation to fail.\n' + 'It should be safe to remove /var/lib/ipa-client/sysrestore.state ' + 'but it may\n mean your system hasn\'t been restored ' + 'to its pre-installation state.') # Remove the IPA configuration file try: os.remove("/etc/ipa/default.conf") - except Exception: - pass + except OSError, e: + root_logger.warning('/etc/ipa/default.conf could not be removed: %s', + str(e)) + root_logger.warning('Please remove /etc/ipa/default.conf manually, ' + 'as it can cause subsequent installation to fail.') root_logger.info("Client uninstall complete.") + # The next block of code prompts for reboot, therefore all uninstall + # logic has to be done before + + if not options.unattended: + root_logger.info( + "The original nsswitch.conf configuration has been restored.") + root_logger.info( + "You may need to restart services or reboot the machine.") + if not options.on_master: + if user_input("Do you want to reboot the machine?", False): + try: + run(["/sbin/reboot"]) + except Exception, e: + root_logger.error( + "Reboot command failed to exceute: %s", str(e)) + return CLIENT_UNINSTALL_ERROR + + # IMPORTANT: Do not put any client uninstall logic after the block above + return rv def configure_ipa_conf(fstore, cli_basedn, cli_realm, cli_domain, cli_server): -- cgit