Class: RosettAi::PackageManager::Apt
- 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.
Constant Summary collapse
- DPKG_QUERY =
Returns Path to the dpkg-query binary.
'dpkg-query'- APT_CACHE =
Returns Path to the apt-cache binary.
'apt-cache'- PKEXEC =
Returns Path to the pkexec binary for privilege escalation.
'pkexec'- APT_GET =
Returns Path to the apt-get binary.
'apt-get'
Instance Method Summary collapse
- #available? ⇒ Boolean
-
#available_packages(pattern) ⇒ Array<Hash>
Search for available .deb packages via apt-cache.
- #backend_name ⇒ String
-
#install(package_name) ⇒ Boolean
Install a .deb package via pkexec + apt-get.
-
#installed?(package_name) ⇒ Boolean
Check if a .deb package is installed via dpkg-query.
-
#remove(package_name) ⇒ Boolean
Remove a .deb package via pkexec + apt-get.
-
#update_index ⇒ Boolean
Update APT index via pkexec + apt-get.
Instance Method Details
#available? ⇒ Boolean
32 33 34 |
# File 'lib/rosett_ai/package_manager/apt.rb', line 32 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.
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/rosett_ai/package_manager/apt.rb', line 68 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_name ⇒ String
27 28 29 |
# File 'lib/rosett_ai/package_manager/apt.rb', line 27 def backend_name 'apt' end |
#install(package_name) ⇒ Boolean
Install a .deb package via pkexec + apt-get.
40 41 42 43 |
# File 'lib/rosett_ai/package_manager/apt.rb', line 40 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.
58 59 60 61 62 |
# File 'lib/rosett_ai/package_manager/apt.rb', line 58 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 |