class FPM::Package::FreeBSD
Constants
- SCRIPT_MAP
Public Instance Methods
add_path(tar, tar_path, path)
click to toggle source
# File lib/fpm/package/freebsd.rb, line 124 def add_path(tar, tar_path, path) stat = File.lstat(path) if stat.directory? tar.mkdir(tar_path, stat.mode) elsif stat.symlink? tar.add_symlink(tar_path, File.readlink(path), stat.mode) else tar.add_file_simple(tar_path, stat.mode, stat.size) do |io| File.open(path) do |fd| chunk = nil size = 0 while chunk = fd.read(16384) do size += io.write(chunk) end if size != stat.size raise "Failed to add #{path} to the archive; expected to " + "write #{stat.size} bytes, only wrote #{size}" end end end # tar.tar.add_file_simple end end
architecture()
click to toggle source
Handle architecture naming conversion: <osname>:
# File lib/fpm/package/freebsd.rb, line 103 def architecture osname = %x{uname -s}.chomp osversion = %x{uname -r}.chomp.split('.').first # Essentially because no testing on other platforms arch = 'x86' wordsize = case @architecture when nil, 'native' %x{getconf LONG_BIT}.chomp # 'native' is current arch when 'amd64' '64' when 'i386' '32' else %x{getconf LONG_BIT}.chomp # default to native, the current arch end return [osname, osversion, arch, wordsize].join(':') end
output(output_path)
click to toggle source
# File lib/fpm/package/freebsd.rb, line 19 def output(output_path) # See https://github.com/jordansissel/fpm/issues/1090 # require xz later, because this triggers a load of liblzma.so.5 that is # unavailable on older CentOS/RH distros. require "xz" output_check(output_path) # Build the packaging metadata files. checksums = {} self.files.each do |f| path = staging_path(f) if File.symlink?(path) checksums[f] = "-" elsif File.file?(path) checksums[f] = Digest::SHA256.file(path).hexdigest end end pkg_origin = attributes[:freebsd_origin] if pkg_origin == "fpm/<name>" # fill in default pkg_origin = "fpm/#{name}" end # Follow similar rules to these used in ``to_s_fullversion`` method. # FIXME: maybe epoch should also be introduced somehow ("#{version},#{epoch})? # should it go to pkgdata["version"] or to another place? # https://www.freebsd.org/doc/en/books/porters-handbook/makefile-naming.html pkg_version = (iteration and (iteration.to_i > 0)) ? "#{version}-#{iteration}" : "#{version}" pkgdata = { "arch" => architecture, "name" => name, "version" => pkg_version, "comment" => description, "desc" => description, "origin" => pkg_origin, "maintainer" => maintainer, "www" => url, # prefix is required, but it doesn't seem to matter "prefix" => "/", } # Write +COMPACT_MANIFEST, without the "files" section. File.open(staging_path("+COMPACT_MANIFEST"), "w+") do |file| file.write(pkgdata.to_json + "\n") end # Populate files + checksums, then write +MANIFEST. pkgdata["files"] = {} checksums.each do |f, shasum| # pkg expands % URL-style escapes, so make sure to escape % as %25 pkgdata["files"]["/" + f.gsub("%", "%25")] = shasum end # Populate scripts pkgdata["scripts"] = {} scripts.each do |name, data| pkgdata["scripts"][SCRIPT_MAP[name]] = data end File.open(staging_path("+MANIFEST"), "w+") do |file| file.write(pkgdata.to_json + "\n") end # Create the .txz package archive from the files in staging_path. File.open(output_path, "wb") do |file| XZ::StreamWriter.new(file) do |xz| FPM::Util::TarWriter.new(xz) do |tar| # The manifests must come first for pkg. add_path(tar, "+COMPACT_MANIFEST", File.join(staging_path, "+COMPACT_MANIFEST")) add_path(tar, "+MANIFEST", File.join(staging_path, "+MANIFEST")) checksums.keys.each do |path| add_path(tar, "/" + path, File.join(staging_path, path)) end end end end end
to_s(format=nil)
click to toggle source
Calls superclass method
FPM::Package#to_s
# File lib/fpm/package/freebsd.rb, line 155 def to_s(format=nil) return super(format.nil? ? "NAME-FULLVERSION.EXTENSION" : format) end
to_s_extension()
click to toggle source
# File lib/fpm/package/freebsd.rb, line 147 def to_s_extension; "txz"; end
to_s_fullversion()
click to toggle source
# File lib/fpm/package/freebsd.rb, line 149 def to_s_fullversion() # iteration (PORTREVISION on FreeBSD) shall be appended only(?) if non-zero. # https://www.freebsd.org/doc/en/books/porters-handbook/makefile-naming.html (iteration and (iteration.to_i > 0)) ? "#{version}_#{iteration}" : "#{version}" end