-
Notifications
You must be signed in to change notification settings - Fork 0
133 lines (113 loc) · 4.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Source: https://raw.githubusercontent.com/Homebrew/homebrew-core/32f479350f2fe6d1df8ef2d4cd4a6d8eaaca07af/Formula/elasticsearch.rb
class ElasticsearchAT56 < Formula
desc "Distributed search & analytics engine"
homepage "https://www.elastic.co/products/elasticsearch"
url "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.16.tar.gz"
sha256 "6b035a59337d571ab70cea72cc55225c027ad142fbb07fd8984e54261657c77f"
head do
url "https://github.com/elasticsearch/elasticsearch.git"
depends_on "gradle" => :build
end
# bottle :unneeded
depends_on "openjdk@8"
def cluster_name
"elasticsearch_#{ENV["USER"]}"
end
def install
if build.head?
# Build the package from source
system "gradle", "clean", ":distribution:tar:assemble"
# Extract the package to the tar directory
mkdir "tar"
cd "tar"
system "tar", "--strip-components=1", "-xf", Dir["../distribution/tar/build/distributions/elasticsearch-*.tar.gz"].first
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", "modules"
# 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/bash\n}, "#!/bin/bash\n\nES_HOME=#{libexec}")
end
inreplace "#{libexec}/bin/elasticsearch-plugin" do |s|
# Add the proper ES_CLASSPATH configuration
s.sub!(/SCRIPT="\$0"/, %Q(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.exist?(etc/"elasticsearch/scripts")
(libexec/"config").rmtree
bin.write_exec_script Dir[libexec/"bin/elasticsearch"]
bin.write_exec_script Dir[libexec/"bin/elasticsearch-plugin"]
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
s = <<~EOS
Data: #{var}/elasticsearch/#{cluster_name}/
Logs: #{var}/log/elasticsearch/#{cluster_name}.log
Plugins: #{libexec}/plugins/
Config: #{etc}/elasticsearch/
plugin script: #{libexec}/bin/elasticsearch-plugin
EOS
s
end
plist_options :manual => "elasticsearch"
def plist
<<~EOS
<?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>
<false/>
<key>Label</key>
<string>#{plist_name}</string>
<key>ProgramArguments</key>
<array>
<string>#{opt_bin}/elasticsearch</string>
</array>
<key>EnvironmentVariables</key>
<dict>
</dict>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>#{var}</string>
<key>StandardErrorPath</key>
<string>#{var}/log/elasticsearch.log</string>
<key>StandardOutPath</key>
<string>#{var}/log/elasticsearch.log</string>
</dict>
</plist>
EOS
end
test do
system "#{libexec}/bin/elasticsearch-plugin", "list"
pid = "#{testpath}/pid"
begin
system "#{bin}/elasticsearch", "-d", "-p", pid, "-Epath.data=#{testpath}/data"
sleep 10
system "curl", "-XGET", "localhost:9200/"
ensure
Process.kill(9, File.read(pid).to_i)
end
end
end