ood_packaging 0.0.1.r2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: '08137cd4ccfc377bfd70ad3ef9f10b1af265f873397323848fab54c546ae0e5e'
4
+ data.tar.gz: d180ca4601d18558d9d37e607fb1ac5c27406d893709bd2cd1c837565140c834
5
+ SHA512:
6
+ metadata.gz: 37002fb96167b8310a3cb42bd6a3d4980ba0410d96b8eb3921e44de456a481c2f6c07f6dfda1b02da960043e12bfa0b474eac4fc2dda89021c9f0ff04610e7ed
7
+ data.tar.gz: e93b9c5b83b07637220354dedf9b17acdabaee8f53c2b9225ff9ac4adf7034c4b10c94ed2497a468f516a7c393094d04df6ff5b4091802648597fa4948241f4a
data/bin/ood_packaging ADDED
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'optparse'
5
+ libdir = File.expand_path(File.join(__dir__, '../lib'))
6
+ $LOAD_PATH.unshift(libdir) if Dir.exist?(libdir)
7
+ require 'ood_packaging'
8
+
9
+ options = {}
10
+ OptionParser.new do |opts|
11
+ opts.banner = 'Usage: ood_packaging [options] package'
12
+
13
+ opts.on('-w', '--work=DIR', String, 'Work directory path') do |v|
14
+ options[:work_dir] = v
15
+ end
16
+
17
+ opts.on('-o', '--output=DIR', String, 'Output directory path') do |v|
18
+ options[:output_dir] = v
19
+ end
20
+
21
+ opts.on('-d', '--dist=DIST', String, 'Distribution to build') do |v|
22
+ options[:dist] = v
23
+ end
24
+
25
+ opts.on('-V', '--version=VERSION', String, 'Version of package to build') do |v|
26
+ options[:version] = v
27
+ end
28
+
29
+ opts.on('-T', '--tar', 'Create tar archive for package') do
30
+ options[:tar] = true
31
+ end
32
+
33
+ opts.on('-t', '--tar-only', 'Only create tar archive') do
34
+ options[:tar_only] = true
35
+ end
36
+
37
+ opts.on('-G', '--gpg-name', String, 'GPG key name') do |v|
38
+ options[:gpg_name] = v
39
+ end
40
+
41
+ opts.on('-g', '--gpg-pubkey', String, 'GPG public key path') do |v|
42
+ options[:gpg_pubkey] = v
43
+ end
44
+
45
+ opts.on('-S', '--skip-gpg', 'Skip GPG signing') do
46
+ options[:gpg_sign] = false
47
+ end
48
+
49
+ opts.on('--skip-clean-output', 'Skip clean up of output directory') do
50
+ options[:clean_output_dir] = false
51
+ end
52
+
53
+ opts.on('--skip-clean-work', 'Skip clean up of work directory') do
54
+ options[:clean_work_dir] = false
55
+ end
56
+
57
+ opts.on('-s', '--skip-download', 'Skip source download') do
58
+ options[:skip_download] = true
59
+ end
60
+
61
+ opts.on('-A', '--attach', 'Attach to build box after build') do
62
+ options[:attach] = true
63
+ end
64
+
65
+ opts.on('--debug', 'Show debug output') do
66
+ options[:debug] = true
67
+ end
68
+
69
+ opts.on('-h', '--help', 'Show this help message') do
70
+ puts opts
71
+ exit
72
+ end
73
+ end.parse!(ARGV)
74
+
75
+ if ARGV.size != 1
76
+ puts 'ERROR: Must provide package path'.red
77
+ exit 1
78
+ end
79
+ options[:package] = ARGV[0]
80
+
81
+ OodPackaging::Package.new(options).run!
@@ -0,0 +1,329 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ood_packaging/utils'
4
+ require 'ood_packaging/string_ext'
5
+ require 'English'
6
+ require 'rake'
7
+ require 'rake/file_utils'
8
+ require 'yaml'
9
+
10
+ # Class to handle builds of packages from within buildbox container
11
+ class OodPackaging::Build
12
+ include OodPackaging::Utils
13
+ include FileUtils
14
+
15
+ attr_accessor :build_box
16
+
17
+ def initialize
18
+ @build_box = OodPackaging::BuildBox.new(dist: ENV['DIST'])
19
+ end
20
+
21
+ def config
22
+ @config ||= begin
23
+ c = packaging_config
24
+ c.merge!(c[build_box.dist]) if c.key?(build_box.dist)
25
+ c.transform_keys(&:to_sym)
26
+ end
27
+ end
28
+
29
+ def package
30
+ ENV['PACKAGE']
31
+ end
32
+
33
+ def debug?
34
+ ENV['DEBUG'] == 'true'
35
+ end
36
+
37
+ def gpg_sign?
38
+ ENV['GPG_SIGN'] == 'true'
39
+ end
40
+
41
+ def version
42
+ ENV['VERSION']
43
+ end
44
+
45
+ def rpm_version
46
+ version.gsub(/^v/, '').split('-', 2)[0]
47
+ end
48
+
49
+ def rpm_release
50
+ v = version.split('-', 2)
51
+ return '1' if v.size < 2
52
+
53
+ v[1].gsub('-', '.')
54
+ end
55
+
56
+ def deb_version
57
+ version.gsub(/^v/, '').gsub('-', '.')
58
+ end
59
+
60
+ def rpm_defines
61
+ defines = ["--define 'git_tag #{version}'"]
62
+ defines.concat ["--define 'package_version #{rpm_version}'"]
63
+ defines.concat ["--define 'package_release #{rpm_release}'"]
64
+ defines.concat ["--define 'scl #{config[:scl]}'"] if config[:scl]
65
+ defines
66
+ end
67
+
68
+ def cmd_suffix
69
+ return '' if debug?
70
+
71
+ ' 2>/dev/null 1>/dev/null'
72
+ end
73
+
74
+ def spec_dir
75
+ @spec_dir ||= if Dir.exist?('/package/rpm')
76
+ '/package/rpm'
77
+ elsif Dir.exist?('/package/packaging/rpm')
78
+ '/package/packaging/rpm'
79
+ elsif Dir.exist?('/package/packaging')
80
+ '/package/packaging'
81
+ else
82
+ '/package'
83
+ end
84
+ end
85
+
86
+ def deb_build_dir
87
+ @deb_build_dir ||= if Dir.exist?('/package/deb/build')
88
+ '/package/deb/build'
89
+ else
90
+ '/package/build'
91
+ end
92
+ end
93
+
94
+ def debian_dir
95
+ @debian_dir ||= if Dir.exist?('/package/deb/debian')
96
+ '/package/deb/debian'
97
+ elsif Dir.exist?('/package/packaging/deb')
98
+ '/package/packaging/deb'
99
+ else
100
+ '/package/debian'
101
+ end
102
+ end
103
+
104
+ def deb_work_dir
105
+ File.join(work_dir, deb_name)
106
+ end
107
+
108
+ def spec_file
109
+ @spec_file ||= Dir["#{spec_dir}/*.spec"][0]
110
+ end
111
+
112
+ def output_dir
113
+ File.join('/output', build_box.dist)
114
+ end
115
+
116
+ def work_dir
117
+ File.join('/work', build_box.dist)
118
+ end
119
+
120
+ def packaging_config
121
+ @packaging_config ||= begin
122
+ path = File.join(spec_dir, 'packaging.yaml')
123
+ path = File.join(debian_dir, 'packaging.yaml') if build_box.deb?
124
+ if File.exist?(path)
125
+ YAML.load_file(path)
126
+ else
127
+ {}
128
+ end
129
+ end
130
+ end
131
+
132
+ def deb_name
133
+ "#{package}-#{deb_version}"
134
+ end
135
+
136
+ def rpms
137
+ @rpms ||= Dir["#{output_dir}/*.rpm"].grep_v(/.src.rpm$/)
138
+ end
139
+
140
+ def run!
141
+ fix_env!
142
+ env_dump! if debug?
143
+ bootstrap_rpm! if build_box.rpm?
144
+ bootstrap_deb! if build_box.deb?
145
+ install_dependencies!
146
+ rpmbuild! if build_box.rpm?
147
+ debuild! if build_box.deb?
148
+ copy_output!
149
+ gpg_sign! if build_box.rpm? && gpg_sign?
150
+ sanity!
151
+ end
152
+
153
+ def fix_env!
154
+ ENV.delete('GEM_PATH')
155
+ end
156
+
157
+ def env_dump!
158
+ ENV.sort.to_h.each_pair do |k, v|
159
+ puts "#{k}=#{v}"
160
+ end
161
+ end
162
+
163
+ def bootstrap_rpm!
164
+ puts '== Bootstrap RPM =='.blue
165
+ bootstrap_gpg! if gpg_sign?
166
+ if podman_runtime?
167
+ puts "\tBootstrap /root".blue
168
+ sh "cp -r #{ctr_rpmmacros} #{ctr_gpg_dir} /root/"
169
+ sh "sed -i 's|/home/ood|/root|g' /root/.rpmmacros"
170
+ end
171
+ puts "\tBootstrap work dir".blue
172
+ sh "mkdir -p #{work_dir}/{RPMS,SRPMS,SOURCES,SPECS,rpmbuild/BUILD}"
173
+ bootstrap_copy_source!
174
+ bootstrap_get_source!
175
+ end
176
+
177
+ def bootstrap_gpg!
178
+ puts "\tBootstrap GPG".blue
179
+ sh "sed -i 's|@GPG_NAME@|#{ENV['GPG_NAME']}|g' #{ctr_rpmmacros}"
180
+ sh "gpg --batch --passphrase-file #{gpg_passphrase} --import #{gpg_private_key}#{cmd_suffix}"
181
+ sh "sudo rpm --import #{ENV['GPG_PUBKEY']}#{cmd_suffix}" if ENV['GPG_PUBKEY']
182
+ end
183
+
184
+ def bootstrap_copy_source!
185
+ puts "\tCopy sources".blue
186
+ if build_box.rpm?
187
+ sh "find #{spec_dir} -maxdepth 1 -type f -exec cp {} #{work_dir}/SOURCES/ \\;"
188
+ sh "find #{spec_dir} -maxdepth 1 -mindepth 1 -type d -exec cp -r {} #{work_dir}/SOURCES/ \\;"
189
+ elsif build_box.deb?
190
+ sh "cp -a #{deb_build_dir}/* #{work_dir}/"
191
+ end
192
+ end
193
+
194
+ def bootstrap_get_source!
195
+ if ENV['SKIP_DOWNLOAD'] == 'true'
196
+ puts "\tSKIP_DOWNLOAD detected, skipping download sources".blue
197
+ return
198
+ end
199
+ output = `spectool #{rpm_defines.join(' ')} -l -R -S #{spec_file} 2>&1 | grep 'Source0:'`.strip
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)
205
+ end
206
+ puts "\tDownloading sources defined in #{spec_file}".blue
207
+ sh "spectool #{rpm_defines.join(' ')} -g -R -S #{spec_file}#{cmd_suffix}"
208
+ end
209
+
210
+ def bootstrap_deb!
211
+ puts '== Bootstrap DEB =='.blue
212
+ unless Dir.exist?(work_dir)
213
+ puts "\tCreating #{work_dir}".blue
214
+ sh "mkdir -p #{work_dir}"
215
+ end
216
+ bootstrap_copy_source!
217
+ puts "\tExtract source".blue
218
+ Dir.chdir(work_dir) do
219
+ sh "tar -xf #{deb_name}.tar.gz"
220
+ end
221
+ puts "\tBootstrap debian build files".blue
222
+ Dir.chdir(deb_work_dir) do
223
+ sh "dh_make -s -y --createorig -f ../#{deb_name}.tar.gz#{cmd_suffix} || true"
224
+ sh "dch -b -v #{deb_version} --controlmaint 'Release #{deb_version}'#{cmd_suffix}"
225
+ end
226
+ end
227
+
228
+ def install_dependencies!
229
+ puts '== Install Dependencies =='.blue
230
+ if build_box.rpm?
231
+ install_rpm_dependencies!
232
+ elsif build_box.deb?
233
+ install_deb_dependencies!
234
+ end
235
+ end
236
+
237
+ def install_rpm_dependencies!
238
+ cmd = ['sudo']
239
+ cmd.concat [build_box.package_manager, 'builddep'] if build_box.dnf?
240
+ cmd.concat ['yum-builddep'] if build_box.package_manager == 'yum'
241
+ cmd.concat ['-y']
242
+ cmd.concat rpm_defines
243
+ cmd.concat ['--spec'] if build_box.dnf?
244
+ cmd.concat [spec_file]
245
+ sh "#{cmd.join(' ')}#{cmd_suffix}"
246
+ end
247
+
248
+ def install_deb_dependencies!
249
+ 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
+ cmd = [
256
+ 'mk-build-deps --install --remove --root-cmd sudo',
257
+ "--tool='#{tool.join(' ')}'"
258
+ ]
259
+ Dir.chdir(deb_work_dir) do
260
+ sh "#{cmd.join(' ')}#{cmd_suffix}"
261
+ end
262
+ end
263
+
264
+ def rpmbuild!
265
+ puts "== RPM build spec=#{spec_file} ==".blue
266
+ cmd = ['rpmbuild', '-ba']
267
+ cmd.concat rpm_defines
268
+ cmd.concat [spec_file]
269
+ sh "#{cmd.join(' ')}#{cmd_suffix}"
270
+ end
271
+
272
+ def debuild!
273
+ puts "== DEB build package=#{deb_work_dir} ==".blue
274
+ prepend_path = ''
275
+ prepend_path = "--prepend-path=#{config[:prepend_path]}" if config[:prepend_path]
276
+ Dir.chdir(deb_work_dir) do
277
+ sh "debuild --no-lintian --preserve-env #{prepend_path}#{cmd_suffix}"
278
+ end
279
+ end
280
+
281
+ def copy_output!
282
+ puts '== Copy output =='.blue
283
+ unless Dir.exist?(output_dir)
284
+ puts "\tCreating #{output_dir}".blue
285
+ sh "mkdir -p #{output_dir}"
286
+ end
287
+ if build_box.rpm?
288
+ puts "\tcopy #{work_dir}/**/*.rpm -> #{output_dir}/".blue
289
+ sh "find #{work_dir} -type f -name '*.rpm' -exec cp {} #{output_dir}/ \\;"
290
+ elsif build_box.deb?
291
+ puts "\tcopy #{work_dir}/*.deb #{output_dir}/".blue
292
+ sh "cp #{work_dir}/*.deb #{output_dir}/"
293
+ end
294
+ end
295
+
296
+ def gpg_sign!
297
+ puts '== GPG sign RPMs =='.blue
298
+ rpms.each do |rpm|
299
+ puts "\tGPG signing #{rpm}".blue
300
+ cmd = []
301
+ # Work around differences in RHEL
302
+ cmd.concat ['cat /dev/null | setsid'] unless build_box.dnf?
303
+ cmd.concat ['rpmsign', '--addsign', rpm]
304
+ sh "#{cmd.join(' ')}#{cmd_suffix}"
305
+ end
306
+ end
307
+
308
+ def sanity!
309
+ puts '== Sanity tests =='.blue
310
+ failure = false
311
+ if build_box.rpm? && gpg_sign?
312
+ rpms.each do |rpm|
313
+ puts "\tTest GPG signing #{rpm}".blue
314
+ output = `rpm -K #{rpm} 2>&1`
315
+ exit_code = $CHILD_STATUS.exitstatus
316
+ puts output if debug?
317
+ if exit_code != 0
318
+ puts "\tGPG check failure: exit code #{exit_code}".red
319
+ failure = true
320
+ end
321
+ if output !~ /(pgp|OK)/
322
+ puts "\tRPM not GPG signed".red
323
+ failure = true
324
+ end
325
+ end
326
+ end
327
+ exit 1 if failure
328
+ end
329
+ end
@@ -0,0 +1,39 @@
1
+ FROM <%= base_image %>
2
+ MAINTAINER Trey Dockendorf <tdockendorf@osc.edu>
3
+ ENV LANG=en_US.UTF-8
4
+ ENV LC_CTYPE=en_US.UTF-8
5
+ ENV USER=<%= ctr_user %>
6
+ ENV GEM_PATH=<%= ctr_gems_dir %>:
7
+ <% if scl? -%>
8
+ RUN yum update -y && yum clean all && rm -rf /var/cache/yum/*
9
+ RUN yum install -y yum-utils epel-release centos-release-scl && yum clean all && rm -rf /var/cache/yum/*
10
+ RUN yum install -y <%= scl_ruby %>-ruby sudo which wget @buildsys-build \
11
+ rpm-build rpmdevtools rpm-sign scl-utils-build && \
12
+ yum clean all && rm -rf /var/cache/yum/*
13
+ RUN rm -f /etc/yum.repos.d/CentOS-Vault.repo /etc/yum.repos.d/CentOS-Sources.repo
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? -%>
18
+ RUN dnf update -y && dnf clean all && rm -rf /var/cache/dnf/*
19
+ RUN dnf install -y dnf-utils epel-release langpacks-en glibc-all-langpacks && dnf clean all && rm -rf /var/cache/dnf/*
20
+ RUN dnf config-manager --set-enabled powertools && dnf clean all && rm -rf /var/cache/dnf/*
21
+ RUN dnf module enable -y ruby:<%= ruby_version %> nodejs:<%= nodejs_version %> && dnf clean all && rm -rf /var/cache/dnf/*
22
+ RUN dnf install -y systemd ruby nodejs sudo which wget \
23
+ gcc-c++ gcc make patch \
24
+ rpm-build rpmdevtools rpm-sign scl-utils-build && \
25
+ dnf clean all && rm -rf /var/cache/dnf/*
26
+ <% elsif deb? -%>
27
+ ENV DEBIAN_FRONTEND=noninteractive
28
+ RUN apt update -y && apt upgrade -y && apt clean all -y
29
+ RUN apt update -y && apt install -y locales && locale-gen $LANG && \
30
+ apt clean all -y
31
+ RUN apt update -y && apt install -y apt-transport-https ca-certificates \
32
+ init debhelper devscripts dh-make build-essential apt-cudf lintian equivs \
33
+ sudo rake wget curl ruby bundler && \
34
+ apt clean all -y
35
+ RUN echo "deb https://deb.nodesource.com/node_<%= nodejs_version %>.x <%= codename %> main" > /etc/apt/sources.list.d/nodesource.list
36
+ RUN curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | gpg --dearmor > /etc/apt/trusted.gpg.d/nodesource.gpg
37
+ <% end -%>
38
+ COPY . /build
39
+ RUN /bin/bash /build/install.sh
@@ -0,0 +1,30 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: GnuPG v2.0.22 (GNU/Linux)
3
+
4
+ mQENBFqB7y4BCADA2233uSAJC9EG3MM2EmmDjKCDy8Q9w3D1g48/roBUvONLveac
5
+ sx+rCSbP9Oc6sRJdxkQwppKKxKTwP5zGUGZto3wacaw2hTVfA7xFUfgcfZn3b0Az
6
+ fSTR2FlTnJ35THO1MkVNv/55D+qBOoEhrAGeUdB7TMGp9y+A6eHRYa0UdxY/rccY
7
+ xvz2oQOD6BH2s7IzLNUVLOifiu9Nrk213dghKOZjYwWERrpXj/EryuLm7wpKN349
8
+ pixk6zP4SIKj0L4HTwMqEcTCAxBKfidmUQ+JILvTRlTCItFPTcXJxqSI6jVA6Iu0
9
+ sZlO3XolEVdeGXL0MVjHVIpNZrV7vnTUFWPrABEBAAG0L09uRGVtYW5kIFJlbGVh
10
+ c2UgU2lnbmluZyBLZXkgPHBhY2thZ2VzQG9zYy5lZHU+iQE5BBMBAgAjBQJage8u
11
+ AhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgECF4AACgkQS3L+K5LTF1UQzgf5AQ8Q
12
+ Fy6JhxYaa56FHALiYCKJn+YHSbI4uZE6umpnV/14lU2Timw/xwNiH2ndlnl3a8be
13
+ NcYPYkX+7T5nWQty7YK3aIEEMeMY/I8Cb0RKaCoJwETbu9u4dKguAy19fj0h0jGC
14
+ v0lrBHNWfv572pr+TOcdVP2CFyfHybl6MvWFshM5mUxSeMItSa8KDVaWfZiPHzQe
15
+ YrL4ZcWvqLfBK/m8alvggg9zaOIyDKM30lbil66pY/rbveQyGW7SbpxiUh1rNsV4
16
+ aQOAVJRQC+uJn44OeTuB9nRR5nFLA70i+MtPbQNd3QiOHxuZN7c4sLkvmQslf1HZ
17
+ 7XoiYp0GlWMoI+YVXrkBDQRage8uAQgAut5ko4fkPkBfldawTCvTxnxnoa14RVwy
18
+ 3PcKxhaPmvHzdSjqquYYktgHIIGs8/UOrsFNPdHU6x02v0psaMwL8JX6JqFypPri
19
+ YltdXNU/NqlImzfBOkHnAhDiIEI/j34LkEpXhUCmJzeTGAu8wXS3tgx4cHgbfycg
20
+ MjmX7QBNghDzC3S+3Kt7wG4pNRlwyFd8r46CL5Yc6+UE9oNvnHdCy3W6OwCYCgXd
21
+ 919Bsf2Lpy1jGWV3YEiFgYv+pmF0T56vD1Rz+KbIhDEzQ4f/Q0dBZpcjZzQtSJQR
22
+ Wh5LX/8JzK0l3PrWOrVmW1GmKQ1DPIkAT2iR35ydgEbi/wuk+izeyQARAQABiQEf
23
+ BBgBAgAJBQJage8uAhsMAAoJEEty/iuS0xdVPtUH/16Kd1xX3PSGzOFatNJvfOR5
24
+ 5oCuVqMLm4sFXdrp0Spnn2B7Dx58jL0slwtWMh6xdtD/CKH/ihnM/um3h5JT0EvE
25
+ 9XTBfXwOkKgtdxgrHVeoT8gYNaw/0/kIlPavK5QviSNA64qUdFUvtg01FeyKmZ/R
26
+ jaRKJZUy+orHYZLo41uj7iGA5Op4gL70ydTnnYFcCb/eLOuGKci1yUzchjxY6YAa
27
+ 9/ZHhpAqcKsIqZWpzLimLTTH2E43YYVbRcyP9Csfm7qFG8m7RwjXdbquzfkMkujq
28
+ weYYi8Av2oajeR3NLoVvCPP2R3yT1YtDCuMRP8Pe4q9gmh7WKwdr38f6/an4VSI=
29
+ =uztj
30
+ -----END PGP PUBLIC KEY BLOCK-----
@@ -0,0 +1,3 @@
1
+ require 'ood_packaging/tasks'
2
+
3
+ task :default => 'ood_packaging:package:build'
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+ # Changes the '<%= ctr_user %>' user's UID and GID to the values specified
3
+ # in $OOD_UID and $OOD_GID.
4
+ set -e
5
+ set -o pipefail
6
+ if [[ "$DEBUG" == "true" ]]; then
7
+ set -x
8
+ fi
9
+
10
+ chown -R "$OOD_UID:$OOD_GID" <%= ctr_home %>
11
+ groupmod -o -g "$OOD_GID" <%= ctr_user %>
12
+ usermod -o -u "$OOD_UID" -g "$OOD_GID" <%= ctr_user %> 2>/dev/null 1>/dev/null
13
+
14
+ set +e
15
+ SCL_SOURCE="$(command -v scl_source)"
16
+ [[ "${SCL_SOURCE}" ]] && source "${SCL_SOURCE}" enable "<%= scl_ruby %>" &> /dev/null
17
+ set -e
18
+
19
+ if [[ $# -gt 0 ]]; then
20
+ exec "$@"
21
+ fi
@@ -0,0 +1,88 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ function header()
5
+ {
6
+ echo
7
+ echo "----- $@ -----"
8
+ }
9
+
10
+ function run()
11
+ {
12
+ echo "+ $@"
13
+ "$@"
14
+ }
15
+
16
+ export HOME=/root
17
+
18
+ <% if rpm? -%>
19
+ header "Add OnDemand build repo"
20
+ cat > /etc/yum.repos.d/ondemand-web.repo <<EOF
21
+ [ondemand-web]
22
+ name=Open OnDemand Web Repo
23
+ baseurl=https://yum.osc.edu/ondemand/build/<%= ondemand_repo_version %>/web/el\$releasever/\$basearch/
24
+ enabled=1
25
+ gpgcheck=0
26
+ EOF
27
+ run rpm --import /build/RPM-GPG-KEY-ondemand
28
+ <% end -%>
29
+
30
+ header "Creating users"
31
+ run groupadd <%= ctr_user %>
32
+ run useradd --home-dir <%= ctr_home %> --create-home --gid <%= ctr_user %> --password '<%= ctr_user %>' <%= ctr_user %>
33
+
34
+ header "Add sudo"
35
+ cat > /etc/sudoers.d/ood <<EOF
36
+ Defaults:<%= ctr_user %> !requiretty, !authenticate
37
+ %<%= ctr_user %> ALL=NOPASSWD:ALL
38
+ EOF
39
+ run chmod 440 /etc/sudoers.d/ood
40
+
41
+ <% if rpm? -%>
42
+ header "Setup RPM env"
43
+ sudo -u <%= ctr_user %> -H cat > <%= ctr_rpmmacros %> <<EOF
44
+ %_topdir /work/<%= dist %>
45
+ <%- # Workaround to weird issue with debuginfo stripping -%>
46
+ <% if dist == 'el7' -%>
47
+ %_builddir %{_topdir}/rpmbuild/BUILD
48
+ <% end -%>
49
+ %_signature gpg
50
+ %_gpg_path <%= ctr_gpg_dir %>
51
+ %_gpg /usr/bin/gpg
52
+ %_gpg_name @GPG_NAME@
53
+ # Modified macro from /usr/lib/rpm/macros to add pinentry-mode and passphrase-file
54
+ # pinentry-mode only needed on EL8
55
+ %__gpg_check_password_cmd %{__gpg} \\
56
+ gpg --batch --no-verbose --passphrase-file <%= gpg_passphrase %> -u "%{_gpg_name}" -so -
57
+ %__gpg_sign_cmd %{__gpg} \\
58
+ gpg --no-verbose --no-armor --batch \\
59
+ <%- if dnf? -%>
60
+ --pinentry-mode loopback \\
61
+ <%- end -%>
62
+ --passphrase-file <%= gpg_passphrase %> \\
63
+ %{?_gpg_sign_cmd_extra_args:%{_gpg_sign_cmd_extra_args}} \\
64
+ %{?_gpg_digest_algo:--digest-algo %{_gpg_digest_algo}} \\
65
+ --no-secmem-warning \\
66
+ -u \"%{_gpg_name}\" -sbo %{__signature_filename} %{__plaintext_filename}
67
+ EOF
68
+ <% end -%>
69
+ <%- if dnf? -%>
70
+ run install -d -m 0700 -o ood -g ood <%= ctr_gpg_dir %>
71
+ echo "allow-loopback-pinentry" >> <%= ctr_gpg_dir %>/gpg-agent.conf
72
+ <%- end -%>
73
+
74
+ header "Install ood_packaging gem"
75
+ <%- if scl? -%>
76
+ run scl enable <%= scl_ruby %> -- gem install --no-doc --bindir <%= ctr_scripts_dir %> --install-dir <%= ctr_gems_dir %> /build/*.gem
77
+ <%- else -%>
78
+ run gem install --no-doc --bindir <%= ctr_scripts_dir %> --install-dir <%= ctr_gems_dir %> /build/*.gem
79
+ <%- end -%>
80
+
81
+ header "Copy in launch scripts"
82
+ run mkdir -p <%= ctr_scripts_dir %>
83
+ run install -m 0755 /build/inituidgid.sh <%= ctr_scripts_dir %>/
84
+ run install -m 0755 /build/setuser.rb <%= ctr_scripts_dir %>/
85
+ run install -m 0644 /build/Rakefile <%= ctr_scripts_dir %>/
86
+
87
+ header "Cleaning up"
88
+ run rm -rf /build
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'etc'
5
+
6
+ username = ARGV[0]
7
+ user = Etc.getpwnam(username)
8
+
9
+ Process.initgroups(username, user.gid)
10
+ Process::Sys.setgid(user.gid)
11
+ Process::Sys.setuid(user.uid)
12
+
13
+ ENV['USER'] = user.name
14
+ ENV['HOME'] = user.dir
15
+
16
+ exec(ARGV.drop(1).join(' '))