reaper-man 0.1.8 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/README.md +1 -1
- data/lib/reaper-man.rb +10 -10
- data/lib/reaper-man/command.rb +4 -6
- data/lib/reaper-man/command/package.rb +3 -5
- data/lib/reaper-man/command/package/add.rb +1 -5
- data/lib/reaper-man/command/package/remove.rb +1 -5
- data/lib/reaper-man/command/repository.rb +2 -4
- data/lib/reaper-man/command/repository/generate.rb +3 -7
- data/lib/reaper-man/command/sign.rb +4 -6
- data/lib/reaper-man/error.rb +2 -3
- data/lib/reaper-man/generator.rb +15 -18
- data/lib/reaper-man/generator/apt.rb +23 -24
- data/lib/reaper-man/generator/rubygems.rb +13 -12
- data/lib/reaper-man/generator/yum.rb +92 -95
- data/lib/reaper-man/package_list.rb +17 -18
- data/lib/reaper-man/package_list/deb.rb +32 -34
- data/lib/reaper-man/package_list/gem.rb +46 -21
- data/lib/reaper-man/package_list/rpm.rb +43 -44
- data/lib/reaper-man/signer.rb +15 -18
- data/lib/reaper-man/signer/deb.rb +6 -7
- data/lib/reaper-man/signer/rpm.rb +6 -7
- data/lib/reaper-man/signer/rubygems.rb +1 -3
- data/lib/reaper-man/utils.rb +6 -10
- data/lib/reaper-man/utils/process.rb +19 -19
- data/lib/reaper-man/version.rb +1 -1
- data/reaper-man.gemspec +4 -1
- metadata +50 -9
@@ -1,6 +1,6 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "reaper-man"
|
2
|
+
require "xmlsimple"
|
3
|
+
require "time"
|
4
4
|
|
5
5
|
module ReaperMan
|
6
6
|
class Generator
|
@@ -9,20 +9,20 @@ module ReaperMan
|
|
9
9
|
|
10
10
|
# Version flag mappings
|
11
11
|
VERSION_FLAGS = {
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
"2" => "LT",
|
13
|
+
"4" => "GT",
|
14
|
+
"8" => "EQ",
|
15
|
+
"10" => "LE",
|
16
|
+
"12" => "GE",
|
17
17
|
}
|
18
18
|
|
19
19
|
# Location of xmlns (though all are now defunct)
|
20
20
|
XMLNS_MAP = {
|
21
|
-
:repo =>
|
22
|
-
:common =>
|
23
|
-
:rpm =>
|
24
|
-
:filelists =>
|
25
|
-
:other =>
|
21
|
+
:repo => "http://linux.duke.edu/metadata/repo",
|
22
|
+
:common => "http://linux.duke.edu/metadata/common",
|
23
|
+
:rpm => "http://linux.duke.edu/metadata/rpm",
|
24
|
+
:filelists => "http://linux.duke.edu/metadata/filelists",
|
25
|
+
:other => "http://linux.duke.edu/metadata/other",
|
26
26
|
}
|
27
27
|
|
28
28
|
# Generate the repository
|
@@ -43,9 +43,8 @@ module ReaperMan
|
|
43
43
|
f_file = filelist_file(origin_name, dist_name, component_name, packages)
|
44
44
|
sign_file_if_setup do
|
45
45
|
repomd_file(origin_name, dist_name, component_name,
|
46
|
-
|
47
|
-
|
48
|
-
)
|
46
|
+
:primary => p_file,
|
47
|
+
:filelists => f_file)
|
49
48
|
end
|
50
49
|
end
|
51
50
|
end
|
@@ -57,9 +56,9 @@ module ReaperMan
|
|
57
56
|
#
|
58
57
|
# @yield block returning file path
|
59
58
|
# @return [String] file path
|
60
|
-
def sign_file_if_setup(opts=nil)
|
59
|
+
def sign_file_if_setup(opts = nil)
|
61
60
|
path = yield
|
62
|
-
if
|
61
|
+
if signer && options[:sign]
|
63
62
|
signer.file(path, nil, opts)
|
64
63
|
end
|
65
64
|
path
|
@@ -76,85 +75,85 @@ module ReaperMan
|
|
76
75
|
content = {
|
77
76
|
:metadata => {
|
78
77
|
:@xmlns => XMLNS_MAP[:common],
|
79
|
-
|
78
|
+
"@xmlns:rpm" => XMLNS_MAP[:rpm],
|
80
79
|
:@packages => packages.size,
|
81
|
-
:package => packages.map{ |package|
|
80
|
+
:package => packages.map { |package|
|
82
81
|
{
|
83
|
-
:@type =>
|
84
|
-
:name => package[
|
85
|
-
:arch => package[
|
82
|
+
:@type => "rpm",
|
83
|
+
:name => package["NAME"],
|
84
|
+
:arch => package["ARCH"],
|
86
85
|
:version => {
|
87
|
-
:@epoch => package[
|
88
|
-
:@ver => package[
|
89
|
-
:@rel => package[
|
86
|
+
:@epoch => package["EPOCHNUM"],
|
87
|
+
:@ver => package["VERSION"],
|
88
|
+
:@rel => package["RELEASE"].split(".").first,
|
90
89
|
},
|
91
90
|
:checksum => [
|
92
91
|
{
|
93
|
-
:@type =>
|
94
|
-
:@pkgid =>
|
92
|
+
:@type => "sha",
|
93
|
+
:@pkgid => "YES",
|
95
94
|
},
|
96
|
-
package[:generated_sha]
|
95
|
+
package[:generated_sha],
|
97
96
|
],
|
98
|
-
:summary => package[
|
99
|
-
:description => [package[
|
100
|
-
:packager => package[
|
101
|
-
:url => package[
|
97
|
+
:summary => package["SUMMARY"],
|
98
|
+
:description => [package["DESCRIPTION"]].flatten.compact.join(" "),
|
99
|
+
:packager => package["PACKAGER"],
|
100
|
+
:url => package["URL"],
|
102
101
|
:time => {
|
103
102
|
:@file => Time.now.to_i,
|
104
|
-
:@build => package[
|
103
|
+
:@build => package["BUILDTIME"],
|
105
104
|
},
|
106
105
|
:size => {
|
107
|
-
:@archive => package[
|
106
|
+
:@archive => package["ARCHIVESIZE"],
|
108
107
|
:@package => package[:generated_size],
|
109
|
-
:@installed => package[
|
108
|
+
:@installed => package["LONGSIZE"],
|
110
109
|
},
|
111
110
|
:location => package[:generated_path],
|
112
111
|
:format => {
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
112
|
+
"rpm:license" => package["LICENSE"],
|
113
|
+
"rpm:vendor" => package["VENDOR"],
|
114
|
+
"rpm:group" => package["GROUP"],
|
115
|
+
"rpm:buildhost" => package["BUILDHOST"],
|
116
|
+
"rpm:header-range" => {
|
118
117
|
:@start => package[:generated_header][:start],
|
119
|
-
:@end => package[:generated_header][:end]
|
118
|
+
:@end => package[:generated_header][:end],
|
120
119
|
},
|
121
|
-
|
122
|
-
|
123
|
-
pro_ver = package[
|
124
|
-
package[
|
120
|
+
"rpm:provides" => {
|
121
|
+
"rpm:entry" => Array.new.tap { |entries|
|
122
|
+
pro_ver = package["PROVIDEVERSION"].dup
|
123
|
+
package["PROVIDENAME"].each_with_index do |p_name, p_idx|
|
125
124
|
item = {:@name => p_name}
|
126
|
-
if
|
127
|
-
p_ver, p_rel = pro_ver.shift.split(
|
128
|
-
item.merge!(:@flags => p_flag, :@ver => p_ver, :@rel => p_rel, :@epoch => package[
|
125
|
+
if p_flag = VERSION_FLAGS[package["PROVIDEFLAGS"][p_idx]]
|
126
|
+
p_ver, p_rel = pro_ver.shift.split("-", 2)
|
127
|
+
item.merge!(:@flags => p_flag, :@ver => p_ver, :@rel => p_rel, :@epoch => package["EPOCHNUM"])
|
129
128
|
end
|
130
129
|
entries.push(item)
|
131
130
|
end
|
132
|
-
}
|
131
|
+
},
|
133
132
|
},
|
134
|
-
|
135
|
-
|
136
|
-
req_ver = package[
|
137
|
-
package[
|
133
|
+
"rpm:requires" => {
|
134
|
+
"rpm:entry" => Array.new.tap { |entries|
|
135
|
+
req_ver = package["REQUIREVERSION"].dup
|
136
|
+
package["REQUIRENAME"].each_with_index do |r_name, r_idx|
|
138
137
|
item = {:@name => r_name}
|
139
|
-
if
|
140
|
-
r_ver, r_rel = req_ver.shift.split(
|
141
|
-
item.merge!(:@flags => r_flag, :@ver => r_ver, :@rel => r_rel, :@epoch => package[
|
138
|
+
if r_flag = VERSION_FLAGS[package["REQUIREFLAGS"][r_idx]]
|
139
|
+
r_ver, r_rel = req_ver.shift.split("-", 2)
|
140
|
+
item.merge!(:@flags => r_flag, :@ver => r_ver, :@rel => r_rel, :@epoch => package["EPOCHNUM"])
|
142
141
|
end
|
143
142
|
entries.push(item)
|
144
143
|
end
|
145
|
-
}
|
146
|
-
}
|
147
|
-
}
|
144
|
+
},
|
145
|
+
},
|
146
|
+
},
|
148
147
|
}
|
149
|
-
}
|
150
|
-
}
|
148
|
+
},
|
149
|
+
},
|
151
150
|
}
|
152
|
-
args = [origin_name, dist_name, component_name,
|
151
|
+
args = [origin_name, dist_name, component_name, "repodata", "primary.xml"]
|
153
152
|
[
|
154
153
|
create_file(*args) do |file|
|
155
154
|
file.puts generate_xml(content)
|
156
155
|
end,
|
157
|
-
compress_file(*args)
|
156
|
+
compress_file(*args),
|
158
157
|
]
|
159
158
|
end
|
160
159
|
|
@@ -167,32 +166,32 @@ module ReaperMan
|
|
167
166
|
# @return [Array<String>] path to file, path to compressed file
|
168
167
|
def filelist_file(origin_name, dist_name, component_name, packages)
|
169
168
|
content = {
|
170
|
-
|
169
|
+
"filelists" => {
|
171
170
|
:@xmlns => XMLNS_MAP[:filelists],
|
172
171
|
:@packages => packages.size,
|
173
|
-
:package => packages.map{ |package|
|
172
|
+
:package => packages.map { |package|
|
174
173
|
{
|
175
174
|
:@pkgid => package[:generated_sha],
|
176
|
-
:@name => package[
|
177
|
-
:@arch => package[
|
175
|
+
:@name => package["NAME"],
|
176
|
+
:@arch => package["ARCH"],
|
178
177
|
:version => {
|
179
|
-
:@epoch => package[
|
180
|
-
:@ver => package[
|
181
|
-
:@rel => package[
|
178
|
+
:@epoch => package["EPOCHNUM"],
|
179
|
+
:@ver => package["VERSION"],
|
180
|
+
:@rel => package["RELEASE"].split(".").first,
|
181
|
+
},
|
182
|
+
:file => (package["FILENAMES"] + package["DIRNAMES"]).map { |dir|
|
183
|
+
{:@type => "dir", :_content_ => dir}
|
182
184
|
},
|
183
|
-
:file => (package['FILENAMES'] + package['DIRNAMES']).map{ |dir|
|
184
|
-
{:@type => 'dir', :_content_ => dir}
|
185
|
-
}
|
186
185
|
}
|
187
|
-
}
|
188
|
-
}
|
186
|
+
},
|
187
|
+
},
|
189
188
|
}
|
190
|
-
args = [origin_name, dist_name, component_name,
|
189
|
+
args = [origin_name, dist_name, component_name, "repodata", "filelists.xml"]
|
191
190
|
[
|
192
191
|
create_file(*args) do |file|
|
193
192
|
file.puts generate_xml(content)
|
194
193
|
end,
|
195
|
-
compress_file(*args)
|
194
|
+
compress_file(*args),
|
196
195
|
]
|
197
196
|
end
|
198
197
|
|
@@ -207,25 +206,25 @@ module ReaperMan
|
|
207
206
|
content = {
|
208
207
|
:repomd => {
|
209
208
|
:@xmlns => XMLNS_MAP[:repo],
|
210
|
-
:data => Hash.new.tap{ |data|
|
209
|
+
:data => Hash.new.tap { |data|
|
211
210
|
files.each do |f_name, f_paths|
|
212
211
|
data[f_name] = {
|
213
|
-
:location => File.join(
|
214
|
-
|
215
|
-
:@type =>
|
216
|
-
:_content_ => checksum(File.open(f_paths.first), :sha1)
|
212
|
+
:location => File.join("repodata", File.basename(f_paths.first)),
|
213
|
+
"open-checksum" => {
|
214
|
+
:@type => "sha",
|
215
|
+
:_content_ => checksum(File.open(f_paths.first), :sha1),
|
217
216
|
},
|
218
217
|
:checksum => {
|
219
|
-
:@type =>
|
220
|
-
:_content_ => checksum(File.open(f_paths.last), :sha1)
|
218
|
+
:@type => "sha",
|
219
|
+
:_content_ => checksum(File.open(f_paths.last), :sha1),
|
221
220
|
},
|
222
|
-
:timestamp => File.mtime(f_paths.first).to_i
|
221
|
+
:timestamp => File.mtime(f_paths.first).to_i,
|
223
222
|
}
|
224
223
|
end
|
225
|
-
}
|
226
|
-
}
|
224
|
+
},
|
225
|
+
},
|
227
226
|
}
|
228
|
-
args = [origin_name, dist_name, component_name,
|
227
|
+
args = [origin_name, dist_name, component_name, "repodata", "repomd.xml"]
|
229
228
|
create_file(*args) do |file|
|
230
229
|
file.puts generate_xml(content)
|
231
230
|
end
|
@@ -237,13 +236,11 @@ module ReaperMan
|
|
237
236
|
# @return [String]
|
238
237
|
def generate_xml(hash)
|
239
238
|
XmlSimple.xml_out(hash,
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
)
|
239
|
+
"AttrPrefix" => true,
|
240
|
+
"KeepRoot" => true,
|
241
|
+
"ContentKey" => :_content_,
|
242
|
+
"XmlDeclaration" => '<?xml version="1.0" encoding="UTF-8" ?>')
|
245
243
|
end
|
246
|
-
|
247
244
|
end
|
248
245
|
end
|
249
246
|
end
|
@@ -1,19 +1,19 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "multi_json"
|
2
|
+
require "reaper-man"
|
3
3
|
|
4
4
|
module ReaperMan
|
5
5
|
# Package list for repository
|
6
6
|
class PackageList
|
7
7
|
# Package list modification processor
|
8
8
|
class Processor
|
9
|
-
autoload :Rpm,
|
10
|
-
autoload :Deb,
|
11
|
-
autoload :Gem,
|
9
|
+
autoload :Rpm, "reaper-man/package_list/rpm"
|
10
|
+
autoload :Deb, "reaper-man/package_list/deb"
|
11
|
+
autoload :Gem, "reaper-man/package_list/gem"
|
12
12
|
|
13
13
|
include Utils::Process
|
14
14
|
include Utils::Checksum
|
15
15
|
|
16
|
-
def initialize(_={})
|
16
|
+
def initialize(_ = {})
|
17
17
|
end
|
18
18
|
|
19
19
|
# Add a package to the list
|
@@ -21,7 +21,7 @@ module ReaperMan
|
|
21
21
|
# @param conf [Hash]
|
22
22
|
# @param package [String] path to package
|
23
23
|
def add(conf, package)
|
24
|
-
raise NoMethodError.new
|
24
|
+
raise NoMethodError.new "Not implemented"
|
25
25
|
end
|
26
26
|
|
27
27
|
# Remove package from the list
|
@@ -29,8 +29,8 @@ module ReaperMan
|
|
29
29
|
# @param conf [Hash] configuration hash
|
30
30
|
# @param package_name [String] name
|
31
31
|
# @param version [String]
|
32
|
-
def remove(conf, package_name, version=nil)
|
33
|
-
raise NoMethodError.new
|
32
|
+
def remove(conf, package_name, version = nil)
|
33
|
+
raise NoMethodError.new "Not implemented"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -47,7 +47,7 @@ module ReaperMan
|
|
47
47
|
#
|
48
48
|
# @param path [String] path to package list
|
49
49
|
# @param args [Hash] configuration
|
50
|
-
def initialize(path, args={})
|
50
|
+
def initialize(path, args = {})
|
51
51
|
@path = path
|
52
52
|
@options = args.dup
|
53
53
|
@content = Smash.new
|
@@ -58,16 +58,16 @@ module ReaperMan
|
|
58
58
|
#
|
59
59
|
# @param package [Array<String>] path to package file
|
60
60
|
def add_package(package)
|
61
|
-
[package_handler(File.extname(package).tr(
|
61
|
+
[package_handler(File.extname(package).tr(".", "")).add(content, package)].flatten.compact
|
62
62
|
end
|
63
63
|
|
64
64
|
# Remove package from the package list file
|
65
65
|
#
|
66
66
|
# @param package [String] name of package
|
67
67
|
# @param version [String] version of file
|
68
|
-
def remove_package(package, version=nil)
|
69
|
-
ext = File.extname(package).tr(
|
70
|
-
if
|
68
|
+
def remove_package(package, version = nil)
|
69
|
+
ext = File.extname(package).tr(".", "")
|
70
|
+
if ext.empty?
|
71
71
|
ext = %w(deb) # rpm)
|
72
72
|
else
|
73
73
|
ext = [ext]
|
@@ -87,9 +87,9 @@ module ReaperMan
|
|
87
87
|
# @return [Integer] number of bytes written
|
88
88
|
def write!
|
89
89
|
new_file = !File.exists?(path)
|
90
|
-
File.open(path, File::CREAT|File::RDWR) do |file|
|
90
|
+
File.open(path, File::CREAT | File::RDWR) do |file|
|
91
91
|
file.flock(File::LOCK_EX)
|
92
|
-
if
|
92
|
+
if !new_file && init_mtime != file.mtime
|
93
93
|
file.rewind
|
94
94
|
content.deep_merge!(
|
95
95
|
MultiJson.load(
|
@@ -118,13 +118,12 @@ module ReaperMan
|
|
118
118
|
@init_mtime = File.mtime(path)
|
119
119
|
content.deep_merge!(
|
120
120
|
MultiJson.load(
|
121
|
-
File.open(path,
|
121
|
+
File.open(path, "r") do |file|
|
122
122
|
file.flock(File::LOCK_SH)
|
123
123
|
file.read
|
124
124
|
end
|
125
125
|
)
|
126
126
|
)
|
127
127
|
end
|
128
|
-
|
129
128
|
end
|
130
129
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require
|
1
|
+
require "reaper-man"
|
2
2
|
|
3
3
|
module ReaperMan
|
4
4
|
class PackageList
|
@@ -20,11 +20,11 @@ module ReaperMan
|
|
20
20
|
attr_reader :package_bucket
|
21
21
|
|
22
22
|
# default package root prefix
|
23
|
-
DEFAULT_ROOT =
|
23
|
+
DEFAULT_ROOT = "pool"
|
24
24
|
# default namespace for packages
|
25
|
-
DEFAULT_BUCKET =
|
25
|
+
DEFAULT_BUCKET = "public"
|
26
26
|
# default architectures to define
|
27
|
-
DEFAULT_ALL_MAP = [
|
27
|
+
DEFAULT_ALL_MAP = ["amd64", "i386"]
|
28
28
|
|
29
29
|
# Create new instance
|
30
30
|
#
|
@@ -35,14 +35,14 @@ module ReaperMan
|
|
35
35
|
# @option args [String] :package_root
|
36
36
|
# @option args [String] :package_bucket
|
37
37
|
# @option args [Array<String>] :all_map
|
38
|
-
def initialize(args={})
|
38
|
+
def initialize(args = {})
|
39
39
|
@origin = args[:origin].to_s
|
40
40
|
@dist = args[:codename].to_s
|
41
41
|
@component = args[:component].to_s
|
42
42
|
@package_root = args.fetch(:package_root, DEFAULT_ROOT)
|
43
43
|
@package_bucket = args.fetch(:package_bucket, DEFAULT_BUCKET)
|
44
|
-
if
|
45
|
-
raise
|
44
|
+
if dist.empty? || component.empty?
|
45
|
+
raise "Both `codename` and `component` must contain valid values"
|
46
46
|
end
|
47
47
|
@all_map = args.fetch(:all_map, DEFAULT_ALL_MAP)
|
48
48
|
end
|
@@ -63,14 +63,14 @@ module ReaperMan
|
|
63
63
|
# @param conf [Hash] configuration hash
|
64
64
|
# @param package_name [String] name
|
65
65
|
# @param version [String]
|
66
|
-
def remove(hash, package_name, version, args={})
|
66
|
+
def remove(hash, package_name, version, args = {})
|
67
67
|
hash = hash.to_smash
|
68
68
|
arch = [args.fetch(:arch, all_map)].flatten.compact
|
69
69
|
deleted = false
|
70
70
|
arch.each do |arch_name|
|
71
71
|
arch_name = "binary-#{arch_name}"
|
72
|
-
if
|
73
|
-
if
|
72
|
+
if hash.get(:apt, origin, dist, :components, component, arch_name, package_name)
|
73
|
+
if version
|
74
74
|
deleted = hash[:apt][origin][dist][:components][component][arch_name][package_name].delete(version)
|
75
75
|
else
|
76
76
|
deleted = hash[:apt][origin][dist][:components][component][arch_name].delete(package_name)
|
@@ -86,7 +86,7 @@ module ReaperMan
|
|
86
86
|
# @return [Hash]
|
87
87
|
def extract_fields(package)
|
88
88
|
content = shellout("dpkg-deb -f '#{package}'")
|
89
|
-
Smash[content.stdout.scan(/([^\s][^:]+):\s+(([^\n]|\n\s)+)/).map{|a| a.slice(0,2)}]
|
89
|
+
Smash[content.stdout.scan(/([^\s][^:]+):\s+(([^\n]|\n\s)+)/).map { |a| a.slice(0, 2) }]
|
90
90
|
end
|
91
91
|
|
92
92
|
# Insert package information into package list
|
@@ -96,8 +96,8 @@ module ReaperMan
|
|
96
96
|
# @param package [String] path to package file
|
97
97
|
# @return [Array<String>] package paths within package list contents
|
98
98
|
def inject_package(hash, info, package)
|
99
|
-
arch = info[
|
100
|
-
arch = arch ==
|
99
|
+
arch = info["Architecture"]
|
100
|
+
arch = arch == "all" ? all_map : [arch]
|
101
101
|
arch.map do |arch|
|
102
102
|
package_file_name = File.join(
|
103
103
|
package_root, package_bucket, origin,
|
@@ -105,28 +105,27 @@ module ReaperMan
|
|
105
105
|
File.basename(package)
|
106
106
|
)
|
107
107
|
hash.deep_merge!(
|
108
|
-
|
108
|
+
"apt" => {
|
109
109
|
origin => {
|
110
110
|
dist => {
|
111
|
-
|
111
|
+
"components" => {
|
112
112
|
component => {
|
113
113
|
"binary-#{arch}" => {
|
114
|
-
info[
|
115
|
-
info[
|
116
|
-
|
117
|
-
|
118
|
-
)
|
119
|
-
}
|
114
|
+
info["Package"] => {
|
115
|
+
info["Version"] => info.merge!(
|
116
|
+
"Filename" => package_file_name,
|
117
|
+
"Size" => File.size(package),
|
118
|
+
),
|
119
|
+
},
|
120
120
|
},
|
121
|
-
"binary-i386" => {
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
}
|
121
|
+
"binary-i386" => {},
|
122
|
+
},
|
123
|
+
},
|
124
|
+
},
|
125
|
+
},
|
126
|
+
},
|
128
127
|
)
|
129
|
-
File.join(
|
128
|
+
File.join("apt", origin, package_file_name)
|
130
129
|
end
|
131
130
|
end
|
132
131
|
|
@@ -135,15 +134,14 @@ module ReaperMan
|
|
135
134
|
# @param package [String] path to package file
|
136
135
|
# @return [Hash] checksums
|
137
136
|
def generate_checksums(package)
|
138
|
-
File.open(package,
|
137
|
+
File.open(package, "r") do |pkg|
|
139
138
|
{
|
140
|
-
|
141
|
-
|
142
|
-
|
139
|
+
"MD5sum" => checksum(pkg.rewind && pkg, :md5),
|
140
|
+
"SHA1" => checksum(pkg.rewind && pkg, :sha1),
|
141
|
+
"SHA256" => checksum(pkg.rewind && pkg, :sha256),
|
143
142
|
}
|
144
143
|
end
|
145
144
|
end
|
146
|
-
|
147
145
|
end
|
148
146
|
end
|
149
147
|
end
|