Skip to content
Snippets Groups Projects
Commit bf9472c3 authored by Ben Morrice's avatar Ben Morrice
Browse files

Add support for CS8

- Fix broken C8
- use dnf-automatic on 8 family systems
parent 1cb33824
No related branches found
No related tags found
1 merge request!3Add support for CS8
Pipeline #2437123 canceled
Name: cern-anaconda-addon
Version: 1.7
Version: 1.8
Release: 1%{?dist}
Summary: CERN configuration anaconda addon
......@@ -31,6 +31,10 @@ install -p -m 644 data/cern.svg %{buildroot}/%{_datadir}/icons/hicolor/scalable/
%doc LICENSE README.md
%changelog
* Thu Mar 18 2021 Ben Morrice <ben.morrice@cern.ch> - 1.8-1
- Add support for CentOS Stream 8
- Use dnf-automatic instead of yum-autoupdate on 8 family systems
* Tue Jan 28 2020 Ben Morrice <ben.morrice@cern.ch> - 1.7-1
- Add support for C8
......
release=open('/etc/redhat-release','r').read().split(' ')[3].split('.')[0]
release=open('/etc/redhat-release','r').read().split(' ')[3].split('.')[0].rstrip()
if release == '8':
# to be adjusted later, postfix and dnsmasq
LOCMAP_CORE_MODULES = ["ssh", "sudo", "chrony", "kerberos", "lpadmin"]
......
......@@ -28,8 +28,8 @@ class CernSpoke(FirstbootOnlySpokeMixIn, NormalSpoke):
icon = "applications-science-symbolic"
title = N_("_CERN CUSTOMIZATIONS")
def __init__(self, data, storage, payload, instclass):
NormalSpoke.__init__(self, data, storage, payload, instclass)
def __init__(self, data, storage, payload):
NormalSpoke.__init__(self, data, storage, payload)
def initialize(self):
NormalSpoke.initialize(self)
......@@ -143,4 +143,4 @@ class CernFirstbootDialog(GUIObject):
ret = self.window.run()
self.window.destroy()
return ret
\ No newline at end of file
return ret
......@@ -7,12 +7,25 @@ import sys
from pyanaconda.addons import AddonData
from inspect import signature, Parameter
AddonDataSetupArgs=[]
for x, p in signature(AddonData.setup).parameters.items():
if p.default == Parameter.empty and p.kind != Parameter.VAR_POSITIONAL:
AddonDataSetupArgs.append(x)
# C8
if (sys.version_info > (3, 0)):
from pyanaconda.core.util import getSysroot
try:
from pyanaconda.core.configuration.anaconda import conf
system_root = conf.target.system_root
# older versions
except:
from pyanaconda.core.util import getSysroot
system_root = getSysroot()
# CC7
else:
from pyanaconda.iutil import getSysroot
system_root = getSysroot()
from cern_customizations.constants import SYSCONFIG_FILE_PATH, \
AFS_IS_DEFAULT, EOS_IS_DEFAULT, CVMFS_IS_DEFAULT, \
AUTOUPDATE_IS_DEFAULT, RUN_IS_DEFAULT, LOCMAP_BIN, \
......@@ -24,6 +37,8 @@ from cern_customizations.constants import SYSCONFIG_FILE_PATH, \
from pykickstart.options import KSOptionParser
from pykickstart.errors import KickstartParseError, formatErrorMsg
from pykickstart.version import versionToLongString, RHEL8
# export CernData class to prevent Anaconda's collect method from taking
# # AddonData class instead of the CernData class
# # :see: pyanaconda.kickstart.AnacondaKSHandler.__init__
......@@ -91,39 +106,33 @@ class CernData(AddonData):
:type args: list
"""
opc = KSOptionParser()
opc.add_option("--afs-client", action="store_true", default=True,
dest="afs", help="Install and configure Openafs client")
opc.add_option("--auto-update", action="store_true", default=True,
dest="autoupdate", help="Enable automatic system updates")
opc.add_option("--auto-update-boot", action="store_true", default=False,
dest="autoupdateboot", help="Enable automatic system updates at boot")
opc = KSOptionParser(version=RHEL8, description='CERN addon',prog='CERN')
opc.add_argument("--afs-client", action="store_true", default=True,
dest="afs", help="Install and configure Openafs client",
version=RHEL8)
#opc.add_option("--eos-client", action="store_true", default=False,
# dest="eos", help="Install and configure Fuse EOS client")
opc.add_argument("--auto-update", action="store_true", default=True,
dest="autoupdate", help="Enable automatic system updates",
version=RHEL8)
opc.add_option("--cvmfs-client", action="store_true", default=False,
dest="cvmfs", help="Install and configure Fuse CVMFS client")
opc.add_argument("--auto-update-boot", action="store_true", default=False,
dest="autoupdateboot", help="Enable automatic system updates at boot",
version=RHEL8)
opc.add_option("--gnome-initial-setup", action="store_true", default=False,
dest="gnomeinit", help="Run Gnome initial setup after first login")
opc.add_argument("--cvmfs-client", action="store_true", default=False,
dest="cvmfs", help="Install and configure Fuse CVMFS client",
version=RHEL8)
opc.add_option("--run-locmap", action="store_true", default=True,
dest="run", help="Run locmap at firstboot")
(opts, extra) = opc.parse_args(args=args, lineno=lineno)
opc.add_argument("--gnome-initial-setup", action="store_true", default=False,
dest="gnomeinit", help="Run Gnome initial setup after first login",
version=RHEL8)
# Reject any additional arguments.
if extra:
msg = "Unhandled arguments on %s %%addon line for %s" % (self.name, extra)
if lineno is not None:
raise KickstartParseError(formatErrorMsg(lineno, msg=msg))
else:
raise KickstartParseError(msg)
opc.add_argument("--run-locmap", action="store_true", default=True,
dest="run", help="Run locmap at firstboot",
version=RHEL8)
opts = opc.parse_args(args=args, lineno=lineno)
self.afs = opts.afs
#self.eos = opts.eos
self.run = opts.run
self.cvmfs = opts.cvmfs
self.autoupdate = opts.autoupdate
......@@ -150,7 +159,7 @@ class CernData(AddonData):
"""
pass
def setup(self, storage, ksdata, instclass, payload):
def setup(AddonDataSetupArgs):
"""
The setup method that should make changes to the runtime environment
according to the data stored in this object.
......@@ -183,7 +192,8 @@ class CernData(AddonData):
# this is a mandatory spoke, user must check it
return True
def execute(self, storage, ksdata, instclass, users, payload):
def execute(self, storage, ksdata, users, payload):
"""
The execute method that should make changes to the installed system. It
is called only once in the post-install setup phase.
......@@ -193,10 +203,10 @@ class CernData(AddonData):
:type users: pyanaconda.users.Users instance
"""
yumupdate_file = os.path.normpath(getSysroot() + SYSCONFIG_YUM_PATH)
yumupdate_file = os.path.normpath(system_root + SYSCONFIG_YUM_PATH)
# Data is persisted in /root/initial-setup-ks.cfg
sysconfig_file = os.path.normpath(getSysroot() + SYSCONFIG_FILE_PATH)
sysconfig_file = os.path.normpath(system_root + SYSCONFIG_FILE_PATH)
with open(sysconfig_file, "w") as fobj:
fobj.write("LOCMAP_FIRSTBOOT_START=%s\n" % self.run)
# For compatibility but can be dropped in >= 7.5
......@@ -207,8 +217,8 @@ class CernData(AddonData):
fobj.close()
# Allow to disable gnome-initial-setup
gdmconfig_file = os.path.normpath(getSysroot() + GDMCONFIG_FILE_PATH)
xdgconfig_file = os.path.normpath(getSysroot() + XDGCONFIG_FILE_PATH)
gdmconfig_file = os.path.normpath(system_root + GDMCONFIG_FILE_PATH)
xdgconfig_file = os.path.normpath(system_root + XDGCONFIG_FILE_PATH)
if not self.gnomeinit:
# C8
if (sys.version_info > (3, 0)):
......@@ -238,31 +248,40 @@ class CernData(AddonData):
except NoOptionError:
print("Unexpected error:", sys.exc_info()[0])
# we will need this for later
release=open('/etc/redhat-release','r').read().split(' ')[3].split('.')[0].rstrip()
# Configure yum-autoupdate
if self.autoupdate:
yumautoupdate_installed=os.path.isfile('/usr/sbin/yum-autoupdate')
if yumautoupdate_installed == False:
# 'yum' will work for both 7 and 8
subprocess.check_call(["yum", "-y", "install", "yum-autoupdate"])
subprocess.check_call([SYSTEMCTL_BIN, "enable", "yum-autoupdate"])
try:
with open(yumupdate_file, "a") as fobj:
fobj.write("\n# initial-setup [cern-anaconda-cern] values\n")
fobj.write("YUMUPDATE=%d\n" % int(self.autoupdate))
fobj.write("YUMONBOOT=%d\n" % int(self.autoupdateboot))
fobj.close()
except IOError:
print("I/O Error couldn't write %s" % (yumupdate_file))
except:
print("Unexpected error:", sys.exc_info()[0])
if release == '8':
# install dnf-automatic instead of custom yum-autoupdate
subprocess.check_call(["dnf", "-y", "install", "dnf-automatic"])
subprocess.check_call([SYSTEMCTL_BIN, "enable", "--now", "dnf-automatic-install.timer"])
else:
yumautoupdate_installed=os.path.isfile('/usr/sbin/yum-autoupdate')
if yumautoupdate_installed == False:
subprocess.check_call(["yum", "-y", "install", "yum-autoupdate"])
subprocess.check_call([SYSTEMCTL_BIN, "enable", "yum-autoupdate"])
try:
with open(yumupdate_file, "a") as fobj:
fobj.write("\n# initial-setup [cern-anaconda-cern] values\n")
fobj.write("YUMUPDATE=%d\n" % int(self.autoupdate))
fobj.write("YUMONBOOT=%d\n" % int(self.autoupdateboot))
fobj.close()
except IOError:
print("I/O Error couldn't write %s" % (yumupdate_file))
except:
print("Unexpected error:", sys.exc_info()[0])
else:
# we use call rather than check_call as we don't care if this fails
# due to yumautoupdate not being installed
subprocess.call([SYSTEMCTL_BIN, "disable", "yum-autoupdate"])
if release == '8':
subprocess.call([SYSTEMCTL_BIN, "disable", "dnf-automatic-install.timer"])
else:
subprocess.call([SYSTEMCTL_BIN, "disable", "yum-autoupdate"])
# locmap may not be installed - force install if it's not
locmap_installed=os.path.isfile('/usr/bin/locmap')
release=open('/etc/redhat-release','r').read().split(' ')[3].split('.')[0]
if locmap_installed == False:
# locmap does not reside in CERN repo on 8, install locmap-release
if release == '8':
......@@ -282,10 +301,6 @@ class CernData(AddonData):
subprocess.check_call([LOCMAP_BIN, "--enable", "afs"])
else:
subprocess.check_call([LOCMAP_BIN, "--disable", "afs"])
#if self.eos:
# subprocess.check_call([LOCMAP_BIN, "--enable", "eosclient"])
#else:
# subprocess.check_call([LOCMAP_BIN, "--disable", "eosclient"])
if self.cvmfs:
subprocess.check_call([LOCMAP_BIN, "--enable", "cvmfs"])
else:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment