mrdu 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/mrdu.rb +153 -0
  3. metadata +71 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 20a024f77552f6dd1a770d73f0b1680bdc8c23da
4
+ data.tar.gz: 814f334e731940127ecc95821d091c1cbd1ddd57
5
+ SHA512:
6
+ metadata.gz: 1d7dde3aabe2a81ca981a32ed12b28ed70087ef934d803d33191dc6e1bb77daa5a1181ce2868aff3b2717870b4152b21a5320f7993282e6affa51fda06ed7fed
7
+ data.tar.gz: c93bbb77cf5333557499d51f652a983c06e13979084f81cd1d0bdef7bc9dfe28e45a52bbc9ffd90292b38d0f208a1e0223ce3b997cf82d4468ab45d631e4b349
@@ -0,0 +1,153 @@
1
+ require 'trollop'
2
+ require 'systemu'
3
+
4
+ def unmount_ramdisk_mount(ramdisk_dir)
5
+ check_cmd = <<-CMD
6
+ sudo stat -f -c '%T' #{ramdisk_dir}
7
+ CMD
8
+
9
+ unmount_cmd = <<-CMD
10
+ sudo umount #{ramdisk_dir}
11
+ CMD
12
+
13
+ status, stdout, stderr = systemu(check_cmd)
14
+ while stdout.include?('tmpfs')
15
+ status, stdout, stderr = systemu(unmount_cmd)
16
+ puts "Unmount ramdisk mount - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
17
+ status, stdout, stderr = systemu(check_cmd)
18
+ end
19
+ end
20
+
21
+ def create_ramdisk_mount(ramdisk_dir, ramdisk_size)
22
+ cmd = <<-CMD
23
+ sudo mkdir -p #{ramdisk_dir} &&
24
+ sudo mount -t tmpfs -o size=#{ramdisk_size}M tmpfs #{ramdisk_dir}
25
+ CMD
26
+ status, stdout, stderr = systemu(cmd)
27
+ puts "Create ramdisk mount - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
28
+ end
29
+
30
+ def create_data_location(ramdisk_dir, mysql_data_dir)
31
+ cmd = <<-CMD
32
+ sudo mkdir -p #{ramdisk_dir}#{mysql_data_dir}
33
+ sudo chown -R mysql.mysql #{ramdisk_dir}#{mysql_data_dir}
34
+ CMD
35
+ status, stdout, stderr = systemu(cmd)
36
+ puts "Create mysql data location on ramdisk - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
37
+ end
38
+
39
+ def create_log_location(ramdisk_dir, mysql_log_dir)
40
+ cmd = <<-CMD
41
+ sudo mkdir -p #{ramdisk_dir}#{mysql_log_dir}
42
+ sudo chown -R mysql.mysql #{ramdisk_dir}#{mysql_log_dir}
43
+ CMD
44
+ status, stdout, stderr = systemu(cmd)
45
+ puts "Create mysql log location on ramdisk - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
46
+ end
47
+
48
+ def create_socket_location(ramdisk_dir, mysql_socket_dir)
49
+ cmd = <<-CMD
50
+ sudo mkdir -p #{ramdisk_dir}#{mysql_socket_dir}
51
+ sudo chown -R mysql.mysql #{ramdisk_dir}#{mysql_socket_dir}
52
+ CMD
53
+ status, stdout, stderr = systemu(cmd)
54
+ puts "Create mysql socket location on ramdisk - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
55
+ end
56
+
57
+ def create_tmp_location(ramdisk_dir, mysql_tmp_dir)
58
+ cmd = <<-CMD
59
+ sudo mkdir -p #{ramdisk_dir}#{mysql_tmp_dir}
60
+ sudo chown -R mysql.mysql #{ramdisk_dir}#{mysql_tmp_dir}
61
+ CMD
62
+ status, stdout, stderr = systemu(cmd)
63
+ puts "Create mysql temp location on ramdisk - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
64
+ end
65
+
66
+ def create_config_file(ramdisk_dir, ramdisk_mysql_port, mysql_data_dir, mysql_log_dir, mysql_socket_dir, mysql_config_dir, mysql_tmp_dir, mysql_port)
67
+ cmd = <<-CMD
68
+ sudo mkdir -p #{ramdisk_dir}#{mysql_config_dir}
69
+ sudo cp -R #{mysql_config_dir}/* #{ramdisk_dir}#{mysql_config_dir}
70
+ CMD
71
+ status, stdout, stderr = systemu(cmd)
72
+ puts "Create mysql config file on ramdisk - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
73
+
74
+ cmd = <<-CMD
75
+ sudo sed -i 's|#{mysql_port}|#{ramdisk_mysql_port}|g' #{ramdisk_dir}#{mysql_config_dir}/my.cnf
76
+ sudo sed -i 's|#{mysql_data_dir}|#{ramdisk_dir}#{mysql_data_dir}|g' #{ramdisk_dir}#{mysql_config_dir}/my.cnf
77
+ sudo sed -i 's|#{mysql_log_dir}|#{ramdisk_dir}#{mysql_log_dir}|g' #{ramdisk_dir}#{mysql_config_dir}/my.cnf
78
+ sudo sed -i 's|#{mysql_socket_dir}|#{ramdisk_dir}#{mysql_socket_dir}|g' #{ramdisk_dir}#{mysql_config_dir}/my.cnf
79
+ sudo sed -i 's|#{mysql_config_dir}|#{ramdisk_dir}#{mysql_config_dir}|g' #{ramdisk_dir}#{mysql_config_dir}/my.cnf
80
+ sudo sed -i 's|#{mysql_tmp_dir}$|#{ramdisk_dir}#{mysql_tmp_dir}|g' #{ramdisk_dir}#{mysql_config_dir}/my.cnf
81
+ CMD
82
+ status, stdout, stderr = systemu(cmd)
83
+ puts "Setup mysql config file on ramdisk - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
84
+ end
85
+
86
+ def initialize_data_location(ramdisk_dir, mysql_data_dir)
87
+ cmd = <<-CMD
88
+ sudo mysql_install_db --user=mysql --datadir=#{ramdisk_dir}#{mysql_data_dir}
89
+ CMD
90
+ status, stdout, stderr = systemu(cmd)
91
+ puts "Initialize mysql data location on ramdisk - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
92
+ end
93
+
94
+ def start_mysql_server(ramdisk_dir, mysql_config_dir)
95
+ cmd = <<-CMD
96
+ sudo mysqld_safe --defaults-file=#{ramdisk_dir}#{mysql_config_dir}/my.cnf &
97
+ CMD
98
+ status, stdout, stderr = systemu(cmd)
99
+ puts "Start mysql server on ramdisk - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
100
+ end
101
+
102
+ def stop_mysql_server(ramdisk_dir, mysql_socket_dir)
103
+ cmd = <<-CMD
104
+ sudo cat #{ramdisk_dir}#{mysql_socket_dir}/mysqld.pid
105
+ CMD
106
+ status, stdout, stderr = systemu(cmd)
107
+ pid = stdout
108
+
109
+ cmd = <<-CMD
110
+ sudo kill #{pid}
111
+ CMD
112
+ status, stdout, stderr = systemu(cmd)
113
+ puts "Killing mysql server on ramdisk - status: #{status} - stdout: #{stdout} - stderr: #{stderr}"
114
+ end
115
+
116
+
117
+ opts = Trollop::options do
118
+ opt :ramdisk_mysql_port, 'Set the desired port of the mysql server running on ramdisk', :type => :integer, :default => 3307
119
+ opt :ramdisk_size, 'Set the desired size (in MB) of your ramdisk', :type => :integer, :default => 512
120
+ opt :ramdisk_dir, 'Set the desired directory to be used as the ramdisk mount', :type => :string, :default => '/tmp/ramdisk'
121
+ opt :mysql_port, 'Specify the port used by the mysql server currently on your machine', :type => :integer, :default => 3306
122
+ opt :mysql_data_dir, 'Specify the location of the mysql data directory currently on your machine', :type => :string, :default => '/var/lib/mysql'
123
+ opt :mysql_log_dir, 'Specify the location of the mysql log directory currently on your machine', :type => :string, :default => '/var/log/mysql'
124
+ opt :mysql_socket_dir, 'Specify the location of the mysql socket directory currently on your machine', :type => :string, :default => '/var/run/mysqld'
125
+ opt :mysql_config_dir, 'Specify the location of the mysql config directory currently on your machine', :type => :string, :default => '/etc/mysql'
126
+ opt :mysql_tmp_dir, 'Specify the location of the mysql tmp directory currently on your machine', :type => :string, :default => '/tmp'
127
+ end
128
+
129
+ unmount_ramdisk_mount opts[:ramdisk_dir]
130
+ create_ramdisk_mount opts[:ramdisk_dir], opts[:ramdisk_size]
131
+ create_data_location opts[:ramdisk_dir], opts[:mysql_data_dir]
132
+ create_log_location opts[:ramdisk_dir], opts[:mysql_log_dir]
133
+ create_socket_location opts[:ramdisk_dir], opts[:mysql_socket_dir]
134
+ create_tmp_location opts[:ramdisk_dir], opts[:mysql_tmp_dir]
135
+ create_config_file opts[:ramdisk_dir], opts[:ramdisk_mysql_port], opts[:mysql_data_dir], opts[:mysql_log_dir], opts[:mysql_socket_dir], opts[:mysql_config_dir], opts[:mysql_tmp_dir], opts[:mysql_port]
136
+ initialize_data_location opts[:ramdisk_dir], opts[:mysql_data_dir]
137
+ start_mysql_server opts[:ramdisk_dir], opts[:mysql_config_dir]
138
+
139
+ puts "\n\n"
140
+ puts "MySQL is now running."
141
+ puts "Configure your client to use the root user, no password, host 127.0.0.1, and port #{opts[:ramdisk_mysql_port]}."
142
+ puts "To force a TCP/IP connection, do not use localhost, but use 127.0.0.1 instead. See http://dev.mysql.com/doc/refman/5.1/en/connecting.html for more info."
143
+ puts "Just press ^C when you no longer need it."
144
+
145
+ Signal.trap('SIGHUP') { stop_mysql_server(opts[:ramdisk_dir], opts[:mysql_socket_dir]); exit }
146
+ Signal.trap('SIGINT') { stop_mysql_server(opts[:ramdisk_dir], opts[:mysql_socket_dir]); exit }
147
+ Signal.trap('SIGQUIT') { stop_mysql_server(opts[:ramdisk_dir], opts[:mysql_socket_dir]); exit }
148
+ Signal.trap('SIGKILL') { stop_mysql_server(opts[:ramdisk_dir], opts[:mysql_socket_dir]); exit }
149
+ Signal.trap('SIGTERM') { stop_mysql_server(opts[:ramdisk_dir], opts[:mysql_socket_dir]); exit }
150
+
151
+ while true
152
+ sleep 1000000
153
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mrdu
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Tom Van Eyck
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: trollop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: systemu
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Spawn a temporary MySQL instance off a RAM disk on Ubuntu.
42
+ email: tomvaneyck@gmail.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/mrdu.rb
48
+ homepage: https://github.com/vaneyckt/mrdu
49
+ licenses: []
50
+ metadata: {}
51
+ post_install_message:
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ requirements: []
66
+ rubyforge_project:
67
+ rubygems_version: 2.0.3
68
+ signing_key:
69
+ specification_version: 4
70
+ summary: Spawn a temporary MySQL instance off a RAM disk on Ubuntu.
71
+ test_files: []