class Omnibus::Packager::Solaris

Constants

SCRIPT_MAP

@return [Hash]

Public Instance Methods

create_solaris_file() click to toggle source

Generate the Solaris file using pkg*.

@return [void]

# File lib/omnibus/packagers/solaris.rb, line 141
def create_solaris_file
  shellout! "pkgmk -o -r #{install_dirname} -d #{staging_dir} -f #{staging_dir_path("Prototype")}"
  shellout! "pkgchk -vd #{staging_dir} #{project.package_name}"
  shellout! "pkgtrans #{staging_dir} #{package_path} #{project.package_name}"
end
install_basename() click to toggle source
# File lib/omnibus/packagers/solaris.rb, line 53
def install_basename
  File.basename(project.install_dir)
end
install_dirname() click to toggle source
# File lib/omnibus/packagers/solaris.rb, line 49
def install_dirname
  File.dirname(project.install_dir)
end
package_name() click to toggle source

@see Base#package_name

# File lib/omnibus/packagers/solaris.rb, line 41
def package_name
  "#{project.package_name}-#{pkgmk_version}.#{safe_architecture}.solaris"
end
pkgmk_version() click to toggle source
# File lib/omnibus/packagers/solaris.rb, line 45
def pkgmk_version
  "#{project.build_version}-#{project.build_iteration}"
end
safe_architecture() click to toggle source

The architecture for this Solaris package.

@return [String]

# File lib/omnibus/packagers/solaris.rb, line 152
def safe_architecture
  # The #i386? and #intel? helpers come from chef-sugar
  if intel?
    "i386"
  elsif sparc?
    "sparc"
  else
    Ohai["kernel"]["machine"]
  end
end
write_pkginfo_file() click to toggle source

Generate a pkginfo file for solaris build

# File lib/omnibus/packagers/solaris.rb, line 112
    def write_pkginfo_file
      hostname = Socket.gethostname

      # http://docs.oracle.com/cd/E19683-01/816-0219/6m6njqbat/index.html
      pkginfo_content = <<-EOF.gsub(/^ {8}/, "")
        CLASSES=none
        TZ=PST
        PATH=/sbin:/usr/sbin:/usr/bin:/usr/sadm/install/bin
        BASEDIR=#{install_dirname}
        PKG=#{project.package_name}
        NAME=#{project.package_name}
        ARCH=#{safe_architecture}
        VERSION=#{pkgmk_version}
        CATEGORY=application
        DESC=#{project.description}
        VENDOR=#{project.maintainer}
        EMAIL=#{project.maintainer}
        PSTAMP=#{hostname}#{Time.now.utc.iso8601}
      EOF
      File.open staging_dir_path("pkginfo"), "w+" do |f|
        f.write pkginfo_content
      end
    end
write_prototype_file() click to toggle source

Generate a Prototype file for solaris build

# File lib/omnibus/packagers/solaris.rb, line 78
    def write_prototype_file
      shellout! "cd #{install_dirname} && find #{install_basename} -print > #{staging_dir_path("files")}"

      File.open staging_dir_path("files.clean"), "w+" do |fout|
        File.open staging_dir_path("files") do |fin|
          fin.each_line do |line|
            if line.chomp =~ /\s/
              log.warn(log_key) { "Skipping packaging '#{line}' file due to whitespace in filename" }
            else
              fout.write(line)
            end
          end
        end
      end

      # generate list of control files
      File.open staging_dir_path("Prototype"), "w+" do |f|
        f.write <<-EOF.gsub(/^ {10}/, "")
          i pkginfo
          i postinstall
          i postremove
        EOF
      end

      # generate the prototype's file list
      shellout! "cd #{install_dirname} && pkgproto < #{staging_dir_path("files.clean")} > #{staging_dir_path("Prototype.files")}"

      # fix up the user and group in the file list to root
      shellout! "awk '{ $5 = \"root\"; $6 = \"root\"; print }' < #{staging_dir_path("Prototype.files")} >> #{staging_dir_path("Prototype")}"
    end
write_scripts() click to toggle source

Copy all scripts in {Project#package_scripts_path} to the control directory of this repo.

@return [void]

# File lib/omnibus/packagers/solaris.rb, line 63
def write_scripts
  SCRIPT_MAP.each do |source, destination|
    source_path = File.join(project.package_scripts_path, source.to_s)

    next unless File.file?(source_path)

    destination_path = staging_dir_path(destination)
    log.debug(log_key) { "Adding script `#{source}' to `#{destination_path}'" }
    copy_file(source_path, destination_path)
  end
end