homebrew-core/Formula/elasticsearch.rb
Jason Tedor 935d360323 elasticsearch 2.0.0
This commit addresses several issues that exist in the Elasticsearch
formula.

1. Upgrades formula to install 2.0.0, the latest stable release of
Elasticsearch
2. Changes HEAD builds to require Java 8 (cf.
elastic/elasticsearch@11314336b6)
3. Changes HEAD builds to use gradle for assembling (due to
Elasticsearch build system change, cf.
elastic/elasticsearch@c86100f636)
4. Stop moving lib to libexec (due to security enhancements in
Elasticsearch; cf.
elastic/elasticsearch@052cf1446f)
5. Keep plugins under Elasticsearch home
6. Fix startup command
7. Remove stack size setting (cf.
elastic/elasticsearch@09b4d0e097)

Closes Homebrew/homebrew#45644.

Signed-off-by: Mike McQuaid <mike@mikemcquaid.com>
2015-11-05 14:49:36 -08:00

126 lines
3.9 KiB
Ruby

class Elasticsearch < Formula
desc "Distributed real-time search & analytics engine for the cloud"
homepage "https://www.elastic.co/products/elasticsearch"
url "https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.0.0/elasticsearch-2.0.0.tar.gz"
sha256 "b25f13f615337c2072964fd9fc5c7250f8a2a983b22198daf93548285d5d16df"
revision 1
bottle :unneeded
head do
url "https://github.com/elasticsearch/elasticsearch.git"
depends_on :java => "1.8"
depends_on "gradle" => :build
end
depends_on :java => "1.7+"
def cluster_name
"elasticsearch_#{ENV["USER"]}"
end
def install
if build.head?
# Build the package from source
system "gradle", "clean", "assemble"
# Extract the package to the current directory
targz = Dir["distribution/tar/build/distributions/elasticsearch-*.tar.gz"].first
system "tar", "--strip-components=1", "-xf", targz
end
# Remove Windows files
rm_f Dir["bin/*.bat"]
rm_f Dir["bin/*.exe"]
# Install everything else into package directory
libexec.install "bin", "config", "lib"
# Set up Elasticsearch for local development:
inreplace "#{libexec}/config/elasticsearch.yml" do |s|
# 1. Give the cluster a unique name
s.gsub!(/#\s*cluster\.name\: .*/, "cluster.name: #{cluster_name}")
# 2. Configure paths
s.sub!(%r{#\s*path\.data: /path/to.+$}, "path.data: #{var}/elasticsearch/")
s.sub!(%r{#\s*path\.logs: /path/to.+$}, "path.logs: #{var}/log/elasticsearch/")
end
inreplace "#{libexec}/bin/elasticsearch.in.sh" do |s|
# Configure ES_HOME
s.sub!(%r{#\!/bin/sh\n}, "#!/bin/sh\n\nES_HOME=#{libexec}")
end
inreplace "#{libexec}/bin/plugin" do |s|
# Add the proper ES_CLASSPATH configuration
s.sub!(/SCRIPT="\$0"/, %(SCRIPT="$0"\nES_CLASSPATH=#{libexec}/lib))
# Replace paths to use libexec instead of lib
s.gsub!(%r{\$ES_HOME/lib/}, "$ES_CLASSPATH/")
end
# Move config files into etc
(etc/"elasticsearch").install Dir[libexec/"config/*"]
(etc/"elasticsearch/scripts").mkdir unless File.exists?(etc/"elasticsearch/scripts")
(libexec/"config").rmtree
bin.write_exec_script Dir[libexec/"bin/*"]
end
def post_install
# Make sure runtime directories exist
(var/"elasticsearch/#{cluster_name}").mkpath
(var/"log/elasticsearch").mkpath
ln_s etc/"elasticsearch", libexec/"config"
(libexec/"plugins").mkdir
end
def caveats; <<-EOS.undent
Data: #{var}/elasticsearch/#{cluster_name}/
Logs: #{var}/log/elasticsearch/#{cluster_name}.log
Plugins: #{libexec}/plugins/
Config: #{etc}/elasticsearch/
EOS
end
plist_options :manual => "elasticsearch"
def plist; <<-EOS.undent
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>#{plist_name}</string>
<key>ProgramArguments</key>
<array>
<string>#{HOMEBREW_PREFIX}/bin/elasticsearch</string>
</array>
<key>EnvironmentVariables</key>
<dict>
</dict>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>#{var}</string>
<key>StandardErrorPath</key>
<string>/dev/null</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
</dict>
</plist>
EOS
end
test do
system "#{bin}/plugin", "list"
pid = "#{testpath}/pid"
begin
system "#{bin}/elasticsearch", "-d", "-p", pid, "--path.data", testpath
sleep 10
system "curl", "-XGET", "localhost:9200/"
ensure
Process.kill(9, File.read(pid).to_i)
end
end
end