ood_packaging 0.0.1.r2.0 → 0.0.1.rc.3
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/bin/ood_packaging +7 -3
- data/lib/ood_packaging/build.rb +9 -34
- data/lib/ood_packaging/build_box/docker-image/Dockerfile.erb +9 -13
- data/lib/ood_packaging/build_box/docker-image/install.sh.erb +3 -3
- data/lib/ood_packaging/build_box.rb +5 -9
- data/lib/ood_packaging/package.rb +34 -70
- data/lib/ood_packaging/rake_task.rb +3 -1
- data/lib/ood_packaging/tasks.rb +2 -17
- data/lib/ood_packaging/utils.rb +2 -13
- data/lib/ood_packaging/version.rb +8 -8
- data/lib/tasks/package_utils.rb +197 -0
- data/lib/tasks/packaging.rb +111 -0
- data/lib/tasks/templates/Dockerfile.el.erb +21 -0
- data/lib/tasks/templates/Dockerfile.ubuntu.erb +15 -0
- metadata +7 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d76f705e0592bc694ee1e658e75da269f269489712392b3a412bc7db7ab566e7
|
4
|
+
data.tar.gz: c8eb63270d72d241ae87b1b82d9daeb1bb78382d529d636637fb2c8db1c5d9cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6abb5c9b384d917d91570578518be7f53a3b28568f4fa6bf50568d7903b7eae916b62be9b32e37607302f7227b1af3c1b811679b2ce17d05243c2b52503b224b
|
7
|
+
data.tar.gz: fb24936ba8e69d351b00032b5afe02fc3520629ea694d91a068bad906185275d0d2ce1a5c65a206ded893e70b1992c7dcae92378d0aa8959aed270486696f6a1
|
data/bin/ood_packaging
CHANGED
@@ -2,9 +2,13 @@
|
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
4
|
require 'optparse'
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
begin
|
6
|
+
require 'ood_packaging'
|
7
|
+
# If gem is not installed, load from location in git repo
|
8
|
+
rescue LoadError
|
9
|
+
$LOAD_PATH.unshift(File.expand_path(File.join(__dir__, '../lib')))
|
10
|
+
require 'ood_packaging'
|
11
|
+
end
|
8
12
|
|
9
13
|
options = {}
|
10
14
|
OptionParser.new do |opts|
|
data/lib/ood_packaging/build.rb
CHANGED
@@ -39,11 +39,11 @@ class OodPackaging::Build
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def version
|
42
|
-
ENV['VERSION']
|
42
|
+
ENV['VERSION'].gsub(/^v/, '')
|
43
43
|
end
|
44
44
|
|
45
45
|
def rpm_version
|
46
|
-
version.
|
46
|
+
version.split('-', 2)[0]
|
47
47
|
end
|
48
48
|
|
49
49
|
def rpm_release
|
@@ -53,12 +53,8 @@ class OodPackaging::Build
|
|
53
53
|
v[1].gsub('-', '.')
|
54
54
|
end
|
55
55
|
|
56
|
-
def deb_version
|
57
|
-
version.gsub(/^v/, '').gsub('-', '.')
|
58
|
-
end
|
59
|
-
|
60
56
|
def rpm_defines
|
61
|
-
defines = ["--define 'git_tag #{
|
57
|
+
defines = ["--define 'git_tag #{ENV['VERSION']}'"]
|
62
58
|
defines.concat ["--define 'package_version #{rpm_version}'"]
|
63
59
|
defines.concat ["--define 'package_release #{rpm_release}'"]
|
64
60
|
defines.concat ["--define 'scl #{config[:scl]}'"] if config[:scl]
|
@@ -76,8 +72,6 @@ class OodPackaging::Build
|
|
76
72
|
'/package/rpm'
|
77
73
|
elsif Dir.exist?('/package/packaging/rpm')
|
78
74
|
'/package/packaging/rpm'
|
79
|
-
elsif Dir.exist?('/package/packaging')
|
80
|
-
'/package/packaging'
|
81
75
|
else
|
82
76
|
'/package'
|
83
77
|
end
|
@@ -94,8 +88,6 @@ class OodPackaging::Build
|
|
94
88
|
def debian_dir
|
95
89
|
@debian_dir ||= if Dir.exist?('/package/deb/debian')
|
96
90
|
'/package/deb/debian'
|
97
|
-
elsif Dir.exist?('/package/packaging/deb')
|
98
|
-
'/package/packaging/deb'
|
99
91
|
else
|
100
92
|
'/package/debian'
|
101
93
|
end
|
@@ -130,7 +122,7 @@ class OodPackaging::Build
|
|
130
122
|
end
|
131
123
|
|
132
124
|
def deb_name
|
133
|
-
"#{package}-#{
|
125
|
+
"#{package}-#{version}"
|
134
126
|
end
|
135
127
|
|
136
128
|
def rpms
|
@@ -138,7 +130,6 @@ class OodPackaging::Build
|
|
138
130
|
end
|
139
131
|
|
140
132
|
def run!
|
141
|
-
fix_env!
|
142
133
|
env_dump! if debug?
|
143
134
|
bootstrap_rpm! if build_box.rpm?
|
144
135
|
bootstrap_deb! if build_box.deb?
|
@@ -150,10 +141,6 @@ class OodPackaging::Build
|
|
150
141
|
sanity!
|
151
142
|
end
|
152
143
|
|
153
|
-
def fix_env!
|
154
|
-
ENV.delete('GEM_PATH')
|
155
|
-
end
|
156
|
-
|
157
144
|
def env_dump!
|
158
145
|
ENV.sort.to_h.each_pair do |k, v|
|
159
146
|
puts "#{k}=#{v}"
|
@@ -194,17 +181,10 @@ class OodPackaging::Build
|
|
194
181
|
def bootstrap_get_source!
|
195
182
|
if ENV['SKIP_DOWNLOAD'] == 'true'
|
196
183
|
puts "\tSKIP_DOWNLOAD detected, skipping download sources".blue
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
exit_code = $CHILD_STATUS.exitstatus
|
201
|
-
if exit_code.zero?
|
202
|
-
source = File.join(work_dir, 'SOURCES', File.basename(output))
|
203
|
-
tar = File.join(work_dir, 'SOURCES', ENV['TAR_NAME'])
|
204
|
-
sh "mv #{tar} #{source}" if !File.exist?(source) && File.exist?(tar)
|
184
|
+
else
|
185
|
+
puts "\tDownloading sources defined in #{spec_file}".blue
|
186
|
+
sh "spectool #{rpm_defines.join(' ')} -g -R -S #{spec_file}#{cmd_suffix}"
|
205
187
|
end
|
206
|
-
puts "\tDownloading sources defined in #{spec_file}".blue
|
207
|
-
sh "spectool #{rpm_defines.join(' ')} -g -R -S #{spec_file}#{cmd_suffix}"
|
208
188
|
end
|
209
189
|
|
210
190
|
def bootstrap_deb!
|
@@ -221,7 +201,7 @@ class OodPackaging::Build
|
|
221
201
|
puts "\tBootstrap debian build files".blue
|
222
202
|
Dir.chdir(deb_work_dir) do
|
223
203
|
sh "dh_make -s -y --createorig -f ../#{deb_name}.tar.gz#{cmd_suffix} || true"
|
224
|
-
sh "dch -b -v #{
|
204
|
+
sh "dch -b -v #{version} 'Release #{version}'#{cmd_suffix}"
|
225
205
|
end
|
226
206
|
end
|
227
207
|
|
@@ -247,14 +227,9 @@ class OodPackaging::Build
|
|
247
227
|
|
248
228
|
def install_deb_dependencies!
|
249
229
|
sh "sudo apt update -y#{cmd_suffix}"
|
250
|
-
tool = [
|
251
|
-
'DEBIAN_FRONTEND=noninteractive apt-cudf-get --solver aspcud',
|
252
|
-
'-o APT::Get::Assume-Yes=1 -o APT::Get::Allow-Downgrades=1',
|
253
|
-
'-o Debug::pkgProblemResolver=0 -o APT::Install-Recommends=0'
|
254
|
-
]
|
255
230
|
cmd = [
|
256
231
|
'mk-build-deps --install --remove --root-cmd sudo',
|
257
|
-
"--tool='
|
232
|
+
"--tool='apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends --yes'"
|
258
233
|
]
|
259
234
|
Dir.chdir(deb_work_dir) do
|
260
235
|
sh "#{cmd.join(' ')}#{cmd_suffix}"
|
@@ -2,35 +2,31 @@ FROM <%= base_image %>
|
|
2
2
|
MAINTAINER Trey Dockendorf <tdockendorf@osc.edu>
|
3
3
|
ENV LANG=en_US.UTF-8
|
4
4
|
ENV LC_CTYPE=en_US.UTF-8
|
5
|
-
|
6
|
-
ENV GEM_PATH=<%= ctr_gems_dir %>:
|
7
|
-
<% if scl? -%>
|
5
|
+
<% if dist == 'el7' -%>
|
8
6
|
RUN yum update -y && yum clean all && rm -rf /var/cache/yum/*
|
9
7
|
RUN yum install -y yum-utils epel-release centos-release-scl && yum clean all && rm -rf /var/cache/yum/*
|
10
8
|
RUN yum install -y <%= scl_ruby %>-ruby sudo which wget @buildsys-build \
|
11
9
|
rpm-build rpmdevtools rpm-sign scl-utils-build && \
|
12
10
|
yum clean all && rm -rf /var/cache/yum/*
|
13
|
-
|
14
|
-
RUN head -n 13 /etc/yum.repos.d/CentOS-SCLo-scl.repo > /etc/yum.repos.d/CentOS-SCLo.repo
|
15
|
-
RUN head -n 13 /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo >> /etc/yum.repos.d/CentOS-SCLo.repo
|
16
|
-
RUN rm -f /etc/yum.repos.d/CentOS-SCLo-scl-rh.repo /etc/yum.repos.d/CentOS-SCLo-scl.repo
|
17
|
-
<% elsif dnf? -%>
|
11
|
+
<% elsif dist =~ /^el/ -%>
|
18
12
|
RUN dnf update -y && dnf clean all && rm -rf /var/cache/dnf/*
|
19
13
|
RUN dnf install -y dnf-utils epel-release langpacks-en glibc-all-langpacks && dnf clean all && rm -rf /var/cache/dnf/*
|
20
14
|
RUN dnf config-manager --set-enabled powertools && dnf clean all && rm -rf /var/cache/dnf/*
|
21
|
-
RUN dnf module enable -y ruby:<%= ruby_version %>
|
22
|
-
RUN dnf
|
15
|
+
RUN dnf module enable -y ruby:<%= ruby_version %> && dnf clean all && rm -rf /var/cache/dnf/*
|
16
|
+
RUN dnf module enable -y nodejs:<%= nodejs_version %> && dnf clean all && rm -rf /var/cache/dnf/*
|
17
|
+
RUN dnf install -y ruby sudo which wget \
|
23
18
|
gcc-c++ gcc make patch \
|
24
19
|
rpm-build rpmdevtools rpm-sign scl-utils-build && \
|
25
20
|
dnf clean all && rm -rf /var/cache/dnf/*
|
26
|
-
<% elsif
|
21
|
+
<% elsif dist =~ /^ubuntu|debian/ -%>
|
27
22
|
ENV DEBIAN_FRONTEND=noninteractive
|
28
23
|
RUN apt update -y && apt upgrade -y && apt clean all -y
|
29
24
|
RUN apt update -y && apt install -y locales && locale-gen $LANG && \
|
30
25
|
apt clean all -y
|
31
26
|
RUN apt update -y && apt install -y apt-transport-https ca-certificates \
|
32
|
-
init debhelper devscripts dh-make build-essential
|
33
|
-
sudo rake wget curl ruby
|
27
|
+
init debhelper devscripts dh-make build-essential lintian equivs \
|
28
|
+
sudo rake wget curl ruby && \
|
29
|
+
ln -snf /bin/bundle2.7 /bin/bundle && \
|
34
30
|
apt clean all -y
|
35
31
|
RUN echo "deb https://deb.nodesource.com/node_<%= nodejs_version %>.x <%= codename %> main" > /etc/apt/sources.list.d/nodesource.list
|
36
32
|
RUN curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor > /etc/apt/trusted.gpg.d/nodesource.gpg
|
@@ -72,10 +72,10 @@ echo "allow-loopback-pinentry" >> <%= ctr_gpg_dir %>/gpg-agent.conf
|
|
72
72
|
<%- end -%>
|
73
73
|
|
74
74
|
header "Install ood_packaging gem"
|
75
|
-
<%- if
|
76
|
-
run scl enable <%= scl_ruby %> -- gem install --no-doc
|
75
|
+
<%- if rpm? && !dnf? -%>
|
76
|
+
run scl enable <%= scl_ruby %> -- gem install --no-doc /build/*.gem
|
77
77
|
<%- else -%>
|
78
|
-
run gem install --no-doc
|
78
|
+
run gem install --no-doc /build/*.gem
|
79
79
|
<%- end -%>
|
80
80
|
|
81
81
|
header "Copy in launch scripts"
|
@@ -21,17 +21,17 @@ class OodPackaging::BuildBox
|
|
21
21
|
|
22
22
|
def initialize(config = {})
|
23
23
|
@config = config
|
24
|
-
raise ArgumentError, 'Must provide dist' if dist.nil?
|
24
|
+
raise ArgumentError, 'Must provide dist' if @config[:dist].nil?
|
25
25
|
|
26
26
|
# rubocop:disable Style/GuardClause
|
27
|
-
unless valid_dist?(dist)
|
28
|
-
raise ArgumentError, "Invalid dist selected: #{dist}. Valid choices are #{valid_dists.join(' ')}"
|
27
|
+
unless valid_dist?(@config[:dist])
|
28
|
+
raise ArgumentError, "Invalid dist selected: #{@config[:dist]}. Valid choices are #{valid_dists.join(' ')}"
|
29
29
|
end
|
30
30
|
# rubocop:enable Style/GuardClause
|
31
31
|
end
|
32
32
|
|
33
33
|
def dist
|
34
|
-
@dist ||=
|
34
|
+
@dist ||= @config[:dist]
|
35
35
|
end
|
36
36
|
|
37
37
|
def rpm?
|
@@ -95,7 +95,7 @@ class OodPackaging::BuildBox
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def image_version
|
98
|
-
|
98
|
+
ENV['OOD_PACKAGING_BUILD_BOX_VERSION'] || OodPackaging::VERSION
|
99
99
|
end
|
100
100
|
|
101
101
|
def image_tag
|
@@ -133,10 +133,6 @@ class OodPackaging::BuildBox
|
|
133
133
|
sh [container_runtime, 'push', image_tag].join(' ')
|
134
134
|
end
|
135
135
|
|
136
|
-
def pull!
|
137
|
-
sh [container_runtime, 'pull', image_tag].join(' ')
|
138
|
-
end
|
139
|
-
|
140
136
|
def save!(path)
|
141
137
|
sh [container_runtime, 'save', image_tag, '| gzip >', path].join(' ')
|
142
138
|
end
|
@@ -21,6 +21,8 @@ class OodPackaging::Package
|
|
21
21
|
@config = config
|
22
22
|
@config[:dist] = 'el8' if tar_only?
|
23
23
|
@build_box = OodPackaging::BuildBox.new(config)
|
24
|
+
@clean_work_dir = config[:clean_work_dir].nil? ? true : config[:clean_work_dir]
|
25
|
+
@clean_output_dir = config[:clean_output_dir].nil? ? true : config[:clean_output_dir]
|
24
26
|
raise ArgumentError, 'Package is required' if package.nil?
|
25
27
|
raise ArgumentError, 'Version is required' if version.nil?
|
26
28
|
raise ArgumentError, "Package #{package} is not a directory" unless Dir.exist?(package)
|
@@ -31,18 +33,12 @@ class OodPackaging::Package
|
|
31
33
|
@container_name ||= SecureRandom.uuid
|
32
34
|
end
|
33
35
|
|
34
|
-
def debug
|
36
|
+
def debug
|
35
37
|
return true if ENV['OOD_PACKAGING_DEBUG'] == 'true'
|
36
38
|
|
37
39
|
@config[:debug].nil? ? false : @config[:debug]
|
38
40
|
end
|
39
41
|
|
40
|
-
def cmd_suffix
|
41
|
-
return '' if debug?
|
42
|
-
|
43
|
-
' 2>/dev/null 1>/dev/null'
|
44
|
-
end
|
45
|
-
|
46
42
|
def attach?
|
47
43
|
return true if ENV['OOD_PACKAGING_ATTACH'] == 'true'
|
48
44
|
|
@@ -53,22 +49,10 @@ class OodPackaging::Package
|
|
53
49
|
@work_dir ||= File.expand_path(@config[:work_dir])
|
54
50
|
end
|
55
51
|
|
56
|
-
def clean_work_dir
|
57
|
-
return false if ENV['OOD_PACKAGING_CLEAN_WORK_DIR'] == 'false'
|
58
|
-
|
59
|
-
@config[:clean_work_dir].nil? ? true : @config[:clean_work_dir]
|
60
|
-
end
|
61
|
-
|
62
52
|
def output_dir
|
63
53
|
@output_dir ||= File.expand_path(@config[:output_dir])
|
64
54
|
end
|
65
55
|
|
66
|
-
def clean_output_dir
|
67
|
-
return false if ENV['OOD_PACKAGING_CLEAN_OUTPUT_DIR'] == 'false'
|
68
|
-
|
69
|
-
@config[:clean_output_dir].nil? ? true : @config[:clean_output_dir]
|
70
|
-
end
|
71
|
-
|
72
56
|
def package
|
73
57
|
@config[:package]
|
74
58
|
end
|
@@ -91,21 +75,20 @@ class OodPackaging::Package
|
|
91
75
|
|
92
76
|
def package_name
|
93
77
|
name = File.basename(package)
|
94
|
-
|
95
|
-
when /deb|rpm/
|
78
|
+
if name =~ /deb|rpm/
|
96
79
|
name = if File.basename(File.dirname(package)) == 'packages'
|
97
80
|
File.basename(File.dirname(File.dirname(package)))
|
98
81
|
else
|
99
82
|
File.basename(File.dirname(package))
|
100
83
|
end
|
101
|
-
when 'packaging'
|
102
|
-
name = File.basename(File.dirname(package))
|
103
84
|
end
|
104
85
|
name
|
105
86
|
end
|
106
87
|
|
107
88
|
def gpg_files
|
108
89
|
[
|
90
|
+
OpenStruct.new(private_key: File.join(proj_root, 'ondemand.sec'), passphrase: File.join(proj_root, '.gpgpass')),
|
91
|
+
OpenStruct.new(private_key: File.join(package, 'ondemand.sec'), passphrase: File.join(package, '.gpgpass')),
|
109
92
|
OpenStruct.new(private_key: @config[:gpg_private_key], passphrase: @config[:gpg_passphrase]),
|
110
93
|
OpenStruct.new(private_key: ENV['OOD_PACKAGING_GPG_PRIVATE_KEY'],
|
111
94
|
passphrase: ENV['OOD_PACKAGING_GPG_PASSPHRASE'])
|
@@ -123,12 +106,8 @@ class OodPackaging::Package
|
|
123
106
|
!gpg_files.nil?
|
124
107
|
end
|
125
108
|
|
126
|
-
def default_gpg_name
|
127
|
-
'OnDemand Release Signing Key'
|
128
|
-
end
|
129
|
-
|
130
109
|
def gpg_name
|
131
|
-
@config[:gpg_name].nil? ?
|
110
|
+
@config[:gpg_name].nil? ? 'OnDemand Release Signing Key' : @config[:gpg_name]
|
132
111
|
end
|
133
112
|
|
134
113
|
def container_init
|
@@ -144,23 +123,10 @@ class OodPackaging::Package
|
|
144
123
|
package
|
145
124
|
end
|
146
125
|
|
147
|
-
def tar_name
|
148
|
-
version = if build_box.rpm?
|
149
|
-
rpm_version
|
150
|
-
else
|
151
|
-
deb_version
|
152
|
-
end
|
153
|
-
"#{package_name}-#{version}"
|
154
|
-
end
|
155
|
-
|
156
126
|
def rpm_tar_dest_dir
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
File.join(package, 'packaging')
|
161
|
-
].each do |dir|
|
162
|
-
return dir if Dir.exist?(dir)
|
163
|
-
end
|
127
|
+
dir = File.join(package, 'rpm')
|
128
|
+
return dir if Dir.exist?(dir)
|
129
|
+
|
164
130
|
File.join(package, 'packaging/rpm')
|
165
131
|
end
|
166
132
|
|
@@ -191,8 +157,8 @@ class OodPackaging::Package
|
|
191
157
|
cmd = []
|
192
158
|
cmd.concat exec_launchers if docker_runtime?
|
193
159
|
cmd.concat ['scl', 'enable', scl_ruby, '--'] if podman_runtime? && build_box.scl?
|
194
|
-
cmd.concat [
|
195
|
-
cmd.concat ['-q'] unless debug
|
160
|
+
cmd.concat ['rake']
|
161
|
+
cmd.concat ['-q'] unless debug
|
196
162
|
cmd.concat ['-f', File.join(ctr_scripts_dir, 'Rakefile'), 'ood_packaging:package:build']
|
197
163
|
cmd
|
198
164
|
end
|
@@ -218,31 +184,33 @@ class OodPackaging::Package
|
|
218
184
|
end
|
219
185
|
|
220
186
|
def clean!
|
221
|
-
sh "rm -rf #{work_dir}", verbose: debug
|
222
|
-
sh "rm -rf #{output_dir}", verbose: debug
|
187
|
+
sh "rm -rf #{work_dir}", verbose: debug if @clean_work_dir
|
188
|
+
sh "rm -rf #{output_dir}", verbose: debug if @clean_output_dir
|
223
189
|
end
|
224
190
|
|
225
191
|
def bootstrap!
|
226
|
-
sh "mkdir -p #{work_dir}", verbose: debug
|
227
|
-
sh "mkdir -p #{output_dir}", verbose: debug
|
192
|
+
sh "mkdir -p #{work_dir}", verbose: debug
|
193
|
+
sh "mkdir -p #{output_dir}", verbose: debug
|
228
194
|
end
|
229
195
|
|
230
196
|
def tar!
|
231
197
|
cmd = ['git', 'ls-files', '.', '|', tar, '-c']
|
232
198
|
if build_box.rpm?
|
233
199
|
dir = rpm_tar_dest_dir
|
200
|
+
version = rpm_version
|
234
201
|
else
|
235
202
|
dir = deb_tar_dest_dir.tap { |p| sh "mkdir -p #{p}" }
|
203
|
+
version = deb_version
|
236
204
|
cmd.concat ["--transform 'flags=r;s,packaging/deb,debian,'"]
|
237
205
|
end
|
238
|
-
tar_file = "#{dir}/#{
|
239
|
-
cmd.concat ["--transform 's,^,#{
|
206
|
+
tar_file = "#{dir}/#{package_name}-#{version}.tar.gz"
|
207
|
+
cmd.concat ["--transform 's,^,#{package_name}-#{version}/,'"]
|
240
208
|
cmd.concat ['-T', '-', '|', "gzip > #{tar_file}"]
|
241
209
|
|
242
210
|
sh "rm #{tar_file}" if File.exist?(tar_file)
|
243
211
|
puts "Create tar archive #{tar_file}".blue
|
244
212
|
Dir.chdir(tar_path) do
|
245
|
-
sh cmd.join(' '), verbose: debug
|
213
|
+
sh cmd.join(' '), verbose: debug
|
246
214
|
end
|
247
215
|
end
|
248
216
|
|
@@ -256,19 +224,19 @@ class OodPackaging::Package
|
|
256
224
|
tar! if tar?
|
257
225
|
container_start!
|
258
226
|
container_exec!(exec_rake)
|
259
|
-
puts "Build SUCCESS: package=#{package} dist=#{build_box.dist}".green
|
260
227
|
rescue RuntimeError
|
228
|
+
# ret = 1
|
261
229
|
puts "Build FAILED package=#{package} dist=#{build_box.dist}".red
|
262
230
|
raise
|
231
|
+
else
|
232
|
+
puts "Build SUCCESS: package=#{package} dist=#{build_box.dist}".green
|
263
233
|
ensure
|
264
234
|
container_exec!(exec_attach, ['-i', '-t']) if attach?
|
265
|
-
container_kill! if container_running?
|
235
|
+
container_kill! if container_running?
|
266
236
|
end
|
267
237
|
|
268
238
|
def container_running?
|
269
|
-
|
270
|
-
puts cmd if debug?
|
271
|
-
`#{cmd}`
|
239
|
+
`#{container_runtime} inspect #{container_name} 2>/dev/null 1>/dev/null`
|
272
240
|
$CHILD_STATUS.success?
|
273
241
|
end
|
274
242
|
|
@@ -279,9 +247,9 @@ class OodPackaging::Package
|
|
279
247
|
cmd.concat container_mounts
|
280
248
|
cmd.concat [build_box.image_tag]
|
281
249
|
cmd.concat [container_init]
|
282
|
-
cmd.concat ['1>/dev/null'] unless debug
|
250
|
+
cmd.concat ['1>/dev/null'] unless debug
|
283
251
|
puts "Starting container #{container_name} using image #{build_box.image_tag}".blue
|
284
|
-
sh cmd.join(' '), verbose: debug
|
252
|
+
sh cmd.join(' '), verbose: debug
|
285
253
|
end
|
286
254
|
|
287
255
|
def container_exec!(exec_cmd, extra_args = [])
|
@@ -293,33 +261,29 @@ class OodPackaging::Package
|
|
293
261
|
cmd.concat [container_name]
|
294
262
|
cmd.concat exec_cmd
|
295
263
|
puts "Build STARTED: package=#{package} dist=#{build_box.dist} exec=#{exec_cmd[-1]}".blue
|
296
|
-
sh cmd.join(' '), verbose: debug
|
297
|
-
true
|
298
|
-
rescue RuntimeError
|
299
|
-
container_kill! if container_running? && !attach?
|
300
|
-
raise
|
264
|
+
sh cmd.join(' '), verbose: debug
|
301
265
|
end
|
302
266
|
|
303
267
|
def container_kill!
|
304
268
|
puts "Killing container #{container_name}".blue
|
305
269
|
cmd = [container_runtime, 'kill', container_name]
|
306
|
-
cmd.concat [
|
307
|
-
sh cmd.join(' '), verbose: debug
|
270
|
+
cmd.concat ['1>/dev/null', '2>/dev/null'] unless debug
|
271
|
+
sh cmd.join(' '), verbose: debug
|
308
272
|
end
|
309
273
|
|
310
274
|
def container_env
|
311
275
|
env = {
|
312
276
|
'DIST' => build_box.dist,
|
313
277
|
'PACKAGE' => package_name,
|
314
|
-
'VERSION' => version,
|
315
|
-
'TAR_NAME' => "#{tar_name}.tar.gz",
|
316
278
|
'GPG_SIGN' => gpg_sign,
|
317
279
|
'GPG_NAME' => gpg_name,
|
318
280
|
'SKIP_DOWNLOAD' => @config[:skip_download],
|
319
281
|
'OOD_UID' => Process.uid,
|
320
282
|
'OOD_GID' => Process.gid,
|
321
|
-
'DEBUG' => debug
|
283
|
+
'DEBUG' => debug
|
322
284
|
}
|
285
|
+
env['VERSION'] = rpm_version if build_box.rpm?
|
286
|
+
env['VERSION'] = deb_version if build_box.deb?
|
323
287
|
env['GPG_PUBKEY'] = '/gpg.pub' if @config[:gpg_pubkey]
|
324
288
|
env
|
325
289
|
end
|
data/lib/ood_packaging/tasks.rb
CHANGED
@@ -7,14 +7,6 @@ require 'ood_packaging/utils'
|
|
7
7
|
namespace :ood_packaging do
|
8
8
|
include OodPackaging::Utils
|
9
9
|
|
10
|
-
desc 'Set version'
|
11
|
-
task :version, [:version] do |_task, args|
|
12
|
-
version_file = File.join(proj_root, 'lib/ood_packaging/version.rb')
|
13
|
-
version = args[:version].gsub(/^v/, '')
|
14
|
-
sh "#{sed} -i -r \"s| VERSION =.*| VERSION = '#{version}'|g\" #{version_file}"
|
15
|
-
sh 'bundle install'
|
16
|
-
end
|
17
|
-
|
18
10
|
namespace :buildbox do
|
19
11
|
desc 'Build buildbox image'
|
20
12
|
task :build, [:dist] do |_task, args|
|
@@ -28,12 +20,6 @@ namespace :ood_packaging do
|
|
28
20
|
@build_box.push!
|
29
21
|
end
|
30
22
|
|
31
|
-
desc 'Pull buildbox image'
|
32
|
-
task :pull, [:dist] do |_task, args|
|
33
|
-
@build_box = OodPackaging::BuildBox.new(args)
|
34
|
-
@build_box.pull!
|
35
|
-
end
|
36
|
-
|
37
23
|
desc 'Save buildbox image'
|
38
24
|
task :save, [:dist, :path] do |_task, args|
|
39
25
|
@build_box = OodPackaging::BuildBox.new(args)
|
@@ -50,9 +36,8 @@ namespace :ood_packaging do
|
|
50
36
|
OodPackaging::RakeTask.new(:internal, [:package, :dist]) do |t, args|
|
51
37
|
name = args[:package].split(':').last
|
52
38
|
t.package = File.join(proj_root, 'packages', name)
|
53
|
-
dist = args[:dist]
|
54
|
-
t.
|
55
|
-
t.version = OodPackaging.package_version(name, dist)
|
39
|
+
t.dist = args[:dist]
|
40
|
+
t.version = OodPackaging.package_version(name, args[:dist])
|
56
41
|
t.work_dir = File.join(proj_root, 'tmp/work')
|
57
42
|
t.output_dir = File.join(proj_root, 'tmp/output')
|
58
43
|
end
|
data/lib/ood_packaging/utils.rb
CHANGED
@@ -15,13 +15,6 @@ module OodPackaging::Utils
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def sed
|
19
|
-
@sed ||= begin
|
20
|
-
`which gsed 1>/dev/null 2>&1`
|
21
|
-
$CHILD_STATUS.success? ? 'gsed' : 'sed'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
18
|
def podman_runtime?
|
26
19
|
@podman_runtime ||= ENV['CONTAINER_RT'] == 'podman' || ENV['container'] == 'podman'
|
27
20
|
end
|
@@ -55,7 +48,7 @@ module OodPackaging::Utils
|
|
55
48
|
end
|
56
49
|
|
57
50
|
def ondemand_repo_version
|
58
|
-
'2.
|
51
|
+
'2.1'
|
59
52
|
end
|
60
53
|
|
61
54
|
def ruby_version
|
@@ -67,17 +60,13 @@ module OodPackaging::Utils
|
|
67
60
|
end
|
68
61
|
|
69
62
|
def nodejs_version
|
70
|
-
'
|
63
|
+
'14'
|
71
64
|
end
|
72
65
|
|
73
66
|
def ctr_scripts_dir
|
74
67
|
'/ondemand-packaging'
|
75
68
|
end
|
76
69
|
|
77
|
-
def ctr_gems_dir
|
78
|
-
File.join(ctr_scripts_dir, 'gems')
|
79
|
-
end
|
80
|
-
|
81
70
|
def gpg_private_key
|
82
71
|
File.join(ctr_scripts_dir, 'ondemand.sec')
|
83
72
|
end
|
@@ -2,25 +2,25 @@
|
|
2
2
|
|
3
3
|
# Version code for OodPackaging
|
4
4
|
module OodPackaging
|
5
|
-
VERSION = '0.0.1.
|
5
|
+
VERSION = '0.0.1.rc.3'
|
6
6
|
PACKAGE_VERSION = {
|
7
7
|
'ondemand-release' => {
|
8
|
-
'(ubuntu|debian)' => '2.
|
9
|
-
'default' => '2.
|
8
|
+
'(ubuntu|debian)' => '2.1.0',
|
9
|
+
'default' => '2.1'
|
10
10
|
},
|
11
11
|
'ondemand-release-latest' => {
|
12
12
|
'(ubuntu|debian)' => '1',
|
13
|
-
'default' => '1-
|
13
|
+
'default' => '1-6'
|
14
14
|
},
|
15
|
-
'ondemand-runtime' => '2.
|
16
|
-
'passenger' => '6.0.
|
15
|
+
'ondemand-runtime' => '2.1',
|
16
|
+
'passenger' => '6.0.11',
|
17
17
|
'cjose' => '0.6.1',
|
18
18
|
'mod_auth_openidc' => '2.4.5',
|
19
19
|
'sqlite' => '3.26.0-4',
|
20
20
|
'ondemand_exporter' => '0.9.0',
|
21
21
|
'ondemand-compute' => {
|
22
|
-
'(ubuntu|debian)' => '2.0',
|
23
|
-
'default' => '2.
|
22
|
+
'(ubuntu|debian)' => '2.1.0',
|
23
|
+
'default' => '2.1'
|
24
24
|
},
|
25
25
|
'python-websockify' => '0.8.0',
|
26
26
|
'turbovnc' => '2.2.5'
|
@@ -0,0 +1,197 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'English'
|
4
|
+
require 'erb'
|
5
|
+
require 'tempfile'
|
6
|
+
|
7
|
+
# Package utilities
|
8
|
+
module PackageUtils
|
9
|
+
def version
|
10
|
+
@version ||= if ENV['VERSION']
|
11
|
+
ENV['VERSION'].to_s
|
12
|
+
else
|
13
|
+
tag? ? git_tag : "#{git_tag}-#{git_hash}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def build_timestamp
|
18
|
+
@build_timestamp ||= Time.now.strftime('%s')
|
19
|
+
end
|
20
|
+
|
21
|
+
def git_hash
|
22
|
+
@git_hash ||= `git rev-parse HEAD`.strip[0..6]
|
23
|
+
end
|
24
|
+
|
25
|
+
def git_tag
|
26
|
+
@git_tag ||= `git describe --tags --abbrev=0`.chomp
|
27
|
+
end
|
28
|
+
|
29
|
+
def numeric_tag
|
30
|
+
@numeric_tag ||= git_tag.delete_prefix('v')
|
31
|
+
end
|
32
|
+
|
33
|
+
def tag?
|
34
|
+
@tag ||= `git describe --exact-match --tags HEAD 2>/dev/null`.to_s != ''
|
35
|
+
end
|
36
|
+
|
37
|
+
def podman_runtime?
|
38
|
+
@podman_runtime ||= ENV['CONTAINER_RT'] == 'podman'
|
39
|
+
end
|
40
|
+
|
41
|
+
def docker_runtime?
|
42
|
+
!podman_runtime?
|
43
|
+
end
|
44
|
+
|
45
|
+
def container_runtime
|
46
|
+
podman_runtime? ? 'podman' : 'docker'
|
47
|
+
end
|
48
|
+
|
49
|
+
def tar
|
50
|
+
@tar ||= begin
|
51
|
+
`which gtar 1>/dev/null 2>&1`
|
52
|
+
$CHILD_STATUS.success? ? 'gtar' : 'tar'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def src_dir
|
57
|
+
ENV['OOD_SRC_DIR'] || '.'
|
58
|
+
end
|
59
|
+
|
60
|
+
def user
|
61
|
+
@user ||= Etc.getpwnam(Etc.getlogin)
|
62
|
+
end
|
63
|
+
|
64
|
+
def build_dir(args)
|
65
|
+
@build_dir ||= "#{src_dir}/build/#{build_box_image(args).gsub(':', '-')}".tap { |d| sh "mkdir -p #{d}" }
|
66
|
+
end
|
67
|
+
|
68
|
+
# TODO: continue vendor/ convention? Seems as good as any other name.
|
69
|
+
def vendor_src_dir
|
70
|
+
'vendor/ood/src'.tap { |p| sh "mkdir -p #{p}" }
|
71
|
+
end
|
72
|
+
|
73
|
+
def vendor_build_dir
|
74
|
+
'vendor/ood/build'.tap { |p| sh "mkdir -p #{p}" }
|
75
|
+
end
|
76
|
+
|
77
|
+
def dist_dir(args)
|
78
|
+
dist = args[:dist].to_s
|
79
|
+
version = args[:version].to_s
|
80
|
+
"dist/#{dist}#{version}"
|
81
|
+
end
|
82
|
+
|
83
|
+
def known_images
|
84
|
+
{
|
85
|
+
'ubuntu-20.04': '1'
|
86
|
+
}.freeze
|
87
|
+
end
|
88
|
+
|
89
|
+
def build_box_image(args)
|
90
|
+
base_name = "#{args[:dist]}-#{args[:version]}"
|
91
|
+
@version_lookup ||= Hash.new('1').merge(known_images)
|
92
|
+
|
93
|
+
"#{build_box_name}:#{base_name}-#{@version_lookup[base_name.to_sym]}"
|
94
|
+
end
|
95
|
+
|
96
|
+
def build_box_name
|
97
|
+
ENV['OOD_BUILD_BOX'] || 'ood-buildbox'
|
98
|
+
end
|
99
|
+
|
100
|
+
def image_exists?(image_name)
|
101
|
+
`#{container_runtime} inspect --type image --format exists #{image_name} || true`.chomp.eql?('exists')
|
102
|
+
end
|
103
|
+
|
104
|
+
def build_cmd(file, image)
|
105
|
+
args = [container_runtime, 'build', '-t', image, '-f', file]
|
106
|
+
args.concat '.' if docker_runtime?
|
107
|
+
args.join(' ')
|
108
|
+
end
|
109
|
+
|
110
|
+
def template_file(filename)
|
111
|
+
cwd = File.expand_path(__dir__).to_s
|
112
|
+
content = File.read("#{cwd}/templates/#{filename}")
|
113
|
+
content = ERB.new(content, trim_mode: '-').result(binding)
|
114
|
+
|
115
|
+
begin
|
116
|
+
t = Tempfile.new('ood-docker')
|
117
|
+
t.write(content)
|
118
|
+
t.path
|
119
|
+
ensure
|
120
|
+
t.close
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def ctr_home
|
125
|
+
"/home/#{ctr_user}"
|
126
|
+
end
|
127
|
+
|
128
|
+
def ctr_user
|
129
|
+
'ood'
|
130
|
+
end
|
131
|
+
|
132
|
+
def ctr_run_args
|
133
|
+
[
|
134
|
+
'--rm', '--user', "#{ctr_user}:#{ctr_user}",
|
135
|
+
'-e', 'LC_CTYPE=en_US.UTF-8'
|
136
|
+
].concat(rt_specific_flags)
|
137
|
+
end
|
138
|
+
|
139
|
+
def rt_specific_flags
|
140
|
+
if podman_runtime?
|
141
|
+
# SELinux doesn't like it if you're mounting from $HOME
|
142
|
+
['--security-opt', 'label=disable', '--userns=keep-id']
|
143
|
+
else
|
144
|
+
[]
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def arch
|
149
|
+
'x86_64'
|
150
|
+
end
|
151
|
+
|
152
|
+
def spec_location
|
153
|
+
sf = Dir.glob('packaging/rpm/*.spec').first
|
154
|
+
raise StandardError, 'Cannot find spec file in packaging/rpm' if sf.nil?
|
155
|
+
|
156
|
+
sf
|
157
|
+
end
|
158
|
+
|
159
|
+
def spec_file
|
160
|
+
File.basename(spec_location)
|
161
|
+
end
|
162
|
+
|
163
|
+
def rpm_build_args
|
164
|
+
[git_tag_define, version_define, '-ba', '--nodeps', '-vv', spec_file]
|
165
|
+
|
166
|
+
# if git_prerelease_tag.size >= 2
|
167
|
+
# git_prerelease_verison = git_prerelease_tag[0]
|
168
|
+
# git_prerelease_verison = git_prerelease_verison[1..-1] if git_prerelease_verison.start_with?('v')
|
169
|
+
# version_define = "--define 'package_version #{git_prerelease_verison}'"
|
170
|
+
# if git_tag.size >= 2
|
171
|
+
# prerelease = git_prerelease_tag[1].gsub('-', '.')
|
172
|
+
# release_define = "--define 'package_release 0.#{prerelease}'"
|
173
|
+
# else
|
174
|
+
# release_define = "--define 'package_release 0.#{git_prerelease_tag[1]}.1'"
|
175
|
+
# end
|
176
|
+
# else
|
177
|
+
# version_define = "--define 'package_version #{git_tag_version}'"
|
178
|
+
# release_define = if git_tag.size >= 2
|
179
|
+
# "--define 'package_release #{git_tag[1]}'"
|
180
|
+
# else
|
181
|
+
# ''
|
182
|
+
# end
|
183
|
+
# end
|
184
|
+
end
|
185
|
+
|
186
|
+
def version_define
|
187
|
+
git_tag = version.split('-')
|
188
|
+
git_tag_version = git_tag[0]
|
189
|
+
git_tag_version = git_tag_version[1..] if git_tag_version.start_with?('v')
|
190
|
+
|
191
|
+
"--define 'package_version #{git_tag_version}'"
|
192
|
+
end
|
193
|
+
|
194
|
+
def git_tag_define
|
195
|
+
"--define 'git_tag #{version}'"
|
196
|
+
end
|
197
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
desc 'Package OnDemand'
|
4
|
+
namespace :package do
|
5
|
+
require_relative 'package_utils'
|
6
|
+
include PackageUtils
|
7
|
+
|
8
|
+
desc 'Tar and zip OnDemand into packaging dir with version name v#<version>'
|
9
|
+
task :tar, [:output_dir] do |_task, args|
|
10
|
+
version = ENV['VERSION'] || ENV['CI_COMMIT_TAG']
|
11
|
+
version = version.gsub(/^v/, '') unless version.nil?
|
12
|
+
|
13
|
+
chdir src_dir do
|
14
|
+
unless version
|
15
|
+
latest_commit = `git rev-list --tags --max-count=1`.strip[0..6]
|
16
|
+
latest_tag = `git describe --tags #{latest_commit}`.strip[1..]
|
17
|
+
datetime = Time.now.strftime('%Y%m%d-%H%M')
|
18
|
+
version = "#{latest_tag}-#{datetime}-#{latest_commit}"
|
19
|
+
end
|
20
|
+
|
21
|
+
dir = (args[:output_dir] || 'packaging/rpm').to_s.tap { |p| sh "mkdir -p #{p}" }
|
22
|
+
sh "git ls-files | #{tar} -c --transform 's,^,ondemand-#{version}/,' -T - | gzip > #{dir}/v#{version}.tar.gz"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# TODO: refactor these 2 tar tasks. Debian and RHEL expect slightly different names and
|
27
|
+
# what's worse is the whole v prefixing mess
|
28
|
+
task :debian_tar, [:output_dir] do |_task, args|
|
29
|
+
dir = (args[:output_dir] || 'packaging').to_s.tap { |p| sh "mkdir -p #{p}" }
|
30
|
+
tar_file = "#{dir}/#{ood_package_tar}"
|
31
|
+
|
32
|
+
sh "rm #{tar_file}" if File.exist?(tar_file)
|
33
|
+
sh "git ls-files | #{tar} -c --transform 's,^,#{versioned_ood_package}/,' -T - | gzip > #{tar_file}"
|
34
|
+
end
|
35
|
+
|
36
|
+
task :version do
|
37
|
+
puts package_version
|
38
|
+
end
|
39
|
+
|
40
|
+
task :deb, [:dist, :version] => [:build_box] do |_task, args|
|
41
|
+
dir = build_dir(args)
|
42
|
+
Rake::Task['package:debian_tar'].invoke(dir)
|
43
|
+
sh "#{tar} -xzf #{dir}/#{ood_package_tar} -C #{dir}"
|
44
|
+
|
45
|
+
work_dir = "/build/#{versioned_ood_package}"
|
46
|
+
|
47
|
+
base_args = ctr_run_args
|
48
|
+
base_args.concat ['-v', "#{dir}:/build", '-w', work_dir.to_s]
|
49
|
+
base_args.concat ['-e', "DEBUILD_DPKG_BUILDPACKAGE_OPTS='-us -uc -I -i'"]
|
50
|
+
base_args.concat ['-e', 'HOME=/home/ood', '-e', 'USER=ood']
|
51
|
+
base_args.concat ['-e', "VERSION=#{ENV['VERSION']}"] unless ENV['VERSION'].nil?
|
52
|
+
base_args.concat [build_box_image(args)]
|
53
|
+
sh "#{container_runtime} run #{base_args.join(' ')} debmake -b':ruby'"
|
54
|
+
|
55
|
+
debuild_args = ['debuild', '--no-lintian']
|
56
|
+
sh "#{container_runtime} run #{base_args.join(' ')} #{debuild_args.join(' ')}"
|
57
|
+
end
|
58
|
+
|
59
|
+
task :bootstrap_rpm, [:dist, :version] => [:verify_args] do |_task, args|
|
60
|
+
chdir src_dir do
|
61
|
+
build_dir(args).tap do |d|
|
62
|
+
src_dir = "#{d}/rpmbuild/SOURCES".tap { |s| sh "mkdir -p #{s}" }
|
63
|
+
dist_dir(args).tap { |dd| sh "mkdir -p #{dd}" }
|
64
|
+
Rake::Task['package:tar'].invoke(src_dir)
|
65
|
+
|
66
|
+
FileUtils.cp Dir.glob('packaging/rpm/*.{fc,te,ico,png,tar.gz}'), src_dir
|
67
|
+
FileUtils.cp spec_location, d
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
desc 'Build an RPM'
|
73
|
+
task :rpm, [:dist, :version] => [:build_box, :bootstrap_rpm] do |_task, args|
|
74
|
+
dir = build_dir(args)
|
75
|
+
image = build_box_image(args)
|
76
|
+
|
77
|
+
base_args = ctr_run_args
|
78
|
+
base_args.concat ['-v', "#{dir}:#{ctr_home}", '-w', "'#{ctr_home}'"]
|
79
|
+
base_args.concat ['-e', "HOME=#{ctr_home}"]
|
80
|
+
|
81
|
+
chdir src_dir do
|
82
|
+
sh "#{container_runtime} run #{base_args.join(' ')} #{image} rpmbuild #{rpm_build_args.join(' ')}"
|
83
|
+
FileUtils.cp Dir.glob("#{dir}/rpmbuild/RPMS/#{arch}/*.rpm"), dist_dir(args)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
namespace :rpm do
|
88
|
+
desc 'Build nightly RPM'
|
89
|
+
task :nightly, [:dist, :extra_args] do |_task, args|
|
90
|
+
version_major, version_minor = git_tag.gsub(/^v/, '').split('.', 3)
|
91
|
+
date = Time.now.strftime('%Y%m%d')
|
92
|
+
id = ENV['CI_PIPELINE_ID'] || Time.now.strftime('%H%M%S')
|
93
|
+
ENV['VERSION'] = "#{version_major}.#{version_minor}.#{date}-#{id}.#{git_hash}.nightly"
|
94
|
+
Rake::Task['package:rpm'].invoke(args[:dist], args[:extra_args])
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
task :verify_args, [:dist, :version] do |_task, args|
|
99
|
+
raise 'Need to specify :dist and :version' if args[:dist].nil? || args[:version].nil?
|
100
|
+
end
|
101
|
+
|
102
|
+
desc 'Create buildbox for Open OnDemand'
|
103
|
+
task :build_box, [:dist, :version] => [:verify_args] do |_task, args|
|
104
|
+
cmd = build_cmd(
|
105
|
+
template_file("Dockerfile.#{args[:dist]}.erb"),
|
106
|
+
build_box_image(args)
|
107
|
+
)
|
108
|
+
|
109
|
+
sh cmd unless image_exists?(build_box_image(args))
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
FROM centos:8
|
2
|
+
|
3
|
+
# install all the dependencies
|
4
|
+
RUN dnf -y update
|
5
|
+
RUN dnf install -y dnf-utils
|
6
|
+
RUN dnf config-manager --set-enabled powertools
|
7
|
+
RUN dnf -y module enable nodejs:12 ruby:2.7
|
8
|
+
RUN dnf install -y \
|
9
|
+
make gcc gcc-c++ git rsync rpm-build redhat-rpm-config
|
10
|
+
RUN dnf install -y libselinux libselinux-devel
|
11
|
+
RUN dnf install -y selinux-policy selinux-policy-devel
|
12
|
+
RUN dnf install -y scl-utils
|
13
|
+
|
14
|
+
RUN dnf install -y https://yum.osc.edu/ondemand/latest/ondemand-release-web-latest-1-6.noarch.rpm
|
15
|
+
RUN dnf install -y \
|
16
|
+
ondemand-runtime ondemand-scldevel ondemand-build ondemand-ruby ondemand-python ondemand-nodejs
|
17
|
+
|
18
|
+
RUN dnf clean all && rm -rf /var/cache/dnf/*
|
19
|
+
|
20
|
+
RUN groupadd <%= ctr_user %> && \
|
21
|
+
useradd --create-home --gid <%= ctr_user %> <%= ctr_user %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
from ubuntu:20.04
|
2
|
+
|
3
|
+
ENV DEBIAN_FRONTEND=noninteractive
|
4
|
+
|
5
|
+
RUN apt update && \
|
6
|
+
apt install -y \
|
7
|
+
ruby=1:2.7+1 ruby-dev=1:2.7+1 \
|
8
|
+
nodejs npm \
|
9
|
+
make g++ gcc sqlite3 libsqlite3-dev \
|
10
|
+
debmake debhelper
|
11
|
+
|
12
|
+
RUN groupadd <%= ctr_user %> && \
|
13
|
+
useradd --create-home --gid <%= ctr_user %> <%= ctr_user %>
|
14
|
+
|
15
|
+
RUN ln -s /bin/bundle2.7 /bin/bundle
|
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.0.1.
|
4
|
+
version: 0.0.1.rc.3
|
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:
|
12
|
+
date: 2021-12-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -94,6 +94,10 @@ files:
|
|
94
94
|
- lib/ood_packaging/tasks.rb
|
95
95
|
- lib/ood_packaging/utils.rb
|
96
96
|
- lib/ood_packaging/version.rb
|
97
|
+
- lib/tasks/package_utils.rb
|
98
|
+
- lib/tasks/packaging.rb
|
99
|
+
- lib/tasks/templates/Dockerfile.el.erb
|
100
|
+
- lib/tasks/templates/Dockerfile.ubuntu.erb
|
97
101
|
homepage: https://github.com/OSC/ondemand-packaging
|
98
102
|
licenses:
|
99
103
|
- MIT
|
@@ -113,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
113
117
|
- !ruby/object:Gem::Version
|
114
118
|
version: 1.3.1
|
115
119
|
requirements: []
|
116
|
-
rubygems_version: 3.2
|
120
|
+
rubygems_version: 3.1.2
|
117
121
|
signing_key:
|
118
122
|
specification_version: 4
|
119
123
|
summary: Open OnDemand packaging library
|