Class: RosettAi::PackageManager::Apt

Inherits:
Base
  • Object
show all
Defined in:
lib/rosett_ai/package_manager/apt.rb

Overview

APT package manager backend for Debian-based systems.

Uses pkexec for privilege escalation (install/remove). All commands use array-form system() for security.

Author:

  • hugo

  • claude

Constant Summary collapse

DPKG_QUERY =
'dpkg-query'
APT_CACHE =
'apt-cache'
PKEXEC =
'pkexec'
APT_GET =
'apt-get'

Instance Method Summary collapse

Instance Method Details

#available?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/rosett_ai/package_manager/apt.rb', line 27

def available?
  system(DPKG_QUERY, '--version', out: File::NULL, err: File::NULL) == true
end

#available_packages(pattern) ⇒ Array<Hash>

Search for available .deb packages via apt-cache.

Parameters:

  • pattern (String)

Returns:

  • (Array<Hash>)


63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/rosett_ai/package_manager/apt.rb', line 63

def available_packages(pattern)
  validate_package_name!(pattern)
  output = run_command(APT_CACHE, 'search', pattern)
  return [] unless output

  output.each_line.filter_map do |line|
    name, description = line.strip.split(' - ', 2)
    next unless name && description

    { name: name.strip, description: description.strip }
  end
end

#backend_nameString

Returns:

  • (String)


22
23
24
# File 'lib/rosett_ai/package_manager/apt.rb', line 22

def backend_name
  'apt'
end

#install(package_name) ⇒ Boolean

Install a .deb package via pkexec + apt-get.

Parameters:

  • package_name (String)

Returns:

  • (Boolean)


35
36
37
38
# File 'lib/rosett_ai/package_manager/apt.rb', line 35

def install(package_name)
  validate_package_name!(package_name)
  system(PKEXEC, APT_GET, 'install', '-y', package_name, out: File::NULL)
end

#installed?(package_name) ⇒ Boolean

Check if a .deb package is installed via dpkg-query.

Parameters:

  • package_name (String)

Returns:

  • (Boolean)


53
54
55
56
57
# File 'lib/rosett_ai/package_manager/apt.rb', line 53

def installed?(package_name)
  validate_package_name!(package_name)
  system(DPKG_QUERY, '-W', '-f', '${Status}', package_name,
         out: File::NULL, err: File::NULL) == true
end

#remove(package_name) ⇒ Boolean

Remove a .deb package via pkexec + apt-get.

Parameters:

  • package_name (String)

Returns:

  • (Boolean)


44
45
46
47
# File 'lib/rosett_ai/package_manager/apt.rb', line 44

def remove(package_name)
  validate_package_name!(package_name)
  system(PKEXEC, APT_GET, 'remove', '-y', package_name, out: File::NULL)
end

#update_indexBoolean

Update APT index via pkexec + apt-get.

Returns:

  • (Boolean)


79
80
81
# File 'lib/rosett_ai/package_manager/apt.rb', line 79

def update_index
  system(PKEXEC, APT_GET, 'update', out: File::NULL)
end