diff options
-rwxr-xr-x | client/ipa-client-install | 4 | ||||
-rw-r--r-- | ipaplatform/base/paths.py | 2 | ||||
-rw-r--r-- | ipaplatform/base/tasks.py | 12 | ||||
-rw-r--r-- | ipaplatform/redhat/tasks.py | 47 | ||||
-rw-r--r-- | ipapython/ipautil.py | 12 | ||||
-rw-r--r-- | ipaserver/install/server/install.py | 23 |
6 files changed, 36 insertions, 64 deletions
diff --git a/client/ipa-client-install b/client/ipa-client-install index 0e6e65c4a..e56890463 100755 --- a/client/ipa-client-install +++ b/client/ipa-client-install @@ -713,12 +713,12 @@ def uninstall(options, env): root_logger.warning( "Failed to disable automatic startup of the SSSD daemon: %s", e) + tasks.restore_hostname(fstore, statestore) + if fstore.has_files(): root_logger.info("Restoring client configuration files") - tasks.restore_network_configuration(fstore, statestore) fstore.restore_all_files() - ipautil.restore_hostname(statestore) unconfigure_nisdomain() nscd = services.knownservices.nscd diff --git a/ipaplatform/base/paths.py b/ipaplatform/base/paths.py index 585a5d26e..62d9e703d 100644 --- a/ipaplatform/base/paths.py +++ b/ipaplatform/base/paths.py @@ -25,7 +25,7 @@ This base platform module exports default filesystem paths. class BasePathNamespace(object): BASH = "/bin/bash" BIN_FALSE = "/bin/false" - BIN_HOSTNAME = "/bin/hostname" + BIN_HOSTNAMECTL = "/bin/hostnamectl" LS = "/bin/ls" SH = "/bin/sh" SYSTEMCTL = "/bin/systemctl" diff --git a/ipaplatform/base/tasks.py b/ipaplatform/base/tasks.py index f5fb2b155..7c3008863 100644 --- a/ipaplatform/base/tasks.py +++ b/ipaplatform/base/tasks.py @@ -48,7 +48,7 @@ class BaseTaskNamespace(object): def backup_and_replace_hostname(self, fstore, statestore, hostname): """ Backs up the current hostname in the statestore (so that it can be - restored by the restore_network_configuration platform task). + restored by the restore_hostname platform task). Makes sure that new hostname (passed via hostname argument) is set as a new pemanent hostname for this host. @@ -106,7 +106,7 @@ class BaseTaskNamespace(object): return - def restore_network_configuration(self, fstore, statestore): + def restore_hostname(self, fstore, statestore): """ Restores the original hostname as backed up in the backup_and_replace_hostname platform task. @@ -237,6 +237,14 @@ class BaseTaskNamespace(object): """ return parse_version(version) + def set_hostname(self, hostname): + """ + Set hostname for the system + + No return value expected, raise CalledProcessError when error occurred + """ + return + def configure_httpd_service_ipa_conf(self): """Configure httpd service to work with IPA""" raise NotImplementedError() diff --git a/ipaplatform/redhat/tasks.py b/ipaplatform/redhat/tasks.py index 4be9a146e..2a110c994 100644 --- a/ipaplatform/redhat/tasks.py +++ b/ipaplatform/redhat/tasks.py @@ -26,10 +26,10 @@ system tasks. from __future__ import print_function import os -import stat import socket -import sys import base64 +import traceback + from cffi import FFI from ctypes.util import find_library from functools import total_ordering @@ -330,38 +330,31 @@ class RedHatTaskNamespace(BaseTaskNamespace): def backup_and_replace_hostname(self, fstore, statestore, hostname): old_hostname = socket.gethostname() try: - ipautil.run([paths.BIN_HOSTNAME, hostname]) + self.set_hostname(hostname) except ipautil.CalledProcessError as e: print(("Failed to set this machine hostname to " "%s (%s)." % (hostname, str(e))), file=sys.stderr) filepath = paths.ETC_HOSTNAME if os.path.exists(filepath): - # read old hostname - with open(filepath, 'r') as f: - for line in f.readlines(): - line = line.strip() - if not line or line.startswith('#'): - # skip comment or empty line - continue - old_hostname = line - break fstore.backup_file(filepath) - with open(filepath, 'w') as f: - f.write("%s\n" % hostname) - os.chmod(filepath, - stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH) - os.chown(filepath, 0, 0) - self.restore_context(filepath) - # store old hostname statestore.backup_state('network', 'hostname', old_hostname) - def restore_network_configuration(self, fstore, statestore): + def restore_hostname(self, fstore, statestore): old_filepath = paths.SYSCONFIG_NETWORK old_hostname = statestore.get_state('network', 'hostname') - hostname_was_configured = False + + if old_hostname is not None: + try: + self.set_hostname(old_hostname) + except ipautil.CalledProcessError as e: + root_logger.debug(traceback.format_exc()) + root_logger.error( + "Failed to restore this machine hostname to %s (%s).", + old_hostname, e + ) if fstore.has_file(old_filepath): # This is Fedora >=18 instance that was upgraded from previous @@ -371,20 +364,11 @@ class RedHatTaskNamespace(BaseTaskNamespace): fstore.restore_file(old_filepath, old_filepath_restore) print("Deprecated configuration file '%s' was restored to '%s'" \ % (old_filepath, old_filepath_restore)) - hostname_was_configured = True filepath = paths.ETC_HOSTNAME if fstore.has_file(filepath): fstore.restore_file(filepath) - hostname_was_configured = True - if not hostname_was_configured and old_hostname: - # hostname was not configured before but was set by IPA. Delete - # /etc/hostname to restore previous configuration - try: - os.remove(filepath) - except OSError: - pass def set_selinux_booleans(self, required_settings, backup_func=None): def get_setsebool_args(changes): @@ -490,4 +474,7 @@ class RedHatTaskNamespace(BaseTaskNamespace): paths.SYSTEMD_SYSTEM_HTTPD_IPA_CONF, e ) + def set_hostname(self, hostname): + ipautil.run([paths.BIN_HOSTNAMECTL, 'set-hostname', hostname]) + tasks = RedHatTaskNamespace() diff --git a/ipapython/ipautil.py b/ipapython/ipautil.py index e595d80ca..eef4d8020 100644 --- a/ipapython/ipautil.py +++ b/ipapython/ipautil.py @@ -1475,18 +1475,6 @@ def dn_attribute_property(private_name): return property(getter, setter) -def restore_hostname(statestore): - """ - Restore hostname of a machine, if it was set before - """ - old_hostname = statestore.restore_state('network','hostname') - system_hostname = socket.gethostname() - if old_hostname is not None and old_hostname != system_hostname: - try: - run([paths.BIN_HOSTNAME, old_hostname]) - except CalledProcessError as e: - print("Failed to set this machine hostname back to %s: %s" % (old_hostname, str(e)), file=sys.stderr) - def posixify(string): """ Convert a string to a more strict alpha-numeric representation. diff --git a/ipaserver/install/server/install.py b/ipaserver/install/server/install.py index f01022c4c..3c4a662df 100644 --- a/ipaserver/install/server/install.py +++ b/ipaserver/install/server/install.py @@ -573,16 +573,6 @@ def install_check(installer): host_name = host_name.lower() root_logger.debug("will use host_name: %s\n" % host_name) - system_hostname = get_fqdn() - if host_name != system_hostname: - print(file=sys.stderr) - print(("Warning: hostname %s does not match system " - "hostname %s." % (host_name, system_hostname)), file=sys.stderr) - print(("System hostname will be updated during the " - "installation process"), file=sys.stderr) - print("to prevent service failures.", file=sys.stderr) - print(file=sys.stderr) - if not options.domain_name: domain_name = read_domain_name(host_name[host_name.find(".")+1:], not installer.interactive) @@ -827,10 +817,11 @@ def install(installer): print("Please wait until the prompt is returned.") print("") - system_hostname = get_fqdn() - if host_name != system_hostname: - # configure /etc/sysconfig/network to contain the custom hostname - tasks.backup_and_replace_hostname(fstore, sstore, host_name) + # configure /etc/sysconfig/network to contain the custom hostname + tasks.backup_and_replace_hostname(fstore, sstore, host_name) + + # set hostname (we need both transient and static) + tasks.set_hostname(host_name) if installer._update_hosts_file: update_hosts_file(ip_addresses, host_name, fstore) @@ -1212,7 +1203,7 @@ def uninstall(installer): custodiainstance.CustodiaInstance().uninstall() memcacheinstance.MemcacheInstance().uninstall() otpdinstance.OtpdInstance().uninstall() - tasks.restore_network_configuration(fstore, sstore) + tasks.restore_hostname(fstore, sstore) fstore.restore_all_files() try: os.remove(paths.ROOT_IPA_CACHE) @@ -1234,8 +1225,6 @@ def uninstall(installer): services.knownservices.ipa.disable() - ipautil.restore_hostname(sstore) - # remove upgrade state file sysupgrade.remove_upgrade_file() |