]> git.openstreetmap.org Git - chef.git/blob - cookbooks/overpass/recipes/default.rb
72b6550a0620f0aa4f68a4e09a7166f31d37e72d
[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 "munin"
22 include_recipe "apache"
23
24 username = "overpass"
25 basedir = data_bag_item("accounts", username)["home"]
26
27 %w[bin site diffs db src].each do |dirname|
28   directory "#{basedir}/#{dirname}" do
29     owner username
30     group username
31     mode "755"
32     recursive true
33   end
34 end
35
36 ## Install overpass from source
37
38 srcdir = "#{basedir}/src/osm-3s_v#{node[:overpass][:version]}"
39
40 package %w[
41   build-essential
42   libexpat1-dev
43   zlib1g-dev
44   liblz4-dev
45   pyosmium
46   osmium-tool
47 ]
48
49 remote_file "#{srcdir}.tar.gz" do
50   action :create
51   source "https://dev.overpass-api.de/releases/osm-3s_v#{node[:overpass][:version]}.tar.gz"
52   owner username
53   group username
54   mode "644"
55 end
56
57 execute "source_tarball" do
58   cwd "#{basedir}/src"
59   command "tar -xf #{srcdir}.tar.gz"
60   user username
61   notifies :run, "execute[install_overpass]"
62   not_if { ::File.exist?(srcdir) }
63 end
64
65 execute "install_overpass" do
66   action :nothing
67   user username
68   cwd srcdir
69   command "./configure --enable-lz4 --prefix=#{basedir} && make install"
70 end
71
72 ## Setup Apache
73
74 ssl_certificate node[:fqdn] do
75   domains [node[:fqdn],
76            node[:overpass][:fqdn]]
77   notifies :reload, "service[apache2]"
78 end
79
80 apache_module "cgi"
81 apache_module "headers"
82
83 apache_site "default" do
84   action :disable
85 end
86
87 apache_site "#{node[:overpass][:fqdn]}" do
88   template "apache.erb"
89   directory "#{basedir}/site"
90   variables :script_directory => "#{basedir}/cgi-bin"
91 end
92
93 ## Overpass deamons
94
95 meta_map_short = {
96   "no" => "",
97   "meta" => "--meta",
98   "attic" => "--attic"
99 }
100
101 logdir = node[:overpass][:logdir]
102
103 directory logdir do
104   owner username
105   group username
106   mode "755"
107   recursive true
108 end
109
110 %w[overpass-update-db overpass-update-areas].each do |fname|
111   template "#{basedir}/bin/#{fname}" do
112     source "#{fname}.erb"
113     owner "overpass"
114     group "overpass"
115     mode "700"
116     variables :basedir => basedir, :srcdir => srcdir
117   end
118 end
119
120 template "#{basedir}/bin/overpass-import-db" do
121   source "overpass-import-db.erb"
122   owner "root"
123   group "root"
124   mode "755"
125   variables :basedir => basedir, :username => username, :srcdir => srcdir
126 end
127
128 systemd_service "overpass-dispatcher" do
129   description "Overpass Main Dispatcher"
130   working_directory basedir
131   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]}"
132   exec_stop "#{basedir}/bin/dispatcher --osm-base --terminate"
133   standard_output "append:#{logdir}/osm_base.log"
134   user username
135 end
136
137 service "overpass-dispatcher" do
138   action [:enable]
139 end
140
141 systemd_service "overpass-area-dispatcher" do
142   description "Overpass Area Dispatcher"
143   after ["overpass-dispatcher"]
144   working_directory basedir
145   exec_start "#{basedir}/bin/dispatcher --areas #{meta_map_short[node[:overpass][:meta_mode]]} --db-dir=#{basedir}/db"
146   exec_stop "#{basedir}/bin/dispatcher --areas --terminate"
147   standard_output "append:#{logdir}/areas.log"
148   user username
149 end
150
151 service "overpass-area-dispatcher" do
152   action [:enable]
153 end
154
155 systemd_service "overpass-update" do
156   description "Overpass Update Application"
157   after ["overpass-dispatcher"]
158   working_directory basedir
159   exec_start "#{basedir}/bin/overpass-update-db"
160   standard_output "append:#{logdir}/update.log"
161   user username
162 end
163
164 if node[:overpass][:meta_mode] == "attic"
165   systemd_service "overpass-area-processor" do
166     description "Overpass Area Processor"
167     after ["overpass-area-dispatcher"]
168     working_directory basedir
169     exec_start "#{basedir}/bin/overpass-update-areas"
170     standard_output "append:#{logdir}/area-processor.log"
171     nice 19
172     user username
173   end
174 else
175   systemd_service "overpass-area-processor" do
176     description "Overpass Area Processor"
177     after ["overpass-area-dispatcher"]
178     working_directory basedir
179     exec_start "#{basedir}/bin/osm3s_query --progress --rules"
180     standard_input "file:#{srcdir}/rules/areas.osm3s"
181     standard_output "append:#{logdir}/area-processor.log"
182     nice 19
183     user username
184   end
185 end
186
187 systemd_timer "overpass-area-processor" do
188   description "Update areas in Overpass"
189   on_calendar "*-*-* *:*:00"
190 end
191
192 service "overpass-area-processor" do
193   action [:enable]
194 end