Parent

Class/Module Index [+]

Quicksearch

PhusionPassenger::PlatformInfo::ApacheDetector

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.

Attributes

results[R]

Public Class Methods

new(output) click to toggle source
# 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

Public Instance Methods

detect_all() click to toggle source
# 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
detect_one(apxs2) click to toggle source
# 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
finish() click to toggle source
# File lib/phusion_passenger/platform_info/apache_detector.rb, line 114
def finish
  PlatformInfo.verbose = false
  PlatformInfo.log_implementation = nil
end
report() click to toggle source
# 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
result_for(apxs2) click to toggle source
# File lib/phusion_passenger/platform_info/apache_detector.rb, line 245
def result_for(apxs2)
  # All the results use realpaths, so the input must too.
  apxs2 = try_realpath(apxs2)
  return @results.find { |r| r.apxs2 == apxs2 }
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.