rconf 1.0.12 → 1.0.13
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.
- data/lib/rconf/configurator.rb +7 -1
- data/lib/rconf/configurators/ruby_configurator.rb +150 -15
- data/lib/rconf/overrides_language.rb +18 -16
- data/lib/rconf/version.rb +1 -1
- data/rconf.rconf +3 -4
- metadata +17 -5
- checksums.yaml +0 -15
data/lib/rconf/configurator.rb
CHANGED
@@ -146,7 +146,13 @@ module RightConf
|
|
146
146
|
must_configure = (Profile.force_check? || sha != sig) && !check
|
147
147
|
end
|
148
148
|
Platform.dispatch(*args) { :run } if must_configure
|
149
|
-
|
149
|
+
|
150
|
+
# clear any leftover signature in case of aborting to prevent rconf
|
151
|
+
# doing nothing on restart.
|
152
|
+
#
|
153
|
+
# FIX: there seems to be an issue when a new ruby version is installed
|
154
|
+
# and rconf aborts and has to be restarted (on Ubuntu?)
|
155
|
+
Profile.set_configurator_signature(key, aborting ? nil : sig)
|
150
156
|
true
|
151
157
|
end
|
152
158
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2011-
|
1
|
+
# Copyright (C) 2011-2013 RightScale, Inc, All Rights Reserved Worldwide.
|
2
2
|
#
|
3
3
|
# THIS PROGRAM IS CONFIDENTIAL AND PROPRIETARY TO RIGHTSCALE
|
4
4
|
# AND CONSTITUTES A VALUABLE TRADE SECRET. Any unauthorized use,
|
@@ -9,19 +9,25 @@
|
|
9
9
|
# License Agreement between RightScale.com, Inc. and
|
10
10
|
# the licensee
|
11
11
|
|
12
|
+
require 'fileutils'
|
13
|
+
require 'tmpdir'
|
14
|
+
|
12
15
|
module RightConf
|
13
16
|
|
14
17
|
# Specify rbenv and ruby-build git revision for installation
|
15
18
|
RBENV_GIT_REPO = 'git://github.com/sstephenson/rbenv.git'
|
16
|
-
RBENV_GIT_REVISION = "
|
19
|
+
RBENV_GIT_REVISION = "605e691bff4863e5014ba5ad750ad65e3278aea3"
|
17
20
|
|
18
21
|
RUBYBUILD_GIT_REPO = 'git://github.com/sstephenson/ruby-build.git'
|
19
|
-
RUBY_BUILD_GIT_REVISION = "
|
22
|
+
RUBY_BUILD_GIT_REVISION = "57cb1e98c6ec695c130e369629d02417ccc1a51a"
|
20
23
|
|
21
24
|
# Local installation target folders
|
22
25
|
RBENV_INSTALL_TARGET = "#{ENV['HOME']}/.rbenv"
|
23
26
|
RUBYBUILD_TARGET = "#{RBENV_INSTALL_TARGET}/plugins/ruby-build"
|
27
|
+
RUBYBUILD_DEFINITIONS_PATH = ::File.join(RUBYBUILD_TARGET, 'share', 'ruby-build')
|
24
28
|
|
29
|
+
# rubygems
|
30
|
+
RUBYGEMS_URI_PREFIX = 'http://production.cf.rubygems.org/rubygems'
|
25
31
|
|
26
32
|
class RubyConfigurator
|
27
33
|
|
@@ -32,7 +38,8 @@ module RightConf
|
|
32
38
|
description "Installs ruby interpreter and rubygems.\n" +
|
33
39
|
'Installs and uses rbenv on supported (i.e. non-Windows) platforms'
|
34
40
|
|
35
|
-
setting 'version',
|
41
|
+
setting 'version', 'Ruby version using rbenv notation (see "rbenv versions")', :required => true
|
42
|
+
setting 'rubygems', 'RubyGems version using semantic versioning'
|
36
43
|
|
37
44
|
updater lambda { update_rbenv_installation }
|
38
45
|
|
@@ -70,7 +77,8 @@ module RightConf
|
|
70
77
|
check_rbenv
|
71
78
|
return true if aborting
|
72
79
|
check_ruby
|
73
|
-
Command.set_ruby(
|
80
|
+
Command.set_ruby(ruby_with_rubygems_version)
|
81
|
+
check_rubygems
|
74
82
|
true
|
75
83
|
end
|
76
84
|
alias :run_darwin :run_linux
|
@@ -90,12 +98,25 @@ module RightConf
|
|
90
98
|
@ruby_version ||= version.start_with?('ruby-') ? version[5..-1] : version
|
91
99
|
end
|
92
100
|
|
101
|
+
# appends a rubygems version specifier only when necessary.
|
102
|
+
def ruby_with_rubygems_version
|
103
|
+
@ruby_with_rubygems_version ||= (rubygems ? "#{ruby_version}_rubygems-#{rubygems}" : ruby_version)
|
104
|
+
end
|
105
|
+
|
106
|
+
def ruby_bin_path_for(version)
|
107
|
+
::File.join(RBENV_INSTALL_TARGET, 'versions', version, 'bin', 'ruby')
|
108
|
+
end
|
109
|
+
|
110
|
+
def gem_bin_path_for(version)
|
111
|
+
::File.join(RBENV_INSTALL_TARGET, 'versions', version, 'bin', 'gem')
|
112
|
+
end
|
113
|
+
|
93
114
|
# Check whether rbenv and ruby-build are installed and installs it/them if not
|
94
115
|
#
|
95
116
|
# === Return
|
96
117
|
# true:: Always return true
|
97
118
|
def check_rbenv
|
98
|
-
rbenv_present = File.exist?(File.join(
|
119
|
+
rbenv_present = File.exist?(File.join(RBENV_INSTALL_TARGET, 'bin', 'rbenv'))
|
99
120
|
|
100
121
|
res = Command.execute('rbenv')
|
101
122
|
rbenv_in_path = res.success?
|
@@ -127,10 +148,10 @@ module RightConf
|
|
127
148
|
# === Return
|
128
149
|
# true:: Always return true
|
129
150
|
def self.add_custom_ree_definition
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
151
|
+
puts "Adding custom ruby enterprise edition definition to ruby-build ..."
|
152
|
+
src_patched_ree = ::File.expand_path('../../../patches/ree-1.8.7-2012.02-rs-custom', __FILE__)
|
153
|
+
dst_patched_ree = ::File.join(RUBYBUILD_DEFINITIONS_PATH, 'ree-1.8.7-2012.02')
|
154
|
+
::FileUtils.cp(src_patched_ree, dst_patched_ree)
|
134
155
|
true
|
135
156
|
end
|
136
157
|
|
@@ -143,14 +164,14 @@ module RightConf
|
|
143
164
|
puts "Updating rbenv ..."
|
144
165
|
if File.directory?("#{RBENV_INSTALL_TARGET}/.git")
|
145
166
|
# Perform the pull only if rbenv has been installed by using a git pull (and not through a package manager)
|
146
|
-
system("cd #{RBENV_INSTALL_TARGET}; git fetch -q; git checkout -q #{RBENV_GIT_REVISION}")
|
167
|
+
system("cd #{RBENV_INSTALL_TARGET}; git fetch -q; git checkout -f -q #{RBENV_GIT_REVISION}")
|
147
168
|
end
|
148
169
|
|
149
170
|
puts "Updating ruby-build ..."
|
150
171
|
if File.directory?("#{RUBYBUILD_TARGET}/.git")
|
151
172
|
# Perform the pull only if ruby-build has been installed by using a git pull (and not through a package manager)
|
152
173
|
# Before checking out the new branch, reset the repository to avoid conflicts
|
153
|
-
system("cd #{RUBYBUILD_TARGET}; git reset -q --hard; git fetch -q; git checkout -q #{RUBY_BUILD_GIT_REVISION}")
|
174
|
+
system("cd #{RUBYBUILD_TARGET}; git reset -q --hard; git fetch -q; git checkout -f -q #{RUBY_BUILD_GIT_REVISION}")
|
154
175
|
|
155
176
|
# Add our ree definition again because the repository has been reset
|
156
177
|
RubyConfigurator.add_custom_ree_definition
|
@@ -205,9 +226,57 @@ module RightConf
|
|
205
226
|
# === Return
|
206
227
|
# true:: Always return true
|
207
228
|
def check_ruby
|
208
|
-
|
209
|
-
|
210
|
-
|
229
|
+
if Command.execute('rbenv', 'local', ruby_with_rubygems_version).success?
|
230
|
+
# always (re)install latest rconf gem because switched-to ruby may exist
|
231
|
+
# but not have rconf.
|
232
|
+
install_rconf(ruby_with_rubygems_version)
|
233
|
+
else
|
234
|
+
report_check("Installing ruby #{ruby_with_rubygems_version} (this will take a while, please be patient)")
|
235
|
+
|
236
|
+
# create a ruby+rubygems definition file in order to isolate any
|
237
|
+
# differences in rubygems versions between projects. ideally only a
|
238
|
+
# single rubygems version will be specified for use with a given ruby
|
239
|
+
# platform version.
|
240
|
+
#
|
241
|
+
# note that copying/renaming an existing installed ruby directory does
|
242
|
+
# not work as expected because the installed files contain shebangs that
|
243
|
+
# refer back to the original installed directory.
|
244
|
+
if ruby_version != ruby_with_rubygems_version
|
245
|
+
# ruby+rubygems definition may already exist because it was previously
|
246
|
+
# created here, checked into source control, etc.
|
247
|
+
dst_def_path = ::File.join(RUBYBUILD_DEFINITIONS_PATH, ruby_with_rubygems_version)
|
248
|
+
unless ::File.file?(dst_def_path)
|
249
|
+
src_def_path = ::File.join(RUBYBUILD_DEFINITIONS_PATH, ruby_version)
|
250
|
+
if ::File.file?(src_def_path)
|
251
|
+
# existing ruby platform definition may include a specifier for
|
252
|
+
# the requested rubygems version or some other version but not all
|
253
|
+
# definitions will have this specifier. in any case, we need to
|
254
|
+
# run and then restart rconf and maintain state so we need to
|
255
|
+
# create a custom ruby platform definition.
|
256
|
+
#
|
257
|
+
# remove any existing rubygems specifier.
|
258
|
+
src_def_text = ::File.read(src_def_path)
|
259
|
+
any_rubygems_regex = /^install_package\s+"rubygems\-.*$/
|
260
|
+
dst_def_text = src_def_text.gsub(any_rubygems_regex, '').gsub("\n\n", "\n").strip
|
261
|
+
|
262
|
+
# append full rubygems specifier to definition to make
|
263
|
+
# rbenv install do the work of installing correct rubygems version.
|
264
|
+
rubygems_basename = "rubygems-#{rubygems}"
|
265
|
+
rubygems_specifier_prefix = "install_package #{rubygems_basename.inspect}"
|
266
|
+
rubygems_filename = "#{rubygems_basename}.tgz"
|
267
|
+
rubygems_tarball_url = ::File.join(RUBYGEMS_URI_PREFIX, rubygems_filename)
|
268
|
+
rubygems_specifier_full = "#{rubygems_specifier_prefix} #{rubygems_tarball_url.inspect} ruby"
|
269
|
+
dst_def_text += "\n#{rubygems_specifier_full}"
|
270
|
+
|
271
|
+
# write custom ruby platform definition.
|
272
|
+
::File.open(dst_def_path, 'w') { |f| f.write(dst_def_text) }
|
273
|
+
else
|
274
|
+
post_note "Requested ruby version definition not found: #{ruby_version}"
|
275
|
+
aborting(true)
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
Platform.dispatch(ruby_with_rubygems_version) { :install_ruby }
|
211
280
|
end
|
212
281
|
|
213
282
|
which = Command.execute('which', 'ruby').output.strip
|
@@ -216,6 +285,13 @@ module RightConf
|
|
216
285
|
aborting(true)
|
217
286
|
end
|
218
287
|
|
288
|
+
# if currenly executing ruby is not our selected ruby then we must abort
|
289
|
+
# and run rconf again or else bundler will install gems to wrong directory.
|
290
|
+
which = Command.execute('rbenv', 'which', 'ruby').output.strip
|
291
|
+
if which != ruby_bin_path_for(ruby_with_rubygems_version)
|
292
|
+
post_note "rconf selected ruby #{ruby_with_rubygems_version} and needs to be restarted so the right ruby tools get activated\nPlease run 'rconf' again."
|
293
|
+
aborting(true)
|
294
|
+
end
|
219
295
|
true
|
220
296
|
end
|
221
297
|
|
@@ -232,11 +308,27 @@ module RightConf
|
|
232
308
|
# Can't abort on failure rbenv install seems to exist with a non zero error code even when successful :(
|
233
309
|
Command.execute('rbenv', 'install', ruby)
|
234
310
|
report_success
|
311
|
+
abort_message = <<EOF
|
312
|
+
Failed to select installed ruby or else installation failed.
|
313
|
+
Try running 'rconf -u' to update rbenv to latest known ruby definitions (for REE, etc.)
|
314
|
+
Run 'rbenv install --list' to see current list of available rubies.
|
315
|
+
EOF
|
316
|
+
Command.execute('rbenv', 'local', ruby, :abort_on_failure => abort_message.chomp)
|
317
|
+
install_rconf(ruby)
|
235
318
|
post_note "rconf installed ruby #{ruby} and needs to be restarted so the right ruby tools get activated\nPlease run 'rconf' again."
|
236
319
|
aborting(true)
|
237
320
|
true
|
238
321
|
end
|
239
322
|
|
323
|
+
# gem install the latest greatest rconf before leaving to avoid confusion
|
324
|
+
# when user tries and fails to restart rconf as indicated. assumes some
|
325
|
+
# version of rubygems is provided by every ruby install.
|
326
|
+
def install_rconf(ruby_selector)
|
327
|
+
report_check("Installing latest rconf gem into selected ruby '#{ruby_selector}'")
|
328
|
+
Command.execute(gem_bin_path_for(ruby_selector), 'install', 'rconf', '--no-rdoc', '--no-ri', :abort_on_failure => "Failed to install rconf gem in selected ruby")
|
329
|
+
report_success
|
330
|
+
end
|
331
|
+
|
240
332
|
# Install given ruby version using rbenv
|
241
333
|
# On Lion, need to setup CC env var before running rbenv install
|
242
334
|
#
|
@@ -326,6 +418,49 @@ module RightConf
|
|
326
418
|
true
|
327
419
|
end
|
328
420
|
|
421
|
+
# check if rubygems is installed and has the expected version or else kick
|
422
|
+
# off installation when required.
|
423
|
+
def check_rubygems
|
424
|
+
return true unless rubygems
|
425
|
+
report_check("Checking for rubygems #{rubygems}")
|
426
|
+
gem_bin_path = gem_bin_path_for(ruby_with_rubygems_version)
|
427
|
+
result = Command.execute(gem_bin_path, '-v', :abort_on_failure => nil)
|
428
|
+
current_rubygems = result.success? ? result.output.strip : ''
|
429
|
+
if current_rubygems == rubygems
|
430
|
+
report_success
|
431
|
+
else
|
432
|
+
install_rubygems(rubygems)
|
433
|
+
result = Command.execute(gem_bin_path, '-v', :abort_on_failure => nil)
|
434
|
+
current_rubygems = result.success? ? result.output.strip : ''
|
435
|
+
if current_rubygems == rubygems
|
436
|
+
report_success
|
437
|
+
else
|
438
|
+
post_note "Failed to update RubyGems to v#{rubygems}:\n#{result.output.strip}"
|
439
|
+
report_failure
|
440
|
+
end
|
441
|
+
end
|
442
|
+
true
|
443
|
+
end
|
444
|
+
|
445
|
+
# installs, upgrades, downgrades, or reinstalls rubygems to specified
|
446
|
+
# version by downloading source tarball and executing 'setup.rb'.
|
447
|
+
def install_rubygems(version)
|
448
|
+
report_check("Installing rubygems #{version}")
|
449
|
+
basename = "rubygems-#{version}"
|
450
|
+
filename = "#{basename}.tgz"
|
451
|
+
tarball_url = ::File.join(RUBYGEMS_URI_PREFIX, filename)
|
452
|
+
::Dir.mktmpdir do |tmpdir|
|
453
|
+
::Dir.chdir(tmpdir) do
|
454
|
+
Command.execute('curl', '-O', '-f', tarball_url, :abort_on_failure => "Failed to curl #{tarball_url}")
|
455
|
+
Command.execute('tar', '-xzvf', filename, :abort_on_failure => "Failed to explode #{filename}")
|
456
|
+
|
457
|
+
# rubygems 'setup.rb' needs it's root dir to be the working dir.
|
458
|
+
::Dir.chdir(basename) do
|
459
|
+
Command.execute(ruby_bin_path_for(ruby_with_rubygems_version), 'setup.rb', :abort_on_failure => "Failed to setup rubygems")
|
460
|
+
end
|
461
|
+
end
|
462
|
+
end
|
463
|
+
end
|
329
464
|
|
330
465
|
# Produce abort on failure option
|
331
466
|
#
|
@@ -85,23 +85,25 @@ module RightConf
|
|
85
85
|
end
|
86
86
|
begin
|
87
87
|
source.split("\n").each do |o|
|
88
|
-
|
89
|
-
|
90
|
-
|
88
|
+
unless o.start_with?('#') # ignore commented-out lines
|
89
|
+
operands = o.gsub(/\s+/, '').split('=')
|
90
|
+
if operands.size != 2
|
91
|
+
raise "Invalid syntax '#{o}', must be of the form 'key.setting=value'"
|
92
|
+
end
|
93
|
+
|
94
|
+
if operands[1].start_with?('"') || operands[1].start_with?("'")
|
95
|
+
# Quoted string
|
96
|
+
value = operands[1]
|
97
|
+
elsif operands[1] =~ NIL_LITERAL
|
98
|
+
# Literal nil
|
99
|
+
value = 'nil'
|
100
|
+
else
|
101
|
+
# Anything else: assume unquoted string
|
102
|
+
value = "'#{operands[1]}'"
|
103
|
+
end
|
104
|
+
|
105
|
+
overrides.instance_eval("@#{operands[0]}=#{value}")
|
91
106
|
end
|
92
|
-
|
93
|
-
if operands[1].start_with?('"') || operands[1].start_with?("'")
|
94
|
-
# Quoted string
|
95
|
-
value = operands[1]
|
96
|
-
elsif operands[1] =~ NIL_LITERAL
|
97
|
-
# Literal nil
|
98
|
-
value = 'nil'
|
99
|
-
else
|
100
|
-
# Anything else: assume unquoted string
|
101
|
-
value = "'#{operands[1]}'"
|
102
|
-
end
|
103
|
-
|
104
|
-
overrides.instance_eval("@#{operands[0]}=#{value}")
|
105
107
|
end
|
106
108
|
rescue Exception => e
|
107
109
|
@overrides = nil
|
data/lib/rconf/version.rb
CHANGED
data/rconf.rconf
CHANGED
metadata
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rconf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.13
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Raphael Simon
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2014-01-02 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: rspec
|
15
16
|
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ~>
|
18
20
|
- !ruby/object:Gem::Version
|
@@ -20,6 +22,7 @@ dependencies:
|
|
20
22
|
type: :development
|
21
23
|
prerelease: false
|
22
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
23
26
|
requirements:
|
24
27
|
- - ~>
|
25
28
|
- !ruby/object:Gem::Version
|
@@ -27,6 +30,7 @@ dependencies:
|
|
27
30
|
- !ruby/object:Gem::Dependency
|
28
31
|
name: flexmock
|
29
32
|
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
30
34
|
requirements:
|
31
35
|
- - ~>
|
32
36
|
- !ruby/object:Gem::Version
|
@@ -34,6 +38,7 @@ dependencies:
|
|
34
38
|
type: :development
|
35
39
|
prerelease: false
|
36
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
37
42
|
requirements:
|
38
43
|
- - ~>
|
39
44
|
- !ruby/object:Gem::Version
|
@@ -121,26 +126,33 @@ files:
|
|
121
126
|
- spec/support/package_installer_spec.rb
|
122
127
|
homepage: http://rubygems.org/gems/rconf
|
123
128
|
licenses: []
|
124
|
-
metadata: {}
|
125
129
|
post_install_message:
|
126
130
|
rdoc_options: []
|
127
131
|
require_paths:
|
128
132
|
- lib
|
129
133
|
required_ruby_version: !ruby/object:Gem::Requirement
|
134
|
+
none: false
|
130
135
|
requirements:
|
131
136
|
- - ! '>='
|
132
137
|
- !ruby/object:Gem::Version
|
133
138
|
version: '0'
|
139
|
+
segments:
|
140
|
+
- 0
|
141
|
+
hash: -2553812799441389264
|
134
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
none: false
|
135
144
|
requirements:
|
136
145
|
- - ! '>='
|
137
146
|
- !ruby/object:Gem::Version
|
138
147
|
version: '0'
|
148
|
+
segments:
|
149
|
+
- 0
|
150
|
+
hash: -2553812799441389264
|
139
151
|
requirements: []
|
140
152
|
rubyforge_project: rconf
|
141
|
-
rubygems_version:
|
153
|
+
rubygems_version: 1.8.26
|
142
154
|
signing_key:
|
143
|
-
specification_version:
|
155
|
+
specification_version: 3
|
144
156
|
summary: Cross platform environment configuration
|
145
157
|
test_files:
|
146
158
|
- spec/command_spec.rb
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
OTg4MDQ2NGY4ZTI1NDMzZTFiNzc5NzYwZTBmMTlkZDQ5NjhhMjM5Nw==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
OTliZTY2MjBjMDZhOGFjZTM3ZTQ5ZmJkOWIzYTdjNGRkZDc1MzU4NA==
|
7
|
-
SHA512:
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ZDNkZTUwYzAwMzMyZTk1OTBhMmI1YmVlZDYzMTI2Yzc4OTE5ODM1MDU5YTZi
|
10
|
-
MTcwN2Q5NWVkZmE5NzBiMzYyZGM3NjMyMWMzZTc1ZTE2YjFkODIxODA3OGU5
|
11
|
-
NDVhMmY5M2NlNGJlNTM2MjgwZTdlNDkyMWQ2MTZhNWFkNzMwOTY=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
MmYwY2I0ZTRlMjRhYTBjYTM2YjdmZjU4Yjk5YzNhNTkxMTdhMGU2YjkzNDdk
|
14
|
-
OWUwYThiYTcyZjExODE1MzUyMmM2OWE3ZjYwMjY3NzdiMGIzZmNjOTI2Mjgy
|
15
|
-
MTljMThhZGU2MjJkNzk0MzY3YTBlNzQ0MjRjMWUyNGU4OWZiZjk=
|