omnibus 6.1.9 → 8.0.15
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/Gemfile +0 -4
- data/README.md +54 -13
- data/bin/omnibus +1 -1
- data/lib/omnibus.rb +2 -2
- data/lib/omnibus/build_version.rb +1 -1
- data/lib/omnibus/build_version_dsl.rb +5 -7
- data/lib/omnibus/builder.rb +4 -4
- data/lib/omnibus/cleaner.rb +1 -1
- data/lib/omnibus/cli.rb +2 -2
- data/lib/omnibus/cli/changelog.rb +1 -1
- data/lib/omnibus/compressor.rb +2 -2
- data/lib/omnibus/compressors/base.rb +2 -2
- data/lib/omnibus/compressors/dmg.rb +5 -2
- data/lib/omnibus/compressors/tgz.rb +2 -2
- data/lib/omnibus/config.rb +13 -3
- data/lib/omnibus/core_extensions/open_uri.rb +1 -1
- data/lib/omnibus/digestable.rb +2 -2
- data/lib/omnibus/download_helpers.rb +6 -2
- data/lib/omnibus/fetchers/file_fetcher.rb +1 -1
- data/lib/omnibus/fetchers/net_fetcher.rb +1 -1
- data/lib/omnibus/fetchers/path_fetcher.rb +1 -1
- data/lib/omnibus/file_syncer.rb +1 -1
- data/lib/omnibus/generator.rb +2 -2
- data/lib/omnibus/generator_files/README.md.erb +20 -16
- data/lib/omnibus/generator_files/config/software/preparation.rb.erb +1 -1
- data/lib/omnibus/generator_files/omnibus.rb.erb +5 -4
- data/lib/omnibus/git_cache.rb +2 -2
- data/lib/omnibus/health_check.rb +2 -0
- data/lib/omnibus/licensing.rb +3 -3
- data/lib/omnibus/logger.rb +1 -1
- data/lib/omnibus/manifest.rb +1 -1
- data/lib/omnibus/metadata.rb +3 -3
- data/lib/omnibus/ohai.rb +1 -1
- data/lib/omnibus/package.rb +1 -1
- data/lib/omnibus/packager.rb +6 -14
- data/lib/omnibus/packagers/base.rb +1 -1
- data/lib/omnibus/packagers/msi.rb +1 -1
- data/lib/omnibus/packagers/pkg.rb +122 -3
- data/lib/omnibus/packagers/solaris.rb +1 -1
- data/lib/omnibus/project.rb +2 -2
- data/lib/omnibus/publishers/artifactory_publisher.rb +2 -2
- data/lib/omnibus/publishers/s3_publisher.rb +6 -4
- data/lib/omnibus/s3_cache.rb +4 -2
- data/lib/omnibus/s3_helpers.rb +7 -7
- data/lib/omnibus/software.rb +52 -34
- data/lib/omnibus/sugarable.rb +5 -14
- data/lib/omnibus/templating.rb +1 -1
- data/lib/omnibus/thread_pool.rb +0 -2
- data/lib/omnibus/util.rb +1 -1
- data/lib/omnibus/version.rb +1 -1
- data/lib/omnibus/whitelist.rb +24 -1
- data/omnibus.gemspec +7 -8
- data/resources/ips/doc-transform.erb +1 -0
- data/resources/msi/CustomActionFastMsi.CA.dll +0 -0
- data/resources/msi/source.wxs.erb +2 -10
- data/resources/rpm/signing.erb +7 -10
- data/spec/support/path_helpers.rb +2 -2
- data/spec/unit/compressor_spec.rb +1 -1
- data/spec/unit/compressors/dmg_spec.rb +5 -2
- data/spec/unit/metadata_spec.rb +6 -6
- data/spec/unit/packager_spec.rb +6 -13
- data/spec/unit/packagers/ips_spec.rb +1 -0
- data/spec/unit/packagers/pkg_spec.rb +354 -0
- data/spec/unit/packagers/rpm_spec.rb +5 -5
- data/spec/unit/project_spec.rb +5 -5
- data/spec/unit/s3_cacher_spec.rb +17 -0
- data/spec/unit/s3_helpers_spec.rb +20 -1
- data/spec/unit/software_spec.rb +58 -119
- metadata +22 -22
data/lib/omnibus/project.rb
CHANGED
@@ -15,8 +15,8 @@
|
|
15
15
|
# limitations under the License.
|
16
16
|
#
|
17
17
|
|
18
|
-
require "time"
|
19
|
-
require "ffi_yajl"
|
18
|
+
require "time" unless defined?(Time.zone_offset)
|
19
|
+
require "ffi_yajl" unless defined?(FFI_Yajl)
|
20
20
|
require "omnibus/manifest"
|
21
21
|
require "omnibus/manifest_entry"
|
22
22
|
require "omnibus/reports"
|
@@ -65,11 +65,13 @@ module Omnibus
|
|
65
65
|
bucket_name: @options[:bucket],
|
66
66
|
}
|
67
67
|
|
68
|
-
if Config.
|
69
|
-
config[:
|
68
|
+
if Config.publish_s3_iam_role_arn
|
69
|
+
config[:publish_s3_iam_role_arn] = Config.publish_s3_iam_role_arn
|
70
|
+
elsif Config.publish_s3_profile
|
71
|
+
config[:profile] = Config.publish_s3_profile
|
70
72
|
else
|
71
|
-
config[:access_key_id]
|
72
|
-
config[:secret_access_key]
|
73
|
+
config[:access_key_id] = Config.publish_s3_access_key
|
74
|
+
config[:secret_access_key] = Config.publish_s3_secret_key
|
73
75
|
end
|
74
76
|
|
75
77
|
config
|
data/lib/omnibus/s3_cache.rb
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
-
require "fileutils"
|
17
|
+
require "fileutils" unless defined?(FileUtils)
|
18
18
|
require "omnibus/s3_helpers"
|
19
19
|
|
20
20
|
module Omnibus
|
@@ -147,7 +147,9 @@ module Omnibus
|
|
147
147
|
force_path_style: Config.s3_force_path_style,
|
148
148
|
}
|
149
149
|
|
150
|
-
if Config.
|
150
|
+
if Config.s3_iam_role_arn
|
151
|
+
config[:iam_role_arn] = Config.s3_iam_role_arn
|
152
|
+
elsif Config.s3_profile
|
151
153
|
config[:profile] = Config.s3_profile
|
152
154
|
else
|
153
155
|
config[:access_key_id] = Config.s3_access_key
|
data/lib/omnibus/s3_helpers.rb
CHANGED
@@ -17,7 +17,7 @@
|
|
17
17
|
require "aws-sdk-s3"
|
18
18
|
require "aws-sdk-core/credentials"
|
19
19
|
require "aws-sdk-core/shared_credentials"
|
20
|
-
require "base64"
|
20
|
+
require "base64" unless defined?(Base64)
|
21
21
|
|
22
22
|
module Omnibus
|
23
23
|
module S3Helpers
|
@@ -53,10 +53,7 @@ module Omnibus
|
|
53
53
|
# @return [Aws::S3::Resource]
|
54
54
|
#
|
55
55
|
def client
|
56
|
-
Aws.config.update(
|
57
|
-
region: s3_configuration[:region],
|
58
|
-
credentials: get_credentials
|
59
|
-
)
|
56
|
+
Aws.config.update(region: s3_configuration[:region])
|
60
57
|
|
61
58
|
@s3_client ||= Aws::S3::Resource.new(resource_params)
|
62
59
|
end
|
@@ -70,6 +67,7 @@ module Omnibus
|
|
70
67
|
params = {
|
71
68
|
use_accelerate_endpoint: s3_configuration[:use_accelerate_endpoint],
|
72
69
|
force_path_style: s3_configuration[:force_path_style],
|
70
|
+
credentials: get_credentials,
|
73
71
|
}
|
74
72
|
|
75
73
|
if s3_configuration[:use_accelerate_endpoint]
|
@@ -84,12 +82,14 @@ module Omnibus
|
|
84
82
|
end
|
85
83
|
|
86
84
|
#
|
87
|
-
# Create credentials object based on credential profile or access key
|
85
|
+
# Create credentials object based on AWS IAM role arn, credential profile or access key
|
88
86
|
# parameters for use by the client object.
|
89
87
|
#
|
90
88
|
# @return [Aws::SharedCredentials, Aws::Credentials]
|
91
89
|
def get_credentials
|
92
|
-
if s3_configuration[:
|
90
|
+
if s3_configuration[:iam_role_arn]
|
91
|
+
Aws::AssumeRoleCredentials.new(role_arn: s3_configuration[:iam_role_arn], role_session_name: "omnibus-assume-role-s3-access")
|
92
|
+
elsif s3_configuration[:profile]
|
93
93
|
Aws::SharedCredentials.new(profile_name: s3_configuration[:profile])
|
94
94
|
elsif s3_configuration[:access_key_id] && s3_configuration[:secret_access_key]
|
95
95
|
Aws::Credentials.new(s3_configuration[:access_key_id], s3_configuration[:secret_access_key])
|
data/lib/omnibus/software.rb
CHANGED
@@ -14,8 +14,8 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
-
require "fileutils"
|
18
|
-
require "uri"
|
17
|
+
require "fileutils" unless defined?(FileUtils)
|
18
|
+
require "uri" unless defined?(URI)
|
19
19
|
require "omnibus/manifest_entry"
|
20
20
|
|
21
21
|
module Omnibus
|
@@ -205,6 +205,46 @@ module Omnibus
|
|
205
205
|
end
|
206
206
|
expose :maintainer
|
207
207
|
|
208
|
+
#
|
209
|
+
# Sets the bin_dirs where this software installs bins.
|
210
|
+
#
|
211
|
+
# @example
|
212
|
+
# bin_dirs ['/opt/chef-workstation/bin']
|
213
|
+
#
|
214
|
+
# @param [Array<String>] val
|
215
|
+
# the bin_dirs of the software
|
216
|
+
#
|
217
|
+
# @return [Array<String>]
|
218
|
+
#
|
219
|
+
def bin_dirs(val = NULL)
|
220
|
+
if null?(val)
|
221
|
+
@bin_dirs || [windows_safe_path("#{install_dir}/bin"), windows_safe_path("#{install_dir}/embedded/bin")]
|
222
|
+
else
|
223
|
+
@bin_dirs = val
|
224
|
+
end
|
225
|
+
end
|
226
|
+
expose :bin_dirs
|
227
|
+
|
228
|
+
#
|
229
|
+
# Sets the lib_dirs where this software installs libs.
|
230
|
+
#
|
231
|
+
# @example
|
232
|
+
# lib_dirs ['/opt/chef-workstation/bin']
|
233
|
+
#
|
234
|
+
# @param [Array<String>] val
|
235
|
+
# the lib_dirs of the software
|
236
|
+
#
|
237
|
+
# @return [Array<String>]
|
238
|
+
#
|
239
|
+
def lib_dirs(val = NULL)
|
240
|
+
if null?(val)
|
241
|
+
@lib_dirs || [windows_safe_path("#{install_dir}/embedded/lib")]
|
242
|
+
else
|
243
|
+
@lib_dirs = val
|
244
|
+
end
|
245
|
+
end
|
246
|
+
expose :lib_dirs
|
247
|
+
|
208
248
|
#
|
209
249
|
# Add a software dependency to this software.
|
210
250
|
#
|
@@ -485,7 +525,7 @@ module Omnibus
|
|
485
525
|
return if final_version.nil?
|
486
526
|
|
487
527
|
begin
|
488
|
-
|
528
|
+
ChefUtils::VersionString.new(final_version)
|
489
529
|
rescue ArgumentError
|
490
530
|
log.warn(log_key) do
|
491
531
|
"Version #{final_version} for software #{name} was not parseable. " \
|
@@ -668,40 +708,18 @@ module Omnibus
|
|
668
708
|
"ARFLAGS" => "-X64 cru",
|
669
709
|
}
|
670
710
|
when "solaris2"
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
"LDFLAGS" => "-R#{install_dir}/embedded/lib -L#{install_dir}/embedded/lib -static-libgcc",
|
677
|
-
"CFLAGS" => "-I#{install_dir}/embedded/include -O2",
|
678
|
-
}
|
679
|
-
elsif platform_version.satisfies?(">= 5.11")
|
680
|
-
solaris_flags = {
|
681
|
-
"CC" => "gcc -m64 -static-libgcc",
|
682
|
-
"LDFLAGS" => "-Wl,-rpath,#{install_dir}/embedded/lib -L#{install_dir}/embedded/lib -static-libgcc",
|
683
|
-
"CFLAGS" => "-I#{install_dir}/embedded/include -O2",
|
684
|
-
}
|
685
|
-
end
|
686
|
-
solaris_flags
|
711
|
+
{
|
712
|
+
"CC" => "gcc -m64 -static-libgcc",
|
713
|
+
"LDFLAGS" => "-Wl,-rpath,#{install_dir}/embedded/lib -L#{install_dir}/embedded/lib -static-libgcc",
|
714
|
+
"CFLAGS" => "-I#{install_dir}/embedded/include -O2",
|
715
|
+
}
|
687
716
|
when "freebsd"
|
688
717
|
{
|
689
718
|
"CC" => "clang",
|
690
719
|
"CXX" => "clang++",
|
691
720
|
"LDFLAGS" => "-L#{install_dir}/embedded/lib",
|
692
|
-
"CFLAGS" => "-I#{install_dir}/embedded/include -O2",
|
693
|
-
}
|
694
|
-
when "suse"
|
695
|
-
suse_flags = {
|
696
|
-
"LDFLAGS" => "-Wl,-rpath,#{install_dir}/embedded/lib -L#{install_dir}/embedded/lib",
|
697
|
-
"CFLAGS" => "-I#{install_dir}/embedded/include -O2",
|
721
|
+
"CFLAGS" => "-I#{install_dir}/embedded/include -O2 -D_FORTIFY_SOURCE=2 -fstack-protector",
|
698
722
|
}
|
699
|
-
# Enable gcc version 4.8 if it is available
|
700
|
-
if which("gcc-4.8") && platform_version.satisfies?("< 12")
|
701
|
-
suse_flags["CC"] = "gcc-4.8"
|
702
|
-
suse_flags["CXX"] = "g++-4.8"
|
703
|
-
end
|
704
|
-
suse_flags
|
705
723
|
when "windows"
|
706
724
|
arch_flag = windows_arch_i386? ? "-m32" : "-m64"
|
707
725
|
opt_flag = windows_arch_i386? ? "-march=i686" : "-march=x86-64"
|
@@ -721,7 +739,7 @@ module Omnibus
|
|
721
739
|
else
|
722
740
|
{
|
723
741
|
"LDFLAGS" => "-Wl,-rpath,#{install_dir}/embedded/lib -L#{install_dir}/embedded/lib",
|
724
|
-
"CFLAGS" => "-I#{install_dir}/embedded/include -O2",
|
742
|
+
"CFLAGS" => "-I#{install_dir}/embedded/include -O2 -D_FORTIFY_SOURCE=2 -fstack-protector",
|
725
743
|
}
|
726
744
|
end
|
727
745
|
|
@@ -1075,8 +1093,8 @@ module Omnibus
|
|
1075
1093
|
log.info(log_key) do
|
1076
1094
|
"Forcing a build because resolved version is nil"
|
1077
1095
|
end
|
1078
|
-
execute_build
|
1079
|
-
project.dirty!(self)
|
1096
|
+
execute_build(build_wrappers)
|
1097
|
+
project.dirty!(self) unless project.dirty? # omnibus can only be mildly dirty
|
1080
1098
|
elsif project.dirty?
|
1081
1099
|
log.info(log_key) do
|
1082
1100
|
"Building because `#{project.culprit.name}' dirtied the cache"
|
data/lib/omnibus/sugarable.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
# Copyright 2014-
|
2
|
+
# Copyright 2014-2020, Chef Software Inc.
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
# you may not use this file except in compliance with the License.
|
@@ -14,31 +14,22 @@
|
|
14
14
|
# limitations under the License.
|
15
15
|
#
|
16
16
|
|
17
|
-
require "chef
|
18
|
-
require "chef/sugar/cloud"
|
19
|
-
require "chef/sugar/constraints"
|
20
|
-
require "chef/sugar/ip"
|
21
|
-
require "chef/sugar/init"
|
22
|
-
require "chef/sugar/platform"
|
23
|
-
require "chef/sugar/platform_family"
|
24
|
-
require "chef/sugar/ruby"
|
25
|
-
require "chef/sugar/shell"
|
26
|
-
require "chef/sugar/vagrant"
|
17
|
+
require "chef-utils" unless defined?(ChefUtils::CANARY)
|
27
18
|
|
28
19
|
module Omnibus
|
29
20
|
module Sugarable
|
30
21
|
def self.extended(base)
|
31
|
-
base.send(:extend,
|
22
|
+
base.send(:extend, ChefUtils)
|
32
23
|
base.send(:extend, Omnibus::Sugar)
|
33
24
|
end
|
34
25
|
|
35
26
|
def self.included(base)
|
36
|
-
base.send(:include,
|
27
|
+
base.send(:include, ChefUtils)
|
37
28
|
base.send(:include, Omnibus::Sugar)
|
38
29
|
|
39
30
|
if base < Cleanroom
|
40
31
|
# Make all the "sugars" available in the cleanroom (DSL)
|
41
|
-
|
32
|
+
ChefUtils.instance_methods.each do |instance_method|
|
42
33
|
base.send(:expose, instance_method)
|
43
34
|
end
|
44
35
|
|
data/lib/omnibus/templating.rb
CHANGED
data/lib/omnibus/thread_pool.rb
CHANGED
data/lib/omnibus/util.rb
CHANGED
data/lib/omnibus/version.rb
CHANGED
data/lib/omnibus/whitelist.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
# Copyright 2012-
|
2
|
+
# Copyright 2012-2020, Chef Software Inc.
|
3
3
|
#
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
# you may not use this file except in compliance with the License.
|
@@ -16,6 +16,7 @@
|
|
16
16
|
|
17
17
|
WHITELIST_LIBS = [
|
18
18
|
/ld-linux/,
|
19
|
+
/libanl\.so/,
|
19
20
|
/libc\.so/,
|
20
21
|
/libcrypt\.so/,
|
21
22
|
/libdl/,
|
@@ -33,6 +34,7 @@ WHITELIST_LIBS = [
|
|
33
34
|
].freeze
|
34
35
|
|
35
36
|
ARCH_WHITELIST_LIBS = [
|
37
|
+
/libanl\.so/,
|
36
38
|
/libc\.so/,
|
37
39
|
/libcrypt\.so/,
|
38
40
|
/libdb-5\.3\.so/,
|
@@ -56,6 +58,27 @@ AIX_WHITELIST_LIBS = [
|
|
56
58
|
/unix$/,
|
57
59
|
].freeze
|
58
60
|
|
61
|
+
OMNIOS_WHITELIST_LIBS = [
|
62
|
+
/libc\.so\.1/,
|
63
|
+
/libcrypt\./,
|
64
|
+
/libcrypt\.so\.1/,
|
65
|
+
/libdl\.so\.1/,
|
66
|
+
/libgcc_s\.so\.1/,
|
67
|
+
/libgen\.so\.1/,
|
68
|
+
/libm\.so\.2/,
|
69
|
+
/libmd\.so\.1/,
|
70
|
+
/libmp\.so/,
|
71
|
+
/libmp\.so\.2/,
|
72
|
+
/libnsl\.so\.1/,
|
73
|
+
/libpthread\.so\.1/,
|
74
|
+
/librt\.so\.1/,
|
75
|
+
/libsocket\.so\.1/,
|
76
|
+
/libssp\.s/,
|
77
|
+
/libssp\.so./,
|
78
|
+
/libssp\.so\.0/,
|
79
|
+
/libgcc_s\.so\.1/,
|
80
|
+
].freeze
|
81
|
+
|
59
82
|
SOLARIS_WHITELIST_LIBS = [
|
60
83
|
/libaio\.so/,
|
61
84
|
/libavl\.so/,
|
data/omnibus.gemspec
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
lib = File.expand_path("../lib", __FILE__)
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require "omnibus/version"
|
5
4
|
|
@@ -13,7 +12,7 @@ Gem::Specification.new do |gem|
|
|
13
12
|
gem.description = gem.summary
|
14
13
|
gem.homepage = "https://github.com/chef/omnibus"
|
15
14
|
|
16
|
-
gem.required_ruby_version = ">= 2.
|
15
|
+
gem.required_ruby_version = ">= 2.6"
|
17
16
|
|
18
17
|
gem.files = %w{ LICENSE README.md Rakefile Gemfile } + Dir.glob("*.gemspec") + Dir.glob("{bin,lib,resources,spec}/**/{*,.kitchen*}")
|
19
18
|
gem.bindir = "bin"
|
@@ -22,13 +21,13 @@ Gem::Specification.new do |gem|
|
|
22
21
|
gem.require_paths = ["lib"]
|
23
22
|
|
24
23
|
gem.add_dependency "aws-sdk-s3", "~> 1"
|
25
|
-
gem.add_dependency "chef-
|
24
|
+
gem.add_dependency "chef-utils", ">= 15.4"
|
26
25
|
gem.add_dependency "chef-cleanroom", "~> 1.0"
|
27
26
|
gem.add_dependency "ffi-yajl", "~> 2.2"
|
28
27
|
gem.add_dependency "mixlib-shellout", ">= 2.0", "< 4.0"
|
29
|
-
gem.add_dependency "ohai", ">=
|
28
|
+
gem.add_dependency "ohai", ">= 15"
|
30
29
|
gem.add_dependency "ruby-progressbar", "~> 1.7"
|
31
|
-
gem.add_dependency "thor", "
|
30
|
+
gem.add_dependency "thor", ">= 0.18", "< 2.0"
|
32
31
|
gem.add_dependency "license_scout", "~> 1.0"
|
33
32
|
|
34
33
|
gem.add_dependency "mixlib-versioning"
|
@@ -36,8 +35,8 @@ Gem::Specification.new do |gem|
|
|
36
35
|
|
37
36
|
gem.add_development_dependency "artifactory", "~> 3.0"
|
38
37
|
gem.add_development_dependency "aruba", "~> 0.5"
|
39
|
-
gem.add_development_dependency "chefstyle", "=
|
40
|
-
gem.add_development_dependency "fauxhai",
|
38
|
+
gem.add_development_dependency "chefstyle", "= 1.6.2"
|
39
|
+
gem.add_development_dependency "fauxhai-ng", ">= 7.5"
|
41
40
|
gem.add_development_dependency "rspec", "~> 3.0"
|
42
41
|
gem.add_development_dependency "rspec-json_expectations"
|
43
42
|
gem.add_development_dependency "rspec-its"
|
Binary file
|
@@ -21,20 +21,12 @@
|
|
21
21
|
<Media Id="1" Cabinet="Project.cab" EmbedCab="yes" CompressionLevel="high" />
|
22
22
|
|
23
23
|
<!--
|
24
|
-
Take advantage of Windows Installer 5.0 feature (if available) to disable
|
25
|
-
checkpointing and other costings that take significant amounts of time
|
24
|
+
Take advantage of Windows Installer 5.0 feature (if available) to disable
|
25
|
+
checkpointing and other costings that take significant amounts of time
|
26
26
|
ref: https://msdn.microsoft.com/en-us/library/windows/desktop/dd408005(v=vs.85).aspx
|
27
27
|
-->
|
28
28
|
<Property Id="MSIFASTINSTALL" Value="7" />
|
29
29
|
|
30
|
-
<!--
|
31
|
-
Uncomment launch condition below to check for minimum OS
|
32
|
-
601 = Windows 7/Server 2008R2.
|
33
|
-
-->
|
34
|
-
<!-- Condition Message="!(loc.MinimumOSVersionMessage)">
|
35
|
-
<![CDATA[Installed OR VersionNT >= 601]]>
|
36
|
-
</Condition -->
|
37
|
-
|
38
30
|
<!-- We always do Major upgrades -->
|
39
31
|
<MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeErrorMessage)" />
|
40
32
|
|