mrdu 1.0.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.
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: []