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 =
'dpkg-query'- APT_CACHE =
'apt-cache'- PKEXEC =
'pkexec'- APT_GET =
'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
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.
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_name ⇒ 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.
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.
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 |