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
|
#
|
@@ -30,145 +30,157 @@ PhusionPassenger.require_passenger_lib 'config/compile_agent_command'
|
|
30
30
|
PhusionPassenger.require_passenger_lib 'utils/ansi_colors'
|
31
31
|
|
32
32
|
module PhusionPassenger
|
33
|
-
module Config
|
33
|
+
module Config
|
34
34
|
|
35
|
-
class InstallAgentCommand < Command
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
35
|
+
class InstallAgentCommand < Command
|
36
|
+
def run
|
37
|
+
@options = {
|
38
|
+
:log_level => Logger::INFO,
|
39
|
+
:colorize => :auto,
|
40
|
+
:force => false,
|
41
|
+
:force_tip => true,
|
42
|
+
:compile => true,
|
43
|
+
:download_args => [
|
44
|
+
"--no-error-colors",
|
45
|
+
"--no-compilation-tip"
|
46
|
+
],
|
47
|
+
:compile_args => []
|
48
|
+
}
|
49
|
+
parse_options
|
50
|
+
initialize_objects
|
51
|
+
sanity_check
|
52
|
+
if !download
|
53
|
+
compile
|
54
|
+
end
|
55
|
+
end
|
56
56
|
|
57
|
-
private
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
57
|
+
private
|
58
|
+
def self.create_option_parser(options)
|
59
|
+
OptionParser.new do |opts|
|
60
|
+
nl = "\n" + ' ' * 37
|
61
|
+
opts.banner = "Usage: passenger-config install-agent [OPTIONS]\n"
|
62
|
+
opts.separator ""
|
63
|
+
opts.separator " Install the #{PROGRAM_NAME} agent binary. The agent binary is required for"
|
64
|
+
opts.separator " #{PROGRAM_NAME} to function properly. Installation is done either by"
|
65
|
+
opts.separator " downloading it from the #{PROGRAM_NAME} website, or by compiling it from"
|
66
|
+
opts.separator " source."
|
67
|
+
opts.separator ""
|
68
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
|
-
|
69
|
+
opts.separator "Options:"
|
70
|
+
opts.on("--working-dir PATH", String, "Store temporary files in the given#{nl}" +
|
71
|
+
"directory, instead of creating one") do |val|
|
72
|
+
options[:compile_args] << "--working-dir"
|
73
|
+
options[:compile_args] << val
|
74
|
+
end
|
75
|
+
opts.on("--url-root URL", String, "Download the binary from a custom URL") do |value|
|
76
|
+
options[:download_args] << "--url-root"
|
77
|
+
options[:download_args] << value
|
78
|
+
end
|
79
|
+
opts.on("--brief", "Report progress in a brief style") do
|
80
|
+
options[:brief] = true
|
81
|
+
options[:download_args] << "--log-level"
|
82
|
+
options[:download_args] << "warn"
|
83
|
+
options[:download_args] << "--log-prefix"
|
84
|
+
options[:download_args] << " "
|
85
|
+
options[:download_args] << "--no-download-progress"
|
86
|
+
end
|
87
|
+
opts.on("-f", "--force", "Skip sanity checks") do
|
88
|
+
options[:force] = true
|
89
|
+
options[:download_args] << "--force"
|
90
|
+
options[:compile_args] << "--force"
|
91
|
+
end
|
92
|
+
opts.on("--no-force-tip", "Do not print any tips regarding the#{nl}" +
|
93
|
+
"--force parameter") do
|
94
|
+
options[:force_tip] = false
|
95
|
+
options[:download_args] << "--no-force-tip"
|
96
|
+
options[:compile_args] << "--no-force-tip"
|
97
|
+
end
|
98
|
+
opts.on("--no-compile", "Download, but do not compile") do
|
99
|
+
options[:compile] = false
|
100
|
+
end
|
101
|
+
opts.on("--skip-cache", "Do not copy the agent binary from cache") do
|
102
|
+
options[:download_args] << "--skip-cache"
|
103
|
+
end
|
104
|
+
opts.on("--connect-timeout SECONDS", Integer,
|
105
|
+
"The maximum amount of time to spend on DNS#{nl}" +
|
106
|
+
"lookup and establishing the TCP connection.#{nl}" +
|
107
|
+
"Default: 30") do |val|
|
108
|
+
options[:download_args] << "--connect-timeout"
|
109
|
+
options[:download_args] << val.to_s
|
110
|
+
end
|
111
|
+
opts.on("--idle-timeout SECONDS", Integer, "The maximum idle read time. Default: 30") do |val|
|
112
|
+
options[:download_args] << "--idle-timeout"
|
113
|
+
options[:download_args] << val.to_s
|
114
|
+
end
|
115
|
+
opts.on("-h", "--help", "Show this help") do
|
116
|
+
options[:help] = true
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
108
120
|
|
109
|
-
|
110
|
-
|
111
|
-
|
121
|
+
def help
|
122
|
+
puts @parser
|
123
|
+
end
|
112
124
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
125
|
+
def initialize_objects
|
126
|
+
@colors = Utils::AnsiColors.new(@options[:colorize])
|
127
|
+
@logger = Logger.new(STDOUT)
|
128
|
+
@logger.level = @options[:log_level]
|
129
|
+
@logger.formatter = proc do |severity, datetime, progname, msg|
|
130
|
+
if severity == "FATAL" || severity == "ERROR"
|
131
|
+
color = @colors.red
|
132
|
+
else
|
133
|
+
color = nil
|
134
|
+
end
|
135
|
+
result = ""
|
136
|
+
msg.split("\n", -1).map do |line|
|
137
|
+
result << "#{color}#{@options[:log_prefix]}#{line}#{@colors.reset}\n"
|
138
|
+
end
|
139
|
+
result
|
140
|
+
end
|
141
|
+
end
|
130
142
|
|
131
|
-
|
132
|
-
|
143
|
+
def sanity_check
|
144
|
+
return if @options[:force]
|
133
145
|
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
146
|
+
if PhusionPassenger.find_support_binary(AGENT_EXE)
|
147
|
+
@logger.warn "#{@colors.green}The #{PROGRAM_NAME} agent is already installed."
|
148
|
+
if @options[:force_tip]
|
149
|
+
@logger.warn "If you want to redownload it, re-run this program with the --force parameter."
|
150
|
+
end
|
151
|
+
exit
|
152
|
+
end
|
153
|
+
end
|
142
154
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
155
|
+
def download
|
156
|
+
if @options[:brief]
|
157
|
+
puts " --> Downloading a #{PROGRAM_NAME} agent binary for your platform"
|
158
|
+
else
|
159
|
+
puts "#{@colors.blue_bg}#{@colors.yellow}#{@colors.bold}Downloading a #{PROGRAM_NAME} agent " +
|
160
|
+
"binary for your platform#{@colors.reset}"
|
161
|
+
puts
|
162
|
+
end
|
163
|
+
begin
|
164
|
+
DownloadAgentCommand.new(@options[:download_args]).run
|
165
|
+
return true
|
166
|
+
rescue SystemExit => e
|
167
|
+
return e.success?
|
168
|
+
end
|
169
|
+
end
|
158
170
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
end
|
171
|
+
def compile
|
172
|
+
puts
|
173
|
+
puts "---------------------------------------"
|
174
|
+
puts
|
175
|
+
if @options[:compile]
|
176
|
+
puts "The #{PROGRAM_NAME} agent binary could not be downloaded. Compiling it from source instead."
|
177
|
+
puts
|
178
|
+
CompileAgentCommand.new(@options[:compile_args]).run
|
179
|
+
else
|
180
|
+
abort "No precompiled agent binary could be downloaded. Refusing to compile because --no-compile is given."
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
172
184
|
|
173
|
-
end # module Config
|
185
|
+
end # module Config
|
174
186
|
end # module PhusionPassenger
|
@@ -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
|
#
|
@@ -33,199 +33,219 @@ PhusionPassenger.require_passenger_lib 'utils/ansi_colors'
|
|
33
33
|
PhusionPassenger.require_passenger_lib 'utils/tmpio'
|
34
34
|
|
35
35
|
module PhusionPassenger
|
36
|
-
module Config
|
36
|
+
module Config
|
37
37
|
|
38
|
-
class InstallStandaloneRuntimeCommand < Command
|
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
|
-
|
38
|
+
class InstallStandaloneRuntimeCommand < Command
|
39
|
+
def run
|
40
|
+
@options = {
|
41
|
+
:log_level => Logger::INFO,
|
42
|
+
:colorize => :auto,
|
43
|
+
:force => false,
|
44
|
+
:force_tip => true,
|
45
|
+
:compile => true,
|
46
|
+
:install_agent => true,
|
47
|
+
:install_agent_args => [],
|
48
|
+
:download_args => [
|
49
|
+
"--no-error-colors",
|
50
|
+
"--no-compilation-tip"
|
51
|
+
],
|
52
|
+
:compile_args => []
|
53
|
+
}
|
54
|
+
parse_options
|
55
|
+
initialize_objects
|
56
|
+
sanity_check
|
57
|
+
PhusionPassenger::Utils.mktmpdir("passenger-install.", PlatformInfo.tmpexedir) do |tmpdir|
|
58
|
+
install_agent(tmpdir)
|
59
|
+
if !download_nginx_engine
|
60
|
+
compile_nginx_engine(tmpdir)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
64
|
|
65
|
-
private
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
65
|
+
private
|
66
|
+
def self.create_option_parser(options)
|
67
|
+
OptionParser.new do |opts|
|
68
|
+
nl = "\n" + ' ' * 37
|
69
|
+
opts.banner = "Usage: passenger-config install-standalone-runtime [OPTIONS]\n"
|
70
|
+
opts.separator ""
|
71
|
+
opts.separator " Install the #{PROGRAM_NAME} Standalone runtime. This runtime consists of"
|
72
|
+
opts.separator " the #{PROGRAM_NAME} agent, and an Nginx engine. Installation is done either"
|
73
|
+
opts.separator " by downloading the necessary files from the #{PROGRAM_NAME} website, or"
|
74
|
+
opts.separator " by compiling them from source."
|
75
|
+
opts.separator ""
|
76
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
|
-
|
77
|
+
opts.separator "Options:"
|
78
|
+
opts.on("--working-dir PATH", String, "Store temporary files in the given#{nl}" +
|
79
|
+
"directory, instead of creating one") do |val|
|
80
|
+
options[:install_agent_args] << "--working-dir"
|
81
|
+
options[:install_agent_args] << val
|
82
|
+
options[:compile_args] << "--working-dir"
|
83
|
+
options[:compile_args] << val
|
84
|
+
end
|
85
|
+
opts.on("--url-root URL", String, "Download binaries from a custom URL") do |value|
|
86
|
+
options[:install_agent_args] << "--url-root"
|
87
|
+
options[:install_agent_args] << value
|
88
|
+
options[:download_args] << "--url-root"
|
89
|
+
options[:download_args] << value
|
90
|
+
end
|
91
|
+
opts.on("--nginx-version VERSION", String, "Nginx version to compile. " +
|
92
|
+
"Default: #{PREFERRED_NGINX_VERSION}") do |val|
|
93
|
+
options[:nginx_version] = val
|
94
|
+
end
|
95
|
+
opts.on("--nginx-tarball PATH", String, "Use the given Nginx tarball instead of#{nl}" +
|
96
|
+
"downloading it. You MUST also specify the#{nl}" +
|
97
|
+
"Nginx version with --nginx-version") do |val|
|
98
|
+
options[:nginx_tarball] = val
|
99
|
+
end
|
100
|
+
opts.on("--brief", "Report progress in a brief style") do
|
101
|
+
options[:brief] = true
|
102
|
+
options[:install_agent_args] << "--brief"
|
103
|
+
options[:download_args] << "--log-level"
|
104
|
+
options[:download_args] << "warn"
|
105
|
+
options[:download_args] << "--log-prefix"
|
106
|
+
options[:download_args] << " "
|
107
|
+
options[:download_args] << "--no-download-progress"
|
108
|
+
end
|
109
|
+
opts.on("-f", "--force", "Skip sanity checks") do
|
110
|
+
options[:force] = true
|
111
|
+
options[:install_agent_args] << "--force"
|
112
|
+
options[:download_args] << "--force"
|
113
|
+
options[:compile_args] << "--force"
|
114
|
+
end
|
115
|
+
opts.on("--no-force-tip", "Do not print any tips regarding the#{nl}" +
|
116
|
+
"--force parameter") do
|
117
|
+
options[:force_tip] = false
|
118
|
+
options[:install_agent_args] << "--no-force-tip"
|
119
|
+
options[:download_args] << "--no-force-tip"
|
120
|
+
options[:compile_args] << "--no-force-tip"
|
121
|
+
end
|
122
|
+
opts.on("--no-compile", "Download, but do not compile") do
|
123
|
+
options[:compile] = false
|
124
|
+
options[:install_agent_args] << "--no-compile"
|
125
|
+
end
|
126
|
+
opts.on("--skip-agent", "Do not install the agent") do
|
127
|
+
options[:install_agent] = false
|
128
|
+
end
|
129
|
+
opts.on("--skip-cache", "Do not copy the binaries from cache") do
|
130
|
+
options[:install_agent_args] << "--skip-cache"
|
131
|
+
options[:download_args] << "--skip-cache"
|
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[:install_agent_args] << "--connect-timeout"
|
138
|
+
options[:install_agent_args] << val.to_s
|
139
|
+
options[:download_args] << "--connect-timeout"
|
140
|
+
options[:download_args] << val.to_s
|
141
|
+
options[:compile_args] << "--connect-timeout"
|
142
|
+
options[:compile_args] << val.to_s
|
143
|
+
end
|
144
|
+
opts.on("--idle-timeout SECONDS", Integer, "The maximum idle read time. Default: 30") do |val|
|
145
|
+
options[:install_agent_args] << "--idle-timeout"
|
146
|
+
options[:install_agent_args] << val.to_s
|
147
|
+
options[:download_args] << "--idle-timeout"
|
148
|
+
options[:download_args] << val.to_s
|
149
|
+
options[:compile_args] << "--idle-timeout"
|
150
|
+
options[:compile_args] << val.to_s
|
151
|
+
end
|
152
|
+
opts.on("-h", "--help", "Show this help") do
|
153
|
+
options[:help] = true
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
137
157
|
|
138
|
-
|
139
|
-
|
140
|
-
|
158
|
+
def help
|
159
|
+
puts @parser
|
160
|
+
end
|
141
161
|
|
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
|
-
|
162
|
+
def initialize_objects
|
163
|
+
@colors = Utils::AnsiColors.new(@options[:colorize])
|
164
|
+
@logger = Logger.new(STDOUT)
|
165
|
+
@logger.level = @options[:log_level]
|
166
|
+
@logger.formatter = proc do |severity, datetime, progname, msg|
|
167
|
+
if severity == "FATAL" || severity == "ERROR"
|
168
|
+
color = @colors.red
|
169
|
+
else
|
170
|
+
color = nil
|
171
|
+
end
|
172
|
+
result = ""
|
173
|
+
msg.split("\n", -1).map do |line|
|
174
|
+
result << "#{color}#{@options[:log_prefix]}#{line}#{@colors.reset}\n"
|
175
|
+
end
|
176
|
+
result
|
177
|
+
end
|
178
|
+
if !@options[:nginx_version]
|
179
|
+
if @options[:nginx_tarball]
|
180
|
+
abort "#{@colors.red}Error: if you specify --nginx-tarball, " +
|
181
|
+
"you must also specify --nginx-version.#{@colors.reset}"
|
182
|
+
else
|
183
|
+
@options[:nginx_version] = PREFERRED_NGINX_VERSION
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
167
187
|
|
168
|
-
|
169
|
-
|
188
|
+
def sanity_check
|
189
|
+
return if @options[:force]
|
170
190
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
191
|
+
all_installed = PhusionPassenger.find_support_binary(AGENT_EXE) &&
|
192
|
+
PhusionPassenger.find_support_binary("nginx-#{@options[:nginx_version]}")
|
193
|
+
if all_installed
|
194
|
+
@logger.warn "#{@colors.green}The #{PROGRAM_NAME} Standalone runtime is already installed."
|
195
|
+
if @options[:force_tip]
|
196
|
+
@logger.warn "If you want to redownload it, re-run this program with the --force parameter."
|
197
|
+
end
|
198
|
+
exit
|
199
|
+
end
|
200
|
+
end
|
181
201
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
202
|
+
def install_agent(tmpdir)
|
203
|
+
if @options[:install_agent]
|
204
|
+
args = @options[:install_agent_args].dup
|
205
|
+
args << "--working-dir"
|
206
|
+
args << tmpdir
|
207
|
+
begin
|
208
|
+
InstallAgentCommand.new(args).run
|
209
|
+
rescue SystemExit => e
|
210
|
+
raise e if !e.success?
|
211
|
+
end
|
212
|
+
puts
|
213
|
+
end
|
214
|
+
end
|
195
215
|
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
216
|
+
def download_nginx_engine
|
217
|
+
if @options[:brief]
|
218
|
+
puts " --> Installing Nginx #{@options[:nginx_version]} engine"
|
219
|
+
else
|
220
|
+
puts "#{@colors.blue_bg}#{@colors.yellow}#{@colors.bold}" +
|
221
|
+
"Downloading an Nginx #{@options[:nginx_version]} engine " +
|
222
|
+
"for your platform#{@colors.reset}"
|
223
|
+
puts
|
224
|
+
end
|
225
|
+
begin
|
226
|
+
DownloadNginxEngineCommand.new(@options[:download_args]).run
|
227
|
+
true
|
228
|
+
rescue SystemExit => e
|
229
|
+
e.success?
|
230
|
+
end
|
231
|
+
end
|
212
232
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
end
|
233
|
+
def compile_nginx_engine(tmpdir)
|
234
|
+
puts
|
235
|
+
puts "---------------------------------------"
|
236
|
+
puts
|
237
|
+
if @options[:compile]
|
238
|
+
puts "No precompiled Nginx engine could be downloaded. Compiling it from source instead."
|
239
|
+
puts
|
240
|
+
args = @options[:compile_args].dup
|
241
|
+
args << "--working-dir"
|
242
|
+
args << tmpdir
|
243
|
+
CompileNginxEngineCommand.new(args).run
|
244
|
+
else
|
245
|
+
abort "No precompiled Nginx engine could be downloaded. Refusing to compile because --no-compile is given."
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
229
249
|
|
230
|
-
end # module Config
|
250
|
+
end # module Config
|
231
251
|
end # module PhusionPassenger
|