osx_provision 0.9.1
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 +15 -0
- data/.gitignore +35 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGES +6 -0
- data/Gemfile +21 -0
- data/LICENSE +21 -0
- data/README.md +47 -0
- data/Rakefile +39 -0
- data/Thorfile +19 -0
- data/lib/osx_provision.rb +1 -0
- data/lib/osx_provision/generic_provision.rb +47 -0
- data/lib/osx_provision/osx_provision.rb +226 -0
- data/lib/osx_provision/osx_provision_scripts.sh +249 -0
- data/lib/osx_provision/version.rb +3 -0
- data/osx_provision.gemspec.erb +21 -0
- data/osx_provision.json +23 -0
- data/spec/osx_provision_spec.rb +25 -0
- data/spec/spec_helper.rb +1 -0
- data/thor/osx_install.thor +145 -0
- metadata +147 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YWJhMWEwNmI1MGFjZjAzNjE0ODRiZGNhMTM3ZDEwZDczN2JiNTkzOQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
Y2EzZDdhMjhlMWM4YTAxNDczMGUxNWI2MDFhYmJmY2ZjMzQwOWZlMQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZjdjYjkwNDA5NGZlMjRjOThjNzM5YTA0ODJmY2IyZmRkNGY2MWM0M2RiZjI3
|
10
|
+
ZmI3NWJmYjk4NzkwZjY0MTQzYmIzODhhZTE0MWQ3NmI4YWFmZGNjMDg1OGQ2
|
11
|
+
ODhiMzc5MWFhYjg5MjliMTk2ZjJkNWE3ZmUzN2IwMWU2YmZkMjM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NDM4ZmIzOGNhNzMyMWFjYjNmMTdhZWUxZTNkYjMxYmEyMWQ2YWJkZDI1MzZl
|
14
|
+
NjE5Mzg5MTMzMTUzOTcyZjljYjZhMWQ0OTg3ZjEzNTg0ZDMyNGYwNGVlYzMx
|
15
|
+
NmQxYTdkYThlNmZhNDBmNmFjNTlmMWIwMThkNTIxM2IyZWRkODI=
|
data/.gitignore
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/.idea
|
5
|
+
/coverage/
|
6
|
+
/InstalledFiles
|
7
|
+
/pkg/
|
8
|
+
/spec/reports/
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
## Specific to RubyMotion:
|
14
|
+
.dat*
|
15
|
+
.repl_history
|
16
|
+
build/
|
17
|
+
|
18
|
+
## Documentation cache and generated files:
|
19
|
+
/.yardoc/
|
20
|
+
/_yardoc/
|
21
|
+
/doc/
|
22
|
+
/rdoc/
|
23
|
+
|
24
|
+
## Environment normalisation:
|
25
|
+
/.bundle/
|
26
|
+
/lib/bundler/man/
|
27
|
+
|
28
|
+
# for a library or gem, you might want to ignore these files since the code is
|
29
|
+
# intended to run in multiple environments; otherwise, check them in:
|
30
|
+
# Gemfile.lock
|
31
|
+
# .ruby-version
|
32
|
+
# .ruby-gemset
|
33
|
+
|
34
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
35
|
+
.rvmrc
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
osx_provision
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-1.9.3
|
data/CHANGES
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
group :default do
|
4
|
+
gem "text-interpolator", "~>1.0"
|
5
|
+
gem "script_executor", "~>1.4"
|
6
|
+
gem "thor", "~>0.19"
|
7
|
+
gem "json_pure", "~>1.8"
|
8
|
+
end
|
9
|
+
|
10
|
+
group :development do
|
11
|
+
gem "gemspec_deps_gen", "~>1.1"
|
12
|
+
gem "gemcutter", "~>0.7"
|
13
|
+
end
|
14
|
+
|
15
|
+
group :test do
|
16
|
+
gem "rspec"
|
17
|
+
gem "mocha"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 Alexander Shvets
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
OSX Provision
|
2
|
+
|
3
|
+
Library and thor tasks for provisioning of Macbook computer initial setup for Ruby/Rails development
|
4
|
+
|
5
|
+
Add this line to your application's Gemfile:
|
6
|
+
|
7
|
+
```bash
|
8
|
+
gem 'osx_provision'
|
9
|
+
```
|
10
|
+
And then execute:
|
11
|
+
|
12
|
+
```bash
|
13
|
+
bundle
|
14
|
+
```
|
15
|
+
|
16
|
+
Or install it yourself as:
|
17
|
+
|
18
|
+
```bash
|
19
|
+
gem install osx_provision
|
20
|
+
```
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
Provisioning of initial computer setup is done as set of thor commands. You can execute them in one shot
|
25
|
+
or run each command separately.
|
26
|
+
|
27
|
+
* Execute all commands:
|
28
|
+
|
29
|
+
```bash
|
30
|
+
thor osx_install:all
|
31
|
+
```
|
32
|
+
or separately:
|
33
|
+
|
34
|
+
```bash
|
35
|
+
thor osx_install:brew
|
36
|
+
thor osx_install:rvm
|
37
|
+
thor osx_install:qtpostgres
|
38
|
+
thor osx_install:brew
|
39
|
+
```
|
40
|
+
|
41
|
+
## Contributing
|
42
|
+
|
43
|
+
1. Fork it
|
44
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
45
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
46
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
47
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift File.expand_path("lib", File.dirname(__FILE__))
|
4
|
+
|
5
|
+
require "rspec/core/rake_task"
|
6
|
+
require "osx_provision/version"
|
7
|
+
require "gemspec_deps_gen/gemspec_deps_gen"
|
8
|
+
|
9
|
+
version = OsxProvision::VERSION
|
10
|
+
project_name = File.basename(Dir.pwd)
|
11
|
+
|
12
|
+
task :gen do
|
13
|
+
generator = GemspecDepsGen.new
|
14
|
+
|
15
|
+
generator.generate_dependencies "spec", "#{project_name}.gemspec.erb", "#{project_name}.gemspec"
|
16
|
+
end
|
17
|
+
|
18
|
+
task :build => :gen do
|
19
|
+
system "gem build #{project_name}.gemspec"
|
20
|
+
end
|
21
|
+
|
22
|
+
task :install do
|
23
|
+
system "gem install #{project_name}-#{version}.gem"
|
24
|
+
end
|
25
|
+
|
26
|
+
task :uninstall do
|
27
|
+
system "gem uninstall #{project_name}"
|
28
|
+
end
|
29
|
+
|
30
|
+
task :release => :build do
|
31
|
+
system "gem push #{project_name}-#{version}.gem"
|
32
|
+
end
|
33
|
+
|
34
|
+
RSpec::Core::RakeTask.new do |task|
|
35
|
+
task.pattern = 'spec/**/*_spec.rb'
|
36
|
+
task.verbose = false
|
37
|
+
end
|
38
|
+
|
39
|
+
|
data/Thorfile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
unless defined? Thor::Runner
|
4
|
+
require 'bundler'
|
5
|
+
|
6
|
+
gems = Bundler::Definition.build(Bundler.default_gemfile, Bundler.default_lockfile, nil).requested_specs
|
7
|
+
|
8
|
+
gem = gems.find { |gem| gem.name == 'thor'}
|
9
|
+
|
10
|
+
load "#{ENV['GEM_HOME']}/gems/#{gem.name}-#{gem.version}/bin/thor"
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'thor'
|
14
|
+
|
15
|
+
Dir.glob("thor/**/*.thor") do |name|
|
16
|
+
Thor::Util.load_thorfile(name)
|
17
|
+
end
|
18
|
+
|
19
|
+
# $LOAD_PATH.unshift File.expand_path("lib", File.dirname(__FILE__))
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'osx_provision/osx_provision'
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'json'
|
2
|
+
require "highline"
|
3
|
+
|
4
|
+
require 'text_interpolator'
|
5
|
+
require 'script_executor/executable'
|
6
|
+
require 'script_executor/script_locator'
|
7
|
+
|
8
|
+
class GenericProvision
|
9
|
+
include Executable, ScriptLocator
|
10
|
+
|
11
|
+
attr_reader :interpolator, :env, :script_list, :server_info
|
12
|
+
|
13
|
+
def initialize config_file_name, scripts_file_name
|
14
|
+
@interpolator = TextInterpolator.new
|
15
|
+
|
16
|
+
@env = read_config(config_file_name)
|
17
|
+
|
18
|
+
@script_list = scripts(File.expand_path(scripts_file_name, File.dirname(__FILE__)))
|
19
|
+
|
20
|
+
@server_info = env[:node] ? env[:node] : {}
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def read_config config_file_name
|
26
|
+
hash = JSON.parse(File.read(config_file_name), :symbolize_names => true)
|
27
|
+
|
28
|
+
interpolator.interpolate hash
|
29
|
+
end
|
30
|
+
|
31
|
+
def terminal
|
32
|
+
@terminal ||= HighLine.new
|
33
|
+
end
|
34
|
+
|
35
|
+
def ask_password message
|
36
|
+
terminal.ask(message) { |q| q.echo = "*" }
|
37
|
+
end
|
38
|
+
|
39
|
+
def run server_info, script_name, params
|
40
|
+
execute(server_info) { evaluate_script_body(script_list[script_name], params, :string) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def run_command server_info, command
|
44
|
+
execute(server_info.merge({script: command}))
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,226 @@
|
|
1
|
+
require 'osx_provision/generic_provision'
|
2
|
+
|
3
|
+
class OsxProvision < GenericProvision
|
4
|
+
USER_LOCAL_BIN = "/usr/local/bin"
|
5
|
+
|
6
|
+
def prepare
|
7
|
+
env['password'] = ask_password("Enter password for #{env[:node][:user]}: ")
|
8
|
+
|
9
|
+
run(server_info.merge(capture_output: false, sudo: true), "prepare", env)
|
10
|
+
end
|
11
|
+
|
12
|
+
def homebrew_install
|
13
|
+
installed = package_installed("#{USER_LOCAL_BIN}/brew")
|
14
|
+
|
15
|
+
if installed
|
16
|
+
puts "homebrew already installed."
|
17
|
+
else
|
18
|
+
run(server_info, "brew", env)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def rvm_install
|
23
|
+
installed = package_installed "#{ENV['HOME']}/.rvm/bin/rvm"
|
24
|
+
|
25
|
+
if installed
|
26
|
+
puts "rvm already installed."
|
27
|
+
else
|
28
|
+
run(server_info, "rvm", env)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def npm_install
|
33
|
+
installed = package_installed "#{USER_LOCAL_BIN}/npm"
|
34
|
+
|
35
|
+
if installed
|
36
|
+
puts "npm already installed."
|
37
|
+
else
|
38
|
+
run(server_info, "npm", env)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def qt_install
|
43
|
+
installed = package_installed "#{USER_LOCAL_BIN}/qmake"
|
44
|
+
|
45
|
+
if installed
|
46
|
+
puts "qt already installed."
|
47
|
+
else
|
48
|
+
run(server_info, "qt", env)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def init_launch_agent
|
53
|
+
run(server_info, "init_launch_agent", env)
|
54
|
+
end
|
55
|
+
|
56
|
+
def mysql_install
|
57
|
+
installed = package_installed "#{USER_LOCAL_BIN}/mysql"
|
58
|
+
|
59
|
+
if installed
|
60
|
+
puts "mysql already installed."
|
61
|
+
else
|
62
|
+
run(server_info, "mysql", env)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def mysql_restart
|
67
|
+
started = service_started("homebrew.mxcl.mysql")
|
68
|
+
|
69
|
+
run(server_info, "mysql_restart", env.merge({started: started}))
|
70
|
+
end
|
71
|
+
|
72
|
+
def postgres_install
|
73
|
+
installed = package_installed "#{USER_LOCAL_BIN}/postgres"
|
74
|
+
|
75
|
+
if installed
|
76
|
+
puts "postgres already installed."
|
77
|
+
else
|
78
|
+
run(server_info, "postgres", env)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def postgres_restart
|
83
|
+
started = service_started("homebrew.mxcl.postgres")
|
84
|
+
|
85
|
+
run(server_info, "postgres_restart", env.merge({started: started}))
|
86
|
+
end
|
87
|
+
|
88
|
+
def postgres_stop
|
89
|
+
run server_info, "postgres_stop", env
|
90
|
+
end
|
91
|
+
|
92
|
+
def postgres_start
|
93
|
+
run server_info, "postgres_start", env
|
94
|
+
end
|
95
|
+
|
96
|
+
def ruby_install
|
97
|
+
installed = package_installed "#{ENV['HOME']}/.rvm/rubies/ruby-1.9.3-p429/bin/ruby"
|
98
|
+
|
99
|
+
if installed
|
100
|
+
puts "ruby already installed."
|
101
|
+
else
|
102
|
+
run(server_info, "ruby", env)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def jenkins_install
|
107
|
+
installed = package_installed "/usr/local/opt/jenkins/libexec/jenkins.war"
|
108
|
+
|
109
|
+
if installed
|
110
|
+
puts "jenkins already installed."
|
111
|
+
else
|
112
|
+
run(server_info, "jenkins", env)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def jenkins_restart
|
117
|
+
started = service_started("homebrew.mxcl.jenkins")
|
118
|
+
|
119
|
+
run(server_info, "jenkins_restart", env.merge({started: started}))
|
120
|
+
end
|
121
|
+
|
122
|
+
def selenium_install
|
123
|
+
installed = package_installed "/usr/local/opt/selenium-server-standalone/selenium-server-standalone*.jar"
|
124
|
+
|
125
|
+
if installed
|
126
|
+
puts "selenium already installed."
|
127
|
+
else
|
128
|
+
run(server_info, "selenium", env)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def selenium_restart
|
133
|
+
started = service_started("homebrew.mxcl.selenium-server-standalone")
|
134
|
+
|
135
|
+
run(server_info, "selenium_restart", env.merge({started: started}))
|
136
|
+
end
|
137
|
+
|
138
|
+
def postgres_create user, schemas
|
139
|
+
create_postgres_user user, schemas.first
|
140
|
+
|
141
|
+
schemas.each do |schema|
|
142
|
+
create_postgres_schema user, schema
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def postgres_drop user, schemas
|
147
|
+
schemas.each do |schema|
|
148
|
+
drop_postgres_schema schema
|
149
|
+
end
|
150
|
+
|
151
|
+
drop_postgres_user user, schemas.first
|
152
|
+
end
|
153
|
+
|
154
|
+
def postgres_test schema
|
155
|
+
result = get_postgres_schemas schema
|
156
|
+
|
157
|
+
puts result
|
158
|
+
end
|
159
|
+
|
160
|
+
private
|
161
|
+
|
162
|
+
def service_started name
|
163
|
+
result = run server_info.merge(:suppress_output => true, :capture_output => true),
|
164
|
+
"service_started", env.merge({name: name})
|
165
|
+
|
166
|
+
result.chomp.size > 0
|
167
|
+
end
|
168
|
+
|
169
|
+
def create_mysql_user app_user
|
170
|
+
run(server_info, "create_mysql_user", env.merge({app_user: app_user}))
|
171
|
+
end
|
172
|
+
|
173
|
+
def create_mysql_schema schema
|
174
|
+
schema_exists = mysql_schema_exist?(config[:mysql][:hostname], config[:mysql][:user], config[:mysql][:password], schema)
|
175
|
+
|
176
|
+
run(server_info, "create_mysql_schema", env) unless schema_exists
|
177
|
+
end
|
178
|
+
|
179
|
+
def mysql_schema_exist?(hostname, user, password, schema)
|
180
|
+
get_mysql_schemas(hostname, user, password, schema).include?(schema)
|
181
|
+
end
|
182
|
+
|
183
|
+
def get_mysql_schemas hostname, user, password, schema
|
184
|
+
command = "#{USER_LOCAL_BIN}/mysql -h #{hostname} -u #{user} -p\"#{password}\" -e \"SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA;\""
|
185
|
+
|
186
|
+
run_command server_info.merge(:suppress_output => true, :capture_output => true), command
|
187
|
+
end
|
188
|
+
|
189
|
+
def postgres_schema_exist?(schema)
|
190
|
+
get_postgres_schemas(schema).include?(schema)
|
191
|
+
end
|
192
|
+
|
193
|
+
def get_postgres_schemas schema
|
194
|
+
command = "#{USER_LOCAL_BIN}/psql -d #{schema} -c '\\l'"
|
195
|
+
|
196
|
+
run_command server_info.merge(:suppress_output => true, :capture_output => true), command
|
197
|
+
end
|
198
|
+
|
199
|
+
def create_postgres_user app_user, schema
|
200
|
+
run(server_info, "create_postgres_user", env.merge({app_user: app_user, schema: schema}))
|
201
|
+
end
|
202
|
+
|
203
|
+
def drop_postgres_user app_user, schema
|
204
|
+
command = "#{USER_LOCAL_BIN}/dropuser #{app_user}"
|
205
|
+
|
206
|
+
run_command server_info, command
|
207
|
+
end
|
208
|
+
|
209
|
+
def create_postgres_schema app_user, schema
|
210
|
+
run(server_info, "create_postgres_schema", env.merge({app_user: app_user, schema: schema}))
|
211
|
+
end
|
212
|
+
|
213
|
+
def drop_postgres_schema schema
|
214
|
+
command = "#{USER_LOCAL_BIN}/dropdb #{schema}"
|
215
|
+
|
216
|
+
run_command server_info, command
|
217
|
+
end
|
218
|
+
|
219
|
+
def package_installed package_path
|
220
|
+
result = run server_info.merge(:suppress_output => true, :capture_output => true),
|
221
|
+
"package_installed", env.merge({package_path: package_path})
|
222
|
+
|
223
|
+
result.chomp == package_path
|
224
|
+
end
|
225
|
+
|
226
|
+
end
|
@@ -0,0 +1,249 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
#######################################
|
4
|
+
[prepare]
|
5
|
+
|
6
|
+
xcodebuild -license
|
7
|
+
|
8
|
+
|
9
|
+
#######################################
|
10
|
+
[brew]
|
11
|
+
|
12
|
+
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
|
13
|
+
|
14
|
+
brew update
|
15
|
+
brew doctor
|
16
|
+
|
17
|
+
brew tap homebrew/dupes
|
18
|
+
brew tap homebrew/versions
|
19
|
+
|
20
|
+
|
21
|
+
#######################################
|
22
|
+
[rvm]
|
23
|
+
|
24
|
+
PATH=$PATH:/usr/local/bin
|
25
|
+
USER_HOME="#{node.home}"
|
26
|
+
|
27
|
+
curl -L https://get.rvm.io | bash
|
28
|
+
|
29
|
+
source $USER_HOME/.rvm/scripts/rvm
|
30
|
+
|
31
|
+
|
32
|
+
#######################################
|
33
|
+
[git]
|
34
|
+
|
35
|
+
brew install git
|
36
|
+
|
37
|
+
|
38
|
+
#######################################
|
39
|
+
[qt]
|
40
|
+
|
41
|
+
PATH=$PATH:/usr/local/bin
|
42
|
+
|
43
|
+
brew install qt
|
44
|
+
|
45
|
+
|
46
|
+
#######################################
|
47
|
+
[init_launch_agent]
|
48
|
+
|
49
|
+
mkdir #{home}/Library/LaunchAgents/
|
50
|
+
|
51
|
+
|
52
|
+
#######################################
|
53
|
+
[mysql]
|
54
|
+
|
55
|
+
PATH=$PATH:/usr/local/bin
|
56
|
+
USER_HOME="#{node.home}"
|
57
|
+
|
58
|
+
brew install mysql
|
59
|
+
|
60
|
+
mkdir -p $USER_HOME/Library/LaunchAgents
|
61
|
+
|
62
|
+
ln -sfv /usr/local/opt/mysql/*.plist $USER_HOME/Library/LaunchAgents
|
63
|
+
|
64
|
+
mysqladmin -u root password 'root'
|
65
|
+
|
66
|
+
|
67
|
+
#######################################
|
68
|
+
[mysql_restart]
|
69
|
+
|
70
|
+
STARTED="[#{started}]"
|
71
|
+
USER_HOME="#{node.home}"
|
72
|
+
|
73
|
+
if [ "$STARTED" = "[true]" ] ; then
|
74
|
+
launchctl unload $USER_HOME/Library/LaunchAgents/homebrew.mxcl.mysql.plist
|
75
|
+
fi
|
76
|
+
|
77
|
+
launchctl load $USER_HOME/Library/LaunchAgents/homebrew.mxcl.mysql.plist
|
78
|
+
|
79
|
+
|
80
|
+
#######################################
|
81
|
+
[create_mysql_user]
|
82
|
+
|
83
|
+
PATH=$PATH:/usr/local/bin
|
84
|
+
|
85
|
+
APP_USER='#{app_user}'
|
86
|
+
HOST_NAME='#{mysql[:hostname]}'
|
87
|
+
USER='#{mysql[:user]}'
|
88
|
+
PASSWORD='#{mysql][:password]}'
|
89
|
+
|
90
|
+
mysql -h $HOST_NAME -u root -p"root" -e "DROP USER '$APP_USER'@'$HOST_NAME';"
|
91
|
+
mysql -h $HOST_NAME -u root -p"root" -e "CREATE USER '$APP_USER'@'$HOST_NAME' IDENTIFIED BY '$APP_USER';"
|
92
|
+
|
93
|
+
mysql -h $HOST_NAME -u root -p"root" -e "grant all privileges on *.* to '$APP_USER'@'$HOST_NAME' identified by '$APP_USER' with grant option;"
|
94
|
+
mysql -h $HOST_NAME -u root -p"root" -e "grant all privileges on *.* to '$APP_USER'@'%' identified by '$APP_USER' with grant option;"
|
95
|
+
|
96
|
+
|
97
|
+
#######################################
|
98
|
+
[create_mysql_schema]
|
99
|
+
|
100
|
+
PATH=$PATH:/usr/local/bin
|
101
|
+
|
102
|
+
SCHEMA='#{schema}'
|
103
|
+
HOST_NAME='#{mysql[:hostname]}'
|
104
|
+
USER='#{mysql[:user]}'
|
105
|
+
PASSWORD='#{mysql[:password]}'
|
106
|
+
|
107
|
+
mysql -h $HOST_NAME -u root -p"root" -e "create database $SCHEMA;"
|
108
|
+
|
109
|
+
|
110
|
+
#######################################
|
111
|
+
[postgres]
|
112
|
+
|
113
|
+
PATH=$PATH:/usr/local/bin
|
114
|
+
USER_HOME="#{node.home}"
|
115
|
+
|
116
|
+
brew install postgres
|
117
|
+
|
118
|
+
ln -sfv /usr/local/opt/postgresql/homebrew.mxcl.postgresql.plist $USER_HOME/Library/LaunchAgents
|
119
|
+
|
120
|
+
initdb /usr/local/var/postgres -E utf8
|
121
|
+
|
122
|
+
|
123
|
+
#######################################
|
124
|
+
[postgres_stop]
|
125
|
+
|
126
|
+
USER_HOME="#{node.home}"
|
127
|
+
|
128
|
+
launchctl unload -w $USER_HOME/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
|
129
|
+
|
130
|
+
|
131
|
+
#######################################
|
132
|
+
[postgres_start]
|
133
|
+
|
134
|
+
USER_HOME="#{node.home}"
|
135
|
+
|
136
|
+
launchctl load -w $USER_HOME/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
|
137
|
+
|
138
|
+
|
139
|
+
#######################################
|
140
|
+
[postgres_restart]
|
141
|
+
|
142
|
+
STARTED="[#{started}]"
|
143
|
+
USER_HOME="#{node.home}"
|
144
|
+
|
145
|
+
if [ "$STARTED" = "[true]" ] ; then
|
146
|
+
launchctl unload -w $USER_HOME/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
|
147
|
+
fi
|
148
|
+
|
149
|
+
launchctl load -w $USER_HOME/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
|
150
|
+
|
151
|
+
|
152
|
+
#######################################
|
153
|
+
[create_postgres_user]
|
154
|
+
|
155
|
+
PATH=$PATH:/usr/local/bin
|
156
|
+
|
157
|
+
APP_USER='#{app_user}'
|
158
|
+
|
159
|
+
createuser -s -d -r $APP_USER
|
160
|
+
|
161
|
+
|
162
|
+
#######################################
|
163
|
+
[create_postgres_schema]
|
164
|
+
|
165
|
+
PATH=$PATH:/usr/local/bin
|
166
|
+
|
167
|
+
APP_USER='#{app_user}'
|
168
|
+
SCHEMA='#{schema}'
|
169
|
+
|
170
|
+
createdb -U $APP_USER $SCHEMA
|
171
|
+
|
172
|
+
|
173
|
+
#######################################
|
174
|
+
[ruby]
|
175
|
+
|
176
|
+
PATH=$PATH:/usr/local/bin
|
177
|
+
|
178
|
+
rvm install 1.9.3
|
179
|
+
|
180
|
+
|
181
|
+
#######################################
|
182
|
+
[jenkins]
|
183
|
+
|
184
|
+
PATH=$PATH:/usr/local/bin
|
185
|
+
USER_HOME="#{node.home}"
|
186
|
+
|
187
|
+
brew install jenkins
|
188
|
+
|
189
|
+
ln -sfv /usr/local/opt/jenkins/homebrew.mxcl.jenkins.plist $USER_HOME/Library/LaunchAgents
|
190
|
+
|
191
|
+
|
192
|
+
#######################################
|
193
|
+
[jenkins_restart]
|
194
|
+
|
195
|
+
STARTED="[#{started}]"
|
196
|
+
USER_HOME="#{node.home}"
|
197
|
+
|
198
|
+
if [ "$STARTED" = "[true]" ] ; then
|
199
|
+
launchctl unload $USER_HOME/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
|
200
|
+
fi
|
201
|
+
|
202
|
+
launchctl load $USER_HOME/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
|
203
|
+
|
204
|
+
|
205
|
+
#######################################
|
206
|
+
[selenium]
|
207
|
+
|
208
|
+
PATH=$PATH:/usr/local/bin
|
209
|
+
USER_HOME="#{node.home}"
|
210
|
+
|
211
|
+
brew install selenium-server-standalone
|
212
|
+
|
213
|
+
ln -sfv /usr/local/opt/selenium-server-standalone/*.plist $USER_HOME/Library/LaunchAgents
|
214
|
+
|
215
|
+
|
216
|
+
#######################################
|
217
|
+
[selenium_restart]
|
218
|
+
|
219
|
+
STARTED="[#{started}]"
|
220
|
+
USER_HOME="#{node.home}"
|
221
|
+
|
222
|
+
if [ "$STARTED" = "true" ] ; then
|
223
|
+
launchctl unload $USER_HOME/Library/LaunchAgents/homebrew.mxcl.selenium-server-standalone.plist
|
224
|
+
fi
|
225
|
+
|
226
|
+
launchctl load $USER_HOME/Library/LaunchAgents/homebrew.mxcl.selenium-server-standalone.plist
|
227
|
+
|
228
|
+
|
229
|
+
#######################################
|
230
|
+
[npm]
|
231
|
+
|
232
|
+
brew install node
|
233
|
+
|
234
|
+
|
235
|
+
#######################################
|
236
|
+
[package_installed]
|
237
|
+
|
238
|
+
ls #{package_path}
|
239
|
+
|
240
|
+
|
241
|
+
#######################################
|
242
|
+
[service_started]
|
243
|
+
|
244
|
+
NAME="#{name%}"
|
245
|
+
|
246
|
+
TEMPFILE="$(mktemp XXXXXXXX)"
|
247
|
+
launchctl list | grep $NAME > $TEMPFILE
|
248
|
+
cat $TEMPFILE
|
249
|
+
rm $TEMPFILE
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/lib/osx_provision/version')
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "osx_provision"
|
7
|
+
spec.summary = %q{Library for building Mac OSX provisioning}
|
8
|
+
spec.description = %q{Library for building Mac OSX computer provisioning}
|
9
|
+
spec.email = "alexander.shvets@gmail.com"
|
10
|
+
spec.authors = ["Alexander Shvets"]
|
11
|
+
spec.homepage = "http://github.com/shvets/osx_provision"
|
12
|
+
|
13
|
+
spec.files = `git ls-files`.split($\)
|
14
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
spec.version = OsxProvision::VERSION
|
17
|
+
|
18
|
+
|
19
|
+
<%= project_dependencies %>
|
20
|
+
end
|
21
|
+
|
data/osx_provision.json
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
{
|
2
|
+
"node": {
|
3
|
+
"domain": "127.0.0.1",
|
4
|
+
"user": "ENV['USER']",
|
5
|
+
"home": "ENV['HOME']",
|
6
|
+
"remote": false
|
7
|
+
},
|
8
|
+
|
9
|
+
"postgres": {
|
10
|
+
"hostname": "localhost", "user": "postgres", "password": "postgres",
|
11
|
+
|
12
|
+
"app_user": "ruby_dev_user",
|
13
|
+
"app_schemas": ["ruby_dev_test", "ruby_dev_dev", "ruby_dev_prod"]
|
14
|
+
},
|
15
|
+
|
16
|
+
"mysql": {
|
17
|
+
"hostname": "localhost", "user": "root", "password": "root",
|
18
|
+
|
19
|
+
"app_user": "ruby_dev_user",
|
20
|
+
"app_schemas": ["ruby_dev_test", "ruby_dev_dev", "ruby_dev_prod"]
|
21
|
+
}
|
22
|
+
|
23
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.expand_path('spec_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require 'osx_provision/osx_provision'
|
4
|
+
|
5
|
+
describe OsxProvision do
|
6
|
+
subject { OsxPrivision.new ".osx_provision.json", "osx_provision_scripts.sh"}
|
7
|
+
|
8
|
+
describe "#init_launch_agent" do
|
9
|
+
it "calls prepare method" do
|
10
|
+
subject.jenkins_install
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#init_launch_agent" do
|
15
|
+
it "calls init_launch_agent method" do
|
16
|
+
subject.init_launch_agent
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#homebrew_install" do
|
21
|
+
it "calls homebrew_install method" do
|
22
|
+
subject.homebrew_install
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
$: << File.expand_path('../lib', File.dirname(__FILE__))
|
@@ -0,0 +1,145 @@
|
|
1
|
+
$: << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
2
|
+
|
3
|
+
require 'osx_provision/osx_installer'
|
4
|
+
|
5
|
+
class OsxInstall < Thor
|
6
|
+
attr_reader :installer
|
7
|
+
|
8
|
+
def initialize *params
|
9
|
+
@installer = OsxProvision.new ".osx_provision.json", "osx_provision_scripts.sh"
|
10
|
+
|
11
|
+
super *params
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "all", "Installs all required packages"
|
15
|
+
def all
|
16
|
+
invoke :brew
|
17
|
+
invoke :rvm
|
18
|
+
invoke :qt
|
19
|
+
|
20
|
+
invoke :mysql
|
21
|
+
invoke :mysql_restart
|
22
|
+
|
23
|
+
invoke :init_launch_agent
|
24
|
+
|
25
|
+
invoke :postgres
|
26
|
+
invoke :postgres_restart
|
27
|
+
|
28
|
+
invoke :jenkins
|
29
|
+
invoke :jenkins_restart
|
30
|
+
|
31
|
+
invoke :selenium
|
32
|
+
|
33
|
+
invoke :ruby
|
34
|
+
|
35
|
+
invoke :postgres_create
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "prepare", "prepare"
|
39
|
+
def prepare
|
40
|
+
installer.prepare
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "brew", "Installs homebrew"
|
44
|
+
def brew
|
45
|
+
installer.homebrew_install
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "rvm", "Installs rvm"
|
49
|
+
def rvm
|
50
|
+
installer.rvm_install
|
51
|
+
end
|
52
|
+
|
53
|
+
desc "npm", "Installs npm"
|
54
|
+
def npm
|
55
|
+
installer.npm_install
|
56
|
+
end
|
57
|
+
|
58
|
+
desc "qt", "Installs qt"
|
59
|
+
def qt
|
60
|
+
installer.qt_install
|
61
|
+
end
|
62
|
+
|
63
|
+
desc "init_launch_agent", "Inits launch agent"
|
64
|
+
def init_launch_agent
|
65
|
+
installer.init_launch_agent
|
66
|
+
end
|
67
|
+
|
68
|
+
desc "mysql", "Installs mysql server"
|
69
|
+
def mysql
|
70
|
+
installer.mysql_install
|
71
|
+
end
|
72
|
+
|
73
|
+
# brew uninstall mysql
|
74
|
+
|
75
|
+
desc "mysql_restart", "Restarts mysql server"
|
76
|
+
def mysql_restart
|
77
|
+
installer.mysql_restart
|
78
|
+
end
|
79
|
+
|
80
|
+
desc "postgres", "Installs postgres server"
|
81
|
+
def postgres
|
82
|
+
installer.postgres_install
|
83
|
+
end
|
84
|
+
|
85
|
+
desc "postgres_restart", "Restarts postgres server"
|
86
|
+
def postgres_restart
|
87
|
+
installer.postgres_restart
|
88
|
+
end
|
89
|
+
|
90
|
+
desc "postgres_stop", "Stop postgres server"
|
91
|
+
def postgres_stop
|
92
|
+
installer.postgres_stop
|
93
|
+
end
|
94
|
+
|
95
|
+
desc "postgres_start", "Start postgres server"
|
96
|
+
def postgres_start
|
97
|
+
installer.postgres_start
|
98
|
+
end
|
99
|
+
|
100
|
+
desc "ruby", "Installs ruby"
|
101
|
+
def ruby
|
102
|
+
installer.ruby_install
|
103
|
+
end
|
104
|
+
|
105
|
+
desc "jenkins", "Installs jenkins server"
|
106
|
+
def jenkins
|
107
|
+
installer.jenkins_install
|
108
|
+
end
|
109
|
+
|
110
|
+
desc "jenkins_restart", "Restart jenkins server"
|
111
|
+
def jenkins_restart
|
112
|
+
installer.jenkins_restart
|
113
|
+
end
|
114
|
+
|
115
|
+
desc "selenium", "Installs selenium server"
|
116
|
+
def selenium
|
117
|
+
installer.selenium_install
|
118
|
+
end
|
119
|
+
|
120
|
+
desc "selenium_restart", "Restarts selenium server"
|
121
|
+
def selenium_restart
|
122
|
+
installer.selenium_restart
|
123
|
+
end
|
124
|
+
|
125
|
+
desc "postgres_create", "Initializes postgres project schemas"
|
126
|
+
def postgres_create
|
127
|
+
installer.postgres_create env["app_user"], env["app_schemas"]
|
128
|
+
end
|
129
|
+
|
130
|
+
desc "postgres_drop", "Drops postgres project schemas"
|
131
|
+
def postgres_drop
|
132
|
+
installer.postgres_drop env["app_user"], env["app_schemas"]
|
133
|
+
end
|
134
|
+
|
135
|
+
desc "postgres_test", "Test postgres schemas"
|
136
|
+
def postgres_test
|
137
|
+
installer.postgres_test env["app_user"]
|
138
|
+
end
|
139
|
+
|
140
|
+
desc "test", "test"
|
141
|
+
def test
|
142
|
+
puts "test"
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
metadata
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: osx_provision
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.9.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexander Shvets
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-06-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: text-interpolator
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: script_executor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.19'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.19'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json_pure
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.8'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.8'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: gemspec_deps_gen
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: gemcutter
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.7'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.7'
|
97
|
+
description: Library for building Mac OSX computer provisioning
|
98
|
+
email: alexander.shvets@gmail.com
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files: []
|
102
|
+
files:
|
103
|
+
- .gitignore
|
104
|
+
- .ruby-gemset
|
105
|
+
- .ruby-version
|
106
|
+
- CHANGES
|
107
|
+
- Gemfile
|
108
|
+
- LICENSE
|
109
|
+
- README.md
|
110
|
+
- Rakefile
|
111
|
+
- Thorfile
|
112
|
+
- lib/osx_provision.rb
|
113
|
+
- lib/osx_provision/generic_provision.rb
|
114
|
+
- lib/osx_provision/osx_provision.rb
|
115
|
+
- lib/osx_provision/osx_provision_scripts.sh
|
116
|
+
- lib/osx_provision/version.rb
|
117
|
+
- osx_provision.gemspec.erb
|
118
|
+
- osx_provision.json
|
119
|
+
- spec/osx_provision_spec.rb
|
120
|
+
- spec/spec_helper.rb
|
121
|
+
- thor/osx_install.thor
|
122
|
+
homepage: http://github.com/shvets/osx_provision
|
123
|
+
licenses: []
|
124
|
+
metadata: {}
|
125
|
+
post_install_message:
|
126
|
+
rdoc_options: []
|
127
|
+
require_paths:
|
128
|
+
- lib
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ! '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
requirements: []
|
140
|
+
rubyforge_project:
|
141
|
+
rubygems_version: 2.2.2
|
142
|
+
signing_key:
|
143
|
+
specification_version: 4
|
144
|
+
summary: Library for building Mac OSX provisioning
|
145
|
+
test_files:
|
146
|
+
- spec/osx_provision_spec.rb
|
147
|
+
- spec/spec_helper.rb
|