mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
Change network configuration file
Fedora+systemd changed deprecated /etc/sysconfig/network which was used by IPA to store static hostname for the IPA machine. See https://bugzilla.redhat.com/show_bug.cgi?id=881785 for details. Change Fedora platform files to store the hostname to /etc/hostname instead. https://fedorahosted.org/freeipa/ticket/3279
This commit is contained in:
parent
c6efd4c7aa
commit
3896bf370a
@ -280,8 +280,13 @@ package.
|
|||||||
%build
|
%build
|
||||||
export CFLAGS="$CFLAGS %{optflags}"
|
export CFLAGS="$CFLAGS %{optflags}"
|
||||||
export CPPFLAGS="$CPPFLAGS %{optflags}"
|
export CPPFLAGS="$CPPFLAGS %{optflags}"
|
||||||
# use fedora16 platform which introduced systemd support
|
%if 0%{?fedora} >= 18
|
||||||
|
# use fedora18 platform which is based on fedora16 platform with systemd
|
||||||
|
# support + fedora18 changes
|
||||||
|
export SUPPORTED_PLATFORM=fedora18
|
||||||
|
%else
|
||||||
export SUPPORTED_PLATFORM=fedora16
|
export SUPPORTED_PLATFORM=fedora16
|
||||||
|
%endif
|
||||||
# Force re-generate of platform support
|
# Force re-generate of platform support
|
||||||
rm -f ipapython/services.py
|
rm -f ipapython/services.py
|
||||||
make version-update
|
make version-update
|
||||||
@ -302,7 +307,13 @@ make IPA_VERSION_IS_GIT_SNAPSHOT=no %{?_smp_mflags} client
|
|||||||
|
|
||||||
%install
|
%install
|
||||||
rm -rf %{buildroot}
|
rm -rf %{buildroot}
|
||||||
|
%if 0%{?fedora} >= 18
|
||||||
|
# use fedora18 platform which is based on fedora16 platform with systemd
|
||||||
|
# support + fedora18 changes
|
||||||
|
export SUPPORTED_PLATFORM=fedora18
|
||||||
|
%else
|
||||||
export SUPPORTED_PLATFORM=fedora16
|
export SUPPORTED_PLATFORM=fedora16
|
||||||
|
%endif
|
||||||
# Force re-generate of platform support
|
# Force re-generate of platform support
|
||||||
rm -f ipapython/services.py
|
rm -f ipapython/services.py
|
||||||
%if ! %{ONLY_CLIENT}
|
%if ! %{ONLY_CLIENT}
|
||||||
|
@ -497,6 +497,7 @@ def uninstall():
|
|||||||
krbinstance.KrbInstance(fstore).uninstall()
|
krbinstance.KrbInstance(fstore).uninstall()
|
||||||
dsinstance.DsInstance(fstore=fstore).uninstall()
|
dsinstance.DsInstance(fstore=fstore).uninstall()
|
||||||
memcacheinstance.MemcacheInstance().uninstall()
|
memcacheinstance.MemcacheInstance().uninstall()
|
||||||
|
ipaservices.restore_network_configuration(fstore, sstore)
|
||||||
fstore.restore_all_files()
|
fstore.restore_all_files()
|
||||||
try:
|
try:
|
||||||
os.remove(ANSWER_CACHE)
|
os.remove(ANSWER_CACHE)
|
||||||
@ -510,13 +511,7 @@ def uninstall():
|
|||||||
|
|
||||||
ipaservices.knownservices.ipa.disable()
|
ipaservices.knownservices.ipa.disable()
|
||||||
|
|
||||||
old_hostname = sstore.restore_state('network','hostname')
|
ipautil.restore_hostname(sstore)
|
||||||
system_hostname = get_fqdn()
|
|
||||||
if old_hostname is not None and old_hostname != system_hostname:
|
|
||||||
try:
|
|
||||||
ipautil.run(['/bin/hostname', old_hostname])
|
|
||||||
except CalledProcessError, e:
|
|
||||||
print >>sys.stderr, "Failed to set this machine hostname back to %s (%s)." % (old_hostname, str(e))
|
|
||||||
|
|
||||||
# remove upgrade state file
|
# remove upgrade state file
|
||||||
sysupgrade.remove_upgrade_file()
|
sysupgrade.remove_upgrade_file()
|
||||||
|
@ -451,16 +451,10 @@ def uninstall(options, env):
|
|||||||
|
|
||||||
if fstore.has_files():
|
if fstore.has_files():
|
||||||
root_logger.info("Restoring client configuration files")
|
root_logger.info("Restoring client configuration files")
|
||||||
|
ipaservices.restore_network_configuration(fstore, statestore)
|
||||||
fstore.restore_all_files()
|
fstore.restore_all_files()
|
||||||
|
|
||||||
old_hostname = statestore.restore_state('network', 'hostname')
|
ipautil.restore_hostname(statestore)
|
||||||
if old_hostname is not None and old_hostname != hostname:
|
|
||||||
try:
|
|
||||||
ipautil.run(['/bin/hostname', old_hostname])
|
|
||||||
except CalledProcessError, e:
|
|
||||||
root_logger.error(
|
|
||||||
"Failed to set this machine's hostname to %s (%s).",
|
|
||||||
old_hostname, str(e))
|
|
||||||
|
|
||||||
nscd = ipaservices.knownservices.nscd
|
nscd = ipaservices.knownservices.nscd
|
||||||
if nscd.is_installed():
|
if nscd.is_installed():
|
||||||
|
@ -1162,3 +1162,15 @@ def dn_attribute_property(private_name):
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
return property(getter, setter)
|
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(['/bin/hostname', old_hostname])
|
||||||
|
except CalledProcessError, e:
|
||||||
|
print >>sys.stderr, "Failed to set this machine hostname back to %s: %s" % (old_hostname, str(e))
|
||||||
|
@ -36,11 +36,15 @@ from ipalib import api
|
|||||||
# names are ipapython.services.wellknownservices
|
# names are ipapython.services.wellknownservices
|
||||||
# backup_and_replace_hostname -- platform-specific way to set hostname and
|
# backup_and_replace_hostname -- platform-specific way to set hostname and
|
||||||
# make it persistent over reboots
|
# make it persistent over reboots
|
||||||
|
# restore_network_configuration -- platform-specific way of restoring network
|
||||||
|
# configuration (e.g. static hostname)
|
||||||
# restore_context -- platform-sepcific way to restore security context, if
|
# restore_context -- platform-sepcific way to restore security context, if
|
||||||
# applicable
|
# applicable
|
||||||
# check_selinux_status -- platform-specific way to see if SELinux is enabled
|
# check_selinux_status -- platform-specific way to see if SELinux is enabled
|
||||||
# and restorecon is installed.
|
# and restorecon is installed.
|
||||||
__all__ = ['authconfig', 'service', 'knownservices', 'backup_and_replace_hostname', 'restore_context', 'check_selinux_status']
|
__all__ = ['authconfig', 'service', 'knownservices',
|
||||||
|
'backup_and_replace_hostname', 'restore_context', 'check_selinux_status',
|
||||||
|
'restore_network_configuration']
|
||||||
|
|
||||||
# For beginning just remap names to add .service
|
# For beginning just remap names to add .service
|
||||||
# As more services will migrate to systemd, unit names will deviate and
|
# As more services will migrate to systemd, unit names will deviate and
|
||||||
@ -204,3 +208,4 @@ authconfig = redhat.authconfig
|
|||||||
service = f16_service
|
service = f16_service
|
||||||
knownservices = Fedora16Services()
|
knownservices = Fedora16Services()
|
||||||
backup_and_replace_hostname = redhat.backup_and_replace_hostname
|
backup_and_replace_hostname = redhat.backup_and_replace_hostname
|
||||||
|
restore_network_configuration = redhat.restore_network_configuration
|
||||||
|
110
ipapython/platform/fedora18.py
Normal file
110
ipapython/platform/fedora18.py
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
# Author: Martin Kosek <mkosek@redhat.com>
|
||||||
|
#
|
||||||
|
# Copyright (C) 2012 Red Hat
|
||||||
|
# see file 'COPYING' for use and warranty information
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU 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 General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
import stat
|
||||||
|
import sys
|
||||||
|
import socket
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ipapython import ipautil
|
||||||
|
from ipapython.platform import fedora16
|
||||||
|
|
||||||
|
# All what we allow exporting directly from this module
|
||||||
|
# Everything else is made available through these symbols when they are
|
||||||
|
# directly imported into ipapython.services:
|
||||||
|
# authconfig -- class reference for platform-specific implementation of
|
||||||
|
# authconfig(8)
|
||||||
|
# service -- class reference for platform-specific implementation of a
|
||||||
|
# PlatformService class
|
||||||
|
# knownservices -- factory instance to access named services IPA cares about,
|
||||||
|
# names are ipapython.services.wellknownservices
|
||||||
|
# backup_and_replace_hostname -- platform-specific way to set hostname and
|
||||||
|
# make it persistent over reboots
|
||||||
|
# restore_network_configuration -- platform-specific way of restoring network
|
||||||
|
# configuration (e.g. static hostname)
|
||||||
|
# restore_context -- platform-sepcific way to restore security context, if
|
||||||
|
# applicable
|
||||||
|
# check_selinux_status -- platform-specific way to see if SELinux is enabled
|
||||||
|
# and restorecon is installed.
|
||||||
|
__all__ = ['authconfig', 'service', 'knownservices',
|
||||||
|
'backup_and_replace_hostname', 'restore_context', 'check_selinux_status',
|
||||||
|
'restore_network_configuration']
|
||||||
|
|
||||||
|
def backup_and_replace_hostname(fstore, statestore, hostname):
|
||||||
|
old_hostname = socket.gethostname()
|
||||||
|
try:
|
||||||
|
ipautil.run(['/bin/hostname', hostname])
|
||||||
|
except ipautil.CalledProcessError, e:
|
||||||
|
print >>sys.stderr, "Failed to set this machine hostname to %s (%s)." % (hostname, str(e))
|
||||||
|
|
||||||
|
filepath = '/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)
|
||||||
|
restore_context(filepath)
|
||||||
|
|
||||||
|
# store old hostname
|
||||||
|
statestore.backup_state('network', 'hostname', old_hostname)
|
||||||
|
|
||||||
|
def restore_network_configuration(fstore, statestore):
|
||||||
|
old_filepath = '/etc/sysconfig/network'
|
||||||
|
old_hostname = statestore.get_state('network', 'hostname')
|
||||||
|
hostname_was_configured = False
|
||||||
|
|
||||||
|
if fstore.has_file(old_filepath):
|
||||||
|
# This is Fedora >=18 instance that was upgraded from previous
|
||||||
|
# Fedora version which held network configuration
|
||||||
|
# in /etc/sysconfig/network
|
||||||
|
old_filepath_restore = '/etc/sysconfig/network.ipabkp'
|
||||||
|
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 = '/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
|
||||||
|
|
||||||
|
authconfig = fedora16.authconfig
|
||||||
|
service = fedora16.service
|
||||||
|
knownservices = fedora16.knownservices
|
||||||
|
restore_context = fedora16.restore_context
|
||||||
|
check_selinux_status = fedora16.check_selinux_status
|
@ -44,11 +44,15 @@ from ipalib import api
|
|||||||
# names are ipapython.services.wellknownservices
|
# names are ipapython.services.wellknownservices
|
||||||
# backup_and_replace_hostname -- platform-specific way to set hostname and
|
# backup_and_replace_hostname -- platform-specific way to set hostname and
|
||||||
# make it persistent over reboots
|
# make it persistent over reboots
|
||||||
|
# restore_network_configuration -- platform-specific way of restoring network
|
||||||
|
# configuration (e.g. static hostname)
|
||||||
# restore_context -- platform-sepcific way to restore security context, if
|
# restore_context -- platform-sepcific way to restore security context, if
|
||||||
# applicable
|
# applicable
|
||||||
# check_selinux_status -- platform-specific way to see if SELinux is enabled
|
# check_selinux_status -- platform-specific way to see if SELinux is enabled
|
||||||
# and restorecon is installed.
|
# and restorecon is installed.
|
||||||
__all__ = ['authconfig', 'service', 'knownservices', 'backup_and_replace_hostname', 'restore_context', 'check_selinux_status']
|
__all__ = ['authconfig', 'service', 'knownservices',
|
||||||
|
'backup_and_replace_hostname', 'restore_context', 'check_selinux_status',
|
||||||
|
'restore_network_configuration']
|
||||||
|
|
||||||
class RedHatService(base.PlatformService):
|
class RedHatService(base.PlatformService):
|
||||||
def __wait_for_open_ports(self, instance_name=""):
|
def __wait_for_open_ports(self, instance_name=""):
|
||||||
@ -225,6 +229,11 @@ def backup_and_replace_hostname(fstore, statestore, hostname):
|
|||||||
else:
|
else:
|
||||||
statestore.backup_state('network', 'hostname', old_hostname)
|
statestore.backup_state('network', 'hostname', old_hostname)
|
||||||
|
|
||||||
|
def restore_network_configuration(fstore, statestore):
|
||||||
|
filepath = '/etc/sysconfig/network'
|
||||||
|
if fstore.has_file(filepath):
|
||||||
|
fstore.restore_file(filepath)
|
||||||
|
|
||||||
def check_selinux_status(restorecon='/sbin/restorecon'):
|
def check_selinux_status(restorecon='/sbin/restorecon'):
|
||||||
"""
|
"""
|
||||||
We don't have a specific package requirement for policycoreutils
|
We don't have a specific package requirement for policycoreutils
|
||||||
|
Loading…
Reference in New Issue
Block a user