simp-rake-helpers 3.0.2 → 3.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/simp/rake/build/auto.rb +673 -253
- data/lib/simp/rake/build/build.rb +63 -27
- data/lib/simp/rake/build/clean.rb +5 -1
- data/lib/simp/rake/build/code.rb +24 -24
- data/lib/simp/rake/build/constants.rb +94 -15
- data/lib/simp/rake/build/deps.rb +2 -0
- data/lib/simp/rake/build/helpers.rb +1 -1
- data/lib/simp/rake/build/iso.rb +34 -13
- data/lib/simp/rake/build/pkg.rb +162 -141
- data/lib/simp/rake/build/spec.rb +13 -6
- data/lib/simp/rake/build/tar.rb +62 -21
- data/lib/simp/rake/build/unpack.rb +5 -4
- data/lib/simp/rake/build/upload.rb +11 -5
- data/lib/simp/rake/helpers/version.rb +1 -1
- data/lib/simp/rake/pkg.rb +135 -60
- data/lib/simp/rpm.rb +16 -3
- metadata +65 -65
data/lib/simp/rake/build/auto.rb
CHANGED
@@ -2,9 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'simp/rake'
|
4
4
|
require 'json'
|
5
|
+
require 'simp/rake/build/constants'
|
6
|
+
|
5
7
|
include Simp::Rake
|
6
8
|
|
7
|
-
class SIMPBuildException <
|
9
|
+
class SIMPBuildException < StandardError
|
8
10
|
end
|
9
11
|
|
10
12
|
require 'simp/build/release_mapper'
|
@@ -12,313 +14,730 @@ module Simp; end
|
|
12
14
|
module Simp::Rake; end
|
13
15
|
module Simp::Rake::Build
|
14
16
|
class Auto < ::Rake::TaskLib
|
17
|
+
include Simp::Rake::Build::Constants
|
18
|
+
|
15
19
|
def initialize( run_dir )
|
16
|
-
|
20
|
+
init_member_vars(run_dir)
|
21
|
+
|
17
22
|
define
|
18
23
|
end
|
19
24
|
|
20
25
|
# define rake tasks
|
21
26
|
def define
|
22
27
|
namespace :build do
|
23
|
-
desc <<-EOM
|
24
|
-
Automatically detect and build a SIMP ISO for a target SIMP release.
|
25
|
-
|
26
|
-
This task runs all other build tasks
|
27
|
-
|
28
|
-
Arguments:
|
29
|
-
* :release => SIMP release to build (e.g., '5.1.X')
|
30
|
-
- :iso_paths => path to source ISO(s) and/or directories [Default: '.']
|
31
|
-
NOTE: colon-delimited list
|
32
|
-
- :tarball => SIMP build tarball file; if given, skips tar build. [Default: 'false']
|
33
|
-
- :output_dir => path to write SIMP ISO. [Default: './SIMP_ISO']
|
34
|
-
- :do_checksum => Use sha256sum checksum to compare each ISO. [Default: 'false']
|
35
|
-
- :key_name => Key name to sign packages [Default: 'dev']
|
36
|
-
|
37
|
-
ENV vars:
|
38
|
-
- SIMP_BUILD_staging_dir => Path to stage big build assets
|
39
|
-
[Default: './SIMP_ISO_STAGING']
|
40
|
-
- SIMP_BUILD_rm_staging_dir => 'yes' forcibly removes the staging dir before starting
|
41
|
-
- SIMP_BUILD_force_dirty => 'yes' tries to checks out subrepos even if dirty
|
42
|
-
- SIMP_BUILD_docs => 'yes' builds & includes documentation
|
43
|
-
- SIMP_BUILD_checkout => 'no' will skip the git repo checkouts
|
44
|
-
- SIMP_BUILD_bundle => 'no' skips running bundle in each subrepo
|
45
|
-
- SIMP_BUILD_unpack => 'no' skips the unpack section
|
46
|
-
- SIMP_BUILD_unpack_merge => 'no' prevents auto-merging the unpacked DVD
|
47
|
-
- SIMP_BUILD_prune => 'no' passes :prune=>false to iso:build
|
48
|
-
- SIMP_BUILD_iso_name => Renames the output ISO filename [Default: false]
|
49
|
-
- SIMP_BUILD_iso_tag => Appended to the output ISO's filename [Default: false]
|
50
|
-
- SIMP_BUILD_verbose => 'yes' enables verbose reporting. [Default: 'no']
|
51
|
-
- SIMP_BUILD_packer_vars => Write a packer vars.json to go with this ISO [Default: 'yes']
|
52
|
-
|
53
|
-
Notes:
|
54
|
-
- To skip `tar:build` (including `pkg:build`), use the `tarball` argument
|
55
|
-
EOM
|
56
|
-
|
57
|
-
task :auto, [:release,
|
58
|
-
:iso_paths,
|
59
|
-
:tarball,
|
60
|
-
:output_dir,
|
61
|
-
:do_checksum,
|
62
|
-
:key_name,
|
63
|
-
:packer_vars,
|
64
|
-
] do |t, args|
|
65
|
-
# set up data
|
66
|
-
# --------------------------------------------------------------------------
|
67
|
-
|
68
|
-
args.with_defaults(
|
69
|
-
:iso_paths => Dir.pwd,
|
70
|
-
:tarball => 'false',
|
71
|
-
:output_dir => '',
|
72
|
-
:do_checksum => 'false',
|
73
|
-
:key_name => 'dev',
|
74
|
-
)
|
75
|
-
|
76
|
-
# locals
|
77
|
-
target_release = args[:release]
|
78
|
-
iso_paths = File.expand_path(args[:iso_paths])
|
79
|
-
tarball = (args.tarball =~ /^(false|)$/ ? false : args.tarball)
|
80
|
-
output_dir = args[:output_dir].sub(/^$/, File.expand_path( 'SIMP_ISO', Dir.pwd ))
|
81
|
-
do_checksum = (args.do_checksum =~ /^$/ ? 'false' : args.do_checksum)
|
82
|
-
key_name = args[:key_name]
|
83
|
-
staging_dir = ENV.fetch('SIMP_BUILD_staging_dir',
|
84
|
-
File.expand_path( 'SIMP_ISO_STAGING', Dir.pwd ))
|
85
|
-
do_packer_vars = ENV.fetch('SIMP_BUILD_packer_vars', 'yes') == 'yes'
|
86
|
-
verbose = ENV.fetch('SIMP_BUILD_verbose', 'no') == 'yes'
|
87
|
-
|
88
|
-
yaml_file = File.expand_path('build/release_mappings.yaml', @base_dir)
|
89
|
-
pwd = Dir.pwd
|
90
|
-
repo_root_dir = File.expand_path( @base_dir )
|
91
|
-
method = ENV.fetch('SIMP_BUILD_puppetfile','tracking')
|
92
|
-
do_rm_staging = ENV['SIMP_BUILD_rm_staging_dir'] == 'yes'
|
93
|
-
do_docs = ENV['SIMP_BUILD_docs'] == 'yes' ? 'true' : 'false'
|
94
|
-
do_merge = ENV['SIMP_BUILD_unpack_merge'] != 'no'
|
95
|
-
do_prune = ENV['SIMP_BUILD_prune'] != 'no' ? 'true' : 'false'
|
96
|
-
do_checkout = ENV['SIMP_BUILD_checkout'] != 'no'
|
97
|
-
do_bundle = ENV['SIMP_BUILD_bundle'] == 'yes' ? true : false
|
98
|
-
do_unpack = ENV['SIMP_BUILD_unpack'] != 'no'
|
99
|
-
full_iso_name = ENV.fetch('SIMP_BUILD_iso_name', false)
|
100
|
-
iso_name_tag = ENV.fetch('SIMP_BUILD_iso_tag', false)
|
101
|
-
|
102
|
-
# Skip a bunch of unnecessary stuff if we're passed a tarball
|
103
|
-
if tarball
|
104
|
-
do_docs = false
|
105
|
-
do_checkout = false
|
106
|
-
do_bundle = false
|
107
|
-
end
|
108
28
|
|
109
|
-
|
110
|
-
|
29
|
+
# SIMP 6 Style
|
30
|
+
if @os_build_metadata
|
31
|
+
desc <<-EOM
|
32
|
+
Automatically detect and build a SIMP ISO for a target SIMP release.
|
33
|
+
|
34
|
+
This task runs all other build tasks
|
35
|
+
|
36
|
+
Arguments:
|
37
|
+
* :iso_paths => Path to source ISO(s) and/or directories [Default: '.']
|
38
|
+
NOTE: colon-delimited list
|
39
|
+
If not set, will build all enabled distributions
|
40
|
+
* :release => SIMP release to build (e.g., '6.X')
|
41
|
+
The Full list can be found in '#{File.join(@build_dir, 'release_mappings.yaml')}'
|
42
|
+
Default: #{[@simp_version.split('.').first, 'X'].join('.')}
|
43
|
+
* :output_dir => path to write SIMP ISO. [Default: './SIMP_ISO']
|
44
|
+
* :do_checksum => Use sha256sum checksum to compare each ISO. [Default: 'false']
|
45
|
+
* :key_name => Key name to sign packages [Default: 'dev']
|
46
|
+
|
47
|
+
ENV vars:
|
48
|
+
- SIMP_BUILD_isos => Path to the base OS ISO images
|
49
|
+
- SIMP_BUILD_distro => Distribution to build
|
50
|
+
See '#{File.join(@distro_build_dir, 'build_metadata.yaml')}'}
|
51
|
+
- SIMP_BUILD_prompt => 'no' disables asking questions.
|
52
|
+
Will default to a full build and *will* erase existing artifacts.
|
53
|
+
- SIMP_BUILD_staging_dir => Path to stage big build assets
|
54
|
+
[Default: './SIMP_ISO_STAGING']
|
55
|
+
- SIMP_BUILD_rm_staging_dir => 'yes' forcibly removes the staging dir before starting
|
56
|
+
- SIMP_BUILD_force_dirty => 'yes' tries to checks out subrepos even if dirty
|
57
|
+
- SIMP_BUILD_docs => 'yes' builds & includes documentation
|
58
|
+
- SIMP_BUILD_checkout => 'no' will skip the git repo checkouts
|
59
|
+
- SIMP_BUILD_bundle => 'no' skips running bundle in each subrepo
|
60
|
+
- SIMP_BUILD_unpack => 'no' skips the unpack section
|
61
|
+
- SIMP_BUILD_unpack_merge => 'no' prevents auto-merging the unpacked DVD
|
62
|
+
- SIMP_BUILD_prune => 'no' passes :prune=>false to iso:build
|
63
|
+
- SIMP_BUILD_iso_name => Renames the output ISO filename [Default: false]
|
64
|
+
- SIMP_BUILD_iso_tag => Appended to the output ISO's filename [Default: false]
|
65
|
+
- SIMP_BUILD_verbose => 'yes' enables verbose reporting. [Default: 'no']
|
66
|
+
- SIMP_BUILD_packer_vars => Write a packer vars.json to go with this ISO [Default: 'yes']
|
67
|
+
- SIMP_BUILD_signing_key => The name of the GPG key to use to sign packages. [Default: 'dev']
|
68
|
+
EOM
|
69
|
+
|
70
|
+
task :auto, [:iso_paths,
|
71
|
+
:release,
|
72
|
+
:output_dir,
|
73
|
+
:do_checksum,
|
74
|
+
:key_name
|
75
|
+
] do |t, args|
|
76
|
+
|
77
|
+
args.with_defaults(
|
78
|
+
:iso_paths => ENV['SIMP_BUILD_isos'] || Dir.pwd,
|
79
|
+
:distribution => 'ALL',
|
80
|
+
:release => [@simp_version.split('.').first, 'X'].join('.'),
|
81
|
+
:output_dir => '',
|
82
|
+
:do_checksum => 'false',
|
83
|
+
:key_name => ENV['SIMP_BUILD_signing_key'] || 'dev'
|
84
|
+
)
|
85
|
+
|
86
|
+
iso_paths = File.expand_path(args[:iso_paths])
|
87
|
+
target_release = args[:release]
|
88
|
+
do_checksum = (args.do_checksum = ~ /^$/ ? 'false' : args.do_checksum)
|
89
|
+
key_name = args[:key_name]
|
90
|
+
do_packer_vars = ENV.fetch('SIMP_BUILD_packer_vars', 'yes') == 'yes'
|
91
|
+
verbose = ENV.fetch('SIMP_BUILD_verbose', 'no') == 'yes'
|
92
|
+
prompt = ENV.fetch('SIMP_BUILD_prompt', 'yes') != 'no'
|
93
|
+
pwd = Dir.pwd
|
94
|
+
repo_root_dir = File.expand_path( @base_dir )
|
95
|
+
method = ENV.fetch('SIMP_BUILD_puppetfile','tracking')
|
96
|
+
do_rm_staging = ENV['SIMP_BUILD_rm_staging_dir'] == 'yes'
|
97
|
+
do_docs = ENV['SIMP_BUILD_docs'] == 'yes' ? 'true' : 'false'
|
98
|
+
do_merge = ENV['SIMP_BUILD_unpack_merge'] != 'no'
|
99
|
+
do_prune = ENV['SIMP_BUILD_prune'] != 'no' ? 'true' : 'false'
|
100
|
+
do_checkout = ENV['SIMP_BUILD_checkout'] != 'no'
|
101
|
+
do_bundle = ENV['SIMP_BUILD_bundle'] == 'yes' ? true : false
|
102
|
+
do_unpack = ENV['SIMP_BUILD_unpack'] != 'no'
|
103
|
+
full_iso_name = ENV.fetch('SIMP_BUILD_iso_name', false)
|
104
|
+
iso_name_tag = ENV.fetch('SIMP_BUILD_iso_tag', false)
|
105
|
+
tarball = false
|
106
|
+
|
107
|
+
iso_status = {}
|
108
|
+
|
109
|
+
@os_build_metadata['distributions'].keys.sort.each do |distro|
|
110
|
+
@os_build_metadata['distributions'][distro].keys.sort.each do |version|
|
111
|
+
unless @os_build_metadata['distributions'][distro][version]['build']
|
112
|
+
if verbose
|
113
|
+
$stderr.puts("Skipping build for #{distro} #{version}")
|
114
|
+
end
|
115
|
+
|
116
|
+
next
|
117
|
+
end
|
118
|
+
|
119
|
+
@os_build_metadata['distributions'][distro][version]['arch'].sort.each do |arch|
|
120
|
+
begin
|
121
|
+
distro_build_dir = File.join(@distro_build_dir, distro, version, arch)
|
122
|
+
|
123
|
+
# For subtask mangling
|
124
|
+
$simp6_build_dir = distro_build_dir
|
125
|
+
$simp6_build_metadata = {
|
126
|
+
:distro => distro,
|
127
|
+
:version => version,
|
128
|
+
:arch => arch
|
129
|
+
}
|
130
|
+
|
131
|
+
output_dir = args[:output_dir].sub(/^$/, File.expand_path( 'SIMP_ISO', distro_build_dir ))
|
132
|
+
|
133
|
+
staging_dir = ENV.fetch('SIMP_BUILD_staging_dir', File.expand_path( 'SIMP_ISO_STAGING', distro_build_dir ))
|
134
|
+
|
135
|
+
yaml_file = File.expand_path('release_mappings.yaml', distro_build_dir)
|
136
|
+
|
137
|
+
tar_file = File.join(distro_build_dir, 'DVD_Overlay', "SIMP-#{@simp_version}-#{distro}-#{version}-#{arch}.tar.gz")
|
138
|
+
|
139
|
+
if File.exist?(tar_file)
|
140
|
+
if prompt
|
141
|
+
valid_entry = false
|
142
|
+
while !valid_entry do
|
143
|
+
puts("Existing tar file found at #{tar_file}")
|
144
|
+
print("Do you want to overwrite it? (y|N): ")
|
145
|
+
|
146
|
+
resp = $stdin.gets.chomp
|
147
|
+
|
148
|
+
if resp.empty? || (resp =~ /^(n|N)/)
|
149
|
+
tarball = tar_file
|
150
|
+
valid_entry = true
|
151
|
+
elsif resp =~ /^(y|Y)/
|
152
|
+
tarball = false
|
153
|
+
valid_entry = true
|
154
|
+
|
155
|
+
if verbose
|
156
|
+
$stderr.puts("Notice: Overwriting existing tarball at #{tar_file}")
|
157
|
+
$stderr.puts("Notice: PRESS CTRL-C WITHIN 5 SECONDS TO CANCEL")
|
158
|
+
end
|
159
|
+
|
160
|
+
sleep(5)
|
161
|
+
else
|
162
|
+
puts("Invalid input: '#{resp}', please try again")
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
if tarball
|
169
|
+
do_docs = false
|
170
|
+
do_checkout = false
|
171
|
+
do_bundle = false
|
172
|
+
end
|
173
|
+
|
174
|
+
@dirty_repos = nil
|
175
|
+
@simp_output_iso = nil
|
176
|
+
|
177
|
+
# Build environment sanity checks
|
178
|
+
# --------------------
|
179
|
+
if do_rm_staging && !do_unpack
|
180
|
+
fail SIMPBuildException, "ERROR: Mixing `SIMP_BUILD_rm_staging_dir=yes` and `SIMP_BUILD_unpack=no` is silly."
|
181
|
+
end
|
182
|
+
|
183
|
+
if File.exists?(output_dir) && !File.directory?(output_dir)
|
184
|
+
fail SIMPBuildException, "ERROR: ISO output dir exists but is not a directory:\n\n" +
|
185
|
+
" '#{output_dir}'\n\n"
|
186
|
+
end
|
187
|
+
|
188
|
+
# Look up ISOs against known build assets
|
189
|
+
# --------------------
|
190
|
+
target_data = get_target_data(target_release, iso_paths, yaml_file, do_checksum, verbose )
|
191
|
+
|
192
|
+
simp6_mock_cfg = File.join($simp6_build_dir, 'mock.cfg')
|
193
|
+
|
194
|
+
if File.exist?(simp6_mock_cfg)
|
195
|
+
target_data['mock'] = simp6_mock_cfg
|
196
|
+
|
197
|
+
if verbose
|
198
|
+
$stderr.puts("Notice: Using mock config at #{simp6_mock_cfg}")
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
# check out subrepos
|
203
|
+
# --------------------
|
204
|
+
if do_checkout && !tarball
|
205
|
+
puts
|
206
|
+
puts '='*80
|
207
|
+
puts "## Checking out subrepositories"
|
208
|
+
puts
|
209
|
+
puts " (skip with `SIMP_BUILD_checkout=no`)"
|
210
|
+
puts '='*80
|
211
|
+
Dir.chdir repo_root_dir
|
212
|
+
Rake::Task['deps:status'].invoke
|
213
|
+
if @dirty_repos && !ENV['SIMP_BUILD_force_dirty'] == 'yes'
|
214
|
+
raise SIMPBuildException, "ERROR: Dirty repos detected! I refuse to destroy uncommitted work."
|
215
|
+
else
|
216
|
+
puts
|
217
|
+
puts '-'*80
|
218
|
+
puts "#### Checking out subrepositories using method '#{method}'"
|
219
|
+
puts '-'*80
|
220
|
+
Rake::Task['deps:checkout'].invoke(method)
|
221
|
+
end
|
222
|
+
|
223
|
+
if do_bundle
|
224
|
+
puts
|
225
|
+
puts '-'*80
|
226
|
+
puts "#### Running bundler in all repos"
|
227
|
+
puts ' (Disable with `SIMP_BUILD_bundle=no`)'
|
228
|
+
puts '-'*80
|
229
|
+
Rake::Task['build:bundle'].invoke
|
230
|
+
else
|
231
|
+
puts
|
232
|
+
puts '-'*80
|
233
|
+
puts "#### SKIPPED: bundler in all repos"
|
234
|
+
puts ' (Force with `SIMP_BUILD_bundle=yes`)'
|
235
|
+
puts '-'*80
|
236
|
+
end
|
237
|
+
else
|
238
|
+
puts
|
239
|
+
puts '='*80
|
240
|
+
puts "#### skipping sub repository checkout (because `SIMP_BUILD_checkout=no`)"
|
241
|
+
puts
|
242
|
+
end
|
243
|
+
|
244
|
+
# build tarball
|
245
|
+
# --------------------
|
246
|
+
if tarball
|
247
|
+
puts
|
248
|
+
puts '-'*80
|
249
|
+
puts "#### Using pre-existing tarball:"
|
250
|
+
puts " '#{tarball}'"
|
251
|
+
puts
|
252
|
+
puts '-'*80
|
253
|
+
|
254
|
+
else
|
255
|
+
puts
|
256
|
+
puts '='*80
|
257
|
+
puts "#### Running tar:build"
|
258
|
+
puts '='*80
|
259
|
+
|
260
|
+
# Horrible state passing magic vars
|
261
|
+
$tarball_tgt = File.join(distro_build_dir, 'DVD_Overlay', "SIMP-#{@simp_version}-#{distro}-#{version}-#{arch}.tar.gz")
|
262
|
+
|
263
|
+
Rake::Task['tar:build'].invoke(target_data['mock'],key_name,do_docs)
|
264
|
+
|
265
|
+
tarball = $tarball_tgt
|
266
|
+
end
|
267
|
+
|
268
|
+
# yum sync
|
269
|
+
# --------------------
|
270
|
+
puts
|
271
|
+
puts '-'*80
|
272
|
+
puts "#### rake build:yum:sync[#{target_data['flavor']},#{target_data['os_version']}]"
|
273
|
+
puts '-'*80
|
274
|
+
Rake::Task['build:yum:sync'].invoke(target_data['flavor'],target_data['os_version'])
|
275
|
+
|
276
|
+
# If you have previously downloaded packages from yum, you may need to run
|
277
|
+
# $ rake build:yum:clean_cache
|
278
|
+
|
279
|
+
# Optionally, you may drop in custom packages you wish to have available during an install into build/yum_data/SIMP<simp_version>_<CentOS or RHEL><os_version>_<architecture>/packages
|
280
|
+
# TODO: ENV var for optional packages
|
281
|
+
|
282
|
+
prepare_staging_dir( staging_dir, do_rm_staging, repo_root_dir, verbose )
|
283
|
+
Dir.chdir staging_dir
|
284
|
+
|
285
|
+
#
|
286
|
+
# --------------------
|
287
|
+
if do_unpack
|
288
|
+
puts
|
289
|
+
puts '='*80
|
290
|
+
puts "#### unpack ISOs into staging directory"
|
291
|
+
puts " staging area: '#{staging_dir}'"
|
292
|
+
puts
|
293
|
+
puts " (skip with `SIMP_BUILD_unpack=no`)"
|
294
|
+
puts '='*80
|
295
|
+
puts
|
296
|
+
|
297
|
+
Dir.glob( File.join(staging_dir, "#{target_data['flavor']}*/") ).each do |f|
|
298
|
+
FileUtils.rm_f( f , :verbose => verbose )
|
299
|
+
end
|
300
|
+
|
301
|
+
target_data['isos'].each do |iso|
|
302
|
+
puts "---- rake unpack[#{iso},#{do_merge},#{Dir.pwd},isoinfo,#{target_data['os_version']}]"
|
303
|
+
Rake::Task['unpack'].reenable
|
304
|
+
Rake::Task['unpack'].invoke(iso,do_merge,Dir.pwd,'isoinfo',target_data['os_version'])
|
305
|
+
end
|
306
|
+
else
|
307
|
+
puts
|
308
|
+
puts '='*80
|
309
|
+
puts "#### skipping ISOs unpack (because `SIMP_BUILD_unpack=no`)"
|
310
|
+
puts
|
311
|
+
end
|
312
|
+
|
313
|
+
Dir.chdir repo_root_dir
|
314
|
+
|
315
|
+
puts
|
316
|
+
puts '='*80
|
317
|
+
puts "#### iso:build[#{tarball}]"
|
318
|
+
puts '='*80
|
319
|
+
puts
|
320
|
+
|
321
|
+
ENV['SIMP_ISO_verbose'] = 'yes' if verbose
|
322
|
+
ENV['SIMP_PKG_verbose'] = 'yes' if verbose
|
323
|
+
Rake::Task['iso:build'].invoke(tarball,staging_dir,do_prune)
|
324
|
+
|
325
|
+
_isos = Dir[ File.join(Dir.pwd,'SIMP-*.iso') ]
|
326
|
+
if _isos.size == 0
|
327
|
+
fail "ERROR: No SIMP ISOs found in '#{Dir.pwd}'"
|
328
|
+
elsif _isos.size > 1
|
329
|
+
warn "WARNING: More than one SIMP ISO found in '#{Dir.pwd}'"
|
330
|
+
_isos.each{ |i| warn i }
|
331
|
+
end
|
332
|
+
|
333
|
+
# NOTE: It is possible at this point (given the right
|
334
|
+
# `SIMP_BUILD_xxx=no` flags) that iso:build will not have set
|
335
|
+
# `@simp_output_iso`. In that case, look at the ISOs in the staging
|
336
|
+
# dir (there should only be one) and take our best guess.
|
337
|
+
if @simp_output_iso.nil?
|
338
|
+
@simp_output_iso = File.basename(_isos.first)
|
339
|
+
end
|
340
|
+
|
341
|
+
output_file = full_iso_name ? full_iso_name : @simp_output_iso
|
342
|
+
if iso_name_tag
|
343
|
+
output_file = output_file.sub(/\.iso$/i, "__#{iso_name_tag}.iso")
|
344
|
+
end
|
345
|
+
|
346
|
+
puts
|
347
|
+
puts '='*80
|
348
|
+
puts "#### Moving '#{@simp_output_iso}' into:"
|
349
|
+
puts " '#{output_dir}/#{output_file}'"
|
350
|
+
puts '='*80
|
351
|
+
puts
|
352
|
+
|
353
|
+
iso = File.join(output_dir,output_file)
|
354
|
+
FileUtils.mkdir_p File.dirname(iso), :verbose => verbose
|
355
|
+
FileUtils.mv(@simp_output_iso, iso, :verbose => verbose)
|
356
|
+
|
357
|
+
# write vars.json for packer build
|
358
|
+
# --------------------------------------
|
359
|
+
vars_file = iso.sub(/.iso$/, '.json')
|
360
|
+
puts
|
361
|
+
puts '='*80
|
362
|
+
puts "#### Checksumming #{iso}..."
|
363
|
+
puts '='*80
|
364
|
+
puts
|
365
|
+
|
366
|
+
sum = `sha256sum "#{iso}"`.split(/ +/).first
|
367
|
+
|
368
|
+
puts
|
369
|
+
puts '='*80
|
370
|
+
puts "#### Writing packer data to:"
|
371
|
+
puts " '#{vars_file}'"
|
372
|
+
puts '='*80
|
373
|
+
puts
|
374
|
+
box_distro_release = "SIMP-#{target_release}-#{File.basename(target_data['isos'].first).sub(/\.iso$/,'').sub(/-x86_64/,'')}"
|
375
|
+
packer_vars = {
|
376
|
+
'box_simp_release' => target_release,
|
377
|
+
'box_distro_release' => box_distro_release,
|
378
|
+
'iso_url' => iso,
|
379
|
+
'iso_checksum' => sum,
|
380
|
+
'iso_checksum_type' => 'sha256',
|
381
|
+
'new_password' => 'suP3rP@ssw0r!suP3rP@ssw0r!suP3rP@ssw0r!',
|
382
|
+
'output_directory' => './OUTPUT',
|
383
|
+
}
|
384
|
+
File.open(vars_file, 'w'){|f| f.puts packer_vars.to_json }
|
385
|
+
|
386
|
+
puts
|
387
|
+
puts '='*80
|
388
|
+
puts "#### FINIS!"
|
389
|
+
puts '='*80
|
390
|
+
puts
|
391
|
+
|
392
|
+
iso_status[[distro, version, arch].join(' ')] = {
|
393
|
+
'success' => true
|
394
|
+
}
|
395
|
+
|
396
|
+
rescue => e
|
397
|
+
iso_status[[distro, version, arch].join(' ')] = {
|
398
|
+
'success' => false,
|
399
|
+
'error' => e.to_s,
|
400
|
+
'backtrace' => e.backtrace
|
401
|
+
}
|
402
|
+
end
|
403
|
+
end
|
404
|
+
end
|
405
|
+
end
|
111
406
|
|
407
|
+
successful_isos = []
|
408
|
+
failed_isos = []
|
112
409
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
410
|
+
iso_status.keys.each do |iso|
|
411
|
+
if iso_status[iso]['success']
|
412
|
+
successful_isos << iso
|
413
|
+
else
|
414
|
+
failed_isos << iso
|
415
|
+
end
|
416
|
+
end
|
417
|
+
|
418
|
+
unless successful_isos.empty?
|
419
|
+
puts '='*80
|
420
|
+
puts("Successful ISOs:")
|
421
|
+
puts(%( * #{successful_isos.join("\n * ")}))
|
422
|
+
end
|
118
423
|
|
119
|
-
|
120
|
-
|
121
|
-
|
424
|
+
unless failed_isos.empty?
|
425
|
+
puts '='*80
|
426
|
+
puts("Failed ISOs:")
|
427
|
+
failed_isos.each do |iso|
|
428
|
+
puts(%( * #{iso}))
|
429
|
+
puts(%( * Error: #{iso_status[iso]['error']}))
|
430
|
+
|
431
|
+
if verbose
|
432
|
+
puts(%( * Backtrace: #{iso_status[iso]['backtrace'].join("\n")}))
|
433
|
+
else
|
434
|
+
puts(%( * Context: #{iso_status[iso]['backtrace'].first}))
|
435
|
+
end
|
436
|
+
end
|
437
|
+
end
|
122
438
|
end
|
439
|
+
else
|
440
|
+
# Legacy
|
441
|
+
desc <<-EOM
|
442
|
+
Automatically detect and build a SIMP ISO for a target SIMP release.
|
443
|
+
|
444
|
+
This task runs all other build tasks
|
445
|
+
|
446
|
+
Arguments:
|
447
|
+
* :release => SIMP release to build (e.g., '5.1.X')
|
448
|
+
- :iso_paths => path to source ISO(s) and/or directories [Default: '.']
|
449
|
+
NOTE: colon-delimited list
|
450
|
+
- :tarball => SIMP build tarball file; if given, skips tar build. [Default: 'false']
|
451
|
+
- :output_dir => path to write SIMP ISO. [Default: './SIMP_ISO']
|
452
|
+
- :do_checksum => Use sha256sum checksum to compare each ISO. [Default: 'false']
|
453
|
+
- :key_name => Key name to sign packages [Default: 'dev']
|
454
|
+
|
455
|
+
ENV vars:
|
456
|
+
- SIMP_BUILD_staging_dir => Path to stage big build assets
|
457
|
+
[Default: './SIMP_ISO_STAGING']
|
458
|
+
- SIMP_BUILD_rm_staging_dir => 'yes' forcibly removes the staging dir before starting
|
459
|
+
- SIMP_BUILD_force_dirty => 'yes' tries to checks out subrepos even if dirty
|
460
|
+
- SIMP_BUILD_docs => 'yes' builds & includes documentation
|
461
|
+
- SIMP_BUILD_checkout => 'no' will skip the git repo checkouts
|
462
|
+
- SIMP_BUILD_bundle => 'no' skips running bundle in each subrepo
|
463
|
+
- SIMP_BUILD_unpack => 'no' skips the unpack section
|
464
|
+
- SIMP_BUILD_unpack_merge => 'no' prevents auto-merging the unpacked DVD
|
465
|
+
- SIMP_BUILD_prune => 'no' passes :prune=>false to iso:build
|
466
|
+
- SIMP_BUILD_iso_name => Renames the output ISO filename [Default: false]
|
467
|
+
- SIMP_BUILD_iso_tag => Appended to the output ISO's filename [Default: false]
|
468
|
+
- SIMP_BUILD_verbose => 'yes' enables verbose reporting. [Default: 'no']
|
469
|
+
- SIMP_BUILD_packer_vars => Write a packer vars.json to go with this ISO [Default: 'yes']
|
470
|
+
|
471
|
+
Notes:
|
472
|
+
- To skip `tar:build` (including `pkg:build`), use the `tarball` argument
|
473
|
+
EOM
|
474
|
+
|
475
|
+
task :auto, [:release,
|
476
|
+
:iso_paths,
|
477
|
+
:tarball,
|
478
|
+
:output_dir,
|
479
|
+
:do_checksum,
|
480
|
+
:key_name,
|
481
|
+
:packer_vars,
|
482
|
+
] do |t, args|
|
483
|
+
# set up data
|
484
|
+
# --------------------------------------------------------------------------
|
485
|
+
|
486
|
+
args.with_defaults(
|
487
|
+
:release => [@simp_version.split('.').first, 'X'].join('.'),
|
488
|
+
:iso_paths => Dir.pwd,
|
489
|
+
:tarball => 'false',
|
490
|
+
:output_dir => '',
|
491
|
+
:do_checksum => 'false',
|
492
|
+
:key_name => 'dev',
|
493
|
+
)
|
494
|
+
|
495
|
+
# locals
|
496
|
+
target_release = args[:release]
|
497
|
+
iso_paths = File.expand_path(args[:iso_paths])
|
498
|
+
tarball = (args.tarball =~ /^(false|)$/ ? false : args.tarball)
|
499
|
+
output_dir = args[:output_dir].sub(/^$/, File.expand_path( 'SIMP_ISO', Dir.pwd ))
|
500
|
+
do_checksum = (args.do_checksum =~ /^$/ ? 'false' : args.do_checksum)
|
501
|
+
key_name = args[:key_name]
|
502
|
+
staging_dir = ENV.fetch('SIMP_BUILD_staging_dir',
|
503
|
+
File.expand_path( 'SIMP_ISO_STAGING', Dir.pwd ))
|
504
|
+
do_packer_vars = ENV.fetch('SIMP_BUILD_packer_vars', 'yes') == 'yes'
|
505
|
+
verbose = ENV.fetch('SIMP_BUILD_verbose', 'no') == 'yes'
|
506
|
+
|
507
|
+
yaml_file = File.expand_path('build/release_mappings.yaml', @base_dir)
|
508
|
+
pwd = Dir.pwd
|
509
|
+
repo_root_dir = File.expand_path( @base_dir )
|
510
|
+
method = ENV.fetch('SIMP_BUILD_puppetfile','tracking')
|
511
|
+
do_rm_staging = ENV['SIMP_BUILD_rm_staging_dir'] == 'yes'
|
512
|
+
do_docs = ENV['SIMP_BUILD_docs'] == 'yes' ? 'true' : 'false'
|
513
|
+
do_merge = ENV['SIMP_BUILD_unpack_merge'] != 'no'
|
514
|
+
do_prune = ENV['SIMP_BUILD_prune'] != 'no' ? 'true' : 'false'
|
515
|
+
do_checkout = ENV['SIMP_BUILD_checkout'] != 'no'
|
516
|
+
do_bundle = ENV['SIMP_BUILD_bundle'] == 'yes' ? true : false
|
517
|
+
do_unpack = ENV['SIMP_BUILD_unpack'] != 'no'
|
518
|
+
full_iso_name = ENV.fetch('SIMP_BUILD_iso_name', false)
|
519
|
+
iso_name_tag = ENV.fetch('SIMP_BUILD_iso_tag', false)
|
520
|
+
|
521
|
+
# Skip a bunch of unnecessary stuff if we're passed a tarball
|
522
|
+
if tarball
|
523
|
+
do_docs = false
|
524
|
+
do_checkout = false
|
525
|
+
do_bundle = false
|
526
|
+
end
|
527
|
+
|
528
|
+
@dirty_repos = nil
|
529
|
+
@simp_output_iso = nil
|
123
530
|
|
124
531
|
|
125
|
-
|
126
|
-
|
127
|
-
|
532
|
+
# Build environment sanity checks
|
533
|
+
# --------------------
|
534
|
+
if do_rm_staging && !do_unpack
|
535
|
+
fail SIMPBuildException, "ERROR: Mixing `SIMP_BUILD_rm_staging_dir=yes` and `SIMP_BUILD_unpack=no` is silly."
|
536
|
+
end
|
128
537
|
|
129
|
-
|
130
|
-
|
538
|
+
if File.exists?(output_dir) && !File.directory?(output_dir)
|
539
|
+
fail SIMPBuildException, "ERROR: ISO output dir exists but is not a directory:\n\n" +
|
540
|
+
" '#{output_dir}'\n\n"
|
541
|
+
end
|
131
542
|
|
132
|
-
# IDEA: check for prequisite build tools
|
133
543
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
if
|
146
|
-
|
544
|
+
# Look up ISOs against known build assets
|
545
|
+
# --------------------
|
546
|
+
target_data = get_target_data(target_release, iso_paths, yaml_file, do_checksum, verbose )
|
547
|
+
|
548
|
+
# Quick map to match the filenames in the build structures
|
549
|
+
target_data['flavor'] = 'RHEL' if target_data['flavor'] == 'RedHat'
|
550
|
+
|
551
|
+
# IDEA: check for prequisite build tools
|
552
|
+
|
553
|
+
# check out subrepos
|
554
|
+
# --------------------
|
555
|
+
if do_checkout && !tarball
|
556
|
+
puts
|
557
|
+
puts '='*80
|
558
|
+
puts "## Checking out subrepositories"
|
559
|
+
puts
|
560
|
+
puts " (skip with `SIMP_BUILD_checkout=no`)"
|
561
|
+
puts '='*80
|
562
|
+
Dir.chdir repo_root_dir
|
563
|
+
Rake::Task['deps:status'].invoke
|
564
|
+
if @dirty_repos && !ENV['SIMP_BUILD_force_dirty'] == 'yes'
|
565
|
+
raise SIMPBuildException, "ERROR: Dirty repos detected! I refuse to destroy uncommitted work."
|
566
|
+
else
|
567
|
+
puts
|
568
|
+
puts '-'*80
|
569
|
+
puts "#### Checking out subrepositories using method '#{method}'"
|
570
|
+
puts '-'*80
|
571
|
+
Rake::Task['deps:checkout'].invoke(method)
|
572
|
+
end
|
573
|
+
|
574
|
+
if do_bundle
|
575
|
+
puts
|
576
|
+
puts '-'*80
|
577
|
+
puts "#### Running bundler in all repos"
|
578
|
+
puts ' (Disable with `SIMP_BUILD_bundle=no`)'
|
579
|
+
puts '-'*80
|
580
|
+
Rake::Task['build:bundle'].invoke
|
581
|
+
else
|
582
|
+
puts
|
583
|
+
puts '-'*80
|
584
|
+
puts "#### SKIPPED: bundler in all repos"
|
585
|
+
puts ' (Force with `SIMP_BUILD_bundle=yes`)'
|
586
|
+
puts '-'*80
|
587
|
+
end
|
147
588
|
else
|
148
589
|
puts
|
149
|
-
puts '
|
150
|
-
puts "####
|
151
|
-
puts
|
152
|
-
Rake::Task['deps:checkout'].invoke(method)
|
590
|
+
puts '='*80
|
591
|
+
puts "#### skipping sub repository checkout (because `SIMP_BUILD_checkout=no`)"
|
592
|
+
puts
|
153
593
|
end
|
154
594
|
|
155
|
-
|
595
|
+
# build tarball
|
596
|
+
# --------------------
|
597
|
+
if tarball
|
156
598
|
puts
|
157
599
|
puts '-'*80
|
158
|
-
puts "####
|
159
|
-
puts '
|
600
|
+
puts "#### Using pre-existing tarball:"
|
601
|
+
puts " '#{tarball}'"
|
602
|
+
puts
|
160
603
|
puts '-'*80
|
161
|
-
|
604
|
+
|
162
605
|
else
|
163
606
|
puts
|
164
|
-
puts '
|
165
|
-
puts "####
|
166
|
-
puts '
|
167
|
-
|
607
|
+
puts '='*80
|
608
|
+
puts "#### Running tar:build"
|
609
|
+
puts '='*80
|
610
|
+
$simp_tarballs = {}
|
611
|
+
Rake::Task['tar:build'].invoke(target_data['mock'],key_name,do_docs)
|
612
|
+
tarball = $simp_tarballs.fetch(target_data['flavor'])
|
168
613
|
end
|
169
|
-
else
|
170
|
-
puts
|
171
|
-
puts '='*80
|
172
|
-
puts "#### skipping sub repository checkout (because `SIMP_BUILD_checkout=no`)"
|
173
|
-
puts
|
174
|
-
end
|
175
614
|
|
176
|
-
|
177
|
-
|
178
|
-
if tarball
|
615
|
+
# yum sync
|
616
|
+
# --------------------
|
179
617
|
puts
|
180
618
|
puts '-'*80
|
181
|
-
puts "####
|
182
|
-
puts " '#{tarball}'"
|
183
|
-
puts
|
619
|
+
puts "#### rake build:yum:sync[#{target_data['flavor']},#{target_data['os_version']}]"
|
184
620
|
puts '-'*80
|
621
|
+
Rake::Task['build:yum:sync'].invoke(target_data['flavor'],target_data['os_version'])
|
185
622
|
|
186
|
-
|
187
|
-
|
188
|
-
puts '='*80
|
189
|
-
puts "#### Running tar:build"
|
190
|
-
puts '='*80
|
191
|
-
$simp_tarballs = {}
|
192
|
-
Rake::Task['tar:build'].invoke(target_data['mock'],key_name,do_docs)
|
193
|
-
tarball = $simp_tarballs.fetch(target_data['flavor'])
|
194
|
-
end
|
623
|
+
# If you have previously downloaded packages from yum, you may need to run
|
624
|
+
# $ rake build:yum:clean_cache
|
195
625
|
|
196
|
-
|
197
|
-
|
198
|
-
puts
|
199
|
-
puts '-'*80
|
200
|
-
puts "#### rake build:yum:sync[#{target_data['flavor']},#{target_data['os_version']}]"
|
201
|
-
puts '-'*80
|
202
|
-
Rake::Task['build:yum:sync'].invoke(target_data['flavor'],target_data['os_version'])
|
626
|
+
# Optionally, you may drop in custom packages you wish to have available during an install into build/yum_data/SIMP<simp_version>_<CentOS or RHEL><os_version>_<architecture>/packages
|
627
|
+
# TODO: ENV var for optional packages
|
203
628
|
|
204
|
-
|
205
|
-
|
629
|
+
prepare_staging_dir( staging_dir, do_rm_staging, repo_root_dir, verbose )
|
630
|
+
Dir.chdir staging_dir
|
206
631
|
|
207
|
-
|
208
|
-
|
632
|
+
#
|
633
|
+
# --------------------
|
634
|
+
if do_unpack
|
635
|
+
puts
|
636
|
+
puts '='*80
|
637
|
+
puts "#### unpack ISOs into staging directory"
|
638
|
+
puts " staging area: '#{staging_dir}'"
|
639
|
+
puts
|
640
|
+
puts " (skip with `SIMP_BUILD_unpack=no`)"
|
641
|
+
puts '='*80
|
642
|
+
puts
|
209
643
|
|
210
|
-
|
211
|
-
|
644
|
+
Dir.glob( File.join(staging_dir, "#{target_data['flavor']}*/") ).each do |f|
|
645
|
+
FileUtils.rm_f( f , :verbose => verbose )
|
646
|
+
end
|
647
|
+
|
648
|
+
target_data['isos'].each do |iso|
|
649
|
+
puts "---- rake unpack[#{iso},#{do_merge},#{Dir.pwd},isoinfo,#{target_data['os_version']}]"
|
650
|
+
Rake::Task['unpack'].reenable
|
651
|
+
Rake::Task['unpack'].invoke(iso,do_merge,Dir.pwd,'isoinfo',target_data['os_version'])
|
652
|
+
end
|
653
|
+
else
|
654
|
+
puts
|
655
|
+
puts '='*80
|
656
|
+
puts "#### skipping ISOs unpack (because `SIMP_BUILD_unpack=no`)"
|
657
|
+
puts
|
658
|
+
end
|
659
|
+
|
660
|
+
Dir.chdir repo_root_dir
|
212
661
|
|
213
|
-
#
|
214
|
-
# --------------------
|
215
|
-
if do_unpack
|
216
662
|
puts
|
217
663
|
puts '='*80
|
218
|
-
puts "####
|
219
|
-
puts " staging area: '#{staging_dir}'"
|
220
|
-
puts
|
221
|
-
puts " (skip with `SIMP_BUILD_unpack=no`)"
|
664
|
+
puts "#### iso:build[#{tarball}]"
|
222
665
|
puts '='*80
|
223
666
|
puts
|
224
667
|
|
225
|
-
|
226
|
-
|
668
|
+
ENV['SIMP_ISO_verbose'] = 'yes' if verbose
|
669
|
+
ENV['SIMP_PKG_verbose'] = 'yes' if verbose
|
670
|
+
Rake::Task['iso:build'].invoke(tarball,staging_dir,do_prune)
|
671
|
+
|
672
|
+
|
673
|
+
_isos = Dir[ File.join(Dir.pwd,'SIMP-*.iso') ]
|
674
|
+
if _isos.size == 0
|
675
|
+
fail "ERROR: No SIMP ISOs found in '#{Dir.pwd}'"
|
676
|
+
elsif _isos.size > 1
|
677
|
+
warn "WARNING: More than one SIMP ISO found in '#{Dir.pwd}'"
|
678
|
+
_isos.each{ |i| warn i }
|
679
|
+
end
|
680
|
+
|
681
|
+
# NOTE: It is possible at this point (given the right
|
682
|
+
# `SIMP_BUILD_xxx=no` flags) that iso:build will not have set
|
683
|
+
# `@simp_output_iso`. In that case, look at the ISOs in the staging
|
684
|
+
# dir (there should only be one) and take our best guess.
|
685
|
+
if @simp_output_iso.nil?
|
686
|
+
@simp_output_iso = File.basename(_isos.first)
|
227
687
|
end
|
228
688
|
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
Rake::Task['unpack'].invoke(iso,do_merge,Dir.pwd,'isoinfo',target_data['os_version'])
|
689
|
+
output_file = full_iso_name ? full_iso_name : @simp_output_iso
|
690
|
+
if iso_name_tag
|
691
|
+
output_file = output_file.sub(/\.iso$/i, "__#{iso_name_tag}.iso")
|
233
692
|
end
|
234
|
-
|
693
|
+
|
235
694
|
puts
|
236
695
|
puts '='*80
|
237
|
-
puts "####
|
696
|
+
puts "#### Moving '#{@simp_output_iso}' into:"
|
697
|
+
puts " '#{output_dir}/#{output_file}'"
|
698
|
+
puts '='*80
|
238
699
|
puts
|
239
|
-
end
|
240
|
-
|
241
|
-
Dir.chdir repo_root_dir
|
242
|
-
|
243
|
-
puts
|
244
|
-
puts '='*80
|
245
|
-
puts "#### iso:build[#{tarball}]"
|
246
|
-
puts '='*80
|
247
|
-
puts
|
248
700
|
|
249
|
-
|
250
|
-
|
251
|
-
|
701
|
+
iso = File.join(output_dir,output_file)
|
702
|
+
FileUtils.mkdir_p File.dirname(iso), :verbose => verbose
|
703
|
+
FileUtils.mv(@simp_output_iso, iso, :verbose => verbose)
|
252
704
|
|
705
|
+
# write vars.json for packer build
|
706
|
+
# --------------------------------------
|
707
|
+
vars_file = iso.sub(/.iso$/, '.json')
|
708
|
+
puts
|
709
|
+
puts '='*80
|
710
|
+
puts "#### Checksumming #{iso}..."
|
711
|
+
puts '='*80
|
712
|
+
puts
|
253
713
|
|
254
|
-
|
255
|
-
if _isos.size == 0
|
256
|
-
fail "ERROR: No SIMP ISOs found in '#{Dir.pwd}'"
|
257
|
-
elsif _isos.size > 1
|
258
|
-
warn "WARNING: More than one SIMP ISO found in '#{Dir.pwd}'"
|
259
|
-
_isos.each{ |i| warn i }
|
260
|
-
end
|
714
|
+
sum = `sha256sum "#{iso}"`.split(/ +/).first
|
261
715
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
716
|
+
puts
|
717
|
+
puts '='*80
|
718
|
+
puts "#### Writing packer data to:"
|
719
|
+
puts " '#{vars_file}'"
|
720
|
+
puts '='*80
|
721
|
+
puts
|
722
|
+
box_distro_release = "SIMP-#{target_release}-#{File.basename(target_data['isos'].first).sub(/\.iso$/,'').sub(/-x86_64/,'')}"
|
723
|
+
packer_vars = {
|
724
|
+
'box_simp_release' => target_release,
|
725
|
+
'box_distro_release' => box_distro_release,
|
726
|
+
'iso_url' => iso,
|
727
|
+
'iso_checksum' => sum,
|
728
|
+
'iso_checksum_type' => 'sha256',
|
729
|
+
'new_password' => 'suP3rP@ssw0r!suP3rP@ssw0r!suP3rP@ssw0r!',
|
730
|
+
'output_directory' => './OUTPUT',
|
731
|
+
}
|
732
|
+
File.open(vars_file, 'w'){|f| f.puts packer_vars.to_json }
|
269
733
|
|
270
|
-
|
271
|
-
|
272
|
-
|
734
|
+
puts
|
735
|
+
puts '='*80
|
736
|
+
puts "#### FINIS!"
|
737
|
+
puts '='*80
|
738
|
+
puts
|
273
739
|
end
|
274
|
-
|
275
|
-
puts
|
276
|
-
puts '='*80
|
277
|
-
puts "#### Moving '#{@simp_output_iso}' into:"
|
278
|
-
puts " '#{output_dir}/#{output_file}'"
|
279
|
-
puts '='*80
|
280
|
-
puts
|
281
|
-
|
282
|
-
iso = File.join(output_dir,output_file)
|
283
|
-
FileUtils.mkdir_p File.dirname(iso), :verbose => verbose
|
284
|
-
FileUtils.mv(@simp_output_iso, iso, :verbose => verbose)
|
285
|
-
|
286
|
-
# write vars.json for packer build
|
287
|
-
# --------------------------------------
|
288
|
-
vars_file = iso.sub(/.iso$/, '.json')
|
289
|
-
puts
|
290
|
-
puts '='*80
|
291
|
-
puts "#### Checksumming #{iso}..."
|
292
|
-
puts '='*80
|
293
|
-
puts
|
294
|
-
|
295
|
-
sum = `sha256sum "#{iso}"`.split(/ +/).first
|
296
|
-
|
297
|
-
puts
|
298
|
-
puts '='*80
|
299
|
-
puts "#### Writing packer data to:"
|
300
|
-
puts " '#{vars_file}'"
|
301
|
-
puts '='*80
|
302
|
-
puts
|
303
|
-
box_distro_release = "SIMP-#{target_release}-#{File.basename(target_data['isos'].first).sub(/\.iso$/,'').sub(/-x86_64/,'')}"
|
304
|
-
packer_vars = {
|
305
|
-
'box_simp_release' => target_release,
|
306
|
-
'box_distro_release' => box_distro_release,
|
307
|
-
'iso_url' => iso,
|
308
|
-
'iso_checksum' => sum,
|
309
|
-
'iso_checksum_type' => 'sha256',
|
310
|
-
'new_password' => 'suP3rP@ssw0r!suP3rP@ssw0r!suP3rP@ssw0r!',
|
311
|
-
'output_directory' => './OUTPUT',
|
312
|
-
}
|
313
|
-
File.open(vars_file, 'w'){|f| f.puts packer_vars.to_json }
|
314
|
-
|
315
|
-
puts
|
316
|
-
puts '='*80
|
317
|
-
puts "#### FINIS!"
|
318
|
-
puts '='*80
|
319
|
-
puts
|
320
740
|
end
|
321
|
-
|
322
741
|
end
|
323
742
|
|
324
743
|
def get_target_data(target_release, iso_paths, yaml_file, do_checksum, verbose )
|
@@ -356,6 +775,7 @@ module Simp::Rake::Build
|
|
356
775
|
" '#{staging_dir}'\n\n" +
|
357
776
|
" Use SIMP_BUILD_staging_dir='path/to/staging/dir'\n\n"
|
358
777
|
end
|
778
|
+
|
359
779
|
if do_rm_staging
|
360
780
|
puts
|
361
781
|
puts '-'*80
|