ood_packaging 0.0.1.r2.0

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 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(' '))