diff --git a/Library/Homebrew/extend/os/linux/diagnostic.rb b/Library/Homebrew/extend/os/linux/diagnostic.rb index 63db648831..1a89f9d956 100644 --- a/Library/Homebrew/extend/os/linux/diagnostic.rb +++ b/Library/Homebrew/extend/os/linux/diagnostic.rb @@ -1,6 +1,8 @@ require "tempfile" require "utils/shell" require "os/linux/diagnostic" +require "os/linux/glibc" +require "os/linux/kernel" module Homebrew module Diagnostic @@ -59,6 +61,33 @@ module Homebrew echo 'umask 002' >> #{shell_profile} EOS end + + def check_glibc_minimum_version + return unless OS::Linux::Glibc.below_minimum_version? + + <<~EOS + Your system glibc #{OS::Linux::Glibc.system_version} is too old. + We only support glibc #{OS::Linux::Glibc.minimum_version} or later. + #{please_create_pull_requests} + We recommend updating to a newer version via your distribution's + package manager, upgrading your distribution to the latest version, + or changing distributions. + EOS + end + + def check_kernel_minimum_version + return unless OS::Linux::Kernel.below_minimum_version? + + <<~EOS + Your Linux kernel #{OS::Linux::Kernel.version} is too old. + We only support kernel #{OS::Linux::Kernel.minimum_version} or later. + You will be unable to use binary packages (bottles). + #{please_create_pull_requests} + We recommend updating to a newer version via your distribution's + package manager, upgrading your distribution to the latest version, + or changing distributions. + EOS + end end end end diff --git a/Library/Homebrew/test/os/linux/diagnostic_spec.rb b/Library/Homebrew/test/os/linux/diagnostic_spec.rb new file mode 100644 index 0000000000..d5d85cc0fd --- /dev/null +++ b/Library/Homebrew/test/os/linux/diagnostic_spec.rb @@ -0,0 +1,17 @@ +require "diagnostic" + +describe Homebrew::Diagnostic::Checks do + specify "#check_glibc_minimum_version" do + allow(OS::Linux::Glibc).to receive(:below_minimum_version?).and_return(true) + + expect(subject.check_glibc_minimum_version) + .to match(/Your system glibc .+ is too old/) + end + + specify "#check_kernel_minimum_version" do + allow(OS::Linux::Kernel).to receive(:below_minimum_version?).and_return(true) + + expect(subject.check_kernel_minimum_version) + .to match(/Your Linux kernel .+ is too old/) + end +end