vanagon 0.17.0 → 0.20.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 +4 -4
- data/README.md +2 -2
- data/bin/build +3 -1
- data/bin/build_host_info +3 -1
- data/bin/build_requirements +3 -1
- data/bin/inspect +3 -1
- data/bin/render +3 -1
- data/bin/repo +3 -1
- data/bin/ship +3 -1
- data/bin/sign +3 -1
- data/extras/completions/vanagon.bash +38 -0
- data/extras/completions/vanagon.zsh +41 -0
- data/lib/vanagon/cli.rb +12 -2
- data/lib/vanagon/cli/build.rb +12 -3
- data/lib/vanagon/cli/build_host_info.rb +12 -3
- data/lib/vanagon/cli/build_requirements.rb +13 -5
- data/lib/vanagon/cli/completion.rb +44 -0
- data/lib/vanagon/cli/inspect.rb +12 -3
- data/lib/vanagon/cli/list.rb +74 -0
- data/lib/vanagon/cli/render.rb +11 -2
- data/lib/vanagon/cli/ship.rb +5 -4
- data/lib/vanagon/cli/sign.rb +3 -2
- data/lib/vanagon/component.rb +13 -10
- data/lib/vanagon/component/dsl.rb +27 -20
- data/lib/vanagon/component/source.rb +2 -1
- data/lib/vanagon/component/source/git.rb +35 -10
- data/lib/vanagon/component/source/http.rb +3 -2
- data/lib/vanagon/component/source/local.rb +2 -1
- data/lib/vanagon/component/source/rewrite.rb +3 -2
- data/lib/vanagon/driver.rb +35 -34
- data/lib/vanagon/engine/always_be_scheduling.rb +12 -11
- data/lib/vanagon/engine/docker.rb +2 -1
- data/lib/vanagon/engine/ec2.rb +5 -4
- data/lib/vanagon/engine/hardware.rb +4 -3
- data/lib/vanagon/engine/pooler.rb +6 -5
- data/lib/vanagon/environment.rb +3 -2
- data/lib/vanagon/logger.rb +31 -0
- data/lib/vanagon/platform.rb +38 -5
- data/lib/vanagon/platform/deb.rb +2 -0
- data/lib/vanagon/platform/dsl.rb +23 -6
- data/lib/vanagon/platform/windows.rb +3 -1
- data/lib/vanagon/project.rb +25 -15
- data/lib/vanagon/project/dsl.rb +6 -5
- data/lib/vanagon/utilities.rb +5 -4
- data/resources/deb/control.erb +1 -1
- data/resources/deb/postinst.erb +24 -13
- data/resources/deb/postrm.erb +9 -6
- data/resources/deb/prerm.erb +18 -8
- data/resources/osx/postinstall.erb +5 -1
- data/resources/rpm/project.spec.erb +12 -12
- data/resources/solaris/10/depend.erb +2 -2
- data/resources/solaris/10/postinstall.erb +10 -2
- data/resources/solaris/11/p5m.erb +2 -2
- data/spec/lib/vanagon/cli_spec.rb +143 -0
- data/spec/lib/vanagon/component/dsl_spec.rb +54 -10
- data/spec/lib/vanagon/component/source/git_spec.rb +4 -4
- data/spec/lib/vanagon/component_spec.rb +15 -2
- data/spec/lib/vanagon/driver_spec.rb +1 -1
- data/spec/lib/vanagon/engine/always_be_scheduling_spec.rb +4 -4
- data/spec/lib/vanagon/platform_spec.rb +80 -0
- data/spec/lib/vanagon/utilities_spec.rb +4 -1
- metadata +37 -32
data/lib/vanagon/platform.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'vanagon/environment'
|
2
2
|
require 'vanagon/platform/dsl'
|
3
3
|
require 'vanagon/utilities'
|
4
|
+
require 'vanagon/logger'
|
4
5
|
|
5
6
|
class Vanagon
|
6
7
|
class Platform
|
@@ -32,6 +33,9 @@ class Vanagon
|
|
32
33
|
# Where does a given platform expect to find init scripts/service files?
|
33
34
|
# e.g. /etc/init.d, /usr/lib/systemd/system
|
34
35
|
attr_accessor :servicedir
|
36
|
+
# Array of OpenStructs containing the servicetype and the corresponding
|
37
|
+
# servicedir
|
38
|
+
attr_accessor :servicetypes
|
35
39
|
# Where does a given platform's init system expect to find
|
36
40
|
# something resembling 'defaults' files. Most likely to apply
|
37
41
|
# to Linux systems that use SysV-ish, upstart, or systemd init systems.
|
@@ -152,9 +156,9 @@ class Vanagon
|
|
152
156
|
dsl.instance_eval(File.read(platfile), platfile, 1)
|
153
157
|
dsl._platform
|
154
158
|
rescue StandardError => e
|
155
|
-
|
156
|
-
|
157
|
-
|
159
|
+
VanagonLogger.error "Error loading platform '#{name}' using '#{platfile}':"
|
160
|
+
VanagonLogger.error(e)
|
161
|
+
VanagonLogger.error e.backtrace.join("\n")
|
158
162
|
raise e
|
159
163
|
end
|
160
164
|
|
@@ -244,6 +248,7 @@ class Vanagon
|
|
244
248
|
# Our first attempt at defining metadata about a platform
|
245
249
|
@cross_compiled ||= false
|
246
250
|
@valid_operators ||= ['<', '>', '<=', '>=', '=']
|
251
|
+
@servicetypes = []
|
247
252
|
end
|
248
253
|
|
249
254
|
def shell # rubocop:disable Lint/DuplicateMethods
|
@@ -401,7 +406,7 @@ class Vanagon
|
|
401
406
|
# @deprecated Please use is_macos? instead
|
402
407
|
# @return [true, false] true if it is an osx variety, false otherwise
|
403
408
|
def is_osx?
|
404
|
-
|
409
|
+
VanagonLogger.info "is_osx? is a deprecated method, please use #is_macos? instead."
|
405
410
|
is_macos?
|
406
411
|
end
|
407
412
|
|
@@ -539,7 +544,7 @@ class Vanagon
|
|
539
544
|
match = version_string.match(VERSION_REGEX)
|
540
545
|
|
541
546
|
if match.nil?
|
542
|
-
|
547
|
+
VanagonLogger.info "Passing a version without an operator is deprecated!"
|
543
548
|
operator = default
|
544
549
|
version = version_string
|
545
550
|
end
|
@@ -552,5 +557,33 @@ class Vanagon
|
|
552
557
|
def validate_operator(operator_string)
|
553
558
|
valid_operators.include?(operator_string)
|
554
559
|
end
|
560
|
+
|
561
|
+
# Get all configured service types (added through plat.servicetype)
|
562
|
+
# @return array of service types, empty array if none have been configured
|
563
|
+
def get_service_types
|
564
|
+
if @servicetypes.any?
|
565
|
+
@servicetypes.flat_map(&:servicetype).compact
|
566
|
+
elsif @servicetype
|
567
|
+
[@servicetype]
|
568
|
+
else
|
569
|
+
[]
|
570
|
+
end
|
571
|
+
end
|
572
|
+
|
573
|
+
# Get configured service dir (added through plat.servicedir, or plat.servicetype 'foo', servicedir: 'bar')
|
574
|
+
# @param servicetype the service type you want the service dir for (optional)
|
575
|
+
# @raises VanagonError if more than one service dir is found
|
576
|
+
def get_service_dir(servicetype = '')
|
577
|
+
if @servicetypes.empty?
|
578
|
+
return @servicedir
|
579
|
+
end
|
580
|
+
servicedir = @servicetypes.select { |s| s.servicetype.include?(servicetype) }.flat_map(&:servicedir).compact
|
581
|
+
|
582
|
+
if servicedir.size > 1
|
583
|
+
raise Vanagon::Error, "You can only have one service dir for each service type. Found '#{servicedir.join(',')}' for service type #{servicetype}"
|
584
|
+
end
|
585
|
+
|
586
|
+
servicedir.first
|
587
|
+
end
|
555
588
|
end
|
556
589
|
end
|
data/lib/vanagon/platform/deb.rb
CHANGED
@@ -13,6 +13,8 @@ class Vanagon
|
|
13
13
|
copy_extensions = '*.deb'
|
14
14
|
end
|
15
15
|
pkg_arch_opt = project.noarch ? "" : "-a#{@architecture}"
|
16
|
+
pkg_arch_opt = '-aarm64' if pkg_arch_opt == '-aaarch64'
|
17
|
+
|
16
18
|
["mkdir -p output/#{target_dir}",
|
17
19
|
"mkdir -p $(tempdir)/#{project.name}-#{project.version}",
|
18
20
|
"cp #{project.name}-#{project.version}.tar.gz $(tempdir)/#{project.name}_#{project.version}.orig.tar.gz",
|
data/lib/vanagon/platform/dsl.rb
CHANGED
@@ -8,7 +8,9 @@ require 'vanagon/platform/osx'
|
|
8
8
|
require 'vanagon/platform/solaris_10'
|
9
9
|
require 'vanagon/platform/solaris_11'
|
10
10
|
require 'vanagon/platform/windows'
|
11
|
+
require 'vanagon/logger'
|
11
12
|
require 'securerandom'
|
13
|
+
require 'ostruct'
|
12
14
|
require 'uri'
|
13
15
|
|
14
16
|
class Vanagon
|
@@ -218,6 +220,11 @@ class Vanagon
|
|
218
220
|
# @param dir [String] Directory where service files live on the platform
|
219
221
|
def servicedir(dir)
|
220
222
|
@platform.servicedir = dir
|
223
|
+
|
224
|
+
# Add to the servicetypes array if we haven't already
|
225
|
+
if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty?
|
226
|
+
@platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir)
|
227
|
+
end
|
221
228
|
end
|
222
229
|
|
223
230
|
# Set the directory where default or sysconfig files live for the platform
|
@@ -230,8 +237,18 @@ class Vanagon
|
|
230
237
|
# Set the servicetype for the platform so that services can be installed correctly.
|
231
238
|
#
|
232
239
|
# @param type [String] service type for the platform ('sysv' for example)
|
233
|
-
|
234
|
-
|
240
|
+
# @param servicedir [String] service dir for this platform and service type ('/etc/init.d' for example). Optional.
|
241
|
+
def servicetype(type, servicedir: nil) # rubocop:disable Metrics/AbcSize
|
242
|
+
if servicedir
|
243
|
+
@platform.servicetypes << OpenStruct.new(:servicetype => type, :servicedir => servicedir)
|
244
|
+
else
|
245
|
+
@platform.servicetype = type
|
246
|
+
end
|
247
|
+
|
248
|
+
# Add to the servicetypes array if we haven't already
|
249
|
+
if @platform.servicetype && @platform.servicedir && @platform.servicetypes.select { |s| s.servicetype == @platform.servicetype }.empty?
|
250
|
+
@platform.servicetypes << OpenStruct.new(:servicetype => @platform.servicetype, :servicedir => @platform.servicedir)
|
251
|
+
end
|
235
252
|
end
|
236
253
|
|
237
254
|
# Set the list of possible host to perform a build on (when not using
|
@@ -259,7 +276,7 @@ class Vanagon
|
|
259
276
|
# @param name [String] name that the pooler uses for this platform
|
260
277
|
# @deprecated Please use vmpooler_template instead, this will be removed in a future vanagon release.
|
261
278
|
def vcloud_name(cloud_name)
|
262
|
-
|
279
|
+
VanagonLogger.info "vcloud_name is a deprecated platform DSL method, and will be removed in a future vanagon release. Please use vmpooler_template instead."
|
263
280
|
self.vmpooler_template(cloud_name)
|
264
281
|
end
|
265
282
|
|
@@ -394,7 +411,7 @@ class Vanagon
|
|
394
411
|
# @param gpg_key [String] optional gpg key to be fetched via curl and installed
|
395
412
|
# @deprecated Please use the add_build_repository DSL method instead. apt_repo will be removed in a future vanagon release.
|
396
413
|
def apt_repo(definition, gpg_key = nil)
|
397
|
-
|
414
|
+
VanagonLogger.info "Please use the add_build_repository DSL method instead. apt_repo will be removed in a future vanagon release."
|
398
415
|
self.add_build_repository(definition, gpg_key)
|
399
416
|
end
|
400
417
|
|
@@ -403,7 +420,7 @@ class Vanagon
|
|
403
420
|
# @param definition [String] the repo setup URI or RPM file
|
404
421
|
# @deprecated Please use the add_build_repository DSL method instead. yum_repo will be removed in a future vanagon release.
|
405
422
|
def yum_repo(definition)
|
406
|
-
|
423
|
+
VanagonLogger.info "Please use the add_build_repository DSL method instead. yum_repo will be removed in a future vanagon release."
|
407
424
|
self.add_build_repository(definition)
|
408
425
|
end
|
409
426
|
|
@@ -412,7 +429,7 @@ class Vanagon
|
|
412
429
|
# @param definition [String] the repo setup URI or RPM file
|
413
430
|
# @deprecated Please use the add_build_repository DSL method instead. zypper_repo will be removed in a future vanagon release.
|
414
431
|
def zypper_repo(definition)
|
415
|
-
|
432
|
+
VanagonLogger.info "Please use the add_build_repository DSL method instead. zypper_repo will be removed in a future vanagon release."
|
416
433
|
self.add_build_repository(definition)
|
417
434
|
end
|
418
435
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'vanagon/logger'
|
2
|
+
|
1
3
|
class Vanagon
|
2
4
|
class Platform
|
3
5
|
class Windows < Vanagon::Platform
|
@@ -231,7 +233,7 @@ class Vanagon
|
|
231
233
|
]
|
232
234
|
end
|
233
235
|
rescue RuntimeError
|
234
|
-
|
236
|
+
VanagonLogger.error "Unable to connect to #{project.signing_username}@#{project.signing_hostname}, skipping signing extra files: #{project.extra_files_to_sign.join(',')}"
|
235
237
|
end
|
236
238
|
end
|
237
239
|
make_commands << [
|
data/lib/vanagon/project.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'vanagon/component'
|
2
2
|
require 'vanagon/environment'
|
3
|
+
require 'vanagon/logger'
|
3
4
|
require 'vanagon/platform'
|
4
5
|
require 'vanagon/project/dsl'
|
5
6
|
require 'vanagon/utilities'
|
@@ -130,9 +131,9 @@ class Vanagon
|
|
130
131
|
dsl.instance_eval(File.read(projfile), projfile, 1)
|
131
132
|
dsl._project
|
132
133
|
rescue StandardError => e
|
133
|
-
|
134
|
-
|
135
|
-
|
134
|
+
VanagonLogger.error "Error loading project '#{name}' using '#{projfile}':"
|
135
|
+
VanagonLogger.error(e)
|
136
|
+
VanagonLogger.error e.backtrace.join("\n")
|
136
137
|
raise e
|
137
138
|
end
|
138
139
|
|
@@ -296,10 +297,14 @@ class Vanagon
|
|
296
297
|
#
|
297
298
|
# @return [Array] array of runtime requirements for the project
|
298
299
|
def get_requires
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
300
|
+
requires = []
|
301
|
+
requires << @requires.flatten
|
302
|
+
requires << components.flat_map(&:requires)
|
303
|
+
requires.flatten!
|
304
|
+
requires.each do |requirement|
|
305
|
+
requirement.version = @platform.version_munger(requirement.version, default: '<') if requirement.version
|
306
|
+
end
|
307
|
+
requires.uniq
|
303
308
|
end
|
304
309
|
|
305
310
|
# Collects all of the replacements for the project and its components
|
@@ -307,8 +312,8 @@ class Vanagon
|
|
307
312
|
# @return [Array] array of package level replacements for the project
|
308
313
|
def get_replaces
|
309
314
|
replaces = []
|
310
|
-
replaces
|
311
|
-
replaces
|
315
|
+
replaces << @replaces.flatten
|
316
|
+
replaces << components.flat_map(&:replaces)
|
312
317
|
replaces.flatten!
|
313
318
|
replaces.each do |replace|
|
314
319
|
# TODO: Make this a more reasonable default before 1.0.0
|
@@ -324,8 +329,9 @@ class Vanagon
|
|
324
329
|
|
325
330
|
# Collects all of the conflicts for the project and its components
|
326
331
|
def get_conflicts
|
327
|
-
conflicts =
|
328
|
-
|
332
|
+
conflicts = []
|
333
|
+
conflicts << @conflicts.flatten
|
334
|
+
conflicts << components.flat_map(&:conflicts)
|
329
335
|
conflicts.flatten!
|
330
336
|
conflicts.each do |conflict|
|
331
337
|
# TODO: Make this a more reasonable default before 1.0.0
|
@@ -345,10 +351,14 @@ class Vanagon
|
|
345
351
|
# will return nil
|
346
352
|
#
|
347
353
|
# @param [string] name of service to grab
|
348
|
-
# @return [@component.service obj] specific service
|
354
|
+
# @return [@component.service obj] specific service, or array of services
|
355
|
+
# if there's more than one
|
349
356
|
def get_service(name)
|
350
357
|
components.each do |component|
|
351
358
|
if component.name == name
|
359
|
+
if component.service.size == 1
|
360
|
+
return component.service.first
|
361
|
+
end
|
352
362
|
return component.service
|
353
363
|
end
|
354
364
|
end
|
@@ -360,8 +370,8 @@ class Vanagon
|
|
360
370
|
# @return [Array] array of package level provides for the project
|
361
371
|
def get_provides
|
362
372
|
provides = []
|
363
|
-
provides
|
364
|
-
provides
|
373
|
+
provides << @provides.flatten
|
374
|
+
provides << components.flat_map(&:provides)
|
365
375
|
provides.flatten!
|
366
376
|
provides.each do |provide|
|
367
377
|
# TODO: Make this a more reasonable default before 1.0.0
|
@@ -841,7 +851,7 @@ class Vanagon
|
|
841
851
|
end
|
842
852
|
|
843
853
|
def load_upstream_metadata(metadata_uri)
|
844
|
-
|
854
|
+
VanagonLogger.info "Loading metadata from #{metadata_uri}"
|
845
855
|
case metadata_uri
|
846
856
|
when /^http/
|
847
857
|
@upstream_metadata = JSON.parse(Net::HTTP.get(URI(metadata_uri)))
|
data/lib/vanagon/project/dsl.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'vanagon/errors'
|
2
|
+
require 'vanagon/logger'
|
2
3
|
require 'vanagon/project'
|
3
4
|
require 'vanagon/utilities'
|
4
5
|
require 'vanagon/component/source'
|
@@ -109,8 +110,8 @@ class Vanagon
|
|
109
110
|
# Sets the run time requirements for the project. Mainly for use in packaging.
|
110
111
|
#
|
111
112
|
# @param req [String] of requirements of the project
|
112
|
-
def requires(
|
113
|
-
@project.requires <<
|
113
|
+
def requires(requirement, version = nil)
|
114
|
+
@project.requires << OpenStruct.new(:requirement => requirement, :version => version)
|
114
115
|
end
|
115
116
|
|
116
117
|
# Indicates that this component replaces a system level package. Replaces can be collected and used by the project and package.
|
@@ -185,7 +186,7 @@ class Vanagon
|
|
185
186
|
last_tag = repo_object.describe('HEAD', { :abbrev => 0 })
|
186
187
|
release(repo_object.rev_list("#{last_tag}..HEAD", { :count => true }))
|
187
188
|
rescue Git::GitExecuteError
|
188
|
-
|
189
|
+
VanagonLogger.error "Directory '#{File.expand_path('..', @configdir)}' cannot be versioned by git. Maybe it hasn't been tagged yet?"
|
189
190
|
end
|
190
191
|
|
191
192
|
# Sets the version for the project based on a git describe of the
|
@@ -196,7 +197,7 @@ class Vanagon
|
|
196
197
|
git_version = Git.open(File.expand_path("..", @configdir)).describe('HEAD', tags: true)
|
197
198
|
version(git_version.split('-').reject(&:empty?).join('.'))
|
198
199
|
rescue Git::GitExecuteError
|
199
|
-
|
200
|
+
VanagonLogger.error "Directory '#{File.expand_path('..', @configdir)}' cannot be versioned by git. Maybe it hasn't been tagged yet?"
|
200
201
|
end
|
201
202
|
|
202
203
|
# Get the version string from a git branch name. This will look for a '.'
|
@@ -268,7 +269,7 @@ class Vanagon
|
|
268
269
|
#
|
269
270
|
# @param name [String] name of component to add. must be present in configdir/components and named $name.rb currently
|
270
271
|
def component(name)
|
271
|
-
|
272
|
+
VanagonLogger.info "Loading #{name}" if @project.settings[:verbose]
|
272
273
|
if @include_components.empty? or @include_components.include?(name)
|
273
274
|
component = Vanagon::Component.load_component(name, File.join(@configdir, "components"), @project.settings, @project.platform)
|
274
275
|
@project.components << component
|
data/lib/vanagon/utilities.rb
CHANGED
@@ -9,6 +9,7 @@ require 'timeout'
|
|
9
9
|
# but it provides a wealth of useful constants
|
10
10
|
require 'English'
|
11
11
|
require 'vanagon/extensions/string'
|
12
|
+
require 'vanagon/logger'
|
12
13
|
|
13
14
|
class Vanagon
|
14
15
|
module Utilities
|
@@ -165,7 +166,7 @@ class Vanagon
|
|
165
166
|
yield
|
166
167
|
return true
|
167
168
|
rescue StandardError => e
|
168
|
-
|
169
|
+
VanagonLogger.error 'An error was encountered evaluating block. Retrying..'
|
169
170
|
error = e
|
170
171
|
end
|
171
172
|
end
|
@@ -238,7 +239,7 @@ class Vanagon
|
|
238
239
|
# output of the command if return_command_output is true
|
239
240
|
# @raise [RuntimeError] If there is no target given or the command fails an exception is raised
|
240
241
|
def remote_ssh_command(target, command, port = 22, return_command_output: false)
|
241
|
-
|
242
|
+
VanagonLogger.info "Executing '#{command}' on '#{target}'"
|
242
243
|
if return_command_output
|
243
244
|
ret = %x(#{ssh_command(port)} -T #{target} '#{command.gsub("'", "'\\\\''")}').chomp
|
244
245
|
if $CHILD_STATUS.success?
|
@@ -261,7 +262,7 @@ class Vanagon
|
|
261
262
|
# @raise [RuntimeError] If the command fails an exception is raised
|
262
263
|
def local_command(command, return_command_output: false)
|
263
264
|
clean_environment do
|
264
|
-
|
265
|
+
VanagonLogger.info "Executing '#{command}' locally"
|
265
266
|
if return_command_output
|
266
267
|
ret = %x(#{command}).chomp
|
267
268
|
if $CHILD_STATUS.success?
|
@@ -305,7 +306,7 @@ class Vanagon
|
|
305
306
|
outfile ||= File.join(Dir.mktmpdir, File.basename(erbfile).sub(File.extname(erbfile), ""))
|
306
307
|
output = erb_string(erbfile, opts[:binding])
|
307
308
|
File.open(outfile, 'w') { |f| f.write output }
|
308
|
-
|
309
|
+
VanagonLogger.info "Generated: #{outfile}"
|
309
310
|
FileUtils.rm_rf erbfile if remove_orig
|
310
311
|
outfile
|
311
312
|
end
|
data/resources/deb/control.erb
CHANGED
@@ -18,7 +18,7 @@ Breaks: <%= get_replaces.map { |replace| "#{replace.replacement} #{replace.versi
|
|
18
18
|
Conflicts: <%= get_conflicts.map { |conflict| "#{conflict.pkgname} #{conflict.version ? "(#{conflict.version})" : ""}" }.join(", ") %>
|
19
19
|
<%- end -%>
|
20
20
|
<%- unless get_requires.empty? -%>
|
21
|
-
Depends: <%= get_requires.join(", ") %>
|
21
|
+
Depends: <%= get_requires.map { |req| "#{req.requirement} #{req.version ? "(#{req.version})" : ""}" }.join(", ") %>
|
22
22
|
<%- end -%>
|
23
23
|
<%- unless get_provides.empty? -%>
|
24
24
|
Provides: <%= get_provides.map { |prov| prov.provide }.join(", ") %>
|
data/resources/deb/postinst.erb
CHANGED
@@ -2,18 +2,29 @@
|
|
2
2
|
<%- get_services.each do |service| -%>
|
3
3
|
# switch based on systemd vs systemv
|
4
4
|
#
|
5
|
-
<%- if
|
6
|
-
if [ -
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
<%- if service.init_system.nil? || service.init_system.eql?('systemd') -%>
|
6
|
+
if [ -f '/proc/1/comm' ]; then
|
7
|
+
init_comm=`cat /proc/1/comm`
|
8
|
+
if [ "$init_comm" = "systemd" ]; then
|
9
|
+
if [ -z "$2" ]; then
|
10
|
+
systemctl enable <%= service.name %>.service >/dev/null || :
|
11
|
+
else
|
12
|
+
systemctl try-restart <%= service.name %>.service >/dev/null || :
|
13
|
+
fi
|
14
|
+
fi
|
10
15
|
fi
|
11
|
-
<%-
|
12
|
-
if
|
13
|
-
|
16
|
+
<%- end -%>
|
17
|
+
<%- if service.init_system.nil? || service.init_system.eql?('sysv') -%>
|
18
|
+
if [ -f '/proc/1/comm' ]; then
|
19
|
+
init_comm=`cat /proc/1/comm`
|
20
|
+
if [ "$init_comm" = "init" ]; then
|
21
|
+
if [ -x "<%= service.service_file %>" ]; then
|
22
|
+
update-rc.d <%= service.name %> defaults > /dev/null
|
14
23
|
|
15
|
-
|
16
|
-
|
24
|
+
if [ -n "$2" ]; then
|
25
|
+
invoke-rc.d <%= service.name %> condrestart || true
|
26
|
+
fi
|
27
|
+
fi
|
17
28
|
fi
|
18
29
|
fi
|
19
30
|
<%- end -%>
|
@@ -27,17 +38,17 @@ fi
|
|
27
38
|
|
28
39
|
# Set up any specific permissions needed...
|
29
40
|
<%- (get_directories + get_configfiles + get_files).select { |pathname| pathname.has_overrides? }.uniq.each do |file_or_directory| -%>
|
30
|
-
<%= "chmod '#{file_or_directory.mode}' '#{file_or_directory.path}'" if file_or_directory.mode %>
|
41
|
+
<%= "chmod '#{file_or_directory.mode}' '#{file_or_directory.path}' &>/dev/null ||:" if file_or_directory.mode %>
|
31
42
|
<%- if file_or_directory.owner -%>
|
32
43
|
if getent passwd '<%= file_or_directory.owner %>' &> /dev/null; then
|
33
|
-
chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>'
|
44
|
+
chown '<%= file_or_directory.owner %>' '<%= file_or_directory.path %>' &>/dev/null ||:
|
34
45
|
else
|
35
46
|
echo "Error updating '<%= file_or_directory.path %>': user '<%= file_or_directory.owner %>' does not exist."
|
36
47
|
fi
|
37
48
|
<%- end -%>
|
38
49
|
<%- if file_or_directory.group -%>
|
39
50
|
if getent group '<%= file_or_directory.group %>' &> /dev/null; then
|
40
|
-
chgrp '<%= file_or_directory.group %>' '<%= file_or_directory.path %>'
|
51
|
+
chgrp '<%= file_or_directory.group %>' '<%= file_or_directory.path %>' &>/dev/null ||:
|
41
52
|
else
|
42
53
|
echo "Error updating '<%= file_or_directory.path %>': group '<%= file_or_directory.group %>' does not exist."
|
43
54
|
fi
|
data/resources/deb/postrm.erb
CHANGED
@@ -13,11 +13,14 @@ fi
|
|
13
13
|
<%- get_services.each do |service| -%>
|
14
14
|
# switch based on systemd vs systemv
|
15
15
|
#
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
if [ -f '/proc/1/comm' ]; then
|
17
|
+
init_comm=`cat /proc/1/comm`
|
18
|
+
if [ "$init_comm" = "systemd" ]; then
|
19
|
+
systemctl daemon-reload >/dev/null 2>&1 || :
|
20
|
+
else
|
21
|
+
if [ "$1" = "purge" ] ; then
|
22
|
+
update-rc.d <%= service.name %> remove > /dev/null
|
23
|
+
fi
|
24
|
+
fi
|
21
25
|
fi
|
22
|
-
<%- end -%>
|
23
26
|
<%- end -%>
|