linux_provision 0.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/.gitignore +20 -0
- data/.idea/.name +1 -0
- data/.idea/.rakeTasks +7 -0
- data/.idea/encodings.xml +5 -0
- data/.idea/linux_provision.iml +102 -0
- data/.idea/misc.xml +8 -0
- data/.idea/modules.xml +9 -0
- data/.idea/scopes/scope_settings.xml +5 -0
- data/.idea/vcs.xml +7 -0
- data/.linux_provision.json +23 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/CHANGES +6 -0
- data/Gemfile +26 -0
- data/Gemfile.lock +46 -0
- data/LICENSE +21 -0
- data/README.md +38 -0
- data/Rakefile +39 -0
- data/Thorfile +19 -0
- data/Vagrantfile +155 -0
- data/lib/linux_provision.rb +1 -0
- data/lib/linux_provision/generic_provision.rb +66 -0
- data/lib/linux_provision/linux_provision.rb +175 -0
- data/lib/linux_provision/linux_provision_scripts.sh +172 -0
- data/lib/linux_provision/version.rb +3 -0
- data/linux_provision.gemspec.erb +21 -0
- data/spec/linux_install_spec.rb +15 -0
- data/spec/linux_provision_spec.rb +13 -0
- data/spec/spec_helper.rb +1 -0
- data/thor/linux_install.thor +147 -0
- metadata +159 -0
@@ -0,0 +1 @@
|
|
1
|
+
require 'linux_provision/linux_provision'
|
@@ -0,0 +1,66 @@
|
|
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
|
+
# create_script_methods parent, self
|
21
|
+
|
22
|
+
@server_info = env[:node] ? env[:node] : {}
|
23
|
+
end
|
24
|
+
|
25
|
+
# def create_script_methods parent, current
|
26
|
+
# parent_metaclass = parent.singleton_class
|
27
|
+
# current_metaclass = current.singleton_class
|
28
|
+
#
|
29
|
+
# current.script_list.keys.each do |name|
|
30
|
+
# # create methods on parent, e.g. thor or rake file
|
31
|
+
# parent_metaclass.send(:define_method, name.to_sym) do |*args, &block|
|
32
|
+
# current.send(name, args, block)
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
# # create methods on installer
|
36
|
+
# current_metaclass.send(:define_method, name.to_sym) do |_, _|
|
37
|
+
# current.send :run, current.server_info, name.to_s, current.env
|
38
|
+
# end
|
39
|
+
# end
|
40
|
+
# end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
def read_config config_file_name
|
45
|
+
hash = JSON.parse(File.read(config_file_name), :symbolize_names => true)
|
46
|
+
|
47
|
+
interpolator.interpolate hash
|
48
|
+
end
|
49
|
+
|
50
|
+
def terminal
|
51
|
+
@terminal ||= HighLine.new
|
52
|
+
end
|
53
|
+
|
54
|
+
def ask_password message
|
55
|
+
terminal.ask(message) { |q| q.echo = "*" }
|
56
|
+
end
|
57
|
+
|
58
|
+
def run server_info, script_name, params
|
59
|
+
execute(server_info) { evaluate_script_body(script_list[script_name], params, :string) }
|
60
|
+
end
|
61
|
+
|
62
|
+
def run_command server_info, command
|
63
|
+
execute(server_info.merge({script: command}))
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'linux_provision/generic_provision'
|
2
|
+
|
3
|
+
class LinuxProvision < GenericProvision
|
4
|
+
|
5
|
+
USER_LOCAL_BIN = "/usr/local/bin"
|
6
|
+
|
7
|
+
def postgres_create_schemas
|
8
|
+
env[:postgres][:app_schemas].each do |schema|
|
9
|
+
run(server_info, "postgres_create_schema", env.merge(schema: schema))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def mysql_create_schemas
|
14
|
+
env[:mysql][:app_schemas].each do |schema|
|
15
|
+
run(server_info, "mysql_create_schema", env.merge(schema: schema))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
private
|
19
|
+
|
20
|
+
def method_missing(method, *args, &block)
|
21
|
+
run(server_info, method.to_s, env)
|
22
|
+
end
|
23
|
+
|
24
|
+
# def test
|
25
|
+
# run(server_info, "test", env)
|
26
|
+
# end
|
27
|
+
|
28
|
+
# def prepare
|
29
|
+
# env['password'] = ask_password("Enter password for #{env[:node][:user]}: ")
|
30
|
+
#
|
31
|
+
# run(server_info.merge(capture_output: false), "prepare", env)
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# def rvm_install
|
35
|
+
# installed = package_installed '#{ENV[\'HOME\']}/.rvm/bin/rvm'
|
36
|
+
#
|
37
|
+
# if installed
|
38
|
+
# puts "rvm already installed."
|
39
|
+
# else
|
40
|
+
# run(server_info, "rvm", env)
|
41
|
+
# end
|
42
|
+
# end
|
43
|
+
#
|
44
|
+
# def npm_install
|
45
|
+
# installed = package_installed "#{USER_LOCAL_BIN}/npm"
|
46
|
+
#
|
47
|
+
# if installed
|
48
|
+
# puts "npm already installed."
|
49
|
+
# else
|
50
|
+
# run(server_info, "npm", env)
|
51
|
+
# end
|
52
|
+
# end
|
53
|
+
|
54
|
+
# def qt_install
|
55
|
+
# installed = package_installed "#{USER_LOCAL_BIN}/qmake"
|
56
|
+
#
|
57
|
+
# if installed
|
58
|
+
# puts "qt already installed."
|
59
|
+
# else
|
60
|
+
# run(server_info, "qt", env)
|
61
|
+
# end
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
# def mysql_install
|
65
|
+
# installed = package_installed "#{USER_LOCAL_BIN}/mysql"
|
66
|
+
#
|
67
|
+
# if installed
|
68
|
+
# puts "mysql already installed."
|
69
|
+
# else
|
70
|
+
# run(server_info, "mysql", env)
|
71
|
+
# end
|
72
|
+
# end
|
73
|
+
#
|
74
|
+
# def mysql_restart
|
75
|
+
# started = service_started("homebrew.mxcl.mysql")
|
76
|
+
#
|
77
|
+
# run(server_info, "mysql_restart", env.merge({started: started}))
|
78
|
+
# end
|
79
|
+
#
|
80
|
+
# def postgres_install
|
81
|
+
# installed = package_installed "#{USER_LOCAL_BIN}/postgres"
|
82
|
+
#
|
83
|
+
# if installed
|
84
|
+
# puts "postgres already installed."
|
85
|
+
# else
|
86
|
+
# run(server_info, "postgres", env)
|
87
|
+
# end
|
88
|
+
# end
|
89
|
+
#
|
90
|
+
# def postgres_restart
|
91
|
+
# started = service_started("homebrew.mxcl.postgres")
|
92
|
+
#
|
93
|
+
# run(server_info, "postgres_restart", env.merge({started: started}))
|
94
|
+
# end
|
95
|
+
#
|
96
|
+
# def postgres_stop
|
97
|
+
# run server_info, "postgres_stop", env
|
98
|
+
# end
|
99
|
+
#
|
100
|
+
# def postgres_start
|
101
|
+
# run server_info, "postgres_start", env
|
102
|
+
# end
|
103
|
+
#
|
104
|
+
# def ruby_install
|
105
|
+
# installed = package_installed "#{ENV['HOME']}/.rvm/rubies/ruby-1.9.3-p429/bin/ruby"
|
106
|
+
#
|
107
|
+
# if installed
|
108
|
+
# puts "ruby already installed."
|
109
|
+
# else
|
110
|
+
# run(server_info, "ruby", env)
|
111
|
+
# end
|
112
|
+
# end
|
113
|
+
#
|
114
|
+
# def jenkins_install
|
115
|
+
# installed = package_installed "/usr/local/opt/jenkins/libexec/jenkins.war"
|
116
|
+
#
|
117
|
+
# if installed
|
118
|
+
# puts "jenkins already installed."
|
119
|
+
# else
|
120
|
+
# run(server_info, "jenkins", env)
|
121
|
+
# end
|
122
|
+
# end
|
123
|
+
#
|
124
|
+
# def jenkins_restart
|
125
|
+
# started = service_started("homebrew.mxcl.jenkins")
|
126
|
+
#
|
127
|
+
# run(server_info, "jenkins_restart", env.merge({started: started}))
|
128
|
+
# end
|
129
|
+
#
|
130
|
+
# def selenium_install
|
131
|
+
# installed = package_installed "/usr/local/opt/selenium-server-standalone/selenium-server-standalone*.jar"
|
132
|
+
#
|
133
|
+
# if installed
|
134
|
+
# puts "selenium already installed."
|
135
|
+
# else
|
136
|
+
# run(server_info, "selenium", env)
|
137
|
+
# end
|
138
|
+
# end
|
139
|
+
#
|
140
|
+
# def selenium_restart
|
141
|
+
# started = service_started("homebrew.mxcl.selenium-server-standalone")
|
142
|
+
#
|
143
|
+
# run(server_info, "selenium_restart", env.merge({started: started}))
|
144
|
+
# end
|
145
|
+
#
|
146
|
+
# def postgres_create user, schemas
|
147
|
+
# create_postgres_user user, schemas.first
|
148
|
+
#
|
149
|
+
# schemas.each do |schema|
|
150
|
+
# create_postgres_schema user, schema
|
151
|
+
# end
|
152
|
+
# end
|
153
|
+
#
|
154
|
+
# def postgres_drop user, schemas
|
155
|
+
# schemas.each do |schema|
|
156
|
+
# drop_postgres_schema schema
|
157
|
+
# end
|
158
|
+
#
|
159
|
+
# drop_postgres_user user, schemas.first
|
160
|
+
# end
|
161
|
+
#
|
162
|
+
# def postgres_test schema
|
163
|
+
# result = get_postgres_schemas schema
|
164
|
+
#
|
165
|
+
# puts result
|
166
|
+
# end
|
167
|
+
#
|
168
|
+
# def package_installed package_path
|
169
|
+
# result = run server_info.merge(:suppress_output => true, :capture_output => true),
|
170
|
+
# "package_installed", env.merge({package_path: package_path})
|
171
|
+
#
|
172
|
+
# result.chomp == package_path
|
173
|
+
# end
|
174
|
+
|
175
|
+
end
|
@@ -0,0 +1,172 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
[test]
|
4
|
+
# Test
|
5
|
+
|
6
|
+
echo "test"
|
7
|
+
|
8
|
+
|
9
|
+
##############################
|
10
|
+
[prepare]
|
11
|
+
|
12
|
+
sudo apt-get update
|
13
|
+
|
14
|
+
sudo apt-get install -y curl
|
15
|
+
sudo apt-get install -y g++
|
16
|
+
sudo apt-get install -y subversion
|
17
|
+
|
18
|
+
|
19
|
+
##############################
|
20
|
+
[rvm]
|
21
|
+
#PATH=$PATH:/usr/local/bin
|
22
|
+
|
23
|
+
USER_HOME="#{node.home}"
|
24
|
+
|
25
|
+
curl -L https://get.rvm.io | bash
|
26
|
+
|
27
|
+
sudo chown -R vagrant /opt/vagrant_ruby
|
28
|
+
|
29
|
+
source $USER_HOME/.rvm/scripts/rvm
|
30
|
+
|
31
|
+
|
32
|
+
##############################
|
33
|
+
[ruby]
|
34
|
+
|
35
|
+
source $USER_HOME/.rvm/scripts/rvm
|
36
|
+
|
37
|
+
rvm install ruby-1.9.3
|
38
|
+
|
39
|
+
|
40
|
+
##############################
|
41
|
+
[git]
|
42
|
+
|
43
|
+
sudo apt-get install -y git
|
44
|
+
|
45
|
+
|
46
|
+
##############################
|
47
|
+
[node]
|
48
|
+
|
49
|
+
sudo apt-get install -y node
|
50
|
+
|
51
|
+
|
52
|
+
##############################
|
53
|
+
[jenkins]
|
54
|
+
sudo apt-get install -y jenkins
|
55
|
+
|
56
|
+
|
57
|
+
##############################
|
58
|
+
[postgres]
|
59
|
+
|
60
|
+
sudo apt-get install -y postgresql-client
|
61
|
+
sudo apt-get install -y libpq-dev
|
62
|
+
sudo apt-get install -y postgresql
|
63
|
+
|
64
|
+
|
65
|
+
##############################
|
66
|
+
[mysql]
|
67
|
+
|
68
|
+
MYSQL_PASSWORD='#{mysql.password}'
|
69
|
+
|
70
|
+
MYSQL_SERVER_VERSION='5.5'
|
71
|
+
|
72
|
+
sudo apt-get install -y libmysqlclient-dev ruby-dev
|
73
|
+
|
74
|
+
sudo apt-get install debconf-utils
|
75
|
+
sudo apt-get install -y mysql-client
|
76
|
+
|
77
|
+
sudo debconf-set-selections <<< "mysql-server-$MYSQL_SERVER_VERSION mysql-server/root_password password $MYSQL_PASSWORD"
|
78
|
+
sudo debconf-set-selections <<< "mysql-server-$MYSQL_SERVER_VERSION mysql-server/root_password_again password $MYSQL_PASSWORD"
|
79
|
+
|
80
|
+
sudo apt-get -y install mysql-server
|
81
|
+
|
82
|
+
|
83
|
+
##############################
|
84
|
+
[postgres_create_user]
|
85
|
+
|
86
|
+
PATH=$PATH:/usr/local/bin
|
87
|
+
|
88
|
+
APP_USER='#{postgres.app_user}'
|
89
|
+
|
90
|
+
sudo -u postgres psql -c "CREATE USER $APP_USER WITH PASSWORD '$APP_USER'"
|
91
|
+
#createuser -s -d -r $APP_USER
|
92
|
+
|
93
|
+
##############################
|
94
|
+
[postgres_drop_user]
|
95
|
+
|
96
|
+
##############################
|
97
|
+
[postgres_create_schema]
|
98
|
+
|
99
|
+
SCHEMA='#{schema}'
|
100
|
+
|
101
|
+
POSTGRES_USER='#{postgres.user}'
|
102
|
+
APP_USER='#{postgres.app_user}'
|
103
|
+
|
104
|
+
ENCODING_STRING="WITH ENCODING = 'UTF-8' LC_CTYPE = 'en_US.utf8' LC_COLLATE = 'en_US.utf8' OWNER $POSTGRES_USER TEMPLATE template0"
|
105
|
+
|
106
|
+
sudo -u postgres psql -c "CREATE DATABASE $SCHEMA $ENCODING_STRING"
|
107
|
+
sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $SCHEMA to $APP_USER"
|
108
|
+
#createdb -U $APP_USER $SCHEMA
|
109
|
+
|
110
|
+
|
111
|
+
##############################
|
112
|
+
[postgres_drop_schema]
|
113
|
+
|
114
|
+
|
115
|
+
##############################
|
116
|
+
[mysql_create_user]
|
117
|
+
|
118
|
+
APP_USER='#{mysql.app_user}'
|
119
|
+
HOST_NAME='#{mysql.hostname}'
|
120
|
+
|
121
|
+
MYSQL_USER='#{mysql.user}'
|
122
|
+
MYSQL_PASSWORD='#{mysql.password}'
|
123
|
+
|
124
|
+
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;"
|
125
|
+
mysql -h localhost -u $MYSQL_USER -p"$MYSQL_PASSWORD" -e "grant all privileges on *.* to '$APP_USER'@'%' identified by '$APP_USER' with grant option;"
|
126
|
+
mysql -h localhost -u $MYSQL_USER -p"$MYSQL_PASSWORD" -e "CREATE USER '$APP_USER'@'localhost' IDENTIFIED BY '$APP_USER';"
|
127
|
+
|
128
|
+
|
129
|
+
##############################
|
130
|
+
[mysql_drop_user]
|
131
|
+
|
132
|
+
APP_USER='#{mysql.app_user}'
|
133
|
+
HOST_NAME='#{mysql.hostname}'
|
134
|
+
|
135
|
+
MYSQL_USER='#{mysql.user}'
|
136
|
+
MYSQL_PASSWORD='#{mysql.password}'
|
137
|
+
|
138
|
+
mysql -h $HOST_NAME -u $MYSQL_USER -p"$MYSQL_PASSWORD" -e "DROP USER '$APP_USER'@'$HOST_NAME';"
|
139
|
+
|
140
|
+
|
141
|
+
##############################
|
142
|
+
[mysql_create_schema]
|
143
|
+
|
144
|
+
SCHEMA='#{schema}'
|
145
|
+
|
146
|
+
HOST_NAME='#{mysql.hostname}'
|
147
|
+
|
148
|
+
MYSQL_USER='#{mysql.user}'
|
149
|
+
MYSQL_PASSWORD='#{mysql.password}'
|
150
|
+
|
151
|
+
mysql -h $HOST_NAME -u $MYSQL_USER -p"$MYSQL_PASSWORD" -e "create database $SCHEMA;"
|
152
|
+
|
153
|
+
|
154
|
+
##############################
|
155
|
+
[mysql_drop_schema]
|
156
|
+
|
157
|
+
|
158
|
+
##############################
|
159
|
+
[project]
|
160
|
+
|
161
|
+
APP_HOME='$USER_HOME/linux_provision'
|
162
|
+
|
163
|
+
cd $APP_HOME
|
164
|
+
|
165
|
+
source $USER_HOME/.rvm/scripts/rvm
|
166
|
+
|
167
|
+
rvm use 1.9.3@linux_provision
|
168
|
+
|
169
|
+
bundle install --without=production
|
170
|
+
|
171
|
+
# rake db:migrate
|
172
|
+
# rails s
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/lib/linux_provision/version')
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "linux_provision"
|
7
|
+
spec.summary = %q{Library for building Linux computer provisioning}
|
8
|
+
spec.description = %q{Library for building Linux computer provisioning}
|
9
|
+
spec.email = "alexander.shvets@gmail.com"
|
10
|
+
spec.authors = ["Alexander Shvets"]
|
11
|
+
spec.homepage = "http://github.com/shvets/linux_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 = LinuxProvision::VERSION
|
17
|
+
|
18
|
+
|
19
|
+
<%= project_dependencies %>
|
20
|
+
end
|
21
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.expand_path('spec_helper', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require 'thor'
|
4
|
+
load 'thor/linux_install.thor'
|
5
|
+
|
6
|
+
# rdebug-ide --port 1234 --dispatcher-port 26162 -- ~/.rvm/gems/ruby-1.9.3-p545@linux_ruby_dev_install/bin/rdebug-ide ~/.rvm/gems/ruby-1.9.3-p545@linux_ruby_dev_install/bin/thor linux_install:test
|
7
|
+
|
8
|
+
describe LinuxInstall do
|
9
|
+
|
10
|
+
describe "#test" do
|
11
|
+
it "calls test method" do
|
12
|
+
subject.test
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|