module UbuntuUnusedKernels

Constants

DPKG_PATTERN
VERSION
VERSION_REGEX

Public Class Methods

get_current() click to toggle source
# File lib/ubuntu_unused_kernels.rb, line 26
def get_current
  uname = Open3.capture2('uname', '-r')
  raise "Unable to determine current kernel" unless uname.last.success?

  match = uname.first.chomp.match(/^(#{VERSION_REGEX})-[[:alpha:]]+$/)
  raise "Unable to determine current kernel" unless match

  return match[1]
end
get_installed() click to toggle source
# File lib/ubuntu_unused_kernels.rb, line 36
def get_installed
  dpkg = Open3.capture2(
    'dpkg-query', '--show',
    '--showformat', '${Package}\t${Version}\n',
    *DPKG_PATTERN
  )
  raise "Unable to get list of packages" unless dpkg.last.success?

  packages = dpkg.first.split("\n")
  packages.map! { |p| p.split("\t") }
  packages.reject! { |p| p[1].nil? }
  packages.map! { |p| p[0] }
  packages.reject! { |p| p !~ VERSION_REGEX }
  raise "No kernel packages found" if packages.empty?

  return packages
end
to_remove() click to toggle source
# File lib/ubuntu_unused_kernels.rb, line 9
def to_remove
  current = get_current
  packages = get_installed

  latest = packages.map { |package|
    package.match(VERSION_REGEX)[0]
  }.uniq.sort.last(2)

  [current, latest].flatten.each { |version|
    packages.reject! { |package|
      package =~ /\b#{Regexp.escape(version)}\b/
    }
  }

  return packages
end