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
|
# File 'ext/extconf.rb', line 30
def install
logger.info "Installing appsignal agent #{Appsignal::VERSION} for Ruby #{RUBY_VERSION} on #{RUBY_PLATFORM}"
if RUBY_PLATFORM =~ /java/
installation_failed(
"We do not support jRuby at the moment, email [email protected] if you want to join the beta"
)
return
end
unless AGENT_CONFIG["triples"].keys.include?(ARCH)
installation_failed(
"AppSignal currently does not support your system architecture (#{ARCH})." \
"Please let us know at [email protected], we aim to support everything our customers run."
)
return
end
arch_config = AGENT_CONFIG["triples"][ARCH]
unless File.exist?(ext_path("appsignal-agent")) &&
File.exist?(ext_path("libappsignal.a")) &&
File.exist?(ext_path("appsignal.h"))
logger.info "Downloading agent release from #{arch_config["download_url"]}"
archive = open(arch_config["download_url"], :ssl_ca_cert => CA_CERT_PATH)
if Digest::SHA256.hexdigest(archive.read) == arch_config["checksum"]
logger.info "Checksum of downloaded archive verified, extracting archive"
else
installation_failed(
"Aborting installation, checksum of downloaded archive could not be verified: " \
"Expected '#{arch_config["checksum"]}', got '#{checksum}'."
)
return
end
Gem::Package::TarReader.new(Zlib::GzipReader.open(archive)) do |tar|
tar.each do |entry|
next unless entry.file?
File.open(ext_path(entry.full_name), "wb") do |f|
f.write(entry.read)
end
end
end
FileUtils.chmod(0o755, ext_path("appsignal-agent"))
end
logger.info "Creating makefile"
require "mkmf"
if !have_library("appsignal", "appsignal_start", "appsignal.h")
installation_failed "Aborting installation, libappsignal.a or appsignal.h not found"
elsif !find_executable("appsignal-agent", EXT_PATH)
installation_failed "Aborting installation, appsignal-agent not found"
else
create_makefile "appsignal_extension"
logger.info "Successfully created Makefile for appsignal extension"
end
rescue => ex
installation_failed "Exception while installing: #{ex}"
ex.backtrace.each do |line|
logger.error line
end
end
|