class FPM::Package::PleaseRun

A pleaserun package.

This does not currently support 'output'

Public Instance Methods

input(command) click to toggle source
# File lib/fpm/package/pleaserun.rb, line 23
def input(command)
  platforms = [
    ::PleaseRun::Platform::Systemd.new("default"), # RHEL 7, Fedora 19+, Debian 8, Ubuntu 16.04
    ::PleaseRun::Platform::Upstart.new("1.5"), # Recent Ubuntus
    ::PleaseRun::Platform::Upstart.new("0.6.5"), # CentOS 6
    ::PleaseRun::Platform::Launchd.new("10.9"), # OS X
    ::PleaseRun::Platform::SYSV.new("lsb-3.1") # Ancient stuff
  ]
  pleaserun_attributes = [ "chdir", "user", "group", "umask", "chroot", "nice", "limit_coredump",
                           "limit_cputime", "limit_data", "limit_file_size", "limit_locked_memory",
                           "limit_open_files", "limit_user_processes", "limit_physical_memory", "limit_stack_size",
                           "log_directory", "log_file_stderr", "log_file_stdout"]

  attributes[:pleaserun_name] ||= File.basename(command.first)
  attributes[:prefix] ||= "/usr/share/pleaserun/#{attributes[:pleaserun_name]}"

  platforms.each do |platform|
    logger.info("Generating service manifest.", :platform => platform.class.name)
    platform.program = command.first
    platform.name = attributes[:pleaserun_name]
    platform.args = command[1..-1]
    platform.description = if attributes[:description_given?]
      attributes[:description]
    else
      platform.name
    end
    pleaserun_attributes.each do |attribute_name|
      attribute = "pleaserun_#{attribute_name}".to_sym
      if attributes.has_key?(attribute) and not attributes[attribute].nil?
        platform.send("#{attribute_name}=", attributes[attribute])
      end
    end

    base = staging_path(File.join(attributes[:prefix], "#{platform.platform}/#{platform.target_version || "default"}"))
    target = File.join(base, "files")
    actions_script = File.join(base, "install_actions.sh")
    ::PleaseRun::Installer.install_files(platform, target, false)
    ::PleaseRun::Installer.write_actions(platform, actions_script)
  end

  libs = [ "install.sh", "install-path.sh", "generate-cleanup.sh" ]
  libs.each do |file|
    base = staging_path(File.join(attributes[:prefix]))
    File.write(File.join(base, file), template(File.join("pleaserun", file)).result(binding))
    File.chmod(0755, File.join(base, file))
  end

  scripts[:after_install] = template(File.join("pleaserun", "scripts", "after-install.sh")).result(binding)
  scripts[:before_remove] = template(File.join("pleaserun", "scripts", "before-remove.sh")).result(binding)
end