Refactoring. Adding pkg mgmt.
Dev authored 7 years ago
|
1) require_relative '../rcm_utils'
2)
3) module RCM
4) class Apt
5) APT_GET = '/usr/bin/apt-get'.freeze
6) DPKG_QUERY = '/usr/bin/dpkg-query'.freeze
7) APT_CACHE = '/usr/bin/apt-cache'.freeze
|
Now detecting difference in...
Dev authored 7 years ago
|
8) APT_PARTIAL_DIR = '/var/lib/apt/lists/partial'.freeze
9)
10) def initialize(logger)
11) @logger = logger
12) end
|
Refactoring. Adding pkg mgmt.
Dev authored 7 years ago
|
13)
14) def update()
|
Now detecting difference in...
Dev authored 7 years ago
|
15) @logger.info('Updating apt cache.')
16) unless ::File.readable?(APT_PARTIAL_DIR)
17) @logger.warn('Skipping apt cache update as we are not running with right privilege.')
18) return
19) end
|
Refactoring. Adding pkg mgmt.
Dev authored 7 years ago
|
20) status = ::RCM.cmd("#{APT_GET} update")
|
Now detecting difference in...
Dev authored 7 years ago
|
21) unless status[:exit_code] == 0
22) @logger.warn("Updating apt cache failed. \n\n#{status[:error]}\n\nstdout:\n#{status[:output]}")
23) end
|
Refactoring. Adding pkg mgmt.
Dev authored 7 years ago
|
24) end
25)
26) def status(pkg_name)
27) ::RCM.cmd("#{DPKG_QUERY} --status #{pkg_name}")
28) end
29)
30) def install(pkg_name, version = '')
|
Now detecting difference in...
Dev authored 7 years ago
|
31) raise "\n\nPlease ensure you are running with root privileges" unless ::File.readable?(APT_PARTIAL_DIR)
32)
|
Refactoring. Adding pkg mgmt.
Dev authored 7 years ago
|
33) name = ''
34) version_string = "=#{version}" unless version.empty?
35) if pkg_name.is_a?(String)
36) name = pkg_name
37) version_string = "=#{version}" unless version.empty?
38) elsif pkg_name.is_a?(::RCM::Package)
39) name = pkg_name.name
40) v = pkg_name.version
41) version_string = "=#{v}" unless v.empty?
42) end
43)
44) ::RCM.cmd("#{APT_GET} install --yes #{name}#{version_string}")
45) end
46)
47) def multi_install(pkgs)
|
Now detecting difference in...
Dev authored 7 years ago
|
48) raise "\n\nPlease ensure you are running with root privileges\n\n" unless ::File.readable?(APT_PARTIAL_DIR)
49)
|
Refactoring. Adding pkg mgmt.
Dev authored 7 years ago
|
50) raise 'multi_install expects array of ::RCM.Package' unless pkgs.is_a?(Array)
51)
52) # Construct string of packages to install in one go.
53) pkgs_string = ''
54) pkgs.each do |pkg|
55) version_string = "=#{pkg.version}" unless pkg.version.empty?
56) pkgs_string += "#{pkg.name}#{version_string} "
57) end
58)
59) ::RCM.cmd("#{APT_GET} install --yes #{pkgs_string}")
60) end
61)
62) def get_versions(pkg_name)
63) name = ''
64) if pkg_name.is_a?(String)
65) name = pkg_name
66) elsif pkg_name.is_a?(::RCM::Package)
67) name = pkg_name.name
68) end
69) status = ::RCM.cmd("#{APT_CACHE} madison #{name}")
70) return [] if !status[:output] || status[:output] =~ /Unable to locate package/
71)
72) # Collect all versions by splitting on new line, and then collecting second
73) # field from every line with delimiter ' | '
74) available_versions = status[:output].split("\n").collect { |l| l.split(' | ')[1] }
75) available_versions.uniq
76) end
77)
78) def remove(pkg_name)
|
Now detecting difference in...
Dev authored 7 years ago
|
79) raise "\n\nPlease ensure you are running with root privileges\n\n" unless ::File.readable?(APT_PARTIAL_DIR)
80)
|
Refactoring. Adding pkg mgmt.
Dev authored 7 years ago
|
81) # Remove is idempotent and returns with success even if package is not installed.
82) status = ::RCM.cmd("#{APT_GET} remove --yes #{pkg_name}")
83) error_message = "Removing #{pkg_name} failed!\n\nstderr:\n#{status[:error]}\n\nstdout:\n#{status[:output]}"
84) raise error_message unless status[:exit_code] == 0
85) end
|
Now detecting difference in...
Dev authored 7 years ago
|
86)
87) def get_current_state(wanted_packages)
88) got = {}
89) wanted_packages.each do |name, p|
90) state = ::RCM::Package::REMOVED
91) version = 'idk'
92) status = status(p.name)
93)
94) if status[:exit_code] == 0
95) state = ::RCM::Package::INSTALLED if status[:output] =~ 'ok installed'
96) version = /Version: (?<version>\d+.+)/.match(status[:output])[:version]
97) end
98)
99) current_pkg = ::RCM::Package.new(name, version, state)
100)
101) got[name] = current_pkg
102) end
103)
104) got
105)
106) end
|