lobot 0.9.0
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/.gitignore +7 -0
- data/.rvmrc +1 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +21 -0
- data/README.md +78 -0
- data/Rakefile +2 -0
- data/features/ci.feature +18 -0
- data/features/config/secrets.yml.example +6 -0
- data/features/step_definitions/ci_steps.rb +98 -0
- data/features/support/env.rb +3 -0
- data/lib/generators/lobot/USAGE +8 -0
- data/lib/generators/lobot/install_generator.rb +24 -0
- data/lib/generators/lobot/templates/Capfile +6 -0
- data/lib/generators/lobot/templates/bootstrap_server.sh +57 -0
- data/lib/generators/lobot/templates/capistrano-ci.rb +68 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/attributes/nginx.rb +2 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/libraries/ci_config.rb +2 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/default.rb +7 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/git_config.rb +11 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/id_rsa.rb +14 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/jenkins.rb +45 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/recipes/xvfb.rb +24 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_ci/templates/default/jenkins-job-config.xml.erb +62 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/libraries/marker.rb +42 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/daemontools.rb +15 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/imagemagick.rb +37 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/libxml_prereqs.rb +14 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/mysql_5_1.rb +90 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/mysql_5_5.rb +86 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/nginx.rb +65 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/postgres.rb +80 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/sqlite.rb +20 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/recipes/swap.rb +17 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-conf.erb +42 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-htaccess.erb +3 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-mime-types.erb +75 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/nginx-run-script.erb +2 -0
- data/lib/generators/lobot/templates/chef/cookbooks/pivotal_server/templates/default/postgres-run-script.erb +2 -0
- data/lib/generators/lobot/templates/ci.rake +111 -0
- data/lib/generators/lobot/templates/ci.yml +24 -0
- data/lib/generators/lobot/templates/deploy-ci.rb +5 -0
- data/lib/generators/lobot/templates/soloistrc +11 -0
- data/lib/lobot.rb +8 -0
- data/lib/lobot/version.rb +3 -0
- data/lobot.gemspec +27 -0
- data/spec/install_spec.rb +68 -0
- data/spec/spec_helper.rb +11 -0
- metadata +161 -0
@@ -0,0 +1,11 @@
|
|
1
|
+
username = ENV['SUDO_USER'].strip
|
2
|
+
|
3
|
+
execute "set git email" do
|
4
|
+
command "git config --global user.email 'jenkins-ci@example.com'"
|
5
|
+
user username
|
6
|
+
end
|
7
|
+
|
8
|
+
execute "set git user" do
|
9
|
+
command "git config --global user.name 'Jenkins CI Server'"
|
10
|
+
user username
|
11
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
username = ENV['SUDO_USER'].strip
|
2
|
+
|
3
|
+
file "/home/#{username}/.ssh/id_rsa" do
|
4
|
+
content CI_CONFIG['id_rsa_for_github_access']
|
5
|
+
mode 0600
|
6
|
+
only_if { CI_CONFIG['id_rsa_for_github_access'] }
|
7
|
+
owner username
|
8
|
+
end
|
9
|
+
|
10
|
+
execute "add github to known hosts if necessary" do
|
11
|
+
github_string = 'github.com,207.97.227.239 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ=='
|
12
|
+
command "echo '#{github_string}' >> /home/#{username}/.ssh/known_hosts"
|
13
|
+
not_if "grep '#{github_string}' /home/#{username}/.ssh/known_hosts"
|
14
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
include_recipe "pivotal_server::daemontools"
|
2
|
+
include_recipe "pivotal_ci::xvfb"
|
3
|
+
include_recipe "pivotal_ci::git_config"
|
4
|
+
|
5
|
+
username = ENV['SUDO_USER'].strip
|
6
|
+
user_home = ENV['HOME']
|
7
|
+
|
8
|
+
install_dir = "/usr/local/jenkins"
|
9
|
+
bin_location = "#{install_dir}/jenkins.war"
|
10
|
+
|
11
|
+
execute "download jenkins" do
|
12
|
+
command "mkdir -p #{install_dir} && curl -Lsf http://mirrors.jenkins-ci.org/war/latest/jenkins.war -o #{bin_location}"
|
13
|
+
not_if { File.exists?(bin_location) }
|
14
|
+
end
|
15
|
+
|
16
|
+
execute "download git plugin" do
|
17
|
+
command "mkdir -p /home/#{username}/.jenkins/plugins && curl -Lsf http://mirrors.jenkins-ci.org/plugins/git/latest/git.hpi -o /home/#{username}/.jenkins/plugins/git.hpi"
|
18
|
+
not_if { File.exists?("/home/#{username}/.jenkins/plugins/git.hpi") }
|
19
|
+
user username
|
20
|
+
end
|
21
|
+
|
22
|
+
execute "make projec#t dir" do
|
23
|
+
command "mkdir -p /home/#{username}/.jenkins/jobs/#{ENV['APP_NAME']}"
|
24
|
+
user username
|
25
|
+
end
|
26
|
+
|
27
|
+
template "/home/#{username}/.jenkins/jobs/#{ENV['APP_NAME']}/config.xml" do
|
28
|
+
source "jenkins-job-config.xml.erb"
|
29
|
+
owner username
|
30
|
+
end
|
31
|
+
|
32
|
+
service_name = "jenkins"
|
33
|
+
|
34
|
+
execute "create daemontools directory" do
|
35
|
+
command "mkdir -p /service/#{service_name}"
|
36
|
+
end
|
37
|
+
|
38
|
+
execute "create run script2" do # srsly! the not_if from mysql was being applied because they had the same name. I kid you not.
|
39
|
+
command "echo -e '#!/bin/sh\nexport PATH=/usr/local/mysql/bin/:$PATH\nexport HOME=/home/#{username}\nexec /command/setuidgid #{username} /usr/bin/java -jar #{bin_location}' > /service/#{service_name}/run"
|
40
|
+
# not_if "ls /service/#{service_name}/run"
|
41
|
+
end
|
42
|
+
|
43
|
+
execute "make run script executable" do
|
44
|
+
command "chmod 755 /service/#{service_name}/run"
|
45
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# include_recipe "pivotal_server::daemontools"
|
2
|
+
|
3
|
+
# service_name = "xvfb"
|
4
|
+
|
5
|
+
execute "install xvfb" do
|
6
|
+
command "yum -y install xorg-x11-server-Xvfb"
|
7
|
+
end
|
8
|
+
|
9
|
+
execute "install firefox" do
|
10
|
+
command "yum -y install firefox"
|
11
|
+
end
|
12
|
+
|
13
|
+
# execute "make daemontools dir" do
|
14
|
+
# command "mkdir -p /service/#{service_name}"
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# execute "create run script3" do # srsly! the not_if from mysql was being applied because they had the same name. I kid you not.
|
18
|
+
# command "echo -e '#!/bin/sh\nexec Xvfb :99 -ac -screen 0 1024x768x16' > /service/#{service_name}/run"
|
19
|
+
# # not_if "ls /service/#{service_name}/run"
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# execute "make run script executable" do
|
23
|
+
# command "chmod 755 /service/#{service_name}/run"
|
24
|
+
# end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
2
|
+
<project>
|
3
|
+
<actions/>
|
4
|
+
<description></description>
|
5
|
+
<keepDependencies>false</keepDependencies>
|
6
|
+
<properties/>
|
7
|
+
<scm class="hudson.plugins.git.GitSCM">
|
8
|
+
<configVersion>1</configVersion>
|
9
|
+
<remoteRepositories>
|
10
|
+
<org.spearce.jgit.transport.RemoteConfig>
|
11
|
+
<string>origin</string>
|
12
|
+
<int>5</int>
|
13
|
+
<string>fetch</string>
|
14
|
+
<string>+refs/heads/*:refs/remotes/origin/*</string>
|
15
|
+
<string>receivepack</string>
|
16
|
+
<string>git-upload-pack</string>
|
17
|
+
<string>uploadpack</string>
|
18
|
+
<string>git-upload-pack</string>
|
19
|
+
<string>url</string>
|
20
|
+
<string><%= CI_CONFIG['git_location'] %></string>
|
21
|
+
<string>tagopt</string>
|
22
|
+
<string></string>
|
23
|
+
</org.spearce.jgit.transport.RemoteConfig>
|
24
|
+
</remoteRepositories>
|
25
|
+
<branches>
|
26
|
+
<hudson.plugins.git.BranchSpec>
|
27
|
+
<name>master</name>
|
28
|
+
</hudson.plugins.git.BranchSpec>
|
29
|
+
</branches>
|
30
|
+
<mergeOptions/>
|
31
|
+
<recursiveSubmodules>false</recursiveSubmodules>
|
32
|
+
<doGenerateSubmoduleConfigurations>false</doGenerateSubmoduleConfigurations>
|
33
|
+
<authorOrCommitter>false</authorOrCommitter>
|
34
|
+
<clean>false</clean>
|
35
|
+
<wipeOutWorkspace>false</wipeOutWorkspace>
|
36
|
+
<pruneBranches>false</pruneBranches>
|
37
|
+
<buildChooser class="hudson.plugins.git.util.DefaultBuildChooser"/>
|
38
|
+
<gitTool>Default</gitTool>
|
39
|
+
<submoduleCfg class="list"/>
|
40
|
+
<relativeTargetDir></relativeTargetDir>
|
41
|
+
<excludedRegions></excludedRegions>
|
42
|
+
<excludedUsers></excludedUsers>
|
43
|
+
<skipTag>false</skipTag>
|
44
|
+
</scm>
|
45
|
+
<canRoam>true</canRoam>
|
46
|
+
<disabled>false</disabled>
|
47
|
+
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
|
48
|
+
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
|
49
|
+
<triggers class="vector">
|
50
|
+
<hudson.triggers.SCMTrigger>
|
51
|
+
<spec>* * * * *</spec>
|
52
|
+
</hudson.triggers.SCMTrigger>
|
53
|
+
</triggers>
|
54
|
+
<concurrentBuild>false</concurrentBuild>
|
55
|
+
<builders>
|
56
|
+
<hudson.tasks.Shell>
|
57
|
+
<command><%= CI_CONFIG['build_command'] %></command>
|
58
|
+
</hudson.tasks.Shell>
|
59
|
+
</builders>
|
60
|
+
<publishers/>
|
61
|
+
<buildWrappers/>
|
62
|
+
</project>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
class Chef::Recipe
|
2
|
+
|
3
|
+
MARKER_DIR = "#{ENV['HOME']}/.install_markers"
|
4
|
+
|
5
|
+
#Regarding marker files:
|
6
|
+
#
|
7
|
+
#The idea here is you have a simple "signal" on disk that tells you when you've
|
8
|
+
#successfully run something, and you don't want to run it again if you don't have to.
|
9
|
+
#
|
10
|
+
#Also, the decision to rerun a unit of work becomes explicit - and owned by you.
|
11
|
+
#(it's not based on trusting a target program to respond in some way).
|
12
|
+
#You don't have to learn and keep up this "re-run" logic per unit of work / program
|
13
|
+
#
|
14
|
+
#Also, simply ls'ing the marker dir gives you interesting information all in once place -
|
15
|
+
#i.e. what markers are there and what are their timestamps?
|
16
|
+
#
|
17
|
+
#And reinstalls are easy - just rm the relevant marker file.
|
18
|
+
|
19
|
+
def run_unless_marker_file_exists(marker_file_name)
|
20
|
+
|
21
|
+
directory MARKER_DIR do
|
22
|
+
# owner WS_USER
|
23
|
+
recursive true
|
24
|
+
end
|
25
|
+
|
26
|
+
marker_path = File.join(MARKER_DIR, marker_file_name)
|
27
|
+
if File.exists?(marker_path)
|
28
|
+
log "skipping #{marker_file_name}: marker file found (#{marker_path}), detail: #{`ls -la #{marker_path}`.strip}"
|
29
|
+
else
|
30
|
+
|
31
|
+
log "no marker file found for #{marker_file_name} in #{MARKER_DIR}, running"
|
32
|
+
|
33
|
+
yield
|
34
|
+
|
35
|
+
execute "touching marker file #{marker_path} after successful run" do
|
36
|
+
# user WS_USER
|
37
|
+
command "touch #{marker_path}"
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
ruby_block "install daemontools" do
|
2
|
+
block do
|
3
|
+
directory = "/package/admin"
|
4
|
+
repo = "git://github.com/MikeSofaer/daemontools.git"
|
5
|
+
dir_name = "daemontools-0.76"
|
6
|
+
FileUtils.mkdir_p directory
|
7
|
+
system("cd #{directory} && git clone #{repo} #{dir_name}")
|
8
|
+
system("cd #{File.join(directory, dir_name)} && ./package/install")
|
9
|
+
end
|
10
|
+
not_if "ls /command/svscanboot"
|
11
|
+
end
|
12
|
+
|
13
|
+
execute "make sure daemontools is installed" do
|
14
|
+
command "ls /command/svscanboot"
|
15
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
src_dir = "/usr/local/src/imagemagick"
|
4
|
+
|
5
|
+
directory src_dir
|
6
|
+
|
7
|
+
run_unless_marker_file_exists("imagemagick_6_6_5") do
|
8
|
+
execute "install imagemagic prerequisites" do
|
9
|
+
command "yum -y install tcl-devel libpng-devel libjpeg-devel ghostscript-devel bzip2-devel freetype-devel libtiff-devel"
|
10
|
+
end
|
11
|
+
|
12
|
+
execute "download imagemagick" do
|
13
|
+
# using an older version because the URL for the current version dies when a new version comes out.
|
14
|
+
# http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
|
15
|
+
command "curl -Lsf ftp://ftp.imagemagick.org/pub/ImageMagick/legacy/ImageMagick-6.6.5-10.tar.gz | tar xvz -C#{src_dir} --strip 1"
|
16
|
+
end
|
17
|
+
|
18
|
+
execute "configure imagemagick" do
|
19
|
+
command "./configure --prefix=/usr/local --with-bzlib=yes --with-fontconfig=yes --with-freetype=yes --with-gslib=yes --with-gvc=yes --with-jpeg=yes --with-jp2=yes --with-png=yes --with-tiff=yes"
|
20
|
+
cwd src_dir
|
21
|
+
end
|
22
|
+
|
23
|
+
execute "make clean" do
|
24
|
+
command "make clean"
|
25
|
+
cwd src_dir
|
26
|
+
end
|
27
|
+
|
28
|
+
execute "make imagemagic" do
|
29
|
+
command "make"
|
30
|
+
cwd src_dir
|
31
|
+
end
|
32
|
+
|
33
|
+
execute "make install" do
|
34
|
+
command "make install"
|
35
|
+
cwd src_dir
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
{
|
2
|
+
"libxml2" => "2.6.26-2.1.2.8.el5_5.1",
|
3
|
+
"libxml2-devel" => "2.6.26-2.1.2.8.el5_5.1",
|
4
|
+
"libxslt" => "1.1.17-2.el5_2.2",
|
5
|
+
"libxslt-devel" => "1.1.17-2.el5_2.2",
|
6
|
+
}.each do |package_name, version_string|
|
7
|
+
['x86_64'].each do |arch_string|
|
8
|
+
yum_package package_name do
|
9
|
+
action :install
|
10
|
+
version version_string
|
11
|
+
# arch arch_string
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
include_recipe "pivotal_server::daemontools"
|
2
|
+
|
3
|
+
src_dir = "/usr/local/src/mysql"
|
4
|
+
install_dir = "/usr/local/mysql"
|
5
|
+
mysql_root_password = "password"
|
6
|
+
mysql_user_name = "app_user"
|
7
|
+
mysql_user_password = "password"
|
8
|
+
|
9
|
+
{
|
10
|
+
"bison" => "2.3-2.1",
|
11
|
+
"ncurses-devel" => "5.5-24.20060715"
|
12
|
+
}.each do |package_name, version_string|
|
13
|
+
package package_name do
|
14
|
+
action :install
|
15
|
+
version version_string
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
user "mysql"
|
20
|
+
|
21
|
+
run_unless_marker_file_exists("mysql_5_1") do
|
22
|
+
execute "download mysql src" do
|
23
|
+
command "mkdir -p #{src_dir} && curl -Lsf http://mysql.he.net/Downloads/MySQL-5.1/mysql-5.1.57.tar.gz | tar xvz -C#{src_dir} --strip 1"
|
24
|
+
end
|
25
|
+
|
26
|
+
execute "configure" do
|
27
|
+
command "./configure --prefix=/usr/local/mysql"
|
28
|
+
cwd src_dir
|
29
|
+
end
|
30
|
+
|
31
|
+
execute "make" do
|
32
|
+
command "make"
|
33
|
+
cwd src_dir
|
34
|
+
end
|
35
|
+
|
36
|
+
execute "make install" do
|
37
|
+
command "make install"
|
38
|
+
cwd src_dir
|
39
|
+
end
|
40
|
+
|
41
|
+
execute "mysql owns #{install_dir}" do
|
42
|
+
command "chown -R mysql #{install_dir}"
|
43
|
+
end
|
44
|
+
|
45
|
+
execute "install db" do
|
46
|
+
command "#{install_dir}/bin/mysql_install_db --user=mysql"
|
47
|
+
cwd install_dir
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
execute "create daemontools directory" do
|
52
|
+
command "mkdir -p /service/mysql"
|
53
|
+
end
|
54
|
+
|
55
|
+
execute "create run script" do
|
56
|
+
command "echo -e '#!/bin/sh\nexec /command/setuidgid mysql /usr/local/mysql/libexec/mysqld' > /service/mysql/run"
|
57
|
+
not_if "ls /service/mysql/run"
|
58
|
+
end
|
59
|
+
|
60
|
+
execute "make run script executable" do
|
61
|
+
command "chmod 755 /service/mysql/run"
|
62
|
+
end
|
63
|
+
|
64
|
+
ruby_block "wait for mysql to come up" do
|
65
|
+
block do
|
66
|
+
Timeout::timeout(60) do
|
67
|
+
until system("ls /tmp/mysql.sock")
|
68
|
+
sleep 1
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
execute "set the root mysql password" do
|
75
|
+
command "#{install_dir}/bin/mysqladmin -uroot password #{mysql_root_password}"
|
76
|
+
not_if "#{install_dir}/bin/mysql -uroot -p#{mysql_root_password} -e 'show databases'"
|
77
|
+
end
|
78
|
+
|
79
|
+
execute "create app_user user" do
|
80
|
+
command "#{install_dir}/bin/mysql -u root -p#{mysql_root_password} -D mysql -r -B -N -e \"CREATE USER '#{mysql_user_name}'@'localhost'\""
|
81
|
+
not_if "#{install_dir}/bin/mysql -u root -p#{mysql_root_password} -D mysql -r -B -N -e \"SELECT * FROM user where User='#{mysql_user_name}' and Host = 'localhost'\" | grep -q #{mysql_user_name}"
|
82
|
+
end
|
83
|
+
|
84
|
+
execute "set password for app_user" do
|
85
|
+
command "#{install_dir}/bin/mysql -u root -p#{mysql_root_password} -D mysql -r -B -N -e \"SET PASSWORD FOR '#{mysql_user_name}'@'localhost' = PASSWORD('#{mysql_user_password}')\""
|
86
|
+
end
|
87
|
+
|
88
|
+
execute "grant user all rights (this maybe isn't a great idea)" do
|
89
|
+
command "#{install_dir}/bin/mysql -u root -p#{mysql_root_password} -D mysql -r -B -N -e \"GRANT ALL on *.* to '#{mysql_user_name}'@'localhost'\""
|
90
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
include_recipe "pivotal_server::daemontools"
|
2
|
+
|
3
|
+
src_dir = "/usr/local/src/mysql"
|
4
|
+
install_dir = "/usr/local/mysql"
|
5
|
+
mysql_root_password = "password"
|
6
|
+
mysql_user_name = "app_user"
|
7
|
+
mysql_user_password = "password"
|
8
|
+
|
9
|
+
{
|
10
|
+
"cmake" => "2.6.4-5.el5.2",
|
11
|
+
"bison" => "2.3-2.1",
|
12
|
+
"ncurses-devel" => "5.5-24.20060715"
|
13
|
+
}.each do |package_name, version_string|
|
14
|
+
package package_name do
|
15
|
+
action :install
|
16
|
+
version version_string
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
user "mysql"
|
21
|
+
|
22
|
+
run_unless_marker_file_exists("mysql_5_5_11") do
|
23
|
+
execute "download mysql src" do
|
24
|
+
command "mkdir -p #{src_dir} && curl -Lsf http://mysql.he.net/Downloads/MySQL-5.5/mysql-5.5.14.tar.gz | tar xvz -C#{src_dir} --strip 1"
|
25
|
+
end
|
26
|
+
|
27
|
+
execute "cmake" do
|
28
|
+
command "cmake ."
|
29
|
+
cwd src_dir
|
30
|
+
end
|
31
|
+
|
32
|
+
execute "make" do
|
33
|
+
command "make install"
|
34
|
+
cwd src_dir
|
35
|
+
end
|
36
|
+
|
37
|
+
execute "mysql owns #{install_dir}/data" do
|
38
|
+
command "chown -R mysql #{install_dir}/data"
|
39
|
+
end
|
40
|
+
|
41
|
+
execute "install db" do
|
42
|
+
command "#{install_dir}/scripts/mysql_install_db --user=mysql"
|
43
|
+
cwd install_dir
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
execute "create daemontools directory" do
|
48
|
+
command "mkdir -p /service/mysql"
|
49
|
+
end
|
50
|
+
|
51
|
+
execute "create run script" do
|
52
|
+
command "echo -e '#!/bin/sh\nexec /command/setuidgid mysql /usr/local/mysql/bin/mysqld' > /service/mysql/run"
|
53
|
+
not_if "ls /service/mysql/run"
|
54
|
+
end
|
55
|
+
|
56
|
+
execute "make run script executable" do
|
57
|
+
command "chmod 755 /service/mysql/run"
|
58
|
+
end
|
59
|
+
|
60
|
+
ruby_block "wait for mysql to come up" do
|
61
|
+
block do
|
62
|
+
Timeout::timeout(60) do
|
63
|
+
until system("ls /tmp/mysql.sock")
|
64
|
+
sleep 1
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
execute "set the root mysql password" do
|
71
|
+
command "#{install_dir}/bin/mysqladmin -uroot password #{mysql_root_password}"
|
72
|
+
not_if "#{install_dir}/bin/mysql -uroot -p#{mysql_root_password} -e 'show databases'"
|
73
|
+
end
|
74
|
+
|
75
|
+
execute "create app_user user" do
|
76
|
+
command "#{install_dir}/bin/mysql -u root -p#{mysql_root_password} -D mysql -r -B -N -e \"CREATE USER '#{mysql_user_name}'@'localhost'\""
|
77
|
+
not_if "#{install_dir}/bin/mysql -u root -p#{mysql_root_password} -D mysql -r -B -N -e \"SELECT * FROM user where User='#{mysql_user_name}' and Host = 'localhost'\" | grep -q #{mysql_user_name}"
|
78
|
+
end
|
79
|
+
|
80
|
+
execute "set password for app_user" do
|
81
|
+
command "#{install_dir}/bin/mysql -u root -p#{mysql_root_password} -D mysql -r -B -N -e \"SET PASSWORD FOR '#{mysql_user_name}'@'localhost' = PASSWORD('#{mysql_user_password}')\""
|
82
|
+
end
|
83
|
+
|
84
|
+
execute "grant user all rights (this maybe isn't a great idea)" do
|
85
|
+
command "#{install_dir}/bin/mysql -u root -p#{mysql_root_password} -D mysql -r -B -N -e \"GRANT ALL on *.* to '#{mysql_user_name}'@'localhost'\""
|
86
|
+
end
|