class FPM::Package::Solaris

TODO(sissel): Add dependency checking support. IIRC this has to be done as a 'checkinstall' step.

Public Instance Methods

architecture() click to toggle source
# File lib/fpm/package/solaris.rb, line 19
def architecture
  case @architecture
  when nil, "native"
    @architecture = %x{uname -p}.chomp
  end
  # "all" is a valid arch according to
  # http://www.bolthole.com/solaris/makeapackage.html

  return @architecture
end
default_output() click to toggle source
# File lib/fpm/package/solaris.rb, line 85
def default_output
  v = version
  v = "#{epoch}:#{v}" if epoch
  if iteration
    "#{name}_#{v}-#{iteration}_#{architecture}.#{type}"
  else
    "#{name}_#{v}_#{architecture}.#{type}"
  end
end
output(output_path) click to toggle source
# File lib/fpm/package/solaris.rb, line 34
def output(output_path)
  self.scripts.each do |name, path|
    case name
      when "pre-install"
        safesystem("cp", path, "./preinstall")
        File.chmod(0755, "./preinstall")
      when "post-install"
        safesystem("cp", path, "./postinstall")
        File.chmod(0755, "./postinstall")
      when "pre-uninstall"
        raise FPM::InvalidPackageConfiguration.new(
          "pre-uninstall is not supported by Solaris packages"
        )
      when "post-uninstall"
        raise FPM::InvalidPackageConfiguration.new(
          "post-uninstall is not supported by Solaris packages"
        )
    end # case name
  end # self.scripts.each

  template = template("solaris.erb")
  File.open("#{build_path}/pkginfo", "w") do |pkginfo|
    pkginfo.puts template.result(binding)
  end

  # Generate the package 'Prototype' file
  File.open("#{build_path}/Prototype", "w") do |prototype|
    prototype.puts("i pkginfo")
    prototype.puts("i preinstall") if self.scripts["pre-install"]
    prototype.puts("i postinstall") if self.scripts["post-install"]

    # TODO(sissel): preinstall/postinstall
    # strip @prefix, since BASEDIR will set prefix via the pkginfo file
    IO.popen("pkgproto #{staging_path}/#{@prefix}=").each_line do |line|
      type, klass, path, mode, user, group = line.split

      prototype.puts([type, klass, path, mode, attributes[:solaris_user], attributes[:solaris_group]].join(" "))
    end # popen "pkgproto ..."
  end # File prototype

  ::Dir.chdir staging_path do
    # Should create a package directory named by the package name.
    safesystem("pkgmk", "-o", "-f", "#{build_path}/Prototype", "-d", build_path)
  end


  # Convert the 'package directory' built above to a real solaris package.
  safesystem("pkgtrans", "-s", build_path, output_path, name)
  safesystem("cp", "#{build_path}/#{output_path}", output_path)
end
specfile(builddir) click to toggle source
# File lib/fpm/package/solaris.rb, line 30
def specfile(builddir)
  "#{builddir}/pkginfo"
end