|
| 1 | +# This "project" is a common basis for all pe-bolt-server branches. It should |
| 2 | +# not be built on its own. Instead, other project files should load it with |
| 3 | +# instance_eval. See configs/projects/pe-bolt-server-runtime-<branchname>.rb |
| 4 | +# for branch-specific details. |
| 5 | +unless defined?(proj) |
| 6 | + warn("'#{File.basename(__FILE__)}' is a set of basic configuration values" \ |
| 7 | + " shared by all pe-bolt-server projects; It cannot be built as a" \ |
| 8 | + " standalone project.") |
| 9 | + warn("Please choose one of the other pe-bolt-server projects instead.") |
| 10 | + exit(1) |
| 11 | +end |
| 12 | + |
| 13 | +pe_version = settings[:pe_version] |
| 14 | +unless pe_version && !pe_version.empty? |
| 15 | + warn("You must set the `pe_version` setting in your pe-bolt-server project" \ |
| 16 | + " file before instance_eval'ing '#{File.basename(__FILE__)}'. This should" \ |
| 17 | + " be an x.y version like '2019.1' or similar.") |
| 18 | + exit(1) |
| 19 | +end |
| 20 | + |
| 21 | +proj.description('The PE Bolt runtime contains third-party components needed for PE Bolt server packaging') |
| 22 | +proj.license('See components') |
| 23 | +proj.vendor('Puppet, Inc. <[email protected]>') |
| 24 | +proj.homepage('https://puppet.com') |
| 25 | +proj.identifier('com.puppetlabs') |
| 26 | +proj.version_from_git |
| 27 | +proj.generate_archives(true) |
| 28 | +proj.generate_packages(false) |
| 29 | + |
| 30 | +proj.setting(:artifactory_url, "https://artifactory.delivery.puppetlabs.net/artifactory") |
| 31 | +proj.setting(:buildsources_url, "#{proj.artifactory_url}/generic/buildsources") |
| 32 | + |
| 33 | +# This setting can be used sparingly in component configurations to conditionally include dependencies: |
| 34 | +proj.setting(:runtime_project, 'pe-bolt-server') |
| 35 | + |
| 36 | +# Ruby + OpenSSL included with bolt-server |
| 37 | +# -------------------------------------------- |
| 38 | +# |
| 39 | +# Starting with pe-bolt-server packages installed next to Puppet 8 |
| 40 | +# pe-bolt-server now vendors its own ruby and openssl installation. |
| 41 | +proj.setting(:builtin_ruby, true) |
| 42 | + |
| 43 | +# Set desired versions for gem components that offer multiple versions: |
| 44 | +# TODO: Can runtime projects use these updated versions? |
| 45 | +proj.setting(:rubygem_deep_merge_version, '1.2.2') |
| 46 | +proj.setting(:rubygem_net_ssh_version, '7.0.1') |
| 47 | + |
| 48 | +# (pe-bolt-server does not run on Windows, so only the *nix path is here) |
| 49 | +proj.setting(:prefix, '/opt/puppetlabs/server/apps/bolt-server') |
| 50 | +proj.setting(:bindir, File.join(proj.prefix, 'bin')) |
| 51 | +proj.setting(:libdir, File.join(proj.prefix, 'lib')) |
| 52 | +proj.setting(:includedir, File.join(proj.prefix, "include")) |
| 53 | + |
| 54 | +# proj.ruby_dir needs to be set by the individual versions of pe-bolt-server-runtime. Bolt-Server versions running |
| 55 | +# alongside puppet 8 and later use their own ruby instead of the agent's. |
| 56 | +proj.setting(:ruby_dir, proj.prefix) |
| 57 | +proj.setting(:ruby_bindir, File.join(proj.ruby_dir, 'bin')) |
| 58 | +proj.setting(:host_ruby, File.join(proj.ruby_bindir, 'ruby')) |
| 59 | +proj.setting(:host_gem, File.join(proj.ruby_bindir, 'gem')) |
| 60 | +proj.setting(:gem_build, "#{proj.host_gem} build") |
| 61 | + |
| 62 | +# We build bolt server with the ruby installed in the puppet-agent dep. For ruby 2.7 we need to use a --no-document flag |
| 63 | +# for gem installs instead of --no-ri --no-rdoc. This setting allows us to use this while we support both ruby 2.5 and 2.7 |
| 64 | +# Once we are no longer using ruby 2.5 we can update. |
| 65 | +if proj.no_doc |
| 66 | + proj.setting(:gem_install, "#{proj.host_gem} install --no-document --local --bindir=#{proj.bindir}") |
| 67 | +else |
| 68 | + proj.setting(:gem_install, "#{proj.host_gem} install --no-rdoc --no-ri --local --bindir=#{proj.bindir}") |
| 69 | +end |
| 70 | + |
| 71 | + |
| 72 | +proj.setting(:datadir, File.join(proj.prefix, "share")) |
| 73 | +proj.setting(:mandir, File.join(proj.datadir, "man")) |
| 74 | + |
| 75 | +ruby_base_version = proj.ruby_version.gsub(/(\d+)\.(\d+)\.(\d+)/, '\1.\2.0') |
| 76 | +proj.setting(:gem_home, File.join(proj.libdir, 'ruby', 'gems', ruby_base_version)) |
| 77 | + |
| 78 | +# Define default CFLAGS and LDFLAGS for most platforms, and then |
| 79 | +# tweak or adjust them as needed. |
| 80 | +proj.setting(:cppflags, "-I#{proj.includedir} -I/opt/pl-build-tools/include") |
| 81 | +proj.setting(:cflags, "#{proj.cppflags}") |
| 82 | +proj.setting(:ldflags, "-L#{proj.libdir} -L/opt/pl-build-tools/lib -Wl,-rpath=#{proj.libdir}") |
| 83 | + |
| 84 | +# Platform specific overrides or settings, which may override the defaults |
| 85 | + |
| 86 | +# Harden Linux ELF binaries by compiling with PIE (Position Independent Executables) support, |
| 87 | +# stack canary and full RELRO. |
| 88 | +# We only do this on platforms that use their default OS toolchain since pl-gcc versions |
| 89 | +# are too old to support these flags. |
| 90 | +if platform.name =~ /sles-15|el-8|debian-10/ || platform.is_fedora? |
| 91 | + proj.setting(:cppflags, "-I#{proj.includedir} -D_FORTIFY_SOURCE=2") |
| 92 | + proj.setting(:cflags, '-fstack-protector-strong -fno-plt -O2') |
| 93 | + proj.setting(:ldflags, "-L#{proj.libdir} -Wl,-rpath=#{proj.libdir},-z,relro,-z,now") |
| 94 | +end |
| 95 | + |
| 96 | +# Required to build ruby |
| 97 | +proj.component 'libffi' |
| 98 | +proj.component 'libyaml' |
| 99 | + |
| 100 | +# Actually include the openssl/ruby components. |
| 101 | +proj.component "openssl-#{proj.openssl_version}" |
| 102 | +proj.component "ruby-#{proj.ruby_version}" |
| 103 | + |
| 104 | +# What to build? |
| 105 | +# -------------- |
| 106 | + |
| 107 | +# This component installs the puppet-agent build dependency: |
| 108 | +proj.component('runtime-pe-bolt-server') |
| 109 | + |
| 110 | +# R10k dependencies |
| 111 | +proj.component('rubygem-gettext-setup') |
| 112 | + |
| 113 | +# Puppet dependencies |
| 114 | +proj.component 'rubygem-deep_merge' |
| 115 | +proj.component 'rubygem-text' |
| 116 | +proj.component 'rubygem-locale' |
| 117 | +proj.component 'rubygem-gettext' |
| 118 | +proj.component 'rubygem-fast_gettext' |
| 119 | +proj.component 'rubygem-semantic_puppet' |
| 120 | + |
| 121 | +# hiera-eyaml and its dependencies |
| 122 | +proj.component('rubygem-highline') |
| 123 | +proj.component('rubygem-optimist') |
| 124 | +proj.component('rubygem-hiera-eyaml') |
| 125 | + |
| 126 | +# faraday and its dependencies |
| 127 | +proj.component('rubygem-faraday') |
| 128 | +proj.component('rubygem-faraday-em_http') |
| 129 | +proj.component('rubygem-faraday-em_synchrony') |
| 130 | +proj.component('rubygem-faraday-excon') |
| 131 | +proj.component('rubygem-faraday-httpclient') |
| 132 | +proj.component('rubygem-faraday-multipart') |
| 133 | +proj.component('rubygem-faraday-net_http') |
| 134 | +proj.component('rubygem-faraday-net_http_persistent') |
| 135 | +proj.component('rubygem-faraday-patron') |
| 136 | +proj.component('rubygem-faraday-rack') |
| 137 | +proj.component('rubygem-faraday-retry') |
| 138 | +proj.component('rubygem-faraday_middleware') |
| 139 | +proj.component('rubygem-ruby2_keywords') |
| 140 | + |
| 141 | +# Core dependencies |
| 142 | +proj.component('rubygem-addressable') |
| 143 | +proj.component('rubygem-aws-eventstream') |
| 144 | +proj.component('rubygem-aws-partitions') |
| 145 | +proj.component('rubygem-aws-sdk-core') |
| 146 | +proj.component('rubygem-aws-sdk-ec2') |
| 147 | +proj.component('rubygem-aws-sigv4') |
| 148 | +proj.component('rubygem-bcrypt_pbkdf') |
| 149 | +proj.component('rubygem-bindata') |
| 150 | +proj.component('rubygem-builder') |
| 151 | +proj.component('rubygem-CFPropertyList') |
| 152 | +proj.component('rubygem-colored2') |
| 153 | +proj.component('rubygem-concurrent-ruby') |
| 154 | +proj.component('rubygem-connection_pool') |
| 155 | +proj.component('rubygem-cri') |
| 156 | +proj.component('rubygem-ed25519') |
| 157 | +proj.component('rubygem-erubi') |
| 158 | +proj.component('rubygem-facter') |
| 159 | +proj.component('rubygem-ffi') |
| 160 | +proj.component('rubygem-gssapi') |
| 161 | +proj.component('rubygem-gyoku') |
| 162 | +proj.component('rubygem-hiera') |
| 163 | +proj.component('rubygem-hocon') |
| 164 | +proj.component('rubygem-httpclient') |
| 165 | +proj.component('rubygem-jmespath') |
| 166 | +proj.component('rubygem-jwt') |
| 167 | +proj.component('rubygem-little-plugger') |
| 168 | +proj.component('rubygem-log4r') |
| 169 | +proj.component('rubygem-logging') |
| 170 | +proj.component('rubygem-minitar') |
| 171 | +proj.component('rubygem-molinillo') |
| 172 | +proj.component('rubygem-multi_json') |
| 173 | +proj.component('rubygem-multipart-post') |
| 174 | +proj.component('rubygem-net-http-persistent') |
| 175 | +proj.component('rubygem-net-scp') |
| 176 | +proj.component('rubygem-net-ssh') |
| 177 | +proj.component('rubygem-net-ssh-krb') |
| 178 | +proj.component('rubygem-nori') |
| 179 | +proj.component('rubygem-orchestrator_client') |
| 180 | +proj.component('rubygem-public_suffix') |
| 181 | +proj.component('rubygem-paint') |
| 182 | +proj.component('rubygem-puppet') |
| 183 | +proj.component('rubygem-puppet_forge') |
| 184 | +proj.component('rubygem-puppet-resource_api') |
| 185 | +proj.component('rubygem-puppet-strings') |
| 186 | +proj.component('rubygem-puppetfile-resolver') |
| 187 | +proj.component('rubygem-r10k') |
| 188 | +proj.component('rubygem-rgen') |
| 189 | +proj.component('rubygem-rubyntlm') |
| 190 | +proj.component('rubygem-ruby_smb') |
| 191 | +proj.component('rubygem-rubyzip') |
| 192 | +proj.component('rubygem-scanf') |
| 193 | +proj.component('rubygem-terminal-table') |
| 194 | +proj.component('rubygem-thor') |
| 195 | +proj.component('rubygem-unicode-display_width') |
| 196 | +proj.component('rubygem-webrick') |
| 197 | +proj.component('rubygem-yard') |
| 198 | + |
| 199 | +# Core Windows dependencies |
| 200 | +proj.component('rubygem-windows_error') |
| 201 | +proj.component('rubygem-winrm') |
| 202 | +proj.component('rubygem-winrm-fs') |
| 203 | + |
| 204 | +# Export the settings for the current project and platform as yaml during builds |
| 205 | +proj.publish_yaml_settings |
| 206 | + |
| 207 | +if platform.name =~ /^el-8-.*/ |
| 208 | + # Disable build-id generation since it's currently generating conflicts |
| 209 | + # with system libgcc and libstdc++ |
| 210 | + proj.package_override("# Disable build-id generation to avoid conflicts\n%global _build_id_links none") |
| 211 | +end |
| 212 | + |
| 213 | +proj.directory(proj.prefix) |
0 commit comments