in rakelib/artifacts.rake [615:819]
def package(platform, variant = :standard, bundle_jdk = false, jdk_arch = 'x86_64')
oss = variant == :oss
require "stud/temporary"
require "fpm/errors"
require "fpm/package/dir"
require "fpm/package/gem"
basedir = File.join(File.dirname(__FILE__), "..")
dir = FPM::Package::Dir.new
dir.attributes[:workdir] = File.join(basedir, "build", "fpm")
metadata_file_path = File.join("logstash-core", "lib", "logstash", "build.rb")
metadata_source_file_path = BUILD_METADATA_FILE.path
dir.input("#{metadata_source_file_path}=/usr/share/logstash/#{metadata_file_path}")
suffix = ""
if oss
suffix = "-oss"
exclude_paths = oss_exclude_paths
else
exclude_paths = default_exclude_paths
end
files(exclude_paths).each do |path|
next if File.directory?(path)
next if path.start_with?("config/")
dir.input("#{path}=/usr/share/logstash/#{path}")
end
if oss
dir.input("licenses/APACHE-LICENSE-2.0.txt=/usr/share/logstash/LICENSE.txt")
else
dir.input("licenses/ELASTIC-LICENSE.txt=/usr/share/logstash/LICENSE.txt")
end
Stud::Temporary.directory do |empty|
dir.input("#{empty}/=/usr/share/logstash/data")
dir.input("#{empty}/=/var/log/logstash")
dir.input("#{empty}/=/var/lib/logstash")
dir.input("#{empty}/=/etc/logstash/conf.d")
dir.input("#{empty}/=/lib/systemd/system")
dir.input("#{empty}/=/etc/default")
end
File.join(basedir, "config", "log4j2.properties").tap do |path|
dir.input("#{path}=/etc/logstash")
end
arch_suffix = bundle_jdk ? map_architecture_for_package_type(platform, jdk_arch) : "no-jdk"
ensure_logstash_version_constant_defined
package_filename = "logstash#{suffix}-#{LOGSTASH_VERSION}#{PACKAGE_SUFFIX}-#{arch_suffix}.TYPE"
File.join(basedir, "config", "startup.options").tap do |path|
dir.input("#{path}=/etc/logstash")
end
File.join(basedir, "config", "jvm.options").tap do |path|
dir.input("#{path}=/etc/logstash")
end
File.join(basedir, "config", "logstash.yml").tap do |path|
dir.input("#{path}=/etc/logstash")
end
File.join(basedir, "config", "logstash-sample.conf").tap do |path|
dir.input("#{path}=/etc/logstash")
end
File.join(basedir, "pkg", "pipelines.yml").tap do |path|
dir.input("#{path}=/etc/logstash")
end
File.join(basedir, "pkg", "service_templates", "systemd", "lib", "systemd", "system", "logstash.service").tap do |path|
dir.input("#{path}=/lib/systemd/system")
end
File.join(basedir, "pkg", "service_templates", "sysv", "etc", "default", "logstash").tap do |path|
dir.input("#{path}=/etc/default")
end
case platform
when "redhat", "centos"
require "fpm/package/rpm"
license = oss ? "ASL 2.0" : "Elastic License"
out = dir.convert(FPM::Package::RPM)
out.license = license
out.attributes[:rpm_use_file_permissions] = true
out.attributes[:rpm_user] = "root"
out.attributes[:rpm_group] = "root"
out.attributes[:rpm_os] = "linux"
out.attributes[:rpm_digest] = "sha256"
out.config_files << "/etc/logstash/startup.options"
out.config_files << "/etc/logstash/jvm.options"
out.config_files << "/etc/logstash/log4j2.properties"
out.config_files << "/etc/logstash/logstash.yml"
out.config_files << "/etc/logstash/logstash-sample.conf"
out.config_files << "/etc/logstash/pipelines.yml"
out.config_files << "/lib/systemd/system/logstash.service"
out.config_files << "/etc/default/logstash"
out.replaces << "logstash < 7.10.0"
when "debian", "ubuntu"
require "fpm/package/deb"
license = oss ? "ASL-2.0" : "Elastic-License"
out = dir.convert(FPM::Package::Deb)
out.license = license
out.attributes[:deb_user] = "root"
out.attributes[:deb_group] = "root"
out.attributes[:deb_suggests] = ["java11-runtime-headless"] unless bundle_jdk
out.config_files << "/etc/logstash/startup.options"
out.config_files << "/etc/logstash/jvm.options"
out.config_files << "/etc/logstash/log4j2.properties"
out.config_files << "/etc/logstash/logstash.yml"
out.config_files << "/etc/logstash/logstash-sample.conf"
out.config_files << "/etc/logstash/pipelines.yml"
out.config_files << "/lib/systemd/system/logstash.service"
out.config_files << "/etc/default/logstash"
out.conflicts << "logstash (<< 7.10.0)"
out.replaces << "logstash (<< 7.10.0)"
end
["before", "after"].each do |stage|
["install", "remove"].each do |action|
script = "#{stage}-#{action}"
script_sym = script.gsub("-", "_").to_sym
script_path = File.join(File.dirname(__FILE__), "..", "pkg", platform, "#{script}.sh")
next unless File.exist?(script_path)
out.scripts[script_sym] = File.read(script_path)
end
end
out.name = oss ? "logstash-oss" : "logstash"
out.architecture = bundle_jdk ? map_architecture_for_package_type(platform, jdk_arch) : "all"
out.version = "#{LOGSTASH_VERSION}#{PACKAGE_SUFFIX}".gsub(/[.-]([[:alpha:]])/, '~\1')
out.iteration = "1"
out.url = "https://www.elastic.co/logstash"
out.description = "An extensible logging pipeline"
out.vendor = "Elastic"
out.epoch = 1
out.attributes[:force?] = true
begin
path = File.join(basedir, "build", out.to_s(package_filename))
x = out.output(path)
puts "Completed: #{path}"
ensure
out.cleanup
end
end
def map_architecture_for_package_type(platform, jdk_arch)
if jdk_arch == 'x86_64'
case platform
when "debian", "ubuntu"
return "amd64"
else
return "x86_64"
end
elsif jdk_arch == 'arm64'
case platform
when "debian", "ubuntu"
return "arm64"
else
return "aarch64"
end
else
raise "CPU architecture not recognized: #{jdk_arch}"
end
end