Detects all possible Apache installations on the system, and presents the autodetection information to the user in a friendly way. It turns out too many people have multiple Apache installations on their system, but they don't know about that, or they don't know how to compile against the correct Apache installation. This tool helps them.
If you use this class to log things to the terminal, then be sure to set the terminal color to Utils::AnsiColors::DEFAULT_TERMINAL_COLOR.
# File lib/phusion_passenger/platform_info/apache_detector.rb, line 100 def initialize(output) @output = output @results = [] @failures = 0 PlatformInfo.verbose = true PlatformInfo.log_implementation = lambda do |message| if message =~ /: found$/ log("<green> --> #{message}</green>") else log(" --> #{message}") end end end
# File lib/phusion_passenger/platform_info/apache_detector.rb, line 119 def detect_all log "<banner>Looking for possible Apache installations...</banner>" apxses = PlatformInfo.find_all_commands("apxs2") + PlatformInfo.find_all_commands("apxs") if !apxses.include?(PlatformInfo.apxs2) PlatformInfo.send(:log, "Looking for #{PlatformInfo.apxs2}: found") apxses << PlatformInfo.apxs2 end apxses = remove_symlink_duplications(apxses) log "" apxses.each do |apxs2| detect_one(apxs2) end end
# File lib/phusion_passenger/platform_info/apache_detector.rb, line 134 def detect_one(apxs2) log "<banner>Analyzing #{apxs2}...</banner>" add_result do |result| result.apxs2 = apxs2 log "Detecting main Apache executable..." result.httpd = PlatformInfo.httpd(:apxs2 => apxs2) if result.httpd log "Detecting version..." if result.version = PlatformInfo.httpd_version(:httpd => result.httpd) log " --> #{result.version}" else log "<red> --> Cannot detect version!</red>" result.httpd = nil end end if result.httpd log "Detecting control command..." result.ctl = PlatformInfo.apache2ctl(:apxs2 => apxs2) result.httpd = nil if !result.ctl end if result.httpd log "Detecting configuration file location..." result.config_file = PlatformInfo.httpd_default_config_file(:httpd => result.httpd) if result.config_file log " --> #{result.config_file}" else log "<red> --> Cannot detect default config file location!</red>" end end if result.httpd log "Detecting error log file..." result.error_log = PlatformInfo.httpd_actual_error_log(:httpd => result.httpd) if result.error_log log " --> #{result.error_log}" else log "<red> --> Cannot detect error log file!</red>" end end if result.httpd log "Detecting a2enmod and a2dismod..." result.a2enmod = PlatformInfo.a2enmod(:apxs2 => apxs2) result.a2dismod = PlatformInfo.a2dismod(:apxs2 => apxs2) end if result.httpd result.config_file_broken = PlatformInfo.apache2ctl_V(:apxs2 => apxs2).nil? end if result.httpd log "<green>Found a usable Apache installation using #{apxs2}.</green>" true else log "<yellow>Cannot find a usable Apache installation using #{apxs2}.</yellow>" false end end log "" end
# File lib/phusion_passenger/platform_info/apache_detector.rb, line 114 def finish PlatformInfo.verbose = false PlatformInfo.log_implementation = nil end
# File lib/phusion_passenger/platform_info/apache_detector.rb, line 191 def report if @failures > 0 && Process.uid != 0 user = `whoami`.strip sudo_s_e = PhusionPassenger::PlatformInfo.ruby_sudo_shell_command("-E") ruby = PhusionPassenger::PlatformInfo.ruby_command log "" log "----------------------------" log "" log "<red>Permission problems</red>" log "" log "Sorry, this program doesn't have enough permissions to autodetect all your" log "Apache installations, because it's running as the <b>#{`whoami`.strip}</b> user." log "Please re-run this program with root privileges:" log "" log " <b>export ORIG_PATH=\"$PATH\"</b>" log " <b>#{sudo_s_e}</b>" log " <b>export PATH=\"$ORIG_PATH\"</b>" log " <b>#{ruby} #{PhusionPassenger.bin_dir}/passenger-config --detect-apache2</b>" return end log "<banner>Final autodetection results</banner>" @results.each do |result| result.report end if @results.empty? PhusionPassenger.require_passenger_lib 'platform_info/depcheck' PlatformInfo::Depcheck.load("depcheck_specs/apache2") apache2 = PlatformInfo::Depcheck.find("apache2") apache2_install_instructions = apache2.install_instructions.split("\n").join("\n ") # apxs2 is part of the development headers. apache2_dev = PlatformInfo::Depcheck.find("apache2-dev") apache2_dev_install_instructions = apache2_dev.install_instructions.split("\n").join("\n ") log "<red>Sorry, this program cannot find an Apache installation.</red>" log "" log "Please install Apache and its development headers." log "" log " <yellow>* To install Apache:</yellow>" log " #{apache2_install_instructions}" log "" log " <yellow>* To install Apache development headers:</yellow>" log " #{apache2_dev_install_instructions}" log "" log "If you are sure that you have Apache installed, please read the documentation:" log "<b>https://www.phusionpassenger.com/library/install/apache/customizing_compilation_process.html#forcing-location-of-command-line-tools-and-dependencies</b>" elsif @results.size > 1 log "<yellow>WARNING: You have multiple Apache installations on your system!</yellow>" log "You are strongly recommended to read this section of the documentation:" log "<b>https://www.phusionpassenger.com/install/apache/multiple_apache_installs.html</b>" end end
Generated with the Darkfish Rdoc Generator 2.