]> git.openstreetmap.org Git - chef.git/blob - cookbooks/overpass/recipes/default.rb
be930135fc24ad9a3470d5118925b8b70d2e19ba
[chef.git] / cookbooks / overpass / recipes / default.rb
1 #
2 # Cookbook:: overpass
3 # Recipe:: default
4 #
5 # Copyright:: 2021, OpenStreetMap Foundation
6 #
7 # Licensed under the Apache License, Version 2.0 (the "License");
8 # you may not use this file except in compliance with the License.
9 # You may obtain a copy of the License at
10 #
11 #     https://www.apache.org/licenses/LICENSE-2.0
12 #
13 # Unless required by applicable law or agreed to in writing, software
14 # distributed under the License is distributed on an "AS IS" BASIS,
15 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 # See the License for the specific language governing permissions and
17 # limitations under the License.
18 #
19
20 include_recipe "accounts"
21 include_recipe "apache"
22 include_recipe "munin"
23 include_recipe "ruby"
24
25 username = "overpass"
26 basedir = data_bag_item("accounts", username)["home"]
27 web_passwords = data_bag_item("web", "passwords")
28
29 %w[bin site diffs db src munin].each do |dirname|
30   directory "#{basedir}/#{dirname}" do
31     owner username
32     group username
33     mode "755"
34     recursive true
35   end
36 end
37
38 ## Install overpass from source
39
40 srcdir = "#{basedir}/src/osm-3s_v#{node[:overpass][:full_version]}"
41
42 package %w[
43   build-essential
44   libexpat1-dev
45   zlib1g-dev
46   liblz4-dev
47   pyosmium
48   osmium-tool
49 ]
50
51 remote_file "#{srcdir}.tar.gz" do
52   action :create
53   source "https://dev.overpass-api.de/releases/osm-3s_v#{node[:overpass][:version]}.tar.gz"
54   owner username
55   group username
56   mode "644"
57 end
58
59 execute "source_tarball" do
60   cwd "#{basedir}/src"
61   command "tar -xf #{srcdir}.tar.gz"
62   user username
63   notifies :run, "execute[install_overpass]"
64   not_if { ::File.exist?(srcdir) }
65 end
66
67 execute "install_overpass" do
68   action :nothing
69   user username
70   cwd srcdir
71   command "./configure --enable-lz4 --prefix=#{basedir} && make install"
72 end
73
74 ## Setup Apache
75
76 gem_package "rotp" do
77   gem_binary node[:ruby][:gem]
78 end
79
80 directory "#{basedir}/apache" do
81   owner "root"
82   group "root"
83   mode "755"
84 end
85
86 template "#{basedir}/apache/totp-filter" do
87   source "totp-filter.erb"
88   owner "root"
89   group "root"
90   mode "755"
91   variables :totp_key => web_passwords["totp_key"]
92 end
93
94 ssl_certificate node[:fqdn] do
95   domains [node[:fqdn],
96            node[:overpass][:fqdn]]
97   notifies :reload, "service[apache2]"
98 end
99
100 apache_module "cgi"
101 apache_module "headers"
102 apache_module "rewrite"
103
104 apache_site "default" do
105   action :disable
106 end
107
108 apache_site "#{node[:overpass][:fqdn]}" do
109   template "apache.erb"
110   directory "#{basedir}/site"
111   variables :script_directory => "#{basedir}/cgi-bin"
112 end
113
114 ## Overpass deamons
115
116 meta_map_short = {
117   "no" => "",
118   "meta" => "--meta",
119   "attic" => "--attic"
120 }
121
122 logdir = node[:overpass][:logdir]
123
124 directory logdir do
125   owner username
126   group username
127   mode "755"
128   recursive true
129 end
130
131 %w[overpass-update-db overpass-update-areas].each do |fname|
132   template "#{basedir}/bin/#{fname}" do
133     source "#{fname}.erb"
134     owner "overpass"
135     group "overpass"
136     mode "700"
137     variables :basedir => basedir, :srcdir => srcdir
138   end
139 end
140
141 template "#{basedir}/bin/overpass-import-db" do
142   source "overpass-import-db.erb"
143   owner "root"
144   group "root"
145   mode "755"
146   variables :basedir => basedir, :username => username, :srcdir => srcdir
147 end
148
149 systemd_service "overpass-dispatcher" do
150   description "Overpass Main Dispatcher"
151   working_directory basedir
152   exec_start "#{basedir}/bin/dispatcher --osm-base #{meta_map_short[node[:overpass][:meta_mode]]} --db-dir=#{basedir}/db --rate-limit=#{node[:overpass][:rate_limit]} --space=#{node[:overpass][:dispatcher_space]}"
153   exec_stop "#{basedir}/bin/dispatcher --osm-base --terminate"
154   standard_output "append:#{logdir}/osm_base.log"
155   user username
156 end
157
158 service "overpass-dispatcher" do
159   action [:enable]
160 end
161
162 systemd_service "overpass-area-dispatcher" do
163   description "Overpass Area Dispatcher"
164   after ["overpass-dispatcher"]
165   working_directory basedir
166   exec_start "#{basedir}/bin/dispatcher --areas #{meta_map_short[node[:overpass][:meta_mode]]} --db-dir=#{basedir}/db"
167   exec_stop "#{basedir}/bin/dispatcher --areas --terminate"
168   standard_output "append:#{logdir}/areas.log"
169   user username
170 end
171
172 service "overpass-area-dispatcher" do
173   action [:enable]
174 end
175
176 systemd_service "overpass-update" do
177   description "Overpass Update Application"
178   after ["overpass-dispatcher"]
179   working_directory basedir
180   exec_start "#{basedir}/bin/overpass-update-db"
181   standard_output "append:#{logdir}/update.log"
182   user username
183 end
184
185 if node[:overpass][:meta_mode] == "attic"
186   systemd_service "overpass-area-processor" do
187     description "Overpass Area Processor"
188     after ["overpass-area-dispatcher"]
189     working_directory basedir
190     exec_start "#{basedir}/bin/overpass-update-areas"
191     standard_output "append:#{logdir}/area-processor.log"
192     nice 19
193     user username
194   end
195 else
196   systemd_service "overpass-area-processor" do
197     description "Overpass Area Processor"
198     after ["overpass-area-dispatcher"]
199     working_directory basedir
200     exec_start "#{basedir}/bin/osm3s_query --progress --rules"
201     standard_input "file:#{srcdir}/rules/areas.osm3s"
202     standard_output "append:#{logdir}/area-processor.log"
203     nice 19
204     user username
205   end
206 end
207
208 systemd_timer "overpass-area-processor" do
209   description "Update areas in Overpass"
210   on_calendar "*-*-* *:*:00"
211 end
212
213 service "overpass-area-processor" do
214   action [:enable]
215 end
216
217 template "/etc/logrotate.d/overpass" do
218   source "logrotate.erb"
219   owner "root"
220   group "root"
221   mode "644"
222   variables :logdir => logdir
223 end
224
225 # Munin scripts
226
227 %w[db_lag request_count].each do |name|
228   template "#{basedir}/munin/overpass_#{name}" do
229     source "munin_#{name}.erb"
230     owner username
231     group username
232     mode "755"
233     variables :basedir => basedir
234   end
235
236   munin_plugin "overpass_#{name}" do
237     target "#{basedir}/munin/overpass_#{name}"
238     conf "munin.erb"
239     conf_variables :user => username
240   end
241 end