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
@@ -25,157 +25,157 @@ PhusionPassenger.require_passenger_lib 'constants'
|
|
25
25
|
|
26
26
|
module PhusionPassenger
|
27
27
|
|
28
|
-
# Core of the `passenger-config` command. Dispatches a subcommand to a specific class.
|
29
|
-
module Config
|
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
|
-
private
|
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
|
-
end
|
28
|
+
# Core of the `passenger-config` command. Dispatches a subcommand to a specific class.
|
29
|
+
module Config
|
30
|
+
KNOWN_COMMANDS = [
|
31
|
+
["detach-process", "DetachProcessCommand"],
|
32
|
+
["restart-app", "RestartAppCommand"],
|
33
|
+
["list-instances", "ListInstancesCommand"],
|
34
|
+
["reopen-logs", "ReopenLogsCommand"],
|
35
|
+
["admin-command", "AdminCommandCommand"],
|
36
|
+
["validate-install", "ValidateInstallCommand"],
|
37
|
+
["build-native-support", "BuildNativeSupportCommand"],
|
38
|
+
|
39
|
+
["install-agent", "InstallAgentCommand"],
|
40
|
+
["install-standalone-runtime", "InstallStandaloneRuntimeCommand"],
|
41
|
+
["download-agent", "DownloadAgentCommand"],
|
42
|
+
["download-nginx-engine", "DownloadNginxEngineCommand"],
|
43
|
+
["compile-agent", "CompileAgentCommand"],
|
44
|
+
["compile-nginx-engine", "CompileNginxEngineCommand"],
|
45
|
+
|
46
|
+
["system-metrics", "SystemMetricsCommand"],
|
47
|
+
["about", "AboutCommand"]
|
48
|
+
]
|
49
|
+
|
50
|
+
ABOUT_OPTIONS = [
|
51
|
+
"root",
|
52
|
+
"includedir",
|
53
|
+
"nginx-addon-dir",
|
54
|
+
"nginx-libs",
|
55
|
+
"compiled",
|
56
|
+
"custom-packaged",
|
57
|
+
"installed-from-release-package",
|
58
|
+
"make-locations-ini",
|
59
|
+
"detect-apache2",
|
60
|
+
"ruby-command",
|
61
|
+
"ruby-libdir",
|
62
|
+
"rubyext-compat-id",
|
63
|
+
"cxx-compat-id",
|
64
|
+
"version"
|
65
|
+
]
|
66
|
+
|
67
|
+
def self.run!(argv)
|
68
|
+
command_class, new_argv = lookup_command_class_by_argv(argv)
|
69
|
+
if help_requested?(argv)
|
70
|
+
help
|
71
|
+
elsif help_all_requested?(argv)
|
72
|
+
help(true)
|
73
|
+
elsif command_class
|
74
|
+
command = command_class.new(new_argv)
|
75
|
+
command.run
|
76
|
+
else
|
77
|
+
help
|
78
|
+
abort
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.help(all = false)
|
83
|
+
puts "Usage: passenger-config <COMMAND> [OPTIONS...]"
|
84
|
+
puts
|
85
|
+
puts " Tool for managing, controlling and configuring a #{PROGRAM_NAME} instance"
|
86
|
+
puts " or installation."
|
87
|
+
puts
|
88
|
+
puts "Management commands:"
|
89
|
+
puts " detach-process Detach an application process from the process pool"
|
90
|
+
puts " restart-app Restart an application"
|
91
|
+
puts " reopen-logs Instruct #{PROGRAM_NAME} agents to reopen their log"
|
92
|
+
puts " files"
|
93
|
+
if all
|
94
|
+
puts " admin-command Invoke an internal #{PROGRAM_NAME} admin command."
|
95
|
+
end
|
96
|
+
puts
|
97
|
+
puts "Informational commands:"
|
98
|
+
puts " list-instances List running #{PROGRAM_NAME} instances"
|
99
|
+
puts " about Show information about #{PROGRAM_NAME}"
|
100
|
+
puts
|
101
|
+
puts "#{PROGRAM_NAME} installation management:"
|
102
|
+
puts " validate-install Validate this #{PROGRAM_NAME} installation"
|
103
|
+
puts " build-native-support Ensure that the native_support library for the current"
|
104
|
+
puts " Ruby interpreter is built"
|
105
|
+
puts " install-agent Install the #{PROGRAM_NAME} agent binary"
|
106
|
+
puts " install-standalone-runtime"
|
107
|
+
puts " Install the #{PROGRAM_NAME} Standalone"
|
108
|
+
puts " runtime"
|
109
|
+
if all
|
110
|
+
puts " download-agent Download the #{PROGRAM_NAME} agent binary"
|
111
|
+
puts " download-nginx-engine Download the Nginx engine for use with"
|
112
|
+
puts " #{PROGRAM_NAME} Standalone"
|
113
|
+
puts " compile-agent Compile the #{PROGRAM_NAME} agent binary"
|
114
|
+
puts " compile-nginx-engine Compile an Nginx engine for use with #{PROGRAM_NAME}"
|
115
|
+
puts " Standalone"
|
116
|
+
end
|
117
|
+
puts
|
118
|
+
puts "Miscellaneous commands:"
|
119
|
+
puts " system-metrics Display system metrics"
|
120
|
+
puts
|
121
|
+
puts "Run 'passenger-config <COMMAND> --help' for more information about each"
|
122
|
+
puts "command."
|
123
|
+
if !all
|
124
|
+
puts
|
125
|
+
puts "There are also some advanced commands not shown in this help message. Run"
|
126
|
+
puts "'passenger-config --help-all' to learn more about them."
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
private
|
131
|
+
def self.help_requested?(argv)
|
132
|
+
return argv.size == 1 && (argv[0] == "--help" || argv[0] == "-h" || argv[0] == "help")
|
133
|
+
end
|
134
|
+
|
135
|
+
def self.help_all_requested?(argv)
|
136
|
+
return argv.size == 1 && (argv[0] == "--help-all" || argv[0] == "help-all")
|
137
|
+
end
|
138
|
+
|
139
|
+
def self.lookup_command_class_by_argv(argv)
|
140
|
+
return nil if argv.empty?
|
141
|
+
|
142
|
+
# Compatibility with version <= 4.0.29: try to pass all
|
143
|
+
# --switch invocations to AboutCommand.
|
144
|
+
if argv[0] =~ /^--/
|
145
|
+
name = argv[0].sub(/^--/, '')
|
146
|
+
if ABOUT_OPTIONS.include?(name)
|
147
|
+
command_class = lookup_command_class_by_class_name("AboutCommand")
|
148
|
+
return [command_class, argv]
|
149
|
+
else
|
150
|
+
return nil
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
# Convert "passenger-config help <COMMAND>" to "passenger-config <COMMAND> --help".
|
155
|
+
if argv.size == 2 && argv[0] == "help"
|
156
|
+
argv = [argv[1], "--help"]
|
157
|
+
end
|
158
|
+
|
159
|
+
KNOWN_COMMANDS.each do |props|
|
160
|
+
if argv[0] == props[0]
|
161
|
+
command_class = lookup_command_class_by_class_name(props[1])
|
162
|
+
new_argv = argv[1 .. -1]
|
163
|
+
return [command_class, new_argv]
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
return nil
|
168
|
+
end
|
169
|
+
|
170
|
+
def self.lookup_command_class_by_class_name(class_name)
|
171
|
+
base_name = class_name.gsub(/[A-Z]/) do |match|
|
172
|
+
"_" + match[0..0].downcase
|
173
|
+
end
|
174
|
+
base_name.sub!(/^_/, '')
|
175
|
+
base_name << ".rb"
|
176
|
+
PhusionPassenger.require_passenger_lib("config/#{base_name}")
|
177
|
+
return PhusionPassenger::Config.const_get(class_name)
|
178
|
+
end
|
179
|
+
end
|
180
180
|
|
181
181
|
end # module PhusionPassenger
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
#
|
3
3
|
# Phusion Passenger - https://www.phusionpassenger.com/
|
4
|
-
# Copyright (c) 2010-
|
4
|
+
# Copyright (c) 2010-2015 Phusion
|
5
5
|
#
|
6
6
|
# "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
7
7
|
#
|
@@ -29,309 +29,328 @@ PhusionPassenger.require_passenger_lib 'abstract_installer'
|
|
29
29
|
PhusionPassenger.require_passenger_lib 'common_library'
|
30
30
|
PhusionPassenger.require_passenger_lib 'config/installation_utils'
|
31
31
|
PhusionPassenger.require_passenger_lib 'platform_info'
|
32
|
+
PhusionPassenger.require_passenger_lib 'platform_info/ruby'
|
32
33
|
PhusionPassenger.require_passenger_lib 'platform_info/compiler'
|
33
34
|
PhusionPassenger.require_passenger_lib 'utils/shellwords'
|
34
35
|
PhusionPassenger.require_passenger_lib 'utils/progress_bar'
|
35
36
|
PhusionPassenger.require_passenger_lib 'utils/tmpio'
|
36
37
|
|
37
38
|
module PhusionPassenger
|
38
|
-
module Config
|
39
|
-
|
40
|
-
class NginxEngineCompiler < AbstractInstaller
|
41
|
-
|
42
|
-
|
43
|
-
protected
|
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
|
-
private
|
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
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
end
|
335
|
-
|
336
|
-
|
39
|
+
module Config
|
40
|
+
|
41
|
+
class NginxEngineCompiler < AbstractInstaller
|
42
|
+
include InstallationUtils
|
43
|
+
|
44
|
+
protected
|
45
|
+
def dependencies
|
46
|
+
specs = [
|
47
|
+
'depcheck_specs/compiler_toolchain',
|
48
|
+
'depcheck_specs/ruby',
|
49
|
+
'depcheck_specs/libs',
|
50
|
+
'depcheck_specs/utilities'
|
51
|
+
]
|
52
|
+
ids = [
|
53
|
+
'cc',
|
54
|
+
'c++',
|
55
|
+
'gmake',
|
56
|
+
'rake',
|
57
|
+
'openssl-dev',
|
58
|
+
'zlib-dev',
|
59
|
+
'pcre-dev'
|
60
|
+
].compact
|
61
|
+
return [specs, ids]
|
62
|
+
end
|
63
|
+
|
64
|
+
def users_guide_path
|
65
|
+
return PhusionPassenger.standalone_doc_path
|
66
|
+
end
|
67
|
+
|
68
|
+
def users_guide_url
|
69
|
+
return STANDALONE_DOC_URL
|
70
|
+
end
|
71
|
+
|
72
|
+
def run_steps
|
73
|
+
check_source_code_available!
|
74
|
+
check_precompiled_support_libs_available!
|
75
|
+
if !@force
|
76
|
+
check_whether_os_is_broken
|
77
|
+
check_whether_system_has_enough_ram
|
78
|
+
check_for_download_tool!
|
79
|
+
end
|
80
|
+
check_dependencies(false) || abort
|
81
|
+
puts
|
82
|
+
|
83
|
+
@destdir = find_or_create_writable_support_binaries_dir!
|
84
|
+
puts "<banner>Installing...</banner>"
|
85
|
+
download_and_extract_nginx_sources
|
86
|
+
determine_support_libraries
|
87
|
+
compile_support_libraries
|
88
|
+
configure_and_compile_nginx
|
89
|
+
end
|
90
|
+
|
91
|
+
def before_install
|
92
|
+
super
|
93
|
+
if !@working_dir
|
94
|
+
@working_dir = PhusionPassenger::Utils.mktmpdir("passenger-install.", PlatformInfo.tmpexedir)
|
95
|
+
@owns_working_dir = true
|
96
|
+
end
|
97
|
+
@nginx_version ||= PREFERRED_NGINX_VERSION
|
98
|
+
end
|
99
|
+
|
100
|
+
def after_install
|
101
|
+
super
|
102
|
+
FileUtils.remove_entry_secure(@working_dir) if @owns_working_dir
|
103
|
+
end
|
104
|
+
|
105
|
+
private
|
106
|
+
def check_source_code_available!
|
107
|
+
return if File.exist?(PhusionPassenger.nginx_module_source_dir)
|
108
|
+
|
109
|
+
if PhusionPassenger.originally_packaged?
|
110
|
+
puts "<red>Broken #{PROGRAM_NAME} installation detected</red>"
|
111
|
+
puts
|
112
|
+
puts "This program requires the #{PROGRAM_NAME} Nginx module sources " +
|
113
|
+
"before it can compile an Nginx engine. However, the #{PROGRAM_NAME} " +
|
114
|
+
"Nginx module sources are not installed, even though they should have been. " +
|
115
|
+
"This probably means that your #{PROGRAM_NAME} installation has somehow " +
|
116
|
+
"become corrupted. Please re-install #{PROGRAM_NAME}."
|
117
|
+
abort
|
118
|
+
else
|
119
|
+
case PhusionPassenger.packaging_method
|
120
|
+
when "deb"
|
121
|
+
command = "sudo sh -c 'apt-get update && apt-get install #{DEB_DEV_PACKAGE}'"
|
122
|
+
when "rpm"
|
123
|
+
command = "sudo yum install #{RPM_DEV_PACKAGE}-#{VERSION_STRING}"
|
124
|
+
end
|
125
|
+
|
126
|
+
if command
|
127
|
+
if STDIN.tty?
|
128
|
+
puts " --> Installing #{PROGRAM_NAME} Nginx module sources"
|
129
|
+
puts " Running: #{command}"
|
130
|
+
if !system(command)
|
131
|
+
puts " <red>*** Command failed: #{command}</red>"
|
132
|
+
abort
|
133
|
+
end
|
134
|
+
else
|
135
|
+
puts " --> #{PROGRAM_NAME} Nginx module sources not installed"
|
136
|
+
puts " Please install them first: #{command}"
|
137
|
+
abort
|
138
|
+
end
|
139
|
+
else
|
140
|
+
puts " --> #{PROGRAM_NAME} Nginx module sources not installed"
|
141
|
+
puts " <red>Please ask your #{PROGRAM_NAME} packager or operating " +
|
142
|
+
"system vendor how to install these.</red>"
|
143
|
+
abort
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def check_precompiled_support_libs_available!
|
149
|
+
return if PhusionPassenger.build_system_dir ||
|
150
|
+
File.exist?("#{PhusionPassenger.lib_dir}/common/libboost_oxt.a")
|
151
|
+
|
152
|
+
if PhusionPassenger.originally_packaged?
|
153
|
+
puts "<red>Broken #{PROGRAM_NAME} installation detected</red>"
|
154
|
+
puts
|
155
|
+
puts "This program requires the #{PROGRAM_NAME} support libraries " +
|
156
|
+
"before it can compile an Nginx engine. However, the #{PROGRAM_NAME} " +
|
157
|
+
"support libraries are not installed, even though they should have been. " +
|
158
|
+
"This probably means that your #{PROGRAM_NAME} installation has somehow " +
|
159
|
+
"become corrupted. Please re-install #{PROGRAM_NAME}."
|
160
|
+
abort
|
161
|
+
else
|
162
|
+
case PhusionPassenger.packaging_method
|
163
|
+
when "deb"
|
164
|
+
command = "sudo sh -c 'apt-get update && apt-get install #{DEB_DEV_PACKAGE}'"
|
165
|
+
when "rpm"
|
166
|
+
command = "sudo yum install #{RPM_DEV_PACKAGE}-#{VERSION_STRING}"
|
167
|
+
end
|
168
|
+
|
169
|
+
if command
|
170
|
+
if STDIN.tty?
|
171
|
+
puts " --> Installing #{PROGRAM_NAME} support libraries"
|
172
|
+
puts " Running: #{command}"
|
173
|
+
if !system(command)
|
174
|
+
puts " <red>*** Command failed: #{command}</red>"
|
175
|
+
abort
|
176
|
+
end
|
177
|
+
else
|
178
|
+
puts " --> #{PROGRAM_NAME} support libraries not installed"
|
179
|
+
puts " Please install them first: #{command}"
|
180
|
+
abort
|
181
|
+
end
|
182
|
+
else
|
183
|
+
puts " --> #{PROGRAM_NAME} support libraries not installed"
|
184
|
+
puts " <red>Please ask your #{PROGRAM_NAME} packager or operating " +
|
185
|
+
"system vendor how to install these.</red>"
|
186
|
+
abort
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
def download_and_extract_nginx_sources
|
192
|
+
if @nginx_tarball
|
193
|
+
tarball = @nginx_tarball
|
194
|
+
else
|
195
|
+
puts "Downloading Nginx #{@nginx_version} source code..."
|
196
|
+
basename = "nginx-#{@nginx_version}.tar.gz"
|
197
|
+
tarball = "#{@working_dir}/#{basename}"
|
198
|
+
|
199
|
+
options = {
|
200
|
+
:show_progress => @stdout.tty?
|
201
|
+
}
|
202
|
+
if @connect_timeout && @connect_timeout != 0
|
203
|
+
options[:connect_timeout] = @connect_timeout
|
204
|
+
end
|
205
|
+
if @idle_timeout && @idle_timeout != 0
|
206
|
+
options[:idle_timeout] = @idle_timeout
|
207
|
+
end
|
208
|
+
|
209
|
+
result = download("http://nginx.org/download/#{basename}",
|
210
|
+
tarball, options)
|
211
|
+
|
212
|
+
if !result
|
213
|
+
puts
|
214
|
+
show_possible_solutions_for_download_and_extraction_problems
|
215
|
+
abort
|
216
|
+
end
|
217
|
+
end
|
218
|
+
nginx_sources_name = "nginx-#{@nginx_version}"
|
219
|
+
|
220
|
+
puts "Extracting tarball..."
|
221
|
+
e_working_dir = Shellwords.escape(@working_dir)
|
222
|
+
e_tarball = Shellwords.escape(tarball)
|
223
|
+
system("cd #{e_working_dir} && tar xzf #{e_tarball}")
|
224
|
+
end
|
225
|
+
|
226
|
+
def show_possible_solutions_for_download_and_extraction_problems
|
227
|
+
new_screen
|
228
|
+
render_template "nginx_engine_compiler/possible_solutions_for_download_and_extraction_problems"
|
229
|
+
puts
|
230
|
+
end
|
231
|
+
|
232
|
+
def determine_support_libraries
|
233
|
+
lib_dir = "#{@working_dir}/common/libpassenger_common"
|
234
|
+
@support_libs = COMMON_LIBRARY.only(*NGINX_LIBS_SELECTOR).
|
235
|
+
set_output_dir(lib_dir).
|
236
|
+
link_objects
|
237
|
+
@support_libs << "#{@working_dir}/common/libboost_oxt.a"
|
238
|
+
@support_libs_string = @support_libs.join(" ")
|
239
|
+
end
|
240
|
+
|
241
|
+
def compile_support_libraries
|
242
|
+
puts "Compiling support libraries (step 1 of 2)..."
|
243
|
+
progress_bar = ProgressBar.new
|
244
|
+
e_working_dir = Shellwords.escape(@working_dir)
|
245
|
+
args = "#{@support_libs_string} CACHING=false OUTPUT_DIR=#{e_working_dir}"
|
246
|
+
begin
|
247
|
+
progress_bar.set(0.05)
|
248
|
+
Dir.chdir(PhusionPassenger.build_system_dir) do
|
249
|
+
run_rake_task!(args) do |progress, total|
|
250
|
+
progress_bar.set(0.05 + (progress / total.to_f) * 0.95)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
progress_bar.set(1)
|
254
|
+
ensure
|
255
|
+
progress_bar.finish
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
def configure_and_compile_nginx
|
260
|
+
puts "Compiling Nginx engine (step 2 of 2)..."
|
261
|
+
progress_bar = ProgressBar.new
|
262
|
+
progress_bar.set(0)
|
263
|
+
begin
|
264
|
+
configure_nginx do
|
265
|
+
progress_bar.set(0.25)
|
266
|
+
end
|
267
|
+
compile_nginx do |progress|
|
268
|
+
progress_bar.set(0.25 + progress * 0.75)
|
269
|
+
end
|
270
|
+
progress_bar.set(1)
|
271
|
+
ensure
|
272
|
+
progress_bar.finish
|
273
|
+
end
|
274
|
+
|
275
|
+
FileUtils.cp("#{@working_dir}/nginx-#{@nginx_version}/objs/nginx",
|
276
|
+
"#{@destdir}/nginx-#{@nginx_version}")
|
277
|
+
puts "<green>Compilation finished!</green>"
|
278
|
+
end
|
279
|
+
|
280
|
+
def configure_nginx
|
281
|
+
shell = PlatformInfo.find_command('bash') || "sh"
|
282
|
+
e_nginx_source_dir = Shellwords.escape("#{@working_dir}/nginx-#{@nginx_version}")
|
283
|
+
|
284
|
+
command = "cd #{e_nginx_source_dir} && "
|
285
|
+
command << "env PASSENGER_INCLUDEDIR=#{Shellwords.escape PhusionPassenger.include_dir} " <<
|
286
|
+
"PASSENGER_LIBS=#{Shellwords.escape(@support_libs_string)} "
|
287
|
+
# RPM thinks it's being smart by scanning binaries for
|
288
|
+
# paths and refusing to create package if it detects any
|
289
|
+
# hardcoded thats that point to /usr or other important
|
290
|
+
# locations. For Phusion Passenger Standalone we do not
|
291
|
+
# care at all what the Nginx configured prefix is because
|
292
|
+
# we pass it its resource locations during runtime, so
|
293
|
+
# work around the problem by configure Nginx with prefix
|
294
|
+
# /tmp.
|
295
|
+
command << "#{shell} ./configure --prefix=/tmp " +
|
296
|
+
"#{STANDALONE_NGINX_CONFIGURE_OPTIONS} " +
|
297
|
+
"--add-module=#{Shellwords.escape PhusionPassenger.nginx_module_source_dir}"
|
298
|
+
run_command_yield_activity(command) do |throbber|
|
299
|
+
yield
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
def compile_nginx
|
304
|
+
backlog = ""
|
305
|
+
e_nginx_source_dir = Shellwords.escape("#{@working_dir}/nginx-#{@nginx_version}")
|
306
|
+
|
307
|
+
# Capture and index the `make --dry-run` output for
|
308
|
+
# progress determination.
|
309
|
+
total_lines = 0
|
310
|
+
dry_run_output = {}
|
311
|
+
`cd #{e_nginx_source_dir} && #{PlatformInfo.gnu_make} --dry-run`.split("\n").each do |line|
|
312
|
+
total_lines += 1
|
313
|
+
dry_run_output[line] = true
|
314
|
+
end
|
315
|
+
|
316
|
+
IO.popen("cd #{e_nginx_source_dir} && #{PlatformInfo.gnu_make} 2>&1", "r") do |io|
|
317
|
+
progress = 1
|
318
|
+
while !io.eof?
|
319
|
+
line = io.readline
|
320
|
+
backlog << line
|
321
|
+
# If the output is part of what we saw when dry-running,
|
322
|
+
# then increase progress bar. Otherwise it could be compiler
|
323
|
+
# warnings or something, so ignore those.
|
324
|
+
if dry_run_output[line.chomp]
|
325
|
+
yield(progress / total_lines.to_f)
|
326
|
+
progress += 1
|
327
|
+
end
|
328
|
+
end
|
329
|
+
end
|
330
|
+
if $?.exitstatus != 0
|
331
|
+
@stderr.puts
|
332
|
+
@stderr.puts "*** ERROR: unable to compile web helper."
|
333
|
+
@stderr.puts backlog
|
334
|
+
exit 1
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
def run_command_yield_activity(command)
|
339
|
+
backlog = ""
|
340
|
+
IO.popen("#{command} 2>&1", "rb") do |io|
|
341
|
+
while !io.eof?
|
342
|
+
backlog << io.readline
|
343
|
+
yield
|
344
|
+
end
|
345
|
+
end
|
346
|
+
if $?.exitstatus != 0
|
347
|
+
@stderr.puts
|
348
|
+
@stderr.puts backlog
|
349
|
+
@stderr.puts "*** ERROR: command failed: #{command}"
|
350
|
+
exit 1
|
351
|
+
end
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
end # module Standalone
|
337
356
|
end # module PhusionPassenger
|