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
@@ -1,5 +1,5 @@
|
|
1
1
|
# Phusion Passenger - https://www.phusionpassenger.com/
|
2
|
-
# Copyright (c) 2014 Phusion
|
2
|
+
# Copyright (c) 2014-2015 Phusion
|
3
3
|
#
|
4
4
|
# "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
5
5
|
#
|
@@ -34,248 +34,269 @@ PhusionPassenger.require_passenger_lib 'utils/shellwords'
|
|
34
34
|
PhusionPassenger.require_passenger_lib 'utils/tmpio'
|
35
35
|
|
36
36
|
module PhusionPassenger
|
37
|
-
module Config
|
37
|
+
module Config
|
38
38
|
|
39
|
-
class DownloadNginxEngineCommand < Command
|
40
|
-
|
39
|
+
class DownloadNginxEngineCommand < Command
|
40
|
+
include InstallationUtils
|
41
41
|
|
42
|
-
|
42
|
+
BINARY_NOT_USABLE_EXIT_CODE = 3
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
44
|
+
def run
|
45
|
+
@options = {
|
46
|
+
:log_level => Logger::INFO,
|
47
|
+
:colors => :auto,
|
48
|
+
:error_colors => true,
|
49
|
+
:show_download_progress => STDOUT.tty?,
|
50
|
+
:compilation_tip => true,
|
51
|
+
:force_tip => true,
|
52
|
+
:use_cache => true,
|
53
|
+
:connect_timeout => 30,
|
54
|
+
:idle_timeout => 30
|
55
|
+
}
|
56
|
+
parse_options
|
57
|
+
initialize_objects
|
58
|
+
sanity_check
|
59
|
+
download_and_extract
|
60
|
+
end
|
59
61
|
|
60
|
-
private
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
62
|
+
private
|
63
|
+
def self.create_option_parser(options)
|
64
|
+
OptionParser.new do |opts|
|
65
|
+
nl = "\n" + ' ' * 37
|
66
|
+
opts.banner = "Usage: passenger-config download-nginx-engine [OPTIONS]\n"
|
67
|
+
opts.separator ""
|
68
|
+
opts.separator " Download an Nginx #{PREFERRED_NGINX_VERSION} engine " +
|
69
|
+
"from the #{PROGRAM_NAME} website,"
|
70
|
+
opts.separator " for use with #{PROGRAM_NAME} Standalone. Precompiled engines are only"
|
71
|
+
opts.separator " available for Linux and OS X."
|
72
|
+
opts.separator ""
|
73
|
+
opts.separator " It is not possible to customize the Nginx engine version. " +
|
74
|
+
"It must be #{PREFERRED_NGINX_VERSION}."
|
75
|
+
opts.separator ""
|
74
76
|
|
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
|
-
|
77
|
+
opts.separator "Options:"
|
78
|
+
opts.on("--url-root URL", String, "Download the engine from a custom URL") do |value|
|
79
|
+
options[:url_root] = value
|
80
|
+
end
|
81
|
+
opts.on("--log-prefix PREFIX", String, "Prefix all logs with the given string") do |value|
|
82
|
+
options[:log_prefix] = value
|
83
|
+
end
|
84
|
+
opts.on("--log-level LEVEL", String, "Set log level (fatal,error,warn,info,#{nl}" +
|
85
|
+
"debug). Default: info") do |value|
|
86
|
+
case value
|
87
|
+
when "fatal"
|
88
|
+
options[:log_level] = Logger::FATAL
|
89
|
+
when "error"
|
90
|
+
options[:log_level] = Logger::ERROR
|
91
|
+
when "warn"
|
92
|
+
options[:log_level] = Logger::WARN
|
93
|
+
when "info"
|
94
|
+
options[:log_level] = Logger::INFO
|
95
|
+
when "debug"
|
96
|
+
options[:log_level] = Logger::DEBUG
|
97
|
+
else
|
98
|
+
abort "Invalid log level #{value.inspect}"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
opts.on("-f", "--force", "Skip sanity checks") do
|
102
|
+
options[:force] = true
|
103
|
+
end
|
104
|
+
opts.on("--no-colors", "Never output colors") do
|
105
|
+
options[:colors] = false
|
106
|
+
end
|
107
|
+
opts.on("--no-error-colors", "Do not colorized error messages") do
|
108
|
+
options[:error_colors] = false
|
109
|
+
end
|
110
|
+
opts.on("--no-download-progress", "Never show download progress") do
|
111
|
+
options[:show_download_progress] = false
|
112
|
+
end
|
113
|
+
opts.on("--no-compilation-tip", "Do not present compilation as an#{nl}" +
|
114
|
+
"alternative way to install the agent") do
|
115
|
+
options[:compilation_tip] = false
|
116
|
+
end
|
117
|
+
opts.on("--no-force-tip", "Do not print any tips regarding the#{nl}" +
|
118
|
+
"--force parameter") do
|
119
|
+
options[:force_tip] = false
|
120
|
+
end
|
121
|
+
opts.on("--skip-cache", "Do not copy the Nginx engine from cache") do
|
122
|
+
options[:use_cache] = false
|
123
|
+
end
|
124
|
+
opts.on("--suppress-binary-unusable-message",
|
125
|
+
"Do not print anything if the downloaded#{nl}" +
|
126
|
+
"binary turns out to be unusable") do
|
127
|
+
options[:suppress_binary_unusable_message] = true
|
128
|
+
end
|
129
|
+
opts.on("--dry-run", "Do everything except actually installing#{nl}" +
|
130
|
+
"the engine") do
|
131
|
+
options[:dry_run] = true
|
132
|
+
end
|
133
|
+
opts.on("--connect-timeout SECONDS", Integer,
|
134
|
+
"The maximum amount of time to spend on DNS#{nl}" +
|
135
|
+
"lookup and establishing the TCP connection.#{nl}" +
|
136
|
+
"Default: 30") do |val|
|
137
|
+
options[:connect_timeout] = val
|
138
|
+
end
|
139
|
+
opts.on("--idle-timeout SECONDS", Integer, "The maximum idle read time. Default: 30") do |val|
|
140
|
+
options[:idle_timeout] = val
|
141
|
+
end
|
142
|
+
opts.on("-h", "--help", "Show this help") do
|
143
|
+
options[:help] = true
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
134
147
|
|
135
|
-
|
136
|
-
|
137
|
-
|
148
|
+
def help
|
149
|
+
puts @parser
|
150
|
+
end
|
138
151
|
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
152
|
+
def initialize_objects
|
153
|
+
if @options[:url_root]
|
154
|
+
@sites = [{ :url => @options[:url_root] }]
|
155
|
+
else
|
156
|
+
@sites = PhusionPassenger.binaries_sites
|
157
|
+
end
|
158
|
+
@colors = Utils::AnsiColors.new(@options[:colors])
|
159
|
+
@logger = Logger.new(STDOUT)
|
160
|
+
@logger.level = @options[:log_level]
|
161
|
+
@logger.formatter = proc do |severity, datetime, progname, msg|
|
162
|
+
if @options[:error_colors] && (severity == "FATAL" || severity == "ERROR")
|
163
|
+
color = @colors.red
|
164
|
+
else
|
165
|
+
color = nil
|
166
|
+
end
|
167
|
+
result = ""
|
168
|
+
msg.split("\n", -1).map do |line|
|
169
|
+
result << "#{color}#{@options[:log_prefix]}#{line}#{@colors.reset}\n"
|
170
|
+
end
|
171
|
+
result
|
172
|
+
end
|
173
|
+
end
|
161
174
|
|
162
|
-
|
163
|
-
|
175
|
+
def sanity_check
|
176
|
+
return if @options[:force]
|
164
177
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
178
|
+
if PhusionPassenger.find_support_binary("nginx-#{PREFERRED_NGINX_VERSION}")
|
179
|
+
@logger.warn "#{@colors.green}The Nginx engine (version #{PREFERRED_NGINX_VERSION}) is already installed."
|
180
|
+
if @options[:force_tip]
|
181
|
+
@logger.warn "If you want to redownload it, re-run this program with the --force parameter."
|
182
|
+
end
|
183
|
+
exit
|
184
|
+
end
|
172
185
|
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
186
|
+
if !PhusionPassenger.installed_from_release_package?
|
187
|
+
@logger.fatal("#{PROGRAM_NAME} was not installed from an official release " +
|
188
|
+
"package, so you cannot download our precompiled Nginx engine." +
|
189
|
+
compile_tip_message)
|
190
|
+
if @options[:force_tip]
|
191
|
+
@logger.warn "If you want to download it anyway, re-run this program with the --force parameter."
|
192
|
+
end
|
193
|
+
abort
|
194
|
+
end
|
182
195
|
|
183
|
-
|
184
|
-
|
196
|
+
check_for_download_tool!
|
197
|
+
end
|
185
198
|
|
186
|
-
|
187
|
-
|
188
|
-
|
199
|
+
def download_and_extract
|
200
|
+
destdir = find_or_create_writable_support_binaries_dir!
|
201
|
+
exit if @options[:dry_run]
|
189
202
|
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
203
|
+
PhusionPassenger::Utils.mktmpdir("passenger-install.", PlatformInfo.tmpexedir) do |tmpdir|
|
204
|
+
basename = "nginx-#{PREFERRED_NGINX_VERSION}-#{PlatformInfo.cxx_binary_compatibility_id}.tar.gz"
|
205
|
+
tarball = "#{tmpdir}/#{basename}"
|
206
|
+
if !download_support_file(basename, tarball)
|
207
|
+
@logger.error "#{@colors.reset}------------------------------------------"
|
208
|
+
@logger.fatal("Sorry, no precompiled Nginx #{PREFERRED_NGINX_VERSION} engine is available for " +
|
209
|
+
"your platform." + compile_tip_message)
|
210
|
+
abort
|
211
|
+
end
|
199
212
|
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
213
|
+
@logger.info "Extracting precompiled Nginx #{PREFERRED_NGINX_VERSION} engine to #{destdir}"
|
214
|
+
e_tmpdir = Shellwords.escape(tmpdir)
|
215
|
+
e_tarball = Shellwords.escape(tarball)
|
216
|
+
if !system("cd #{e_tmpdir} && tar xzf #{e_tarball}")
|
217
|
+
@logger.fatal "The downloaded archive file could not be extracted."
|
218
|
+
abort
|
219
|
+
end
|
220
|
+
if !File.exist?("#{tmpdir}/nginx-#{PREFERRED_NGINX_VERSION}")
|
221
|
+
@logger.fatal "The downloaded archive file does not seem to " +
|
222
|
+
"contain an Nginx #{PREFERRED_NGINX_VERSION} engine. This is probably " +
|
223
|
+
"a problem in the #{PROGRAM_NAME} website. Please report this problem to " +
|
224
|
+
"the #{PROGRAM_NAME} authors."
|
225
|
+
abort
|
226
|
+
end
|
214
227
|
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
228
|
+
@logger.info "Checking whether the downloaded engine is usable..."
|
229
|
+
if test_binary("#{tmpdir}/nginx-#{PREFERRED_NGINX_VERSION}")
|
230
|
+
@logger.info "The downloaded engine is usable."
|
231
|
+
else
|
232
|
+
if !@options[:suppress_binary_unusable_message]
|
233
|
+
@logger.fatal "Sorry, the precompiled Nginx engine can not be run " +
|
234
|
+
"your system.#{compile_tip_message}"
|
235
|
+
end
|
236
|
+
exit(BINARY_NOT_USABLE_EXIT_CODE)
|
237
|
+
end
|
225
238
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
239
|
+
FileUtils.mv("#{tmpdir}/nginx-#{PREFERRED_NGINX_VERSION}",
|
240
|
+
"#{destdir}/nginx-#{PREFERRED_NGINX_VERSION}")
|
241
|
+
@logger.info "#{@colors.green}Nginx #{PREFERRED_NGINX_VERSION} engine successfully download and installed."
|
242
|
+
end
|
243
|
+
end
|
231
244
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
245
|
+
def download_support_file(name, output)
|
246
|
+
@sites.each_with_index do |site, i|
|
247
|
+
if real_download_support_file(site, name, output)
|
248
|
+
if i > 0
|
249
|
+
@logger.warn "#{@colors.green}Download OK!"
|
250
|
+
else
|
251
|
+
@logger.info "#{@colors.green}Download OK!"
|
252
|
+
end
|
253
|
+
return true
|
254
|
+
elsif i != @sites.size - 1
|
255
|
+
@logger.warn "Trying next mirror..."
|
256
|
+
end
|
257
|
+
end
|
258
|
+
return false
|
259
|
+
end
|
247
260
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
261
|
+
def real_download_support_file(site, name, output)
|
262
|
+
url = "#{site[:url]}/#{VERSION_STRING}/#{name}"
|
263
|
+
options = {
|
264
|
+
:cacert => site[:cacert],
|
265
|
+
:logger => @logger,
|
266
|
+
:use_cache => @options[:use_cache],
|
267
|
+
:show_progress => @options[:show_download_progress]
|
268
|
+
}
|
269
|
+
# connect_timeout and idle_timeout may be nil or 0, which means
|
270
|
+
# that the default Utils::Download timeouts should be used.
|
271
|
+
if @options[:connect_timeout] && @options[:connect_timeout] != 0
|
272
|
+
options[:connect_timeout] = @options[:connect_timeout]
|
273
|
+
end
|
274
|
+
if @options[:idle_timeout] && @options[:idle_timeout] != 0
|
275
|
+
options[:idle_timeout] = @options[:idle_timeout]
|
276
|
+
end
|
277
|
+
return PhusionPassenger::Utils::Download.download(url, output, options)
|
278
|
+
end
|
258
279
|
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
280
|
+
def test_binary(filename)
|
281
|
+
output = `env LD_BIND_NOW=1 DYLD_BIND_AT_LAUNCH=1 #{Shellwords.escape(filename)} -v 2>&1`
|
282
|
+
return $? && $?.exitstatus == 0 && output =~ /nginx version:/
|
283
|
+
end
|
263
284
|
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
end
|
285
|
+
def compile_tip_message
|
286
|
+
return "" if !@options[:compilation_tip]
|
287
|
+
if PhusionPassenger.build_system_dir
|
288
|
+
result = " Please compile the Nginx engine from source instead, by running:\n\n"
|
289
|
+
result << " passenger-config compile-nginx-engine"
|
290
|
+
else
|
291
|
+
result = " Furthermore, this #{PROGRAM_NAME} installation does not "
|
292
|
+
result << "come with any source code, so the Nginx engine cannot "
|
293
|
+
result << "be compiled either. Please contact the person or "
|
294
|
+
result << "organization who packaged #{PROGRAM_NAME} for help on this "
|
295
|
+
result << "problem."
|
296
|
+
end
|
297
|
+
return result
|
298
|
+
end
|
299
|
+
end
|
279
300
|
|
280
|
-
end # module Config
|
301
|
+
end # module Config
|
281
302
|
end # module PhusionPassenger
|