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 +7 -0
 - data/bin/ood_packaging +81 -0
 - data/lib/ood_packaging/build.rb +329 -0
 - data/lib/ood_packaging/build_box/docker-image/Dockerfile.erb +39 -0
 - data/lib/ood_packaging/build_box/docker-image/RPM-GPG-KEY-ondemand +30 -0
 - data/lib/ood_packaging/build_box/docker-image/Rakefile +3 -0
 - data/lib/ood_packaging/build_box/docker-image/inituidgid.sh.erb +21 -0
 - data/lib/ood_packaging/build_box/docker-image/install.sh.erb +88 -0
 - data/lib/ood_packaging/build_box/docker-image/setuser.rb +16 -0
 - data/lib/ood_packaging/build_box.rb +143 -0
 - data/lib/ood_packaging/options.rb +8 -0
 - data/lib/ood_packaging/package.rb +326 -0
 - data/lib/ood_packaging/rake_task.rb +40 -0
 - data/lib/ood_packaging/string_ext.rb +20 -0
 - data/lib/ood_packaging/tasks.rb +117 -0
 - data/lib/ood_packaging/utils.rb +104 -0
 - data/lib/ood_packaging/version.rb +37 -0
 - data/lib/ood_packaging.rb +11 -0
 - metadata +120 -0
 
    
        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,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(' '))
         
     |