### Home Classes Methods

### In Files

- lib/phusion_passenger/abstract_installer.rb

### Parent

Object

### Namespace

- CLASS PhusionPassenger::AbstractInstaller::Abort
- CLASS PhusionPassenger::AbstractInstaller::CommandError

### Methods

- ::new
- #after_install
- #before_install
- #check_dependencies
- #check_whether_os_is_broken
- #check_whether_system_has_enough_ram
- #dependencies
- #download
- #interactive?
- #line
- #new_screen
- #non_interactive?
- #print
- #prompt
- #prompt_confirmation
- #puts
- #puts_error
- #rake
- #rake!
- #render_template
- #run
- #sh
- #sh!
- #use_stderr
- #wait

### Class/Module Index

Quicksearch

- PhusionPassenger
- PhusionPassenger::AbstractInstaller
- PhusionPassenger::AbstractInstaller::Abort
- PhusionPassenger::AbstractInstaller::CommandError
- PhusionPassenger::AdminTools
- PhusionPassenger::AdminTools::MemoryStats
- PhusionPassenger::AdminTools::MemoryStats::Process
- PhusionPassenger::AdminTools::ServerInstance
- PhusionPassenger::AdminTools::ServerInstance::CorruptedDirectoryError
- PhusionPassenger::AdminTools::ServerInstance::GenerationsAbsentError
- PhusionPassenger::AdminTools::ServerInstance::Group
- PhusionPassenger::AdminTools::ServerInstance::Process
- PhusionPassenger::AdminTools::ServerInstance::RoleDeniedError
- PhusionPassenger::AdminTools::ServerInstance::StaleDirectoryError
- PhusionPassenger::AdminTools::ServerInstance::Stats
- PhusionPassenger::AdminTools::ServerInstance::UnsupportedGenerationStructureVersionError
- PhusionPassenger::AnalyticsLogger
- PhusionPassenger::AnalyticsLogger::Connection
- PhusionPassenger::AnalyticsLogger::Lock
- PhusionPassenger::AnalyticsLogger::Log
- PhusionPassenger::ClassicRails
- PhusionPassenger::ClassicRails::CGIFixed
- PhusionPassenger::ClassicRails::ThreadHandlerExtension
- PhusionPassenger::ConsoleTextTemplate
- PhusionPassenger::DebugLogging
- PhusionPassenger::LoaderSharedHelpers
- PhusionPassenger::MessageChannel
- PhusionPassenger::MessageChannel::InvalidHashError
- PhusionPassenger::MessageClient
- PhusionPassenger::NativeSupportLoader
- PhusionPassenger::Packaging
- PhusionPassenger::PlatformInfo
- PhusionPassenger::PlatformInfo::ApacheDetector
- PhusionPassenger::PlatformInfo::ApacheDetector::Result
- PhusionPassenger::PlatformInfo::Depcheck
- PhusionPassenger::PlatformInfo::Depcheck::ConsoleRunner
- PhusionPassenger::PlatformInfo::Depcheck::Dependency
- PhusionPassenger::PlatformInfo::RuntimeError
- PhusionPassenger::Plugin
- PhusionPassenger::PreloaderSharedHelpers
- PhusionPassenger::Rack
- PhusionPassenger::Rack::OutOfBandGc
- PhusionPassenger::Rack::ThreadHandlerExtension
- PhusionPassenger::Rails3Extensions
- PhusionPassenger::Rails3Extensions::AnalyticsLogging
- PhusionPassenger::Rails3Extensions::AnalyticsLogging::ACExtension
- PhusionPassenger::Rails3Extensions::AnalyticsLogging::ASBenchmarkableExtension
- PhusionPassenger::Rails3Extensions::AnalyticsLogging::ExceptionLogger
- PhusionPassenger::RequestHandler
- PhusionPassenger::RequestHandler::ThreadHandler
- PhusionPassenger::RequestHandler::ThreadHandler::Interrupted
- PhusionPassenger::SharedConstants
- PhusionPassenger::Standalone
- PhusionPassenger::Standalone::AppFinder
- PhusionPassenger::Standalone::Command
- PhusionPassenger::Standalone::ConfigFile
- PhusionPassenger::Standalone::ConfigFile::DisallowedContextError
- PhusionPassenger::Standalone::HelpCommand
- PhusionPassenger::Standalone::Main
- PhusionPassenger::Standalone::PackageRuntimeCommand
- PhusionPassenger::Standalone::RuntimeInstaller
- PhusionPassenger::Standalone::RuntimeLocator
- PhusionPassenger::Standalone::StartCommand
- PhusionPassenger::Standalone::StatusCommand
- PhusionPassenger::Standalone::StopCommand
- PhusionPassenger::Standalone::Utils
- PhusionPassenger::Standalone::VersionCommand
- PhusionPassenger::Utils
- PhusionPassenger::Utils::AnsiColors
- PhusionPassenger::Utils::FileSystemWatcher
- PhusionPassenger::Utils::FileSystemWatcher::DirInfo
- PhusionPassenger::Utils::FileSystemWatcher::FileInfo
- PhusionPassenger::Utils::GeneratorTest
- PhusionPassenger::Utils::HostsFileParser
- PhusionPassenger::Utils::JSON
- PhusionPassenger::Utils::JSON::Generator
- PhusionPassenger::Utils::ParserTest
- PhusionPassenger::Utils::TeeInput
- PhusionPassenger::Utils::TmpIO
- PhusionPassenger::Utils::UnseekableSocket
- CommonLibraryBuilder
- Exception
- GC
- IO
- Object
- Signal

No matching classes.

# PhusionPassenger::AbstractInstaller

Abstract base class for text mode installers. Used by passenger-install-apache2-module and passenger-install-nginx-module.

Subclasses must at least implement the run_steps method which handles the installation itself.

Usage:

    installer = ConcereteInstallerClass.new(options...)
    installer.run

### Constants

PASSENGER_WEBSITE
PHUSION_WEBSITE

### Public Class Methods

new(options = {}) click to toggle source

Create an AbstractInstaller. All options will be stored as instance variables, for example:

    installer = AbstractInstaller.new(:foo => "bar")
    installer.instance_variable_get(:"@foo")   # => "bar"

    # File lib/phusion_passenger/abstract_installer.rb, line 57
    def initialize(options = {})
            @stdout = STDOUT
            @stderr = STDERR
            options.each_pair do |key, value|
                    instance_variable_set(:"@#{key}", value)
            end
    end

### Public Instance Methods

run() click to toggle source

Start the installation by calling the install! method.

    # File lib/phusion_passenger/abstract_installer.rb, line 66
    def run
            before_install
            run_steps
            return true
    rescue Abort
            puts
            return false
    rescue PlatformInfo::RuntimeError => e
            new_screen
            puts "<red>An error occurred</red>"
            puts
            puts e.message
            exit 1
    ensure
            after_install
    end

### Protected Instance Methods

after_install() click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 105
    def after_install
            STDOUT.write(Utils::AnsiColors::RESET)
            STDOUT.flush
    end

before_install() click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 100
    def before_install
            STDOUT.write(Utils::AnsiColors::DEFAULT_TERMINAL_COLOR)
            STDOUT.flush
    end

check_dependencies(show_new_screen = true) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 114
    def check_dependencies(show_new_screen = true)
            new_screen if show_new_screen
            puts "<banner>Checking for required software...</banner>"
            puts

            require 'phusion_passenger/platform_info/depcheck'
            specs, ids = dependencies
            runner = PlatformInfo::Depcheck::ConsoleRunner.new

            specs.each do |spec|
                    PlatformInfo::Depcheck.load(spec)
            end
            ids.each do |id|
                    runner.add(id)
            end

            if runner.check_all
                    return true
            else
                    puts
                    puts "<red>Some required software is not installed.</red>"
                    puts "But don't worry, this installer will tell you how to install them.\n"
                    puts "<b>Press Enter to continue, or Ctrl-C to abort.</b>"
                    if PhusionPassenger.originally_packaged?
                            wait
                    else
                            wait(10)
                    end

                    line
                    puts
                    puts "<banner>Installation instructions for required software</banner>"
                    puts
                    runner.missing_dependencies.each do |dep|
                            puts " * To install <yellow>#{dep.name}</yellow>:"
                            puts "   #{dep.install_instructions}"
                            puts
                    end
                    if respond_to?(:users_guide)
                            puts "If the aforementioned instructions didn't solve your problem, then please take"
                            puts "a look at the Users Guide:"
                            puts
                            puts "  <yellow>#{users_guide}</yellow>"
                    end
                    return false
            end
    end

check_whether_os_is_broken() click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 162
    def check_whether_os_is_broken
            # No known broken OSes at the moment.
    end

check_whether_system_has_enough_ram(required = 1024) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 166
    def check_whether_system_has_enough_ram(required = 1024)
            begin
                    meminfo = File.read("/proc/meminfo")
                    if meminfo =~ /^MemTotal: *(\d+) kB$/
                            ram_mb = $1.to_i / 1024
                            if meminfo =~ /^SwapTotal: *(\d+) kB$/
                                    swap_mb = $1.to_i / 1024
                            else
                                    swap_mb = 0
                            end
                    end
            rescue Errno::ENOENT, Errno::EACCES
                    # Don't do anything on systems without memory information.
                    ram_mb = nil
                    swap_mb = nil
            end
            if ram_mb && swap_mb && ram_mb + swap_mb < required
                    new_screen
                    render_template 'installer_common/low_amount_of_memory_warning',
                            :required => required,
                            :current => ram_mb + swap_mb,
                            :ram => ram_mb,
                            :swap => swap_mb,
                            :doc => users_guide
                    wait
            end
    end

dependencies() click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 110
    def dependencies
            return [[], []]
    end

download(url, output, options = {}) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 341
    def download(url, output, options = {})
            if options[:use_cache] && cache_dir = PhusionPassenger.download_cache_dir
                    basename = url.sub(/.*\//, '')
                    if File.exist?("#{cache_dir}/#{basename}")
                            puts "Copying #{basename} from #{cache_dir}..."
                            FileUtils.cp("#{cache_dir}/#{basename}", output)
                            return true
                    end
            end

            args = []
            if PlatformInfo.find_command("wget")
                    if options[:cacert]
                            args << "--ca-certificate=#{options[:cacert]}"
                    end
                    return sh("wget", "--tries=3", "-O", output, url, *args)
            else
                    if options[:cacert]
                            args << "--cacert"
                            args << options[:cacert]
                    end
                    return sh("curl", url, "-f", "-L", "-o", output, *args)
            end
    end

interactive?() click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 91
    def interactive?
            return !@auto
    end

line() click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 234
    def line
            puts "--------------------------------------------"
    end

new_screen() click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 228
    def new_screen
            puts
            line
            puts
    end

non_interactive?() click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 95
    def non_interactive?
            return !interactive?
    end

print(text) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 205
    def print(text)
            @stdout.write(Utils::AnsiColors.ansi_colorize(text))
            @stdout.flush
    end

prompt(message, default_value = nil) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 238
    def prompt(message, default_value = nil)
            done = false
            while !done
                    print "#{message}: "

                    if non_interactive? && default_value
                            puts default_value
                            return default_value
                    end

                    begin
                            result = STDIN.readline
                    rescue EOFError
                            exit 2
                    end
                    result.strip!
                    if result.empty?
                            if default_value
                                    result = default_value
                                    done = true
                            else
                                    done = !block_given? || yield(result)
                            end
                    else
                            done = !block_given? || yield(result)
                    end
            end
            return result
    rescue Interrupt
            raise Abort
    end

prompt_confirmation(message) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 270
    def prompt_confirmation(message)
            result = prompt("#{message} [y/n]") do |value|
                    if value.downcase == 'y' || value.downcase == 'n'
                            true
                    else
                            puts_error "Invalid input '#{value}'; please enter either 'y' or 'n'."
                            false
                    end
            end
            return result.downcase == 'y'
    rescue Interrupt
            raise Abort
    end

puts(text = nil) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 210
    def puts(text = nil)
            if text
                    @stdout.puts(Utils::AnsiColors.ansi_colorize(text))
            else
                    @stdout.puts
            end
            @stdout.flush
    end

puts_error(text) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 219
    def puts_error(text)
            @stderr.puts(Utils::AnsiColors.ansi_colorize("<red>#{text}</red>"))
            @stderr.flush
    end

rake(*args) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 323
    def rake(*args)
            require 'phusion_passenger/platform_info/ruby'
            if !PlatformInfo.rake_command
                    puts_error 'Cannot find Rake.'
                    raise Abort
            end
            sh("#{PlatformInfo.rake_command} #{args.join(' ')}")
    end

rake!(*args) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 332
    def rake!(*args)
            require 'phusion_passenger/platform_info/ruby'
            if !PlatformInfo.rake_command
                    puts_error 'Cannot find Rake.'
                    raise Abort
            end
            sh!("#{PlatformInfo.rake_command} #{args.join(' ')}")
    end

render_template(name, options = {}) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 224
    def render_template(name, options = {})
            puts ConsoleTextTemplate.new({ :file => name }, options).result
    end

sh(*args) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 304
    def sh(*args)
            puts "# #{args.join(' ')}"
            result = system(*args)
            if result
                    return true
            elsif $?.signaled? && $?.termsig == Signal.list["INT"]
                    raise Interrupt
            else
                    return false
            end
    end

sh!(*args) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 316
    def sh!(*args)
            if !sh(*args)
                    puts_error "*** Command failed: #{args.join(' ')}"
                    raise CommandError
            end
    end

use_stderr() click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 195
    def use_stderr
            old_stdout = @stdout
            begin
                    @stdout = STDERR
                    yield
            ensure
                    @stdout = old_stdout
            end
    end

wait(timeout = nil) click to toggle source

    # File lib/phusion_passenger/abstract_installer.rb, line 284
    def wait(timeout = nil)
            if interactive?
                    if timeout
                            require 'timeout' unless defined?(Timeout)
                            begin
                                    Timeout.timeout(timeout) do
                                            STDIN.readline
                                    end
                            rescue Timeout::Error
                                    # Do nothing.
                            end
                    else
                            STDIN.readline
                    end
            end
    rescue Interrupt
            raise Abort
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.