935d360323
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>
126 lines
3.9 KiB
Ruby
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
|