forked from puppetlabs/puppet-agent
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpuppet-agent.rb
279 lines (246 loc) · 11.5 KB
/
puppet-agent.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
project "puppet-agent" do |proj|
platform = proj.get_platform
# Project level settings our components will care about
if platform.is_windows?
proj.setting(:company_name, "Puppet Inc")
proj.setting(:pl_company_name, "Puppet Labs")
proj.setting(:company_id, "PuppetLabs")
proj.setting(:common_product_id, "PuppetInstaller")
proj.setting(:puppet_service_name, "puppet")
proj.setting(:product_id, "Puppet")
proj.setting(:upgrade_code, "2AD3D11C-61B3-4710-B106-B4FDEC5FA358")
if platform.architecture == "x64"
proj.setting(:product_name, "Puppet Agent (64-bit)")
proj.setting(:win64, "yes")
proj.setting(:base_dir, "ProgramFiles64Folder")
proj.setting(:RememberedInstallDirRegKey, "RememberedInstallDir64")
else
proj.setting(:product_name, "Puppet Agent")
proj.setting(:win64, "no")
proj.setting(:base_dir, "ProgramFilesFolder")
proj.setting(:RememberedInstallDirRegKey, "RememberedInstallDir")
end
proj.setting(:links, {
:HelpLink => "http://puppet.com/services/customer-support",
:CommunityLink => "http://puppet.com/community",
:ForgeLink => "http://forge.puppet.com",
:NextStepLink => "https://docs.puppet.com/pe/latest/quick_start_install_agents_windows.html",
:ManualLink => "https://docs.puppet.com/puppet/latest/reference",
})
proj.setting(:UI_exitdialogtext, "Manage your first resources on this node, explore the Puppet community and get support using the shortcuts in the Documentation folder of your Start Menu.")
proj.setting(:LicenseRTF, "wix/license/LICENSE.rtf")
# Directory IDs
proj.setting(:bindir_id, "bindir")
# We build for windows not in the final destination, but in the paths that correspond
# to the directory ids expected by WIX. This will allow for a portable installation (ideally).
proj.setting(:install_root, File.join("C:", proj.base_dir, proj.company_id, proj.product_id))
proj.setting(:sysconfdir, File.join("C:", "CommonAppDataFolder", proj.company_id))
proj.setting(:tmpfilesdir, "C:/Windows/Temp")
proj.setting(:facter_root, File.join(proj.install_root, "facter"))
proj.setting(:hiera_root, File.join(proj.install_root, "hiera"))
proj.setting(:hiera_bindir, File.join(proj.hiera_root, "bin"))
proj.setting(:hiera_libdir, File.join(proj.hiera_root, "lib"))
proj.setting(:mco_root, File.join(proj.install_root, "mcollective"))
proj.setting(:mco_bindir, File.join(proj.mco_root, "bin"))
proj.setting(:mco_libdir, File.join(proj.mco_root, "lib"))
proj.setting(:pxp_root, File.join(proj.install_root, "pxp-agent"))
proj.setting(:service_dir, File.join(proj.install_root, "service"))
proj.setting(:windows_tools, File.join(proj.install_root, "sys/tools/bin"))
proj.setting(:ruby_dir, File.join(proj.install_root, "sys/ruby"))
proj.setting(:ruby_bindir, File.join(proj.ruby_dir, "bin"))
else
proj.setting(:install_root, "/opt/puppetlabs")
if platform.is_eos?
proj.setting(:sysconfdir, "/persist/sys/etc/puppetlabs")
proj.setting(:link_sysconfdir, "/etc/puppetlabs")
elsif platform.is_osx?
proj.setting(:sysconfdir, "/private/etc/puppetlabs")
else
proj.setting(:sysconfdir, "/etc/puppetlabs")
end
proj.setting(:logdir, "/var/log/puppetlabs")
proj.setting(:piddir, "/var/run/puppetlabs")
proj.setting(:tmpfilesdir, "/usr/lib/tmpfiles.d")
end
proj.setting(:miscdir, File.join(proj.install_root, "misc"))
proj.setting(:prefix, File.join(proj.install_root, "puppet"))
proj.setting(:puppet_configdir, File.join(proj.sysconfdir, 'puppet'))
proj.setting(:puppet_codedir, File.join(proj.sysconfdir, 'code'))
proj.setting(:bindir, File.join(proj.prefix, "bin"))
proj.setting(:link_bindir, File.join(proj.install_root, "bin"))
proj.setting(:includedir, File.join(proj.prefix, "include"))
proj.setting(:datadir, File.join(proj.prefix, "share"))
proj.setting(:mandir, File.join(proj.datadir, "man"))
if platform.is_windows?
proj.setting(:host_ruby, File.join(proj.ruby_bindir, "ruby.exe"))
proj.setting(:host_gem, File.join(proj.ruby_bindir, "gem.bat"))
proj.setting(:libdir, File.join(proj.ruby_dir, "lib"))
else
proj.setting(:host_ruby, File.join(proj.bindir, "ruby"))
proj.setting(:host_gem, File.join(proj.bindir, "gem"))
proj.setting(:libdir, File.join(proj.prefix, "lib"))
end
proj.setting(:gem_home, File.join(proj.libdir, "ruby", "gems", "2.3.0"))
proj.setting(:ruby_vendordir, File.join(proj.libdir, "ruby", "vendor_ruby"))
# Cross-compiled Linux platforms
platform_triple = "powerpc-linux-gnu" if platform.is_huaweios?
platform_triple = "powerpc64le-unknown-linux-gnu" if platform.architecture == "ppc64le"
platform_triple = "s390x-linux-gnu" if platform.architecture == "s390x"
platform_triple = "arm-linux-gnueabihf" if platform.name == 'debian-8-armhf'
if platform.is_cross_compiled_linux?
host = "--host #{platform_triple}"
# Use a standalone ruby for cross-compilation
proj.setting(:host_ruby, "/opt/pl-build-tools/bin/ruby")
proj.setting(:host_gem, "/opt/pl-build-tools/bin/gem")
end
# For solaris, we build cross-compilers
if platform.is_solaris?
if platform.architecture == 'i386'
platform_triple = "#{platform.architecture}-pc-solaris2.#{platform.os_version}"
else
platform_triple = "#{platform.architecture}-sun-solaris2.#{platform.os_version}"
host = "--host #{platform_triple}"
# For cross-compiling, we have a standalone ruby
if platform.os_version == "10"
proj.setting(:host_ruby, "/opt/csw/bin/ruby")
proj.setting(:host_gem, "/opt/csw/bin/gem2.0")
else
proj.setting(:host_ruby, "/opt/pl-build-tools/bin/ruby")
proj.setting(:host_gem, "/opt/pl-build-tools/bin/gem")
end
end
elsif platform.is_windows?
# For windows, we need to ensure we are building for mingw not cygwin
platform_triple = platform.platform_triple
host = "--host #{platform_triple}"
end
proj.setting(:gem_install, "#{proj.host_gem} install --no-rdoc --no-ri --local ")
if platform.is_windows?
proj.setting(:gem_install, "#{proj.gem_install} --bindir #{proj.ruby_bindir} ")
end
# For AIX, we use the triple to install a better rbconfig
if platform.is_aix?
platform_triple = "powerpc-ibm-aix#{platform.os_version}.0.0"
end
proj.setting(:platform_triple, platform_triple)
proj.setting(:host, host)
proj.description "The Puppet Agent package contains all of the elements needed to run puppet, including ruby, facter, hiera and mcollective."
proj.version_from_git
proj.write_version_file File.join(proj.prefix, 'VERSION')
proj.license "See components"
proj.vendor "Puppet Labs <[email protected]>"
proj.homepage "https://www.puppetlabs.com"
proj.target_repo "PC1"
if platform.is_solaris?
proj.identifier "puppetlabs.com"
elsif platform.is_osx?
proj.identifier "com.puppetlabs"
end
# For some platforms the default doc location for the BOM does not exist or is incorrect - move it to specified directory
if platform.name =~ /cisco-wrlinux/
proj.bill_of_materials File.join(proj.datadir, "doc")
end
# Set package version, for use by Facter in creating the AIO_AGENT_VERSION fact.
proj.setting(:package_version, proj.get_version)
# Define default CFLAGS and LDFLAGS for most platforms, and then
# tweak or adjust them as needed.
proj.setting(:cflags, "-I#{proj.includedir} -I/opt/pl-build-tools/include")
proj.setting(:ldflags, "-L#{proj.libdir} -L/opt/pl-build-tools/lib -Wl,-rpath=#{proj.libdir}")
# Platform specific overrides or settings, which may override the defaults
if platform.is_windows?
arch = platform.architecture == "x64" ? "64" : "32"
proj.setting(:gcc_root, "C:/tools/mingw#{arch}")
proj.setting(:gcc_bindir, "#{proj.gcc_root}/bin")
proj.setting(:tools_root, "C:/tools/pl-build-tools")
proj.setting(:cflags, "-I#{proj.tools_root}/include -I#{proj.gcc_root}/include -I#{proj.includedir}")
proj.setting(:ldflags, "-L#{proj.tools_root}/lib -L#{proj.gcc_root}/lib -L#{proj.libdir}")
proj.setting(:cygwin, "nodosfilewarning winsymlinks:native")
end
if platform.is_osx?
# For OS X, we should optimize for an older architecture than Apple
# currently ships for; there's a lot of older xeon chips based on
# that architecture still in use throughout the Mac ecosystem.
# Additionally, OS X doesn't use RPATH for linking. We shouldn't
# define it or try to force it in the linker, because this might
# break gcc or clang if they try to use the RPATH values we forced.
proj.setting(:cflags, "-march=core2 -msse4 -I#{proj.includedir}")
proj.setting(:ldflags, "-L#{proj.libdir} ")
end
if platform.is_aix?
proj.setting(:ldflags, "-Wl,-brtl -L#{proj.libdir} -L/opt/pl-build-tools/lib")
end
# First our stuff
proj.component "puppet"
proj.component "facter"
proj.component "hiera"
proj.component "leatherman"
proj.component "cpp-hocon"
proj.component "marionette-collective"
proj.component "cpp-pcp-client"
proj.component "pxp-agent"
# Then the dependencies
proj.component "augeas" unless platform.is_windows?
# Curl is only needed for compute clusters (GCE, EC2); so rpm, deb, and Windows
proj.component "curl" if (platform.is_linux? && !platform.is_huaweios?) || platform.is_windows?
proj.component "ruby"
proj.component "nssm" if platform.is_windows?
proj.component "ruby-stomp"
proj.component "rubygem-deep-merge"
proj.component "rubygem-net-ssh"
proj.component "rubygem-hocon"
proj.component "rubygem-semantic_puppet"
if platform.is_windows?
proj.component "rubygem-ffi"
proj.component "rubygem-minitar"
proj.component "rubygem-win32-dir"
proj.component "rubygem-win32-eventlog"
proj.component "rubygem-win32-process"
proj.component "rubygem-win32-security"
proj.component "rubygem-win32-service"
end
proj.component "ruby-shadow" unless platform.is_aix? || platform.is_windows?
proj.component "ruby-augeas" unless platform.is_windows?
proj.component "openssl"
proj.component "puppet-ca-bundle"
proj.component "libxml2" unless platform.is_windows?
proj.component "libxslt" unless platform.is_windows?
# These utilites don't really work on unix
if platform.is_linux?
proj.component "virt-what"
proj.component "dmidecode"
proj.component "shellpath"
end
proj.component "runtime"
# Needed to avoid using readline on solaris and aix
if platform.is_solaris? || platform.is_aix?
proj.component "libedit"
end
# Components only applicable on HuaweiOS
if platform.is_huaweios?
proj.component "rubygem-net-scp"
proj.component "rubygem-mini_portile2"
proj.component "rubygem-pkg-config"
proj.component "rubygem-net-netconf"
proj.component "rubygem-nokogiri"
end
# Components only applicable on OSX
if platform.is_osx?
proj.component "cfpropertylist"
end
# We only build ruby-selinux for EL 5-7
if platform.name =~ /^el-(5|6|7)-.*/ || platform.is_fedora?
proj.component "ruby-selinux"
end
proj.directory proj.install_root
proj.directory proj.prefix
proj.directory proj.sysconfdir
proj.directory proj.link_bindir
proj.directory proj.logdir unless platform.is_windows?
proj.directory proj.piddir unless platform.is_windows?
proj.timeout 7200 if platform.is_windows?
# Here we rewrite public http urls to use our internal source host instead.
# Something like https://www.openssl.org/source/openssl-1.0.0r.tar.gz gets
# rewritten as
# http://buildsources.delivery.puppetlabs.net/openssl-1.0.0r.tar.gz
proj.register_rewrite_rule 'http', 'http://buildsources.delivery.puppetlabs.net'
end