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
This commit is contained in:
Tomas Babej
2013-03-13 12:53:24 +01:00
committed by Martin Kosek
parent 9005b9bc8a
commit ade4aaef9a

View File

@@ -611,6 +611,41 @@ def uninstall(options, env):
if was_sshd_configured and ipaservices.knownservices.sshd.is_running():
ipaservices.knownservices.sshd.restart()
rv = 0
if fstore.has_files():
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)
has_state = True
rv = 1
if has_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 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.")
@@ -625,26 +660,7 @@ def uninstall(options, env):
"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')
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)
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.')
# Remove the IPA configuration file
try:
os.remove("/etc/ipa/default.conf")
except Exception:
pass
root_logger.info("Client uninstall complete.")
# IMPORTANT: Do not put any client uninstall logic after the block above
return rv