passenger 5.0.0.beta3 → 5.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.editorconfig +11 -5
- data/CHANGELOG +38 -0
- data/CONTRIBUTING.md +1 -4
- data/Gemfile +0 -1
- data/Gemfile.lock +0 -2
- data/Rakefile +33 -33
- data/bin/passenger +1 -1
- data/bin/passenger-config +1 -1
- data/bin/passenger-install-apache2-module +800 -800
- data/bin/passenger-install-nginx-module +592 -592
- data/bin/passenger-memory-stats +127 -127
- data/bin/passenger-status +216 -216
- data/build/agents.rb +127 -127
- data/build/apache2.rb +87 -87
- data/build/basics.rb +60 -60
- data/build/common_library.rb +165 -165
- data/build/cplusplus_support.rb +51 -51
- data/build/cxx_tests.rb +268 -268
- data/build/debian.rb +143 -143
- data/build/documentation.rb +58 -58
- data/build/integration_tests.rb +81 -81
- data/build/misc.rb +132 -132
- data/build/nginx.rb +20 -20
- data/build/node_tests.rb +7 -7
- data/build/oxt_tests.rb +14 -14
- data/build/packaging.rb +570 -570
- data/build/preprocessor.rb +260 -260
- data/build/rake_extensions.rb +71 -71
- data/build/ruby_extension.rb +29 -29
- data/build/ruby_tests.rb +6 -6
- data/build/test_basics.rb +37 -37
- data/debian.template/control.template +3 -5
- data/dev/copy_boost_headers +134 -134
- data/dev/install_scripts_bootstrap_code.rb +25 -25
- data/dev/list_tests +20 -20
- data/dev/ruby_server.rb +223 -223
- data/dev/runner +18 -18
- data/doc/ServerOptimizationGuide.txt.md +55 -2
- data/doc/Users guide Nginx.txt +0 -26
- data/doc/Users guide Standalone.txt +5 -1
- data/doc/users_guide_snippets/tips.txt +9 -0
- data/ext/common/ApplicationPool2/Group.h +23 -11
- data/ext/common/ApplicationPool2/Implementation.cpp +32 -7
- data/ext/common/ApplicationPool2/Pool.h +22 -17
- data/ext/common/ApplicationPool2/SmartSpawner.h +4 -1
- data/ext/common/ApplicationPool2/Spawner.h +1 -1
- data/ext/common/Constants.h +1 -1
- data/ext/common/agents/Base.cpp +35 -20
- data/ext/common/agents/HelperAgent/Main.cpp +8 -1
- data/ext/common/agents/HelperAgent/OptionParser.h +18 -4
- data/ext/common/agents/HelperAgent/RequestHandler.h +2 -83
- data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +54 -1
- data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +7 -4
- data/ext/common/agents/Main.cpp +1 -1
- data/ext/common/agents/Watchdog/Main.cpp +54 -19
- data/ext/nginx/Configuration.c +7 -0
- data/ext/nginx/ContentHandler.c +9 -1
- data/helper-scripts/backtrace-sanitizer.rb +106 -87
- data/helper-scripts/crash-watch.rb +32 -0
- data/helper-scripts/download_binaries/extconf.rb +38 -38
- data/helper-scripts/meteor-loader.rb +107 -107
- data/helper-scripts/prespawn +101 -101
- data/helper-scripts/rack-loader.rb +96 -96
- data/helper-scripts/rack-preloader.rb +137 -137
- data/lib/phusion_passenger.rb +292 -292
- data/lib/phusion_passenger/abstract_installer.rb +438 -438
- data/lib/phusion_passenger/active_support3_extensions/init.rb +168 -170
- data/lib/phusion_passenger/admin_tools.rb +20 -20
- data/lib/phusion_passenger/admin_tools/instance.rb +178 -178
- data/lib/phusion_passenger/admin_tools/instance_registry.rb +61 -61
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +267 -267
- data/lib/phusion_passenger/apache2/config_options.rb +182 -182
- data/lib/phusion_passenger/common_library.rb +479 -485
- data/lib/phusion_passenger/config/about_command.rb +161 -161
- data/lib/phusion_passenger/config/admin_command_command.rb +129 -129
- data/lib/phusion_passenger/config/agent_compiler.rb +121 -121
- data/lib/phusion_passenger/config/build_native_support_command.rb +43 -43
- data/lib/phusion_passenger/config/command.rb +25 -25
- data/lib/phusion_passenger/config/compile_agent_command.rb +62 -62
- data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +88 -73
- data/lib/phusion_passenger/config/detach_process_command.rb +72 -72
- data/lib/phusion_passenger/config/download_agent_command.rb +246 -227
- data/lib/phusion_passenger/config/download_nginx_engine_command.rb +245 -224
- data/lib/phusion_passenger/config/install_agent_command.rb +144 -132
- data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +205 -185
- data/lib/phusion_passenger/config/installation_utils.rb +204 -204
- data/lib/phusion_passenger/config/list_instances_command.rb +64 -64
- data/lib/phusion_passenger/config/main.rb +152 -152
- data/lib/phusion_passenger/config/nginx_engine_compiler.rb +319 -300
- data/lib/phusion_passenger/config/reopen_logs_command.rb +67 -67
- data/lib/phusion_passenger/config/restart_app_command.rb +155 -155
- data/lib/phusion_passenger/config/system_metrics_command.rb +13 -13
- data/lib/phusion_passenger/config/utils.rb +95 -95
- data/lib/phusion_passenger/config/validate_install_command.rb +198 -198
- data/lib/phusion_passenger/console_text_template.rb +25 -25
- data/lib/phusion_passenger/constants.rb +90 -90
- data/lib/phusion_passenger/debug_logging.rb +106 -106
- data/lib/phusion_passenger/loader_shared_helpers.rb +447 -432
- data/lib/phusion_passenger/message_channel.rb +312 -312
- data/lib/phusion_passenger/message_client.rb +176 -176
- data/lib/phusion_passenger/native_support.rb +369 -369
- data/lib/phusion_passenger/nginx/config_options.rb +297 -297
- data/lib/phusion_passenger/packaging.rb +131 -131
- data/lib/phusion_passenger/platform_info.rb +360 -360
- data/lib/phusion_passenger/platform_info/apache.rb +767 -767
- data/lib/phusion_passenger/platform_info/apache_detector.rb +199 -199
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +107 -107
- data/lib/phusion_passenger/platform_info/compiler.rb +570 -570
- data/lib/phusion_passenger/platform_info/curl.rb +32 -32
- data/lib/phusion_passenger/platform_info/cxx_portability.rb +188 -188
- data/lib/phusion_passenger/platform_info/depcheck.rb +372 -372
- data/lib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +109 -109
- data/lib/phusion_passenger/platform_info/depcheck_specs/compiler_toolchain.rb +4 -4
- data/lib/phusion_passenger/platform_info/depcheck_specs/gems.rb +10 -34
- data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +101 -101
- data/lib/phusion_passenger/platform_info/depcheck_specs/ruby.rb +5 -5
- data/lib/phusion_passenger/platform_info/depcheck_specs/utilities.rb +13 -13
- data/lib/phusion_passenger/platform_info/linux.rb +55 -55
- data/lib/phusion_passenger/platform_info/operating_system.rb +149 -149
- data/lib/phusion_passenger/platform_info/ruby.rb +468 -448
- data/lib/phusion_passenger/platform_info/zlib.rb +9 -9
- data/lib/phusion_passenger/plugin.rb +66 -66
- data/lib/phusion_passenger/preloader_shared_helpers.rb +126 -126
- data/lib/phusion_passenger/public_api.rb +191 -191
- data/lib/phusion_passenger/rack/out_of_band_gc.rb +93 -94
- data/lib/phusion_passenger/rack/thread_handler_extension.rb +231 -227
- data/lib/phusion_passenger/request_handler.rb +567 -577
- data/lib/phusion_passenger/request_handler/thread_handler.rb +379 -381
- data/lib/phusion_passenger/ruby_core_enhancements.rb +86 -86
- data/lib/phusion_passenger/ruby_core_io_enhancements.rb +74 -74
- data/lib/phusion_passenger/simple_benchmarking.rb +25 -25
- data/lib/phusion_passenger/standalone/app_finder.rb +153 -150
- data/lib/phusion_passenger/standalone/command.rb +44 -40
- data/lib/phusion_passenger/standalone/config_utils.rb +53 -53
- data/lib/phusion_passenger/standalone/control_utils.rb +38 -59
- data/lib/phusion_passenger/standalone/main.rb +73 -73
- data/lib/phusion_passenger/standalone/start_command.rb +697 -685
- data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +193 -155
- data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +162 -133
- data/lib/phusion_passenger/standalone/status_command.rb +64 -64
- data/lib/phusion_passenger/standalone/stop_command.rb +72 -72
- data/lib/phusion_passenger/standalone/version_command.rb +9 -9
- data/lib/phusion_passenger/union_station/connection.rb +32 -32
- data/lib/phusion_passenger/union_station/core.rb +251 -251
- data/lib/phusion_passenger/union_station/transaction.rb +126 -126
- data/lib/phusion_passenger/utils.rb +199 -167
- data/lib/phusion_passenger/utils/ansi_colors.rb +128 -128
- data/lib/phusion_passenger/utils/download.rb +196 -196
- data/lib/phusion_passenger/utils/file_system_watcher.rb +158 -158
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +101 -101
- data/lib/phusion_passenger/utils/lock.rb +31 -31
- data/lib/phusion_passenger/utils/native_support_utils.rb +31 -31
- data/lib/phusion_passenger/utils/progress_bar.rb +26 -26
- data/lib/phusion_passenger/utils/shellwords.rb +20 -20
- data/lib/phusion_passenger/utils/terminal_choice_menu.rb +206 -206
- data/lib/phusion_passenger/utils/unseekable_socket.rb +272 -272
- data/lib/phusion_passenger/vendor/crash_watch/app.rb +129 -0
- data/lib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +341 -0
- data/lib/phusion_passenger/vendor/crash_watch/version.rb +24 -0
- data/lib/phusion_passenger/vendor/daemon_controller.rb +877 -0
- data/lib/phusion_passenger/vendor/daemon_controller/lock_file.rb +127 -0
- data/lib/phusion_passenger/vendor/daemon_controller/spawn.rb +26 -0
- data/lib/phusion_passenger/vendor/daemon_controller/version.rb +29 -0
- data/packaging/rpm/passenger_spec/passenger.spec.template +0 -1
- data/passenger.gemspec +0 -1
- data/resources/templates/config/nginx_engine_compiler/possible_solutions_for_download_and_extraction_problems.txt.erb +27 -0
- data/resources/templates/standalone/config.erb +19 -15
- data/test/integration_tests/apache2_tests.rb +566 -566
- data/test/integration_tests/downloaded_binaries_tests.rb +126 -125
- data/test/integration_tests/native_packaging_spec.rb +296 -296
- data/test/integration_tests/nginx_tests.rb +393 -393
- data/test/integration_tests/shared/example_webapp_tests.rb +282 -280
- data/test/integration_tests/source_packaging_test.rb +138 -138
- data/test/integration_tests/spec_helper.rb +5 -5
- data/test/integration_tests/standalone_tests.rb +367 -367
- data/test/ruby/debug_logging_spec.rb +133 -133
- data/test/ruby/message_channel_spec.rb +186 -186
- data/test/ruby/rack/loader_spec.rb +28 -28
- data/test/ruby/rack/preloader_spec.rb +34 -34
- data/test/ruby/rails3.0/loader_spec.rb +12 -12
- data/test/ruby/rails3.0/preloader_spec.rb +18 -18
- data/test/ruby/rails3.1/loader_spec.rb +12 -12
- data/test/ruby/rails3.1/preloader_spec.rb +18 -18
- data/test/ruby/rails3.2/loader_spec.rb +12 -12
- data/test/ruby/rails3.2/preloader_spec.rb +18 -18
- data/test/ruby/rails4.0/loader_spec.rb +12 -12
- data/test/ruby/rails4.0/preloader_spec.rb +18 -18
- data/test/ruby/rails4.1/loader_spec.rb +12 -12
- data/test/ruby/rails4.1/preloader_spec.rb +18 -18
- data/test/ruby/request_handler_spec.rb +730 -730
- data/test/ruby/shared/loader_sharedspec.rb +224 -224
- data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +327 -327
- data/test/ruby/shared/ruby_loader_sharedspec.rb +47 -47
- data/test/ruby/spec_helper.rb +65 -65
- data/test/ruby/standalone/runtime_installer_spec.rb +384 -384
- data/test/ruby/union_station_spec.rb +276 -276
- data/test/ruby/utils/file_system_watcher_spec.rb +220 -220
- data/test/ruby/utils/hosts_file_parser.rb +248 -248
- data/test/ruby/utils/tee_input_spec.rb +215 -215
- data/test/ruby/utils/unseekable_socket_spec.rb +57 -57
- data/test/ruby/utils_spec.rb +21 -21
- data/test/stub/rack/config.ru +87 -87
- data/test/stub/rack/library.rb +8 -8
- data/test/stub/rack/start.rb +30 -30
- data/test/support/apache2_controller.rb +191 -191
- data/test/support/nginx_controller.rb +90 -99
- data/test/support/placebo-preloader.rb +57 -57
- data/test/support/test_helper.rb +435 -435
- metadata +11 -21
- metadata.gz.asc +7 -7
- data/lib/phusion_passenger/standalone/command2.rb +0 -292
- data/lib/phusion_passenger/standalone/start2_command.rb +0 -799
- data/resources/templates/standalone/download_tool_missing.txt.erb +0 -18
- data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +0 -17
- data/resources/templates/standalone/run_installer_as_root.txt.erb +0 -8
@@ -29,203 +29,203 @@ PhusionPassenger.require_passenger_lib 'utils/ansi_colors'
|
|
29
29
|
require 'pathname'
|
30
30
|
|
31
31
|
module PhusionPassenger
|
32
|
-
module PlatformInfo
|
33
|
-
|
34
|
-
# Detects all possible Apache installations on the system, and presents the
|
35
|
-
# autodetection information to the user in a friendly way. It turns out too
|
36
|
-
# many people have multiple Apache installations on their system, but they
|
37
|
-
# don't know about that, or they don't know how to compile against the
|
38
|
-
# correct Apache installation. This tool helps them.
|
39
|
-
#
|
40
|
-
# If you use this class to log things to the terminal, then be sure to set
|
41
|
-
# the terminal color to Utils::AnsiColors::DEFAULT_TERMINAL_COLOR.
|
42
|
-
class ApacheDetector
|
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
|
-
private
|
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
|
-
end
|
229
|
-
|
230
|
-
end
|
32
|
+
module PlatformInfo
|
33
|
+
|
34
|
+
# Detects all possible Apache installations on the system, and presents the
|
35
|
+
# autodetection information to the user in a friendly way. It turns out too
|
36
|
+
# many people have multiple Apache installations on their system, but they
|
37
|
+
# don't know about that, or they don't know how to compile against the
|
38
|
+
# correct Apache installation. This tool helps them.
|
39
|
+
#
|
40
|
+
# If you use this class to log things to the terminal, then be sure to set
|
41
|
+
# the terminal color to Utils::AnsiColors::DEFAULT_TERMINAL_COLOR.
|
42
|
+
class ApacheDetector
|
43
|
+
class Result
|
44
|
+
# These are required and are never nil.
|
45
|
+
attr_accessor :apxs2, :httpd, :ctl, :version, :config_file
|
46
|
+
# These are optional and may be nil.
|
47
|
+
attr_accessor :a2enmod, :a2dismod
|
48
|
+
# This may be nil. It depends on how well we can infer information from the config file.
|
49
|
+
attr_accessor :error_log
|
50
|
+
|
51
|
+
def initialize(detector)
|
52
|
+
@detector = detector
|
53
|
+
end
|
54
|
+
|
55
|
+
def report
|
56
|
+
log " <b>* Found Apache #{version}!</b>"
|
57
|
+
log " Information:"
|
58
|
+
log " apxs2 : #{apxs2}"
|
59
|
+
log " Main executable: #{httpd}"
|
60
|
+
log " Control command: #{ctl}"
|
61
|
+
log " Config file : #{config_file}"
|
62
|
+
log " Error log file : #{error_log || 'unknown'}"
|
63
|
+
log ""
|
64
|
+
log " To install #{PROGRAM_NAME} against this specific Apache version:"
|
65
|
+
log " #{PlatformInfo.ruby_command} #{PhusionPassenger.bin_dir}/passenger-install-apache2-module --apxs2-path='#{apxs2}'"
|
66
|
+
log ""
|
67
|
+
log " To start, stop or restart this specific Apache version:"
|
68
|
+
log " #{ctl} start"
|
69
|
+
log " #{ctl} stop"
|
70
|
+
log " #{ctl} restart"
|
71
|
+
log ""
|
72
|
+
if error_log
|
73
|
+
log " To troubleshoot, please read the logs in this file:"
|
74
|
+
log " #{error_log}"
|
75
|
+
log ""
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
def log(message)
|
81
|
+
@detector.send(:log, message)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
attr_reader :results
|
86
|
+
|
87
|
+
def initialize(output)
|
88
|
+
@output = output
|
89
|
+
@results = []
|
90
|
+
PlatformInfo.verbose = true
|
91
|
+
PlatformInfo.log_implementation = lambda do |message|
|
92
|
+
if message =~ /: found$/
|
93
|
+
log("<green> --> #{message}</green>")
|
94
|
+
else
|
95
|
+
log(" --> #{message}")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def finish
|
101
|
+
PlatformInfo.verbose = false
|
102
|
+
PlatformInfo.log_implementation = nil
|
103
|
+
end
|
104
|
+
|
105
|
+
def detect_all
|
106
|
+
log "<banner>Looking for possible Apache installations...</banner>"
|
107
|
+
apxses = PlatformInfo.find_all_commands("apxs2") +
|
108
|
+
PlatformInfo.find_all_commands("apxs")
|
109
|
+
apxses = remove_symlink_duplications(apxses)
|
110
|
+
log ""
|
111
|
+
apxses.each do |apxs2|
|
112
|
+
detect_one(apxs2)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def detect_one(apxs2)
|
117
|
+
log "<banner>Analyzing #{apxs2}...</banner>"
|
118
|
+
add_result do |result|
|
119
|
+
result.apxs2 = apxs2
|
120
|
+
log "Detecting main Apache executable..."
|
121
|
+
result.httpd = PlatformInfo.httpd(:apxs2 => apxs2)
|
122
|
+
if result.httpd
|
123
|
+
log "Detecting version..."
|
124
|
+
if result.version = PlatformInfo.httpd_version(:httpd => result.httpd)
|
125
|
+
log " --> #{result.version}"
|
126
|
+
else
|
127
|
+
log "<red> --> Cannot detect version!</red>"
|
128
|
+
result.httpd = nil
|
129
|
+
end
|
130
|
+
end
|
131
|
+
if result.httpd
|
132
|
+
log "Detecting control command..."
|
133
|
+
result.ctl = PlatformInfo.apache2ctl(:apxs2 => apxs2)
|
134
|
+
result.httpd = nil if !result.ctl
|
135
|
+
end
|
136
|
+
if result.httpd
|
137
|
+
log "Detecting configuration file location..."
|
138
|
+
result.config_file = PlatformInfo.httpd_default_config_file(:httpd => result.httpd)
|
139
|
+
if result.config_file
|
140
|
+
log " --> #{result.config_file}"
|
141
|
+
else
|
142
|
+
log "<red> --> Cannot detect default config file location!</red>"
|
143
|
+
result.httpd = nil
|
144
|
+
end
|
145
|
+
end
|
146
|
+
if result.httpd
|
147
|
+
log "Detecting error log file..."
|
148
|
+
result.error_log = PlatformInfo.httpd_actual_error_log(:httpd => result.httpd)
|
149
|
+
if result.error_log
|
150
|
+
log " --> #{result.error_log}"
|
151
|
+
else
|
152
|
+
log "<red> --> Cannot detect error log file!</red>"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
if result.httpd
|
156
|
+
log "Detecting a2enmod and a2dismod..."
|
157
|
+
result.a2enmod = PlatformInfo.a2enmod(:apxs2 => apxs2)
|
158
|
+
result.a2dismod = PlatformInfo.a2dismod(:apxs2 => apxs2)
|
159
|
+
end
|
160
|
+
if result.httpd
|
161
|
+
log "<green>Found a usable Apache installation using #{apxs2}.</green>"
|
162
|
+
true
|
163
|
+
else
|
164
|
+
log "<yellow>Cannot find a usable Apache installation using #{apxs2}.</yellow>"
|
165
|
+
false
|
166
|
+
end
|
167
|
+
end
|
168
|
+
log ""
|
169
|
+
end
|
170
|
+
|
171
|
+
def report
|
172
|
+
log "<banner>Final autodetection results</banner>"
|
173
|
+
@results.each do |result|
|
174
|
+
result.report
|
175
|
+
end
|
176
|
+
if @results.empty?
|
177
|
+
log "<red>Sorry, this program cannot find an Apache installation.</red>"
|
178
|
+
log ""
|
179
|
+
log "To install Apache, please run the following. It will tell you how to install Apache."
|
180
|
+
log ""
|
181
|
+
log " <b>#{PhusionPassenger.bin_dir}/passenger-install-apache2-module</b>"
|
182
|
+
log ""
|
183
|
+
log "If you are sure that you have Apache installed, please read the documentation:"
|
184
|
+
log "<b>#{APACHE2_DOC_URL}#forcing_location_of_command_line_tools_and_dependencies</b>"
|
185
|
+
elsif @results.size > 1
|
186
|
+
log "<yellow>WARNING: You have multiple Apache installations on your system!</yellow>"
|
187
|
+
log "You are strongly recommended to read this section of the documentation:"
|
188
|
+
log "<b>#{APACHE2_DOC_URL}#multiple_apache_installs</b>"
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def result_for(apxs2)
|
193
|
+
# All the results use realpaths, so the input must too.
|
194
|
+
apxs2 = Pathname.new(apxs2).realpath
|
195
|
+
return @results.find { |r| r.apxs2 == apxs2 }
|
196
|
+
end
|
197
|
+
|
198
|
+
private
|
199
|
+
def log(message)
|
200
|
+
if @output.tty?
|
201
|
+
@output.puts(Utils::AnsiColors.ansi_colorize(message))
|
202
|
+
else
|
203
|
+
@output.puts(Utils::AnsiColors.strip_color_tags(message))
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
# On Ubuntu, /usr/bin/apxs2 is a symlink to /usr/bin/apxs.
|
208
|
+
# On recent Arch Linux releases, /bin, /sbin etc are symlinks to
|
209
|
+
# /usr/bin and /usr/sbin.
|
210
|
+
# We're only supposed to detect one Apache in that case so we need to
|
211
|
+
# resolve symlinks.
|
212
|
+
def remove_symlink_duplications(filenames)
|
213
|
+
old_size = filenames.size
|
214
|
+
filenames = filenames.map do |filename|
|
215
|
+
Pathname.new(filename).realpath
|
216
|
+
end
|
217
|
+
filenames.uniq!
|
218
|
+
if old_size != filenames.size
|
219
|
+
log "#{old_size - filenames.size} symlink duplicate(s) detected; ignoring them."
|
220
|
+
end
|
221
|
+
return filenames
|
222
|
+
end
|
223
|
+
|
224
|
+
def add_result
|
225
|
+
result = Result.new(self)
|
226
|
+
@results << result if yield(result)
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
end
|
231
231
|
end # module Phusion Passenger
|
@@ -28,112 +28,112 @@ PhusionPassenger.require_passenger_lib 'platform_info/operating_system'
|
|
28
28
|
|
29
29
|
module PhusionPassenger
|
30
30
|
|
31
|
-
module PlatformInfo
|
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
|
-
end
|
31
|
+
module PlatformInfo
|
32
|
+
# Returns a string that describes the current Ruby
|
33
|
+
# interpreter's extension binary compatibility. A Ruby extension
|
34
|
+
# compiled for a certain Ruby interpreter can also be loaded on
|
35
|
+
# a different Ruby interpreter with the same binary compatibility
|
36
|
+
# identifier.
|
37
|
+
#
|
38
|
+
# The result depends on the following factors:
|
39
|
+
# - Ruby engine name.
|
40
|
+
# - Ruby extension version.
|
41
|
+
# This is not the same as the Ruby language version, which
|
42
|
+
# identifies language-level compatibility. This is rather about
|
43
|
+
# binary compatibility of extensions.
|
44
|
+
# MRI seems to break source compatibility between tiny releases,
|
45
|
+
# though patchlevel releases tend to be source and binary
|
46
|
+
# compatible.
|
47
|
+
# - Ruby extension architecture.
|
48
|
+
# This is not necessarily the same as the operating system
|
49
|
+
# runtime architecture or the CPU architecture.
|
50
|
+
# For example, in case of JRuby, the extension architecture is
|
51
|
+
# just "java" because all extensions target the Java platform;
|
52
|
+
# the architecture the JVM was compiled for has no effect on
|
53
|
+
# compatibility.
|
54
|
+
# On systems with universal binaries support there may be multiple
|
55
|
+
# architectures. In this case the architecture is "universal"
|
56
|
+
# because extensions must be able to support all of the Ruby
|
57
|
+
# executable's architectures.
|
58
|
+
# - The operating system for which the Ruby interpreter was compiled.
|
59
|
+
def self.ruby_extension_binary_compatibility_id
|
60
|
+
ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : "ruby"
|
61
|
+
ruby_ext_version = RUBY_VERSION
|
62
|
+
if RUBY_PLATFORM =~ /darwin/
|
63
|
+
if RUBY_PLATFORM =~ /universal/
|
64
|
+
ruby_arch = "universal"
|
65
|
+
else
|
66
|
+
# OS X < 10.8: something like:
|
67
|
+
# "/opt/ruby-enterprise/bin/ruby: Mach-O 64-bit executable x86_64"
|
68
|
+
output = `file -L "#{ruby_executable}"`.strip
|
69
|
+
ruby_arch = output.sub(/.* /, '')
|
70
|
+
if ruby_arch == "executable"
|
71
|
+
# OS X >= 10.8: something like:
|
72
|
+
# "/opt/ruby-enterprise/bin/ruby: Mach-O 64-bit executable"
|
73
|
+
if output =~ /Mach-O 64-bit/
|
74
|
+
ruby_arch = "x86_64"
|
75
|
+
else
|
76
|
+
raise "Cannot autodetect the Ruby interpreter's architecture"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
elsif RUBY_PLATFORM == "java"
|
81
|
+
ruby_arch = "java"
|
82
|
+
else
|
83
|
+
ruby_arch = cpu_architectures[0]
|
84
|
+
end
|
85
|
+
return "#{ruby_engine}-#{ruby_ext_version}-#{ruby_arch}-#{os_name}"
|
86
|
+
end
|
87
|
+
memoize :ruby_extension_binary_compatibility_id
|
88
|
+
|
89
|
+
# Returns an identifier string that describes the current
|
90
|
+
# platform's binary compatibility with regard to C/C++
|
91
|
+
# binaries. Two systems with the same binary compatibility
|
92
|
+
# identifiers should be able to run the same C/C++ binaries.
|
93
|
+
#
|
94
|
+
# The the string depends on the following factors:
|
95
|
+
# - The operating system name.
|
96
|
+
# - Operating system runtime identifier.
|
97
|
+
# This may include the kernel version, libc version, C++ ABI version,
|
98
|
+
# etc. Everything that is of interest for binary compatibility with
|
99
|
+
# regard to C/C++ binaries.
|
100
|
+
# - Operating system default runtime architecture.
|
101
|
+
# This is not the same as the CPU architecture; some CPUs support
|
102
|
+
# multiple architectures, e.g. Intel Core 2 Duo supports x86 and
|
103
|
+
# x86_64. Some operating systems actually support multiple runtime
|
104
|
+
# architectures: a lot of x86_64 Linux distributions also include
|
105
|
+
# 32-bit runtimes, and OS X Snow Leopard is x86_64 by default but
|
106
|
+
# all system libraries also support x86.
|
107
|
+
# This component identifies the architecture that is used when
|
108
|
+
# compiling a binary with the system's C++ compiler with its default
|
109
|
+
# options.
|
110
|
+
def self.cxx_binary_compatibility_id
|
111
|
+
if os_name == "macosx"
|
112
|
+
# RUBY_PLATFORM gives us the kernel version, but we want
|
113
|
+
# the OS X version.
|
114
|
+
os_version_string = `sw_vers -productVersion`.strip
|
115
|
+
# sw_vers returns something like "10.6.2". We're only
|
116
|
+
# interested in the first two digits (MAJOR.MINOR) since
|
117
|
+
# tiny releases tend to be binary compatible with each
|
118
|
+
# other.
|
119
|
+
components = os_version_string.split(".")
|
120
|
+
os_version = "#{components[0]}.#{components[1]}"
|
121
|
+
os_runtime = os_version
|
122
|
+
|
123
|
+
os_arch = cpu_architectures[0]
|
124
|
+
if os_version >= "10.5" && os_arch =~ /^i.86$/
|
125
|
+
# On Snow Leopard, 'uname -m' returns i386 but
|
126
|
+
# we *know* that everything is x86_64 by default.
|
127
|
+
os_arch = "x86_64"
|
128
|
+
end
|
129
|
+
else
|
130
|
+
os_arch = cpu_architectures[0]
|
131
|
+
os_runtime = nil
|
132
|
+
end
|
133
|
+
|
134
|
+
return [os_arch, os_name, os_runtime].compact.join("-")
|
135
|
+
end
|
136
|
+
memoize :cxx_binary_compatibility_id
|
137
|
+
end
|
138
138
|
|
139
139
|
end # module PhusionPassenger
|