ood_packaging 0.8.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d301aee2821f7e83dbf3caf625871a3d8d938e5280ce8cdf092257dbd764d5f7
4
- data.tar.gz: fe564b821d0cc7c8a5a094f4b110aee8c5e0a4ebf5d073cb8bd93cdc88ded585
3
+ metadata.gz: bfd4871399685168cb1e47dfdd31c283e203cd1c2c48b573d385379e536c4297
4
+ data.tar.gz: 392e1e6137c8564004b05d6ad142b37132e927302f94f9ef53245a6fe2695160
5
5
  SHA512:
6
- metadata.gz: 3b91c002309b28ccf7266b44502689fc888d225ae8682e5c8a3374f2ff77bff6ffd28cf64dacd526253cc69fecef1fc7a59d3c24c73cdcbbacd3eb5374018097
7
- data.tar.gz: 0d2c3272f19de52cd1f30f4b956193c497e8ef2186b0a0bf36cac0d670f9368fc80f988bf4d389774e46198c80b78529bd00fc4a4ffa344c6efcaaf8d74185dc
6
+ metadata.gz: da5b298b43c9e18150d7bbcae2ca4f540ac7583db5475336536a4f123375ce1f030570b9ce655063d573047f4a259ddb925e92c9d491fb5da2d95098cf934972
7
+ data.tar.gz: 3368909d19738083dabef1f28d39bbbdd16013a0d653bd3580b535253e475357aebf520af82e726fd8c782ebf1cac31a2259723d73220af5518575c0cc219792
data/bin/ood_packaging CHANGED
@@ -22,6 +22,10 @@ OptionParser.new do |opts|
22
22
  options[:dist] = v
23
23
  end
24
24
 
25
+ opts.on('-a', '--arch=ARCH', String, 'Architecture to build') do |v|
26
+ options[:arch] = v
27
+ end
28
+
25
29
  opts.on('-V', '--version=VERSION', String, 'Version of package to build') do |v|
26
30
  options[:version] = v
27
31
  end
@@ -15,7 +15,7 @@ class OodPackaging::Build
15
15
  attr_accessor :build_box
16
16
 
17
17
  def initialize
18
- @build_box = OodPackaging::BuildBox.new(dist: ENV['DIST'])
18
+ @build_box = OodPackaging::BuildBox.new(dist: ENV['DIST'], arch: ENV['ARCH'])
19
19
  end
20
20
 
21
21
  def config
@@ -39,7 +39,10 @@ class OodPackaging::Build
39
39
  end
40
40
 
41
41
  def version
42
- ENV['VERSION']
42
+ ver = ENV['VERSION']
43
+ return nil if ver == ''
44
+
45
+ ver
43
46
  end
44
47
 
45
48
  def rpm_version
@@ -47,6 +50,8 @@ class OodPackaging::Build
47
50
  end
48
51
 
49
52
  def rpm_release
53
+ return nil if version.nil?
54
+
50
55
  v = version.split('-', 2)
51
56
  return '1' if v.size < 2
52
57
 
@@ -64,9 +69,10 @@ class OodPackaging::Build
64
69
  end
65
70
 
66
71
  def rpm_defines
67
- defines = ["--define 'git_tag #{version}'"]
68
- defines.concat ["--define 'package_version #{rpm_version}'"]
69
- defines.concat ["--define 'package_release #{rpm_release}'"]
72
+ defines = []
73
+ defines.concat ["--define 'git_tag #{version}'"] unless version.nil?
74
+ defines.concat ["--define 'package_version #{rpm_version}'"] unless rpm_version.nil?
75
+ defines.concat ["--define 'package_release #{rpm_release}'"] unless rpm_release.nil?
70
76
  defines.concat ["--define 'scl #{config[:scl]}'"] if config[:scl]
71
77
  defines
72
78
  end
@@ -116,11 +122,11 @@ class OodPackaging::Build
116
122
  end
117
123
 
118
124
  def output_dir
119
- File.join('/output', build_box.dist)
125
+ File.join('/output', "#{build_box.dist}-#{build_box.arch}")
120
126
  end
121
127
 
122
128
  def work_dir
123
- File.join('/work', build_box.dist)
129
+ build_box.work_dir
124
130
  end
125
131
 
126
132
  def packaging_config
@@ -1,4 +1,5 @@
1
- FROM <%= base_image %>
1
+ FROM --platform=<%= platform %> <%= base_image %>
2
+ ENV ARCH=<%= arch %>
2
3
  MAINTAINER Trey Dockendorf <tdockendorf@osc.edu>
3
4
  ENV LANG=en_US.UTF-8
4
5
  ENV LC_CTYPE=en_US.UTF-8
@@ -16,7 +17,7 @@ RUN head -n 13 /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo >> /etc/yum.repos.d/Cent
16
17
  RUN rm -f /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo /etc/yum.repos.d/CentOS-SCLo-scl.repo
17
18
  <% elsif dnf? -%>
18
19
  RUN dnf update -y && dnf clean all && rm -rf /var/cache/dnf/*
19
- RUN dnf install -y dnf-utils <%= dist =~ /^el/ ? 'epel-release' : '' %> langpacks-en glibc-all-langpacks && dnf clean all && rm -rf /var/cache/dnf/*
20
+ RUN dnf install -y dnf-utils <%= dist =~ /^el/ ? 'epel-release' : '' %> langpacks-en glibc-langpack-en && dnf clean all && rm -rf /var/cache/dnf/*
20
21
  <% if dist == 'el8' -%>
21
22
  RUN dnf config-manager --set-enabled powertools && dnf clean all && rm -rf /var/cache/dnf/*
22
23
  RUN dnf module enable -y ruby:<%= ruby_version %> nodejs:<%= nodejs_version %> && dnf clean all && rm -rf /var/cache/dnf/*
@@ -36,8 +37,10 @@ RUN apt update -y && apt install -y apt-transport-https ca-certificates \
36
37
  init debhelper devscripts dh-make build-essential apt-cudf lintian equivs \
37
38
  sudo rake wget curl ruby bundler && \
38
39
  apt clean all -y
40
+ <% if arch != 'ppc64le' %>
39
41
  RUN echo "deb https://deb.nodesource.com/node_<%= nodejs_version %>.x <%= codename %> main" > /etc/apt/sources.list.d/nodesource.list
40
42
  RUN curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor > /etc/apt/trusted.gpg.d/nodesource.gpg
43
+ <% end %>
41
44
  <% end -%>
42
45
  COPY . /build
43
46
  RUN /bin/bash /build/install.sh
@@ -45,7 +45,7 @@ run chmod 440 /etc/sudoers.d/ood
45
45
  <% if rpm? -%>
46
46
  header "Setup RPM env"
47
47
  sudo -u <%= ctr_user %> -H cat > <%= ctr_rpmmacros %> <<EOF
48
- %_topdir /work/<%= dist %>
48
+ %_topdir <%= work_dir %>
49
49
  <%- # Workaround to weird issue with debuginfo stripping -%>
50
50
  <% if dist == 'el7' -%>
51
51
  %_builddir %{_topdir}/rpmbuild/BUILD
@@ -11,7 +11,7 @@ class OodPackaging::BuildBox
11
11
 
12
12
  BASE_IMAGES = {
13
13
  'el7' => 'centos:7',
14
- 'el8' => 'rockylinux/rockylinux:8',
14
+ 'el8' => 'almalinux:8',
15
15
  'el9' => 'almalinux:9',
16
16
  'ubuntu-20.04' => 'ubuntu:20.04',
17
17
  'ubuntu-22.04' => 'ubuntu:22.04',
@@ -23,6 +23,12 @@ class OodPackaging::BuildBox
23
23
  'ubuntu-22.04' => 'jammy'
24
24
  }.freeze
25
25
 
26
+ ARCH_PLATFORMS = {
27
+ 'x86_64' => 'linux/amd64',
28
+ 'aarch64' => 'linux/arm64',
29
+ 'ppc64le' => 'linux/ppc64le'
30
+ }.freeze
31
+
26
32
  def initialize(config = {})
27
33
  @config = config
28
34
  raise ArgumentError, 'Must provide dist' if dist.nil?
@@ -31,6 +37,9 @@ class OodPackaging::BuildBox
31
37
  unless valid_dist?(dist)
32
38
  raise ArgumentError, "Invalid dist selected: #{dist}. Valid choices are #{valid_dists.join(' ')}"
33
39
  end
40
+ unless valid_arch?(arch)
41
+ raise ArgumentError, "Invalid arch selected: #{arch}. Valid choices are #{valid_arches.join(' ')}"
42
+ end
34
43
  # rubocop:enable Style/GuardClause
35
44
  end
36
45
 
@@ -38,6 +47,10 @@ class OodPackaging::BuildBox
38
47
  @dist ||= ENV['OOD_PACKAGING_DIST'] || @config[:dist]
39
48
  end
40
49
 
50
+ def arch
51
+ @arch ||= ENV['OOD_PACKAGING_ARCH'] || @config[:arch] || 'x86_64'
52
+ end
53
+
41
54
  def rpm?
42
55
  dist.start_with?('el') || dist.start_with?('amzn')
43
56
  end
@@ -80,6 +93,14 @@ class OodPackaging::BuildBox
80
93
  BASE_IMAGES.keys
81
94
  end
82
95
 
96
+ def valid_arch?(value)
97
+ ARCH_PLATFORMS.key?(value)
98
+ end
99
+
100
+ def valid_arches
101
+ ARCH_PLATFORMS.keys
102
+ end
103
+
83
104
  def base_image
84
105
  @base_image ||= BASE_IMAGES[dist]
85
106
  end
@@ -88,10 +109,18 @@ class OodPackaging::BuildBox
88
109
  @codename ||= CODENAMES[dist]
89
110
  end
90
111
 
112
+ def platform
113
+ @platform ||= ARCH_PLATFORMS[arch]
114
+ end
115
+
91
116
  def build_dir
92
117
  File.join(File.dirname(__FILE__), 'build_box/docker-image')
93
118
  end
94
119
 
120
+ def work_dir
121
+ File.join('/work', "#{dist}-#{arch}")
122
+ end
123
+
95
124
  def image_registry
96
125
  @config[:build_box_registry] || ENV['OOD_PACKAGING_BUILD_BOX_REGISTRY'] || nil
97
126
  end
@@ -109,7 +138,7 @@ class OodPackaging::BuildBox
109
138
  end
110
139
 
111
140
  def image_tag
112
- [image_registry, image_org, "#{image_name}-#{dist}:#{image_version}"].compact.join('/')
141
+ [image_registry, image_org, "#{image_name}-#{dist}-#{arch}:#{image_version}"].compact.join('/')
113
142
  end
114
143
 
115
144
  def build_gem
@@ -128,11 +157,29 @@ class OodPackaging::BuildBox
128
157
  template_file('build_box/docker-image/install.sh.erb')
129
158
  end
130
159
 
160
+ def build_command
161
+ if container_runtime == 'docker'
162
+ ['buildx', 'build']
163
+ else
164
+ ['build']
165
+ end
166
+ end
167
+
168
+ def build_output
169
+ if container_runtime == 'docker'
170
+ ['--output', 'type=docker']
171
+ else
172
+ []
173
+ end
174
+ end
175
+
131
176
  def build!
132
177
  scripts
133
- cmd = [container_runtime, 'build']
134
- cmd.concat ['--platform', 'linux/amd64']
178
+ cmd = [container_runtime]
179
+ cmd.concat build_command
180
+ cmd.concat ['--platform', platform]
135
181
  cmd.concat ['--tag', image_tag]
182
+ cmd.concat build_output
136
183
  cmd.concat [ENV['OOD_PACKAGING_BUILD_BOX_ARGS']] if ENV['OOD_PACKAGING_BUILD_BOX_ARGS']
137
184
  cmd.concat ['-f', dockerfile]
138
185
  cmd.concat [build_dir]
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Handle options for OodPackaging
4
4
  module OodPackaging
5
- OPTIONS = [:package, :version, :dist, :work_dir, :clean_work_dir, :output_dir, :clean_output_dir, :tar,
5
+ OPTIONS = [:package, :version, :dist, :arch, :work_dir, :clean_work_dir, :output_dir, :clean_output_dir, :tar,
6
6
  :tar_only, :skip_download, :gpg_sign, :gpg_name, :gpg_pubkey, :gpg_private_key, :gpg_passphrase,
7
7
  :debug, :attach].freeze
8
8
  end
@@ -248,7 +248,20 @@ class OodPackaging::Package
248
248
  end
249
249
  end
250
250
 
251
+ # Unused but left in case useful in future
252
+ # def handle_signals
253
+ # ['QUIT', 'TERM', 'INT'].each do |signal|
254
+ # Signal.trap(signal) do
255
+ # puts "Caught signal #{signal}, proceeding to kill container".red
256
+ # container_kill!
257
+ # exit 1
258
+ # end
259
+ # end
260
+ # end
261
+
262
+ # rubocop:disable Metrics/AbcSize
251
263
  def run!
264
+ # handle_signals
252
265
  if tar_only?
253
266
  tar!
254
267
  return
@@ -259,6 +272,10 @@ class OodPackaging::Package
259
272
  container_start!
260
273
  container_exec!(exec_rake)
261
274
  puts "Build SUCCESS: package=#{package} dist=#{build_box.dist}".green
275
+ rescue SignalException => e
276
+ puts "Caught signal #{e}, proceeding to kill container".red
277
+ container_kill!
278
+ exit 1
262
279
  rescue RuntimeError
263
280
  puts "Build FAILED package=#{package} dist=#{build_box.dist}".red
264
281
  raise
@@ -266,6 +283,7 @@ class OodPackaging::Package
266
283
  container_attach! if attach?
267
284
  container_kill! if container_running? && !attach?
268
285
  end
286
+ # rubocop:enable Metrics/AbcSize
269
287
 
270
288
  def container_running?
271
289
  cmd = "#{container_runtime} inspect #{container_name} 2>/dev/null 1>/dev/null"
@@ -276,7 +294,7 @@ class OodPackaging::Package
276
294
 
277
295
  def container_start!
278
296
  cmd = [container_runtime, 'run', '--detach', '--rm']
279
- cmd.concat ['--platform', 'linux/amd64']
297
+ cmd.concat ['--platform', build_box.platform]
280
298
  cmd.concat ['--name', container_name]
281
299
  cmd.concat rt_specific_flags
282
300
  cmd.concat container_mounts
@@ -314,11 +332,14 @@ class OodPackaging::Package
314
332
  cmd = [container_runtime, 'kill', container_name]
315
333
  cmd.concat [cmd_suffix] unless debug?
316
334
  sh cmd.join(' '), verbose: debug?
335
+ rescue RuntimeError
336
+ puts 'Error killing container'.red
317
337
  end
318
338
 
319
339
  def container_env
320
340
  env = {
321
341
  'DIST' => build_box.dist,
342
+ 'ARCH' => build_box.arch,
322
343
  'PACKAGE' => package_name,
323
344
  'VERSION' => version,
324
345
  'TAR_NAME' => "#{tar_name}.tar.gz",
@@ -17,25 +17,25 @@ namespace :ood_packaging do
17
17
 
18
18
  namespace :buildbox do
19
19
  desc 'Build buildbox image'
20
- task :build, [:dist] do |_task, args|
20
+ task :build, [:dist, :arch] do |_task, args|
21
21
  @build_box = OodPackaging::BuildBox.new(args)
22
22
  @build_box.build!
23
23
  end
24
24
 
25
25
  desc 'Push buildbox image'
26
- task :push, [:dist] do |_task, args|
26
+ task :push, [:dist, :arch] do |_task, args|
27
27
  @build_box = OodPackaging::BuildBox.new(args)
28
28
  @build_box.push!
29
29
  end
30
30
 
31
31
  desc 'Pull buildbox image'
32
- task :pull, [:dist] do |_task, args|
32
+ task :pull, [:dist, :arch] do |_task, args|
33
33
  @build_box = OodPackaging::BuildBox.new(args)
34
34
  @build_box.pull!
35
35
  end
36
36
 
37
37
  desc 'Save buildbox image'
38
- task :save, [:dist, :path] do |_task, args|
38
+ task :save, [:dist, :arch, :path] do |_task, args|
39
39
  @build_box = OodPackaging::BuildBox.new(args)
40
40
  @build_box.save!(args[:path])
41
41
  end
@@ -47,76 +47,78 @@ namespace :ood_packaging do
47
47
  OodPackaging::Build.new.run!
48
48
  end
49
49
 
50
- OodPackaging::RakeTask.new(:internal, [:package, :dist]) do |t, args|
50
+ OodPackaging::RakeTask.new(:internal, [:package, :dist, :arch]) do |t, args|
51
51
  name = args[:package].split(':').last
52
52
  t.package = File.join(proj_root, 'packages', name)
53
53
  dist = args[:dist] || ENV['OOD_PACKAGING_DIST']
54
+ arch = args[:arch] || ENV['OOD_PACKAGING_ARCH'] || 'x86_64'
54
55
  t.dist = dist
56
+ t.arch = arch
55
57
  t.version = OodPackaging.package_version(name, dist)
56
58
  t.work_dir = File.join(proj_root, 'tmp/work')
57
59
  t.output_dir = File.join(proj_root, 'tmp/output')
58
60
  end
59
61
 
60
62
  desc 'Package ondemand-release'
61
- task :'ondemand-release', [:dist] do |t, args|
63
+ task :'ondemand-release', [:dist, :arch] do |t, args|
62
64
  ENV['OOD_PACKAGING_GPG_SIGN'] = 'false'
63
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
65
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
64
66
  end
65
67
 
66
68
  desc 'Package ondemand-release-latest'
67
- task :'ondemand-release-latest', [:dist] do |t, args|
69
+ task :'ondemand-release-latest', [:dist, :arch] do |t, args|
68
70
  ENV['OOD_PACKAGING_GPG_SIGN'] = 'false'
69
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
71
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
70
72
  end
71
73
 
72
74
  desc 'Package ondemand-runtime'
73
- task :'ondemand-runtime', [:dist] do |t, args|
74
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
75
+ task :'ondemand-runtime', [:dist, :arch] do |t, args|
76
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
75
77
  end
76
78
 
77
79
  desc 'Package scl-utils'
78
- task :'scl-utils', [:dist] do |t, args|
79
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
80
+ task :'scl-utils', [:dist, :arch] do |t, args|
81
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
80
82
  end
81
83
 
82
84
  desc 'Package passenger'
83
- task :passenger, [:dist] do |t, args|
84
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
85
+ task :passenger, [:dist, :arch] do |t, args|
86
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
85
87
  end
86
88
 
87
89
  desc 'Package cjose'
88
- task :cjose, [:dist] do |t, args|
89
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
90
+ task :cjose, [:dist, :arch] do |t, args|
91
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
90
92
  end
91
93
 
92
94
  desc 'Package mod_auth_openidc'
93
- task :mod_auth_openidc, [:dist] do |t, args|
94
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
95
+ task :mod_auth_openidc, [:dist, :arch] do |t, args|
96
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
95
97
  end
96
98
 
97
99
  desc 'Package sqlite'
98
- task :sqlite, [:dist] do |t, args|
99
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
100
+ task :sqlite, [:dist, :arch] do |t, args|
101
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
100
102
  end
101
103
 
102
104
  desc 'Package ondemand_exporter'
103
- task :ondemand_exporter, [:dist] do |t, args|
104
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
105
+ task :ondemand_exporter, [:dist, :arch] do |t, args|
106
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
105
107
  end
106
108
 
107
109
  desc 'Package ondemand-compute'
108
- task :'ondemand-compute', [:dist] do |t, args|
109
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
110
+ task :'ondemand-compute', [:dist, :arch] do |t, args|
111
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
110
112
  end
111
113
 
112
114
  desc 'Package python-websockify'
113
- task :'python-websockify', [:dist] do |t, args|
114
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
115
+ task :'python-websockify', [:dist, :arch] do |t, args|
116
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
115
117
  end
116
118
 
117
119
  desc 'Package turbovnc'
118
- task :turbovnc, [:dist] do |t, args|
119
- Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist])
120
+ task :turbovnc, [:dist, :arch] do |t, args|
121
+ Rake::Task['ood_packaging:package:internal'].invoke(t.name, args[:dist], args[:arch])
120
122
  end
121
123
  end
122
124
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Version code for OodPackaging
4
4
  module OodPackaging
5
- VERSION = '0.8.0'
5
+ VERSION = '0.10.0'
6
6
  PACKAGE_VERSION = {
7
7
  'ondemand-release' => {
8
8
  '(ubuntu|debian)' => '3.1.0',
@@ -12,13 +12,13 @@ module OodPackaging
12
12
  '(ubuntu|debian)' => '1',
13
13
  'default' => '1-8'
14
14
  },
15
- 'ondemand-runtime' => '3.1.1',
15
+ 'ondemand-runtime' => '3.1.2',
16
16
  'scl-utils' => '2.0.3',
17
17
  'passenger' => '6.0.17',
18
18
  'cjose' => '0.6.1',
19
19
  'mod_auth_openidc' => '2.4.14.1',
20
20
  'sqlite' => '3.26.0-4',
21
- 'ondemand_exporter' => '0.9.0',
21
+ 'ondemand_exporter' => '0.10.0',
22
22
  'ondemand-compute' => {
23
23
  '(ubuntu|debian)' => '3.1.0',
24
24
  'default' => '3.1.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ood_packaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trey Dockendorf
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-06-02 00:00:00.000000000 Z
12
+ date: 2023-06-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake