files/gitlab-cookbooks/package/libraries/helpers/selinux_distro_helper.rb (51 lines of code) (raw):
class SELinuxDistroHelper
REDHAT_RELEASE_FILE = '/etc/redhat-release'.freeze
OS_RELEASE_FILE = '/etc/os-release'.freeze
def self.selinux_supported?
system_is_rhel7? || system_is_rhel8? || system_is_rhel9? || system_is_amazon_linux2? || system_is_amazon_linux2023?
end
def self.system_is_rhel7?
platform_family == 'rhel' && platform_version&.start_with?('7.')
end
def self.system_is_rhel8?
platform_family == 'rhel' && (platform_version&.start_with?('8.') || platform_version.eql?('8'))
end
def self.system_is_rhel9?
platform_family == 'rhel' && (platform_version&.start_with?('9.') || platform_version.eql?('9'))
end
def self.system_is_amazon_linux2?
# Extra platform check to ensure we don't enable RHEL 2
platform_family == 'rhel' && %w[amazon amzn].include?(platform&.downcase) && platform_version == '2'
end
def self.system_is_amazon_linux2023?
# Extra platform check to ensure we don't enable RHEL 2
platform_family == 'rhel' && %w[amazon amzn].include?(platform&.downcase) && platform_version == '2023'
end
def self.platform_family
case platform
when /oracle/, /centos/, /almalinux/, /rocky/, /redhat/, /scientific/, /enterpriseenterprise/, /amazon/, /xenserver/, /cloudlinux/, /ibm_powerkvm/, /parallels/, /amzn/
'rhel'
end
end
def self.platform
contents = read_release_file(REDHAT_RELEASE_FILE)
return get_redhatish_platform(contents) unless contents.nil?
contents = read_release_file(OS_RELEASE_FILE)
capture = contents&.match(/^ID="(?<id>\S+)"$/)
capture&.values_at(:id)&.first
end
def self.platform_version
contents = read_release_file(REDHAT_RELEASE_FILE)
return get_redhatish_version(contents) unless contents.nil?
contents = read_release_file(OS_RELEASE_FILE)
capture = contents&.match(/^VERSION="(?<version>\d+)"$/)
capture&.values_at(:version)&.first
end
def self.read_release_file(release_file = nil)
File.exist?(release_file) ? File.read(release_file) : nil
end
# Taken from Ohai
# https://github.com/chef/ohai/blob/v14.8.12/lib/ohai/plugins/linux/platform.rb#L23
def self.get_redhatish_platform(contents)
contents[/^Red Hat/i] ? 'redhat' : contents[/(\w+)/i, 1].downcase
end
# Taken from Ohai
# https://github.com/chef/ohai/blob/v14.8.12/lib/ohai/plugins/linux/platform.rb#L34
def self.get_redhatish_version(contents)
contents[/Rawhide/i] ? contents[/((\d+) \(Rawhide\))/i, 1].downcase : contents[/(release)? ([\d.]+)/, 2]
end
end