{"record":{"id":"be7e38bd8fdbb501","repo":"puppetlabs/puppet","slug":"could-not-find-package-name-be7e38","errorCode":null,"errorMessage":"Could not find package %{name}","messagePattern":"Could not find package %(.+?)","errorType":"exception","errorClass":"Puppet::Error","httpStatus":null,"severity":"error","filePath":"lib/puppet/provider/package/aptitude.rb","lineNumber":22,"sourceCode":"  desc \"Package management via `aptitude`.\"\n\n  has_feature :versionable\n\n  commands :aptitude => \"/usr/bin/aptitude\"\n  commands :aptcache => \"/usr/bin/apt-cache\"\n\n  ENV['DEBIAN_FRONTEND'] = \"noninteractive\"\n\n  def aptget(*args)\n    args.flatten!\n    # Apparently aptitude hasn't always supported a -q flag.\n    args.delete(\"-q\") if args.include?(\"-q\")\n    args.delete(\"--force-yes\") if args.include?(\"--force-yes\")\n    output = aptitude(*args)\n\n    # Yay, stupid aptitude doesn't throw an error when the package is missing.\n    if args.include?(:install) and output.to_s =~ /Couldn't find any package/\n      raise Puppet::Error, _(\"Could not find package %{name}\") % { name: name }\n    end\n  end\n\n  def purge\n    aptitude '-y', 'purge', @resource[:name]\n  end\n\n  private\n\n  def source\n    nil\n  end\nend\n","sourceCodeStart":4,"sourceCodeEnd":36,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/provider/package/aptitude.rb#L4-L36","documentation":"The aptitude provider's aptget helper (aptitude.rb:22) raises Puppet::Error when an install command's output matches /Couldn't find any package/. This is a workaround for aptitude exiting 0 (success) even when the requested package does not exist in any configured repository, so Puppet scans stdout to convert that silent no-op into a real failure.","triggerScenarios":"package { X: ensure => installed, provider => aptitude } where X is misspelled, not present in any enabled apt repo, or the apt lists are stale/empty (apt-get update never ran, repo key expired so lists were discarded).","commonSituations":"Typo'd package names in shared modules; fresh nodes where `aptitude update` has not run; third-party repos whose signing keys expired so their package lists are gone; suite renamed (oldstable packages removed upstream).","solutions":["Confirm the package exists: `aptitude search '^<name>$'` on the node.","Run `aptitude update` (or manage an apt::source + exec refresh) so package lists are populated before the package resource.","Fix the resource name spelling; if the package lives in another component/repo, declare that repo in Puppet first (before => Package[...])."],"exampleFix":"# before\npackage { 'pyhton3-pip': ensure => installed, provider => aptitude }\n\n# after\nexec { 'aptitude-update': command => '/usr/bin/aptitude update', before => Package['python3-pip'], refreshonly => true }\npackage { 'python3-pip': ensure => installed, provider => aptitude }","handlingStrategy":"validation","validationCode":"# verify the package exists before installing\nsystem(\"aptitude search '^foo$' | grep -q '^i\\\\|^p  foo'\") or raise 'package foo not in any repo'\n# and ensure lists are fresh\nsystem('aptitude update') or raise 'aptitude update failed'","typeGuard":null,"tryCatchPattern":"begin\n  aptitude_provider.aptget(:install, 'foo')\nrescue Puppet::Error => e\n  raise unless e.message =~ /Could not find package/\n  # refresh indexes once and retry\n  system('aptitude update'); retry\nend","preventionTips":["Manage apt repositories + an update Exec before any aptitude package resources.","Lint package names against `aptitude search` in CI for the target suite.","Watch for expired repo keys — they silently empty package lists and produce this exact error."],"tags":["puppet","aptitude","debian","packages","package-not-found"],"backgroundTag":"package-not-found","analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}