vanagon 0.3.19 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vanagon/component.rb +3 -0
- data/lib/vanagon/component/dsl.rb +55 -8
- data/lib/vanagon/component/source.rb +23 -11
- data/lib/vanagon/component/source/http.rb +1 -1
- data/lib/vanagon/engine/pooler.rb +2 -2
- data/lib/vanagon/platform.rb +1 -8
- data/lib/vanagon/platform/deb.rb +48 -1
- data/lib/vanagon/platform/dsl.rb +17 -65
- data/lib/vanagon/platform/osx.rb +17 -4
- data/lib/vanagon/platform/rpm.rb +27 -12
- data/lib/vanagon/platform/rpm/aix.rb +28 -0
- data/lib/vanagon/platform/rpm/sles.rb +35 -0
- data/lib/vanagon/platform/solaris_10.rb +14 -4
- data/lib/vanagon/project.rb +60 -8
- data/lib/vanagon/project/dsl.rb +7 -1
- data/lib/vanagon/utilities.rb +8 -12
- data/spec/lib/vanagon/component/dsl_spec.rb +106 -6
- data/spec/lib/vanagon/engine/pooler_spec.rb +2 -0
- data/spec/lib/vanagon/platform/dsl_spec.rb +12 -16
- data/spec/lib/vanagon/platform/rpm/aix_spec.rb +29 -0
- data/spec/lib/vanagon/platform/rpm_spec.rb +35 -15
- data/templates/Makefile.erb +12 -6
- data/templates/deb/control.erb +1 -1
- data/templates/deb/docs.erb +2 -0
- data/templates/deb/postinst.erb +10 -1
- data/templates/deb/postrm.erb +10 -2
- data/templates/deb/preinst.erb +11 -0
- data/templates/deb/prerm.erb +10 -0
- data/templates/deb/rules.erb +2 -2
- data/templates/rpm/project.spec.erb +67 -11
- data/templates/solaris/11/p5m.erb +14 -0
- metadata +12 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e9188b407a2cea5a4ad1beaa844e0f18abaa5da
|
4
|
+
data.tar.gz: 2f867ac9b05096dd35ce45d571af099faf0acc87
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c174fd00eb54d11bc40446b627c4cfaedfa1930b2d6c5a7edeb2a08148ca8e68abb63ad1d1b390fe940a221f37423128e21fb305a7c6f5d192bfef3f1a2e7109
|
7
|
+
data.tar.gz: ffd5a859ee33018f5b1fbb7e7d587681290a9eee4271c1ec5020936b0d0dfa91c5441e77ad8d53b4179d603cf1e7e01b8a3f777cf59347c1fae33ac08000fcdd
|
data/lib/vanagon/component.rb
CHANGED
@@ -11,6 +11,7 @@ class Vanagon
|
|
11
11
|
attr_accessor :settings, :platform, :patches, :requires, :service, :options
|
12
12
|
attr_accessor :directories, :replaces, :provides, :cleanup_source, :environment
|
13
13
|
attr_accessor :sources, :preinstall_actions, :postinstall_actions
|
14
|
+
attr_accessor :preremove_actions, :postremove_actions
|
14
15
|
|
15
16
|
# Loads a given component from the configdir
|
16
17
|
#
|
@@ -58,6 +59,8 @@ class Vanagon
|
|
58
59
|
@sources = []
|
59
60
|
@preinstall_actions = []
|
60
61
|
@postinstall_actions = []
|
62
|
+
@preremove_actions = []
|
63
|
+
@postremove_actions = []
|
61
64
|
end
|
62
65
|
|
63
66
|
# Adds the given file to the list of files and returns @files.
|
@@ -232,6 +232,7 @@ class Vanagon
|
|
232
232
|
def link(source, target)
|
233
233
|
@component.install << "#{@component.platform.install} -d '#{File.dirname(target)}'"
|
234
234
|
@component.install << "ln -s '#{source}' '#{target}'"
|
235
|
+
@component.add_file Vanagon::Common::Pathname.file(target)
|
235
236
|
end
|
236
237
|
|
237
238
|
# Sets the version for the component
|
@@ -289,18 +290,64 @@ class Vanagon
|
|
289
290
|
@component.environment.merge!(env)
|
290
291
|
end
|
291
292
|
|
292
|
-
# Adds
|
293
|
+
# Adds action to run during the preinstall phase of packaging
|
293
294
|
#
|
294
|
-
# @param
|
295
|
-
|
296
|
-
|
295
|
+
# @param pkg_state [Array] the state in which the scripts should execute. Can be
|
296
|
+
# one or multiple of 'install' and 'upgrade'.
|
297
|
+
# @param scripts [Array] the Bourne shell compatible scriptlet(s) to execute
|
298
|
+
def add_preinstall_action(pkg_state, scripts)
|
299
|
+
pkg_state = Array(pkg_state)
|
300
|
+
scripts = Array(scripts)
|
301
|
+
|
302
|
+
if pkg_state.empty? || !(pkg_state - ["install", "upgrade"]).empty?
|
303
|
+
raise Vanagon::Error, "#{pkg_state} should be an array containing one or more of ['install', 'upgrade']"
|
304
|
+
end
|
305
|
+
@component.preinstall_actions << OpenStruct.new(:pkg_state => pkg_state, :scripts => scripts)
|
306
|
+
end
|
307
|
+
|
308
|
+
# Adds action to run during the postinstall phase of packaging
|
309
|
+
#
|
310
|
+
# @param pkg_state [Array] the state in which the scripts should execute. Can be
|
311
|
+
# one or multiple of 'install' and 'upgrade'.
|
312
|
+
# @param scripts [Array] the Bourne shell compatible scriptlet(s) to execute
|
313
|
+
def add_postinstall_action(pkg_state, scripts)
|
314
|
+
pkg_state = Array(pkg_state)
|
315
|
+
scripts = Array(scripts)
|
316
|
+
|
317
|
+
if pkg_state.empty? || !(pkg_state - ["install", "upgrade"]).empty?
|
318
|
+
raise Vanagon::Error, "#{pkg_state} should be an array containing one or more of ['install', 'upgrade']"
|
319
|
+
end
|
320
|
+
@component.postinstall_actions << OpenStruct.new(:pkg_state => pkg_state, :scripts => scripts)
|
297
321
|
end
|
298
322
|
|
299
|
-
# Adds
|
323
|
+
# Adds action to run during the preremoval phase of packaging
|
300
324
|
#
|
301
|
-
# @param
|
302
|
-
|
303
|
-
|
325
|
+
# @param pkg_state [Array] the state in which the scripts should execute. Can be
|
326
|
+
# one or multiple of 'removal' and 'upgrade'.
|
327
|
+
# @param scripts [Array] the Bourne shell compatible scriptlet(s) to execute
|
328
|
+
def add_preremove_action(pkg_state, scripts)
|
329
|
+
pkg_state = Array(pkg_state)
|
330
|
+
scripts = Array(scripts)
|
331
|
+
|
332
|
+
if pkg_state.empty? || !(pkg_state - ["upgrade", "removal"]).empty?
|
333
|
+
raise Vanagon::Error, "#{pkg_state} should be an array containing one or more of ['removal', 'upgrade']"
|
334
|
+
end
|
335
|
+
@component.preremove_actions << OpenStruct.new(:pkg_state => pkg_state, :scripts => scripts)
|
336
|
+
end
|
337
|
+
|
338
|
+
# Adds action to run during the postremoval phase of packaging
|
339
|
+
#
|
340
|
+
# @param pkg_state [Array] the state in which the scripts should execute. Can be
|
341
|
+
# one or multiple of 'removal' and 'upgrade'.
|
342
|
+
# @param scripts [Array] the Bourne shell compatible scriptlet(s) to execute
|
343
|
+
def add_postremove_action(pkg_state, scripts)
|
344
|
+
pkg_state = Array(pkg_state)
|
345
|
+
scripts = Array(scripts)
|
346
|
+
|
347
|
+
if pkg_state.empty? || !(pkg_state - ["upgrade", "removal"]).empty?
|
348
|
+
raise Vanagon::Error, "#{pkg_state} should be an array containing one or more of ['removal', 'upgrade']"
|
349
|
+
end
|
350
|
+
@component.postremove_actions << OpenStruct.new(:pkg_state => pkg_state, :scripts => scripts)
|
304
351
|
end
|
305
352
|
end
|
306
353
|
end
|
@@ -21,21 +21,33 @@ class Vanagon
|
|
21
21
|
|
22
22
|
def self.rewrite(url, protocol)
|
23
23
|
rule = @@rewrite_rule[protocol]
|
24
|
+
|
24
25
|
if rule
|
25
|
-
if rule.is_a?(Proc)
|
26
|
-
return rule
|
26
|
+
if rule.is_a?(Proc)
|
27
|
+
return proc_rewrite(rule, url)
|
27
28
|
elsif rule.is_a?(String)
|
28
|
-
|
29
|
-
if target_match
|
30
|
-
target = target_match[1]
|
31
|
-
return File.join(rule, target)
|
32
|
-
else
|
33
|
-
raise Vanagon::Error, "Unable to apply url rewrite to '#{url}', expected to find at least one '/' in the url."
|
34
|
-
end
|
35
|
-
else
|
29
|
+
return string_rewrite(rule, url)
|
36
30
|
end
|
31
|
+
end
|
32
|
+
|
33
|
+
return url
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.proc_rewrite(rule, url)
|
37
|
+
if rule.arity == 1
|
38
|
+
rule.call(url)
|
39
|
+
else
|
40
|
+
raise Vanagon::Error, "Unable to use provided rewrite rule. Expected Proc with one argument, Proc has #{rule.arity} arguments"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.string_rewrite(rule, url)
|
45
|
+
target_match = url.match(/.*\/([^\/]*)$/)
|
46
|
+
if target_match
|
47
|
+
target = target_match[1]
|
48
|
+
return File.join(rule, target)
|
37
49
|
else
|
38
|
-
|
50
|
+
raise Vanagon::Error, "Unable to apply url rewrite to '#{url}', expected to find at least one '/' in the url."
|
39
51
|
end
|
40
52
|
end
|
41
53
|
|
@@ -13,7 +13,7 @@ class Vanagon
|
|
13
13
|
ARCHIVE_EXTENSIONS = '.tar.gz', '.tgz'
|
14
14
|
|
15
15
|
# Extensions for files we aren't going to unpack during the build
|
16
|
-
NON_ARCHIVE_EXTENSIONS = '.gem', '.ru', '.txt', '.conf', '.ini', '.gpg', '.rb', '.sh', '.csh'
|
16
|
+
NON_ARCHIVE_EXTENSIONS = '.gem', '.ru', '.txt', '.conf', '.ini', '.gpg', '.rb', '.sh', '.csh', '.xml'
|
17
17
|
|
18
18
|
# Constructor for the Http source type
|
19
19
|
#
|
@@ -37,7 +37,7 @@ class Vanagon
|
|
37
37
|
'{"' + @platform.vmpooler_template + '":"1"}',
|
38
38
|
{ 'X-AUTH-TOKEN' => @token }
|
39
39
|
)
|
40
|
-
if response
|
40
|
+
if response["ok"]
|
41
41
|
@target = response[@platform.vmpooler_template]['hostname'] + '.' + response['domain']
|
42
42
|
Vanagon::Driver.logger.info "Reserving #{@target} (#{@platform.vmpooler_template}) [#{@token ? 'token used' : 'no token used'}]"
|
43
43
|
|
@@ -49,7 +49,7 @@ class Vanagon
|
|
49
49
|
}
|
50
50
|
}
|
51
51
|
|
52
|
-
|
52
|
+
Vanagon::Utilities.http_request(
|
53
53
|
"#{@pooler}/vm/#{response[@platform.vmpooler_template]['hostname']}",
|
54
54
|
'PUT',
|
55
55
|
tags.to_json,
|
data/lib/vanagon/platform.rb
CHANGED
@@ -146,7 +146,7 @@ class Vanagon
|
|
146
146
|
# @return [true, false] true if it is a redhat variety or uses rpm
|
147
147
|
# under the hood, false otherwise
|
148
148
|
def is_rpm?
|
149
|
-
return !!@name.match(/^(aix|cisco-wrlinux|el|eos|fedora|huaweios|
|
149
|
+
return !!@name.match(/^(aix|cisco-wrlinux|el|eos|fedora|huaweios|sles)-.*$/)
|
150
150
|
end
|
151
151
|
|
152
152
|
# Utility matcher to determine is the platform is an enterprise linux variety
|
@@ -191,13 +191,6 @@ class Vanagon
|
|
191
191
|
return !!@name.match(/^huaweios-.*$/)
|
192
192
|
end
|
193
193
|
|
194
|
-
# Utility matcher to determine is the platform is an nxos variety
|
195
|
-
#
|
196
|
-
# @return [true, false] true if it is an nxos variety, false otherwise
|
197
|
-
def is_nxos?
|
198
|
-
return !!@name.match(/^nxos-.*$/)
|
199
|
-
end
|
200
|
-
|
201
194
|
# Utility matcher to determine is the platform is a cisco-wrlinux
|
202
195
|
# variety
|
203
196
|
#
|
data/lib/vanagon/platform/deb.rb
CHANGED
@@ -28,7 +28,7 @@ class Vanagon
|
|
28
28
|
FileUtils.mkdir_p(deb_dir)
|
29
29
|
|
30
30
|
# Lots of templates here
|
31
|
-
["changelog", "conffiles", "control", "docs", "dirs", "install", "postinst", "postrm", "prerm", "rules"].each do |deb_file|
|
31
|
+
["changelog", "conffiles", "control", "docs", "dirs", "install", "preinst", "postinst", "postrm", "prerm", "rules"].each do |deb_file|
|
32
32
|
erb_file(File.join(VANAGON_ROOT, "templates/deb/#{deb_file}.erb"), File.join(deb_dir, deb_file), false, { :binding => binding })
|
33
33
|
end
|
34
34
|
|
@@ -54,6 +54,53 @@ class Vanagon
|
|
54
54
|
File.join("deb", @codename, target_repo)
|
55
55
|
end
|
56
56
|
|
57
|
+
# Returns the string to add a target repo to the platforms' provisioning
|
58
|
+
#
|
59
|
+
# @param definition [URI] A URI to a deb or list file
|
60
|
+
# @return [String] The command to add the repo target to the system
|
61
|
+
def add_repo_target(definition)
|
62
|
+
if File.extname(definition.path) == '.deb'
|
63
|
+
# repo definition is an deb (like puppetlabs-release)
|
64
|
+
"curl -o local.deb '#{definition}' && dpkg -i local.deb; rm -f local.deb"
|
65
|
+
else
|
66
|
+
reponame = "#{SecureRandom.hex}-#{File.basename(definition.path)}"
|
67
|
+
reponame = "#{reponame}.list" if File.extname(reponame) != '.list'
|
68
|
+
"curl -o '/etc/apt/sources.list.d/#{reponame}' '#{definition}'"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Returns the string to add a gpg key to the platforms' provisioning
|
73
|
+
#
|
74
|
+
# @param gpg_key [URI] A URI to the gpg key
|
75
|
+
# @return [String] The command to add the gpg key to the system
|
76
|
+
def add_gpg_key(gpg_key)
|
77
|
+
gpgname = "#{SecureRandom.hex}-#{File.basename(gpg_key.path)}"
|
78
|
+
gpgname = "#{gpgname}.gpg" if gpgname !~ /\.gpg$/
|
79
|
+
"curl -o '/etc/apt/trusted.gpg.d/#{gpgname}' '#{gpg_key}'"
|
80
|
+
end
|
81
|
+
|
82
|
+
# Returns the commands to add a given repo target and optionally a gpg key to the build system
|
83
|
+
#
|
84
|
+
# @param definition [String] URI to the repo (.deb or .list)
|
85
|
+
# @param gpg_key [String, nil] URI to a gpg key for the repo
|
86
|
+
def add_repository(definition, gpg_key = nil)
|
87
|
+
# i.e., definition = http://builds.delivery.puppetlabs.net/puppet-agent/0.2.1/repo_configs/deb/pl-puppet-agent-0.2.1-wheezy.list
|
88
|
+
# parse the definition and gpg_key if set to ensure they are both valid URIs
|
89
|
+
definition = URI.parse(definition)
|
90
|
+
gpg_key = URI.parse(gpg_key) if gpg_key
|
91
|
+
provisioning = ["apt-get -qq update && apt-get -qq install curl"]
|
92
|
+
|
93
|
+
if definition.scheme =~ /^(http|ftp)/
|
94
|
+
provisioning << add_repo_target(definition)
|
95
|
+
end
|
96
|
+
|
97
|
+
if gpg_key
|
98
|
+
provisioning << add_gpg_key(gpg_key)
|
99
|
+
end
|
100
|
+
|
101
|
+
provisioning << "apt-get -qq update"
|
102
|
+
end
|
103
|
+
|
57
104
|
# Constructor. Sets up some defaults for the debian platform and calls the parent constructor
|
58
105
|
#
|
59
106
|
# @param name [String] name of the platform
|
data/lib/vanagon/platform/dsl.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'vanagon/platform/deb'
|
2
2
|
require 'vanagon/platform/rpm'
|
3
|
+
require 'vanagon/platform/rpm/aix'
|
4
|
+
require 'vanagon/platform/rpm/sles'
|
3
5
|
require 'vanagon/platform/rpm/wrl'
|
4
6
|
require 'vanagon/platform/swix'
|
5
7
|
require 'vanagon/platform/osx'
|
@@ -25,8 +27,12 @@ class Vanagon
|
|
25
27
|
# @param block [Proc] DSL definition of the platform to call
|
26
28
|
def platform(name, &block)
|
27
29
|
@platform = case name
|
28
|
-
when /^
|
30
|
+
when /^aix-/
|
31
|
+
Vanagon::Platform::RPM::AIX.new(@name)
|
32
|
+
when /^(cisco-wrlinux|el|fedora)-/
|
29
33
|
Vanagon::Platform::RPM.new(@name)
|
34
|
+
when /^sles-/
|
35
|
+
Vanagon::Platform::RPM::SLES.new(@name)
|
30
36
|
when /^huaweios-/
|
31
37
|
Vanagon::Platform::RPM::WRL.new(@name)
|
32
38
|
when /^(cumulus|debian|ubuntu)-/
|
@@ -118,6 +124,7 @@ class Vanagon
|
|
118
124
|
# @param command [String] Command to enable the target machine to build packages for the platform
|
119
125
|
def provision_with(command)
|
120
126
|
@platform.provisioning << command
|
127
|
+
@platform.provisioning.flatten!
|
121
128
|
end
|
122
129
|
|
123
130
|
# Set the command to install any needed build dependencies for the target machine
|
@@ -198,83 +205,28 @@ class Vanagon
|
|
198
205
|
#
|
199
206
|
# @param definition [String] the repo setup file, must be a valid uri, fetched with curl
|
200
207
|
# @param gpg_key [String] optional gpg key to be fetched via curl and installed
|
208
|
+
# @deprecated Please use the add_build_repository DSL method instead. apt_repo will be removed in a future vanagon release.
|
201
209
|
def apt_repo(definition, gpg_key = nil)
|
202
|
-
|
203
|
-
|
204
|
-
definition = URI.parse definition
|
205
|
-
gpg_key = URI.parse gpg_key if gpg_key
|
206
|
-
|
207
|
-
self.provision_with "apt-get -qq update && apt-get -qq install curl"
|
208
|
-
if definition.scheme =~ /^(http|ftp)/
|
209
|
-
if File.extname(definition.path) == '.deb'
|
210
|
-
# repo definition is an deb (like puppetlabs-release)
|
211
|
-
self.provision_with "curl -o local.deb '#{definition}' && dpkg -i local.deb; rm -f local.deb"
|
212
|
-
else
|
213
|
-
reponame = "#{SecureRandom.hex}-#{File.basename(definition.path)}"
|
214
|
-
reponame = "#{reponame}.list" if File.extname(reponame) != '.list'
|
215
|
-
self.provision_with "curl -o '/etc/apt/sources.list.d/#{reponame}' '#{definition}'"
|
216
|
-
end
|
217
|
-
end
|
218
|
-
|
219
|
-
if gpg_key
|
220
|
-
gpgname = "#{SecureRandom.hex}-#{File.basename(gpg_key.path)}"
|
221
|
-
gpgname = "#{gpgname}.gpg" if gpgname !~ /\.gpg$/
|
222
|
-
self.provision_with "curl -o '/etc/apt/trusted.gpg.d/#{gpgname}' '#{gpg_key}'"
|
223
|
-
end
|
224
|
-
|
225
|
-
self.provision_with "apt-get -qq update"
|
210
|
+
warn "Please use the add_build_repository DSL method instead. apt_repo will be removed in a future vanagon release."
|
211
|
+
self.add_build_repository(definition, gpg_key)
|
226
212
|
end
|
227
213
|
|
228
214
|
# Helper to setup a yum repository on a target system
|
229
215
|
#
|
230
216
|
# @param definition [String] the repo setup URI or RPM file
|
217
|
+
# @deprecated Please use the add_build_repository DSL method instead. yum_repo will be removed in a future vanagon release.
|
231
218
|
def yum_repo(definition)
|
232
|
-
|
233
|
-
|
234
|
-
self.provision_with "rpm -q curl > /dev/null || yum -y install curl"
|
235
|
-
if definition.scheme =~ /^(http|ftp)/
|
236
|
-
if File.extname(definition.path) == '.rpm'
|
237
|
-
# repo definition is an rpm (like puppetlabs-release)
|
238
|
-
if @platform.os_version.to_i < 6
|
239
|
-
# This can likely be done with just rpm itself (minus curl) however
|
240
|
-
# with a http_proxy curl has many more options avavailable for
|
241
|
-
# usage than rpm raw does. So for the most compatibility, we have
|
242
|
-
# chosen curl.
|
243
|
-
self.provision_with "curl -o local.rpm '#{definition}'; rpm -Uvh local.rpm; rm -f local.rpm"
|
244
|
-
else
|
245
|
-
self.provision_with "yum localinstall -y '#{definition}'"
|
246
|
-
end
|
247
|
-
else
|
248
|
-
reponame = "#{SecureRandom.hex}-#{File.basename(definition.path)}"
|
249
|
-
reponame = "#{reponame}.repo" if File.extname(reponame) != '.repo'
|
250
|
-
if @platform.is_nxos? or @platform.is_cisco_wrlinux?
|
251
|
-
self.provision_with "curl -o '/etc/yum/repos.d/#{reponame}' '#{definition}'"
|
252
|
-
else
|
253
|
-
self.provision_with "curl -o '/etc/yum.repos.d/#{reponame}' '#{definition}'"
|
254
|
-
end
|
255
|
-
end
|
256
|
-
end
|
219
|
+
warn "Please use the add_build_repository DSL method instead. yum_repo will be removed in a future vanagon release."
|
220
|
+
self.add_build_repository(definition)
|
257
221
|
end
|
258
222
|
|
259
223
|
# Helper to setup a zypper repository on a target system
|
260
224
|
#
|
261
225
|
# @param definition [String] the repo setup URI or RPM file
|
226
|
+
# @deprecated Please use the add_build_repository DSL method instead. zypper_repo will be removed in a future vanagon release.
|
262
227
|
def zypper_repo(definition)
|
263
|
-
|
264
|
-
|
265
|
-
flag = 'sa'
|
266
|
-
else
|
267
|
-
flag = 'ar'
|
268
|
-
end
|
269
|
-
self.provision_with "yes | zypper -n --no-gpg-checks install curl"
|
270
|
-
if definition.scheme =~ /^(http|ftp)/
|
271
|
-
if File.extname(definition.path) == '.rpm'
|
272
|
-
# repo definition is an rpm (like puppetlabs-release)
|
273
|
-
self.provision_with "curl -o local.rpm '#{definition}'; rpm -Uvh local.rpm; rm -f local.rpm"
|
274
|
-
else
|
275
|
-
self.provision_with "yes | zypper -n --no-gpg-checks #{flag} -t YUM --repo '#{definition}'"
|
276
|
-
end
|
277
|
-
end
|
228
|
+
warn "Please use the add_build_repository DSL method instead. zypper_repo will be removed in a future vanagon release."
|
229
|
+
self.add_build_repository(definition)
|
278
230
|
end
|
279
231
|
|
280
232
|
# Generic adder for build repositories
|
data/lib/vanagon/platform/osx.rb
CHANGED
@@ -7,6 +7,21 @@ class Vanagon
|
|
7
7
|
# @return [Array] list of commands required to build a osx package for the given project from a tarball
|
8
8
|
def generate_package(project)
|
9
9
|
target_dir = project.repo ? output_dir(project.repo) : output_dir
|
10
|
+
|
11
|
+
# Here we maintain backward compatibility with older vanagon versions
|
12
|
+
# that did this by default. This shim should get removed at some point
|
13
|
+
# in favor of just letting the makefile deliver the bill-of-materials
|
14
|
+
# to the correct directory. This shouldn't be required at all then.
|
15
|
+
if project.bill_of_materials.nil?
|
16
|
+
bom_install = [# Move bill-of-materials into a docdir
|
17
|
+
"mkdir -p $(tempdir)/osx/build/root/#{project.name}-#{project.version}/usr/local/share/doc/#{project.name}",
|
18
|
+
"mv $(tempdir)/osx/build/root/#{project.name}-#{project.version}/bill-of-materials $(tempdir)/osx/build/root/#{project.name}-#{project.version}/usr/local/share/doc/#{project.name}/bill-of-materials",]
|
19
|
+
|
20
|
+
else
|
21
|
+
bom_install = []
|
22
|
+
end
|
23
|
+
|
24
|
+
|
10
25
|
# Setup build directories
|
11
26
|
["bash -c 'mkdir -p $(tempdir)/osx/build/{dmg,pkg,scripts,resources,root,payload,plugins}'",
|
12
27
|
"mkdir -p $(tempdir)/osx/build/root/#{project.name}-#{project.version}",
|
@@ -17,9 +32,7 @@ class Vanagon
|
|
17
32
|
# Unpack the project
|
18
33
|
"gunzip -c #{project.name}-#{project.version}.tar.gz | '#{@tar}' -C '$(tempdir)/osx/build/root/#{project.name}-#{project.version}' --strip-components 1 -xf -",
|
19
34
|
|
20
|
-
|
21
|
-
"mkdir -p $(tempdir)/osx/build/root/#{project.name}-#{project.version}/usr/local/share/doc/#{project.name}",
|
22
|
-
"mv $(tempdir)/osx/build/root/#{project.name}-#{project.version}/bill-of-materials $(tempdir)/osx/build/root/#{project.name}-#{project.version}/usr/local/share/doc/#{project.name}/bill-of-materials",
|
35
|
+
bom_install,
|
23
36
|
|
24
37
|
# Package the project
|
25
38
|
"(cd $(tempdir)/osx/build/; #{@pkgbuild} --root root/#{project.name}-#{project.version} \
|
@@ -39,7 +52,7 @@ class Vanagon
|
|
39
52
|
"(cd $(tempdir)/osx/build/; #{@hdiutil} create -volname #{project.name}-#{project.version} \
|
40
53
|
-srcfolder pkg/ dmg/#{project.package_name})",
|
41
54
|
"mkdir -p output/#{target_dir}",
|
42
|
-
"cp $(tempdir)/osx/build/dmg/#{project.package_name} ./output/#{target_dir}"]
|
55
|
+
"cp $(tempdir)/osx/build/dmg/#{project.package_name} ./output/#{target_dir}"].flatten.compact
|
43
56
|
end
|
44
57
|
|
45
58
|
# Method to generate the files required to build a osx package for the project
|
data/lib/vanagon/platform/rpm.rb
CHANGED
@@ -48,10 +48,29 @@ class Vanagon
|
|
48
48
|
defines = %(--define '_topdir $(tempdir)/rpmbuild' )
|
49
49
|
# RPM doesn't allow dashes in the os_name. This was added to
|
50
50
|
# convert cisco-wrlinux to cisco_wrlinux
|
51
|
-
|
52
|
-
|
51
|
+
defines << %(--define 'dist .#{@os_name.gsub('-', '_')}#{@os_version}' )
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_repository(definition)
|
55
|
+
definition = URI.parse(definition)
|
56
|
+
|
57
|
+
commands = ["rpm -q curl > /dev/null || yum -y install curl"]
|
58
|
+
if definition.scheme =~ /^(http|ftp)/
|
59
|
+
if File.extname(definition.path) == '.rpm'
|
60
|
+
# repo definition is an rpm (like puppetlabs-release)
|
61
|
+
commands << "curl -o local.rpm '#{definition}'; rpm -Uvh local.rpm; rm -f local.rpm"
|
62
|
+
else
|
63
|
+
reponame = "#{SecureRandom.hex}-#{File.basename(definition.path)}"
|
64
|
+
reponame = "#{reponame}.repo" if File.extname(reponame) != '.repo'
|
65
|
+
if is_cisco_wrlinux?
|
66
|
+
commands << "curl -o '/etc/yum/repos.d/#{reponame}' '#{definition}'"
|
67
|
+
else
|
68
|
+
commands << "curl -o '/etc/yum.repos.d/#{reponame}' '#{definition}'"
|
69
|
+
end
|
70
|
+
end
|
53
71
|
end
|
54
|
-
|
72
|
+
|
73
|
+
commands
|
55
74
|
end
|
56
75
|
|
57
76
|
# Constructor. Sets up some defaults for the rpm platform and calls the parent constructor
|
@@ -60,15 +79,11 @@ class Vanagon
|
|
60
79
|
# @return [Vanagon::Platform::RPM] the rpm derived platform with the given name
|
61
80
|
def initialize(name)
|
62
81
|
@name = name
|
63
|
-
@make
|
64
|
-
@tar
|
65
|
-
@patch
|
66
|
-
@num_cores
|
67
|
-
|
68
|
-
@num_cores = "lsdev -Cc processor |wc -l"
|
69
|
-
@install = "/opt/freeware/bin/install"
|
70
|
-
end
|
71
|
-
@rpmbuild = "/usr/bin/rpmbuild"
|
82
|
+
@make ||= "/usr/bin/make"
|
83
|
+
@tar ||= "tar"
|
84
|
+
@patch ||= "/usr/bin/patch"
|
85
|
+
@num_cores ||= "/bin/grep -c 'processor' /proc/cpuinfo"
|
86
|
+
@rpmbuild ||= "/usr/bin/rpmbuild"
|
72
87
|
super(name)
|
73
88
|
end
|
74
89
|
end
|