syncwrap 2.1.3 → 2.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e03ea268f99e5d4fbb0f77975dfb7ddf89652ac1
4
- data.tar.gz: 690f532e095db3ef3f15be5e22c15e9c93848e9f
3
+ metadata.gz: 9a94bbce85319bea7ab7ee215feee79a2f33d2b0
4
+ data.tar.gz: 8f031221c85ae70474788dfee38e6d5c05e73c3d
5
5
  SHA512:
6
- metadata.gz: 69cff80b28bba560719fd9564e285f586561fda5e531e83f3398c401a7c1d9a61006e66c1f3b97821ccc9c8f54691a57d1e63597bb44429bb28a7915614bb351
7
- data.tar.gz: 8619b3b04a73e551c52feba0e97a451b40521ddf4436a84a0213f7569eb855350979766720cd42b0d8879a0bf26942fe47efb0bfcd991b9b5c9fbd9612c4e335
6
+ metadata.gz: e480edaffd434f726454f2721e95816d085dde7b9114378d49877fe15f0bc7a09bb88b7e61c1fd9c7ce331692fa003e3f237b6e948f94e5d46f93297fc144b29
7
+ data.tar.gz: 3f4c2eacd8c0e726e91ef71c403c34b5225aaa8c3526d2a6ace7f5c24b8a46af6feabb36ea3d4b903bc59e3405bbfdf239a385d8ac4d0b0b9b9c4f013c5d0c2d
data/History.rdoc CHANGED
@@ -1,3 +1,32 @@
1
+ === 2.2.0 (2014-7-13)
2
+ * New SyncWrap::Component#sh :pipefail option to pass bash flag "-o
3
+ pipefail" to return the first non-zero command return from a
4
+ pipeline. This option defaults to true when the :error (bash -e)
5
+ option is also true (the default). You should review pipeline usage
6
+ in your own components as part of upgrading. Internally, the
7
+ SyncWrap::Hashdot component required an adjustment for this change.
8
+ * Major SyncWrap::PostgreSQL component updates. You need to
9
+ review and adjust any configuration overrides and constructor
10
+ properties:
11
+ * Use templates to consolidate RHEL and Ubuntu configuration. Files
12
+ moved to sync/postgresql. (#2)
13
+ * Use distro default PG data directory, by default. Tested
14
+ Amazon Linux EBS MDRaid mount direct to /var/lib/pgsql9. (#3)
15
+ * No elevated permissions (trust, etc.) by default (#4)
16
+ * Configuration is 9.3 ready (9.1-9.3 compatible)
17
+ * Configuration no longer assumes AWS EBS optimizations, relaxed
18
+ guarantees. See test/aws/sync.rb sample for new PostgreSQL
19
+ properties to maintain compatibility.
20
+ * Removed vestigial SyncWrap::Distro package_map and localize package
21
+ variations to the individual components.
22
+ * SyncWrap::RunUser now creates a _system_ user/group with default
23
+ home the same as run_dir.
24
+ * Add :ebs_mounts AWS profile option to support HVM-style dev mounts,
25
+ made apparent by EC2 t2 instance types.
26
+ * Upgrade SyncWrap::JRubyVM default version to 1.7.13
27
+ * Upgrade SyncWrap::CRubyVM default version to 2.1.2
28
+ * Upgrade to aws-sdk ~> 1.46 (no longer depends on uuidtools)
29
+
1
30
  === 2.1.3 (2014-7-8)
2
31
  * Use sudo instead of --rsync-path=sudo... for :user on localhost
3
32
  * Cleanup the environment for gem_install on different ruby, when
data/Manifest.txt CHANGED
@@ -54,17 +54,14 @@ sync/etc/corosync/uidgid.d/qpid
54
54
  sync/etc/init.d/iyyov.erb
55
55
  sync/etc/init.d/qpidd
56
56
  sync/etc/sysconfig/pgsql/postgresql.erb
57
- sync/etc/sysctl.d/61-postgresql-shm.conf
57
+ sync/etc/sysctl.d/61-postgresql-shm.conf.erb
58
58
  sync/jruby/bin/jgem
59
- sync/postgresql/rhel/pg_hba.conf
60
- sync/postgresql/rhel/pg_ident.conf
61
- sync/postgresql/rhel/postgresql.conf
62
- sync/postgresql/ubuntu/environment
63
- sync/postgresql/ubuntu/pg_ctl.conf
64
- sync/postgresql/ubuntu/pg_hba.conf
65
- sync/postgresql/ubuntu/pg_ident.conf
66
- sync/postgresql/ubuntu/postgresql.conf
67
- sync/postgresql/ubuntu/start.conf
59
+ sync/postgresql/environment
60
+ sync/postgresql/pg_ctl.conf
61
+ sync/postgresql/pg_hba.conf.erb
62
+ sync/postgresql/pg_ident.conf
63
+ sync/postgresql/postgresql.conf.erb
64
+ sync/postgresql/start.conf
68
65
  sync/src/hashdot/Makefile.erb
69
66
  sync/src/hashdot/profiles/default.hdp.erb
70
67
  sync/src/hashdot/profiles/jruby-common.hdp
data/examples/jruby.rb CHANGED
@@ -5,7 +5,7 @@ role( :all,
5
5
 
6
6
  role( :jruby,
7
7
  OpenJDK.new,
8
- JRubyVM.new( jruby_version: '1.7.10' ),
8
+ JRubyVM.new( jruby_version: '1.7.13' ),
9
9
  Hashdot.new )
10
10
 
11
11
  host( 'centos-1', RHEL.new, :jruby, internal_ip: '192.168.122.4' )
@@ -86,11 +86,15 @@ module SyncWrap
86
86
  # :security_groups:: As per aws-sdk, but the special :default value
87
87
  # is replaced with a single security group with
88
88
  # same name as the :region.
89
- # :ebs_volumes:: The number of EBS volumes to create an attach to this instance.
89
+ # :ebs_volumes:: The number of EBS volumes to create and attach to this instance.
90
90
  # :ebs_volume_options:: A nested Hash of options, as per
91
91
  # {AWS::EC2::VolumeCollection.create}[http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/EC2/VolumeCollection.html#create-instance_method]
92
92
  # with custom default :size 16 GB, and the same
93
93
  # :availibility_zone as the instance.
94
+ # :ebs_mounts:: Device mounting scheme. The value :sdf_p indicates
95
+ # "/dev/sd[f-p]", and should be used for HVM instances.
96
+ # The default scheme is currently :sdh1_6 "/dev/sdh[1-6]".
97
+ # See {EC2: Block Device Mapping}[http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html]
94
98
  # :lvm_volumes:: Ignored here.
95
99
  # :roles:: Array of role Strings or Symbols (applied as Roles tag)
96
100
  def aws_create_instance( name, opts = {} )
@@ -103,6 +107,7 @@ module SyncWrap
103
107
  iopts = opts.dup
104
108
  iopts.delete( :ebs_volumes )
105
109
  iopts.delete( :ebs_volume_options )
110
+ iopts.delete( :ebs_mounts )
106
111
  iopts.delete( :roles ) #-> tags
107
112
  iopts.delete( :description ) #-> tags
108
113
  iopts.delete( :tag ) #-> tags
@@ -150,7 +155,12 @@ module SyncWrap
150
155
  attachments = opts[ :ebs_volumes ].times.map do |i|
151
156
  vol = ec2.volumes.create( vopts )
152
157
  wait_until( vol.id, 0.5 ) { vol.status == :available }
153
- vol.attach_to( inst, "/dev/sdh#{i+1}" ) #=> Attachment
158
+ ap = if opts[ :ebs_mounts ] == :sdf_p
159
+ "/dev/sd" + "fghijklmnop"[i]
160
+ else
161
+ "/dev/sdh#{i+1}"
162
+ end
163
+ vol.attach_to( inst, ap ) #=> Attachment
154
164
  end
155
165
 
156
166
  wait_until( "volumes to attach" ) do
data/lib/syncwrap/base.rb CHANGED
@@ -15,7 +15,7 @@
15
15
  #++
16
16
 
17
17
  module SyncWrap
18
- VERSION='2.1.3'
18
+ VERSION='2.2.0'
19
19
 
20
20
  GEM_ROOT = File.dirname(File.dirname(File.dirname(__FILE__))) # :nodoc:
21
21
  end
@@ -172,6 +172,10 @@ module SyncWrap
172
172
  # :error:: Pass bash the -e option to terminate early on errors.
173
173
  # Default: true
174
174
  #
175
+ # :pipefail:: Pass bash the "-o pipefail" option to return the first
176
+ # non-zero command return from a pipeline.
177
+ # Default: true when :error is true
178
+ #
175
179
  # :close:: An additional bash fragment to append after the
176
180
  # provided shell command/fragment and block has been
177
181
  # enqueued. See usage example above. Default: nil
@@ -45,7 +45,7 @@ module SyncWrap
45
45
  # The ruby version to install, as it appears in source packages
46
46
  # from ruby-lang.org. Note that starting with 2.1.0, the patch
47
47
  # release (p#) no longer appears in package names.
48
- # (Default: 2.0.0-p481)
48
+ # (Default: 2.1.2)
49
49
  #
50
50
  # Example values: '2.0.0-p481', '2.1.2'
51
51
  attr_accessor :ruby_version
@@ -56,7 +56,7 @@ module SyncWrap
56
56
  attr_accessor :do_uninstall_distro_ruby
57
57
 
58
58
  def initialize( opts = {} )
59
- @ruby_version = "2.0.0-p481"
59
+ @ruby_version = "2.1.2"
60
60
  @do_uninstall_distro_ruby = true
61
61
 
62
62
  super
@@ -16,6 +16,9 @@
16
16
 
17
17
  require 'syncwrap/component'
18
18
 
19
+ # For distro class comparison only (pre-load for safety)
20
+ require 'syncwrap/components/ubuntu'
21
+
19
22
  module SyncWrap
20
23
 
21
24
  # Provision the {Hashdot}[http://hashdot.sourceforge.net/] JVM/script
@@ -59,14 +62,21 @@ module SyncWrap
59
62
  end
60
63
 
61
64
  def install_system_deps
62
- dist_install( %w[ make gcc apr apr-devel ] )
65
+ deps = %w[ make gcc ]
66
+ deps += if distro.is_a?( Ubuntu )
67
+ %w[ libapr1 libapr1-dev ]
68
+ else
69
+ %w[ apr apr-devel ]
70
+ end
71
+
72
+ dist_install( *deps )
63
73
  end
64
74
 
65
75
  def test_hashdot_binary
66
76
  binary = "#{local_root}/bin/hashdot"
67
77
  code,_ = capture( <<-SH, accept: [0,91,92] )
68
78
  if [ -x #{binary} ]; then
69
- cver=`#{binary} 2>&1 | grep -o -E '([0-9]\.?){2,}'`
79
+ cver=`(#{binary} 2>&1 || true) | grep -o -E '([0-9]\.?){2,}'`
70
80
  if [ "$cver" = "#{hashdot_version}" ]; then
71
81
  exit 0
72
82
  fi
@@ -27,11 +27,11 @@ module SyncWrap
27
27
  class JRubyVM < Component
28
28
  include RubySupport
29
29
 
30
- # JRuby version to install (default: 1.7.10)
30
+ # JRuby version to install (default: 1.7.13)
31
31
  attr_accessor :jruby_version
32
32
 
33
33
  def initialize( opts = {} )
34
- @jruby_version = '1.7.10'
34
+ @jruby_version = '1.7.13'
35
35
 
36
36
  super( { gem_command: 'jgem' }.merge( opts ) )
37
37
  end
@@ -22,45 +22,132 @@ require 'syncwrap/components/ubuntu'
22
22
 
23
23
  module SyncWrap
24
24
 
25
- # Provisions for install and configuration of PostgreSQL
25
+ # Provisions for install and configuration of a \PostgreSQL server
26
26
  #
27
27
  # Host component dependencies: <Distro>
28
28
  class PostgreSQL < Component
29
29
 
30
- # Location of postgresql data dir
31
- attr_accessor :pg_data_dir
30
+ # \PostgreSQL _MAJOR.MINOR_ version to install. Since there are
31
+ # multiple versions in use even for _default_ system packages across
32
+ # distros, this should be set the same as the version that will
33
+ # be installed via #package_names. (Default: '9.1')
34
+ attr_accessor :version
32
35
 
33
- # The distro default data dir (set if known to be different than
34
- # distro-specific default, nil -> computed in accessor)
35
- attr_writer :pg_default_data_dir
36
+ # Return #version as an Array of Integer values
37
+ def version_a
38
+ @version.split('.').map( &:to_i )
39
+ end
36
40
 
37
- def initialize( opts = {} )
38
- @pg_data_dir = '/pg/data'
39
- @pg_default_data_dir = nil
40
- super
41
+ # Location of postgresql data (and possibly also config) directory.
42
+ # (Default: #pg_default_data_dir)
43
+ attr_accessor :pg_data_dir
44
+
45
+ def pg_data_dir
46
+ @pg_data_dir || pg_default_data_dir
41
47
  end
42
48
 
49
+ protected
50
+
51
+ # The _default_ data dir as used by the distro #package_names.
52
+ # (Default: as per RHEL or Ubuntu distro packages)
53
+ attr_writer :pg_default_data_dir
54
+
43
55
  def pg_default_data_dir
44
56
  @pg_default_data_dir ||
45
57
  case distro
46
58
  when RHEL
47
59
  '/var/lib/pgsql9/data'
48
60
  when Ubuntu
49
- '/var/lib/postgresql/9.1/main'
61
+ "/var/lib/postgresql/#{version}/main"
50
62
  else
51
63
  raise ContextError, "Distro #{distro.class.name} not supported"
52
64
  end
53
65
  end
54
66
 
55
- def pg_deploy_config
56
- case distro
57
- when RHEL
58
- 'postgresql/rhel'
59
- when Ubuntu
60
- 'postgresql/ubuntu'
61
- else
62
- raise ContextError, "Distro #{distro.class.name} not supported"
63
- end
67
+ # Configuration in the '/etc' directory root?
68
+ # (Default: true on Ubuntu only, per distro package defaults)
69
+ attr_writer :pg_specify_etc_config
70
+
71
+ def pg_specify_etc_config
72
+ @pg_specify_etc_config || distro.is_a?( Ubuntu )
73
+ end
74
+
75
+ # The package names, including \PostgreSQL server of the
76
+ # desired version to install.
77
+ # (Default: Ubuntu: postgresql-_version_; RHEL: postgresql-server)
78
+ attr_writer :package_names
79
+
80
+ def package_names
81
+ ( @package_names ||
82
+ ( distro.is_a?( Ubuntu ) && [ "postgresql-#{version}" ] ) ||
83
+ [ "postgresql-server" ] )
84
+ end
85
+
86
+ # The service name of the \PostgreSQL server to start
87
+ # (Default: 'postgresql' )
88
+ attr_accessor :service_name
89
+
90
+ # Synchronization level for commit
91
+ # :off may be desirable on high-latency storage (i.e. EBS), at
92
+ # increased risk. (PG Default: :on)
93
+ attr_accessor :synchronous_commit
94
+
95
+ # Commit delay in microseconds
96
+ # 10000 or more may be desirable on high-latency storage, at
97
+ # increased risk. (PG Default: 0 -> none)
98
+ attr_accessor :commit_delay
99
+
100
+ # WAL log segments (16MB each) (PG Default: 3)
101
+ attr_accessor :checkpoint_segments
102
+
103
+ # Shared buffers (Default: '256MB' vs PG: '128MB')
104
+ attr_accessor :shared_buffers
105
+
106
+ # Work memory (Default: '128MB' vs PG: '1MB')
107
+ attr_accessor :work_mem
108
+
109
+ # Maintenance work memory (Default: '128MB' vs PG: '16MB')
110
+ attr_accessor :maintenance_work_mem
111
+
112
+ # Maximum stack depth (Default: '4MB' vs PG: '2MB')
113
+ attr_accessor :max_stack_depth
114
+
115
+ # Concurrent disk I/O operations
116
+ # May help to use RAID device count or similar (PG Default: 1)
117
+ attr_accessor :effective_io_concurrency
118
+
119
+ # Method used in pg_hba.conf for local (unix socket) access
120
+ # (PG Default: :peer)
121
+ attr_accessor :local_access
122
+
123
+ # Method used in pg_hba.conf for local network access. Note
124
+ # that :peer does not work here.
125
+ # (PG Default: :md5)
126
+ attr_accessor :local_network_access
127
+
128
+ # Method used in pg_hba.conf for network access
129
+ # :md5 is a common value for password auth.
130
+ # If truthy, will also set listen_address = '*' in postgresql.conf
131
+ # (PG Default: false -> no access)
132
+ attr_accessor :network_access
133
+
134
+ # IPv4 address mask for #network_access
135
+ # (PG Default: nil -> no IPv4 access)
136
+ attr_accessor :network_v4_mask
137
+
138
+ # IPv6 address mask for #network_access
139
+ # (PG Default: nil -> no IPv4 access)
140
+ attr_accessor :network_v6_mask
141
+
142
+ # Kernel SHMMAX (Shared Memory Maximum) setting to apply.
143
+ # Note that PostgreSQL 9.3 uses mmap and should not need this.
144
+ # Currently this is only set on Ubuntu (RHEL packages take care of
145
+ # it?) (Default: 300MB if #version < 9.3)
146
+ attr_writer :shared_memory_max
147
+
148
+ def shared_memory_max
149
+ @shared_memory_max ||
150
+ ( ( (version_a <=> [9,3]) < 0 ) && 300_000_000 )
64
151
  end
65
152
 
66
153
  def pg_config_dir
@@ -68,12 +155,40 @@ module SyncWrap
68
155
  when RHEL
69
156
  pg_data_dir
70
157
  when Ubuntu
71
- '/etc/postgresql/9.1/main'
158
+ "/etc/postgresql/#{version}/main"
72
159
  else
73
160
  raise ContextError, "Distro #{distro.class.name} not supported"
74
161
  end
75
162
  end
76
163
 
164
+ public
165
+
166
+ def initialize( opts = {} )
167
+ @pg_data_dir = nil
168
+ @pg_default_data_dir = nil
169
+ @version = '9.1'
170
+ @package_names = nil
171
+ @service_name = 'postgresql'
172
+ @synchronous_commit = :on
173
+ @commit_delay = 0
174
+ @checkpoint_segments = 3
175
+ @shared_buffers = '256MB'
176
+ @work_mem = '128MB'
177
+ @maintenance_work_mem = '128MB'
178
+ @max_stack_depth = '4MB'
179
+ @effective_io_concurrency = 1
180
+ @local_access = :peer
181
+ @local_network_access = :md5
182
+ @network_access = false
183
+ @network_v4_mask = nil
184
+ @network_v6_mask = nil
185
+ @shared_memory_max = nil
186
+ super
187
+ end
188
+
189
+ # Calls in order: #package_install, #setup_data_dir, and
190
+ # #pg_configure then ensures the server is running (via #pg_start) or
191
+ # is restarted (via #pg_restart) if there were configuration changes.
77
192
  def install
78
193
  package_install
79
194
  changes = setup_data_dir
@@ -83,17 +198,24 @@ module SyncWrap
83
198
  else
84
199
  pg_restart
85
200
  end
201
+ changes
86
202
  end
87
203
 
204
+ # Install the #package_names. In the Ubuntu case, also install any
205
+ # #shared_memory_max adjustment and stops the server for subsequent
206
+ # reconfigure or data relocation.
88
207
  def package_install
89
- dist_install 'postgresql'
208
+ dist_install( *package_names )
90
209
  if distro.is_a?( Ubuntu )
91
210
  pg_stop
92
- rput( 'etc/sysctl.d/61-postgresql-shm.conf', :user => 'root' )
93
- sudo "sysctl -p /etc/sysctl.d/61-postgresql-shm.conf"
211
+ if shared_memory_max
212
+ rput( 'etc/sysctl.d/61-postgresql-shm.conf', user: :root )
213
+ sudo "sysctl -p /etc/sysctl.d/61-postgresql-shm.conf"
214
+ end
94
215
  end
95
216
  end
96
217
 
218
+ # Initialize or move the server data directory as per #pg_data_dir.
97
219
  def setup_data_dir
98
220
  changes = []
99
221
 
@@ -101,20 +223,16 @@ module SyncWrap
101
223
 
102
224
  when RHEL
103
225
  unless pg_data_dir == pg_default_data_dir
104
- changes = rput( 'etc/sysconfig/pgsql/postgresql', :user => 'root' )
226
+ changes = rput( 'etc/sysconfig/pgsql/postgresql', user: :root )
105
227
  end
106
228
 
107
229
  sudo( "if [ ! -d '#{pg_data_dir}/base' ]; then", close: "fi" ) do
108
- unless pg_data_dir == pg_default_data_dir
109
- # (Per Amazon Linux)
110
- # Install PGDATA var override for init.d/postgresql
111
- sudo <<-SH
112
- mkdir -p #{pg_data_dir}
113
- chown postgres:postgres #{pg_data_dir}
114
- chmod 700 #{pg_data_dir}
115
- SH
116
- end
117
- dist_service( 'postgresql', 'initdb' )
230
+ sudo <<-SH
231
+ mkdir -p #{pg_data_dir}
232
+ chown postgres:postgres #{pg_data_dir}
233
+ chmod 700 #{pg_data_dir}
234
+ SH
235
+ dist_service( service_name, 'initdb' )
118
236
  end
119
237
 
120
238
  when Ubuntu
@@ -133,25 +251,27 @@ module SyncWrap
133
251
  changes
134
252
  end
135
253
 
136
- # Update PostgreSQL config files
254
+ # Update the \PostgreSQL configuration files
137
255
  def pg_configure
138
- changes = rput( "#{pg_deploy_config}/", pg_config_dir, :user => 'postgres' )
139
- if !changes.empty? && pg_config_dir == pg_data_dir
140
- sudo( "chmod 700 #{pg_data_dir}" )
141
- end
142
- changes
256
+ files = %w[ pg_hba.conf pg_ident.conf postgresql.conf ]
257
+ files += %w[ environment pg_ctl.conf ] if distro.is_a?( Ubuntu )
258
+ files = files.map { |f| File.join( 'postgresql', f ) }
259
+ rput( *files, pg_config_dir, user: 'postgres' )
143
260
  end
144
261
 
262
+ # Start the server
145
263
  def pg_start
146
- dist_service( 'postgresql', 'start' )
264
+ dist_service( service_name, 'start' )
147
265
  end
148
266
 
267
+ # Restart the server
149
268
  def pg_restart
150
- dist_service( 'postgresql', 'restart' )
269
+ dist_service( service_name, 'restart' )
151
270
  end
152
271
 
272
+ # Stop the server
153
273
  def pg_stop
154
- dist_service( 'postgresql', 'stop' )
274
+ dist_service( service_name, 'stop' )
155
275
  end
156
276
 
157
277
  end
@@ -27,20 +27,18 @@ module SyncWrap
27
27
 
28
28
  def initialize( opts = {} )
29
29
  super
30
-
31
- packages_map.merge!( 'emacs' => 'emacs-nox',
32
- 'postgresql' => 'postgresql-server' )
33
30
  end
34
31
 
35
- # Install packages.
36
- # A trailing hash is interpreted as options, see below.
32
+ # Install the specified package names. A trailing hash is
33
+ # interpreted as options, see below.
37
34
  #
38
35
  # ==== Options
39
36
  # :succeed:: Always succeed (useful for local rpm files which
40
- # might already be installed.)
37
+ # might already be installed.)
38
+ #
39
+ # Other options will be ignored.
41
40
  def dist_install( *pkgs )
42
41
  opts = pkgs.last.is_a?( Hash ) && pkgs.pop || {}
43
- pkgs = dist_map_packages( pkgs )
44
42
 
45
43
  if opts[ :succeed ]
46
44
  sudo "yum install -q -y #{pkgs.join( ' ' )} || true"
@@ -49,19 +47,23 @@ module SyncWrap
49
47
  end
50
48
  end
51
49
 
50
+ # Uninstall the specified package names.
52
51
  def dist_uninstall( *pkgs )
53
- pkgs = dist_map_packages( pkgs )
54
52
  sudo "yum remove -q -y #{pkgs.join( ' ' )}"
55
53
  end
56
54
 
55
+ # Install a System V style init.d service script
57
56
  def dist_install_init_service( name )
58
57
  sudo "/sbin/chkconfig --add #{name}"
59
58
  end
60
59
 
60
+ # Enable the System V style init.d service
61
61
  def dist_enable_init_service( name )
62
62
  sudo "/sbin/chkconfig #{name} on"
63
63
  end
64
64
 
65
+ # Run via sudo, the service command typically supporting 'start',
66
+ # 'stop', 'restart', 'status', etc. arguments.
65
67
  def dist_service( *args )
66
68
  sudo( [ '/sbin/service', *args ].join( ' ' ) )
67
69
  end
@@ -37,11 +37,11 @@ module SyncWrap
37
37
  end
38
38
 
39
39
  # Home directory for the #run_user
40
- # (default: nil -> unspecified)
40
+ # (default: nil -> same as #run_dir)
41
41
  attr_writer :run_user_home
42
42
 
43
43
  def run_user_home
44
- @run_user_home
44
+ @run_user_home || run_dir
45
45
  end
46
46
 
47
47
  def initialize( opts = {} )
@@ -60,10 +60,10 @@ module SyncWrap
60
60
  # Create run_user if not already present
61
61
  def create_run_user
62
62
  sudo( "if ! id #{run_user} >/dev/null 2>&1; then", close: "fi" ) do
63
- user_opts = "-c 'Run User' -s /bin/bash"
63
+ user_opts = "-r -c 'Run User' -s /bin/bash"
64
64
  user_opts += " -d #{run_user_home}" if run_user_home
65
65
  if run_group && run_group != run_user
66
- sudo "groupadd -f #{run_group}"
66
+ sudo "groupadd -r -f #{run_group}"
67
67
  user_opts += " -g #{run_group}"
68
68
  end
69
69
  sudo "useradd #{user_opts} #{run_user}"
@@ -19,46 +19,48 @@ require 'syncwrap/distro'
19
19
 
20
20
  module SyncWrap
21
21
 
22
- # Customizations for Ubuntu and possibly other Debian/apt packaged
22
+ # Customizations for \Ubuntu and possibly other Debian/apt packaged
23
23
  # derivatives. Specific distros/versions may further specialize.
24
24
  class Ubuntu < Component
25
25
  include SyncWrap::Distro
26
26
 
27
27
  def initialize( opts = {} )
28
28
  super
29
-
30
- packages_map.merge!( 'apr' => 'libapr1',
31
- 'apr-devel' => 'libapr1-dev' )
32
29
  end
33
30
 
34
- # Install packages. The first time this is applied to any given
35
- # host, an "apt-get update" is issued as well. A trailing hash is
36
- # interpreted as options, see below.
31
+ # Install the specified package names. The first time this is
32
+ # applied to any given host, an "apt-get update" is issued as
33
+ # well. A trailing hash is interpreted as options, see below.
37
34
  #
38
35
  # ==== Options
39
36
  # :minimal:: Eqv to --no-install-recommends
37
+ #
38
+ # Other options will be ignored.
40
39
  def dist_install( *args )
41
40
  opts = args.last.is_a?( Hash ) && args.pop || {}
42
- args = dist_map_packages( args )
43
41
  args.unshift "--no-install-recommends" if opts[ :minimal ]
44
42
 
45
43
  sudo( "apt-get -yqq update" ) if first_apt?
46
44
  sudo( "apt-get -yq install #{args.join ' '}" )
47
45
  end
48
46
 
47
+ # Uninstall the specified package names.
49
48
  def dist_uninstall( *pkgs )
50
- pkgs = dist_map_packages( pkgs )
51
49
  sudo "aptitude -yq purge #{pkgs.join ' '}"
52
50
  end
53
51
 
52
+ # Install a System V style init.d service script
54
53
  def dist_install_init_service( name )
55
54
  sudo "/usr/sbin/update-rc.d #{name} defaults"
56
55
  end
57
56
 
57
+ # Enable the System V style init.d service
58
58
  def dist_enable_init_service( name )
59
59
  sudo "/usr/sbin/update-rc.d #{name} enable"
60
60
  end
61
61
 
62
+ # Run via sudo, the service command typically supporting 'start',
63
+ # 'stop', 'restart', 'status', etc. arguments.
62
64
  def dist_service( *args )
63
65
  sudo( [ '/usr/sbin/service', *args ].join( ' ' ) )
64
66
  end