]> git.openstreetmap.org Git - chef.git/blob - cookbooks/overpass/recipes/default.rb
d807eab696c0e6e0a68ba6e13a42c3756a04922a
[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 "#{node[:overpass][:fqdn]}" do
84   template "apache.erb"
85   directory "#{basedir}/site"
86   variables :script_directory => "#{basedir}/cgi-bin"
87 end
88
89 ## Overpass deamons
90
91 meta_map_short = {
92   "no" => "",
93   "meta" => "--meta",
94   "attic" => "--attic"
95 }
96
97 logdir = node[:overpass][:logdir]
98
99 directory logdir do
100   owner username
101   group username
102   mode "755"
103   recursive true
104 end
105
106 %w[overpass-update-db overpass-update-areas].each do |fname|
107   template "#{basedir}/bin/#{fname}" do
108     source "#{fname}.erb"
109     owner "overpass"
110     group "overpass"
111     mode "700"
112     variables :basedir => basedir, :srcdir => srcdir
113   end
114 end
115
116 template "#{basedir}/bin/overpass-import-db" do
117   source "overpass-import-db.erb"
118   owner "root"
119   group "root"
120   mode "755"
121   variables :basedir => basedir, :username => username, :srcdir => srcdir
122 end
123
124 systemd_service "overpass-dispatcher" do
125   description "Overpass Main Dispatcher"
126   working_directory basedir
127   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]}"
128   exec_stop "#{basedir}/bin/dispatcher --osm-base --terminate"
129   standard_output "append:#{logdir}/osm_base.log"
130   user username
131 end
132
133 service "overpass-dispatcher" do
134   action [:enable]
135 end
136
137 systemd_service "overpass-area-dispatcher" do
138   description "Overpass Area Dispatcher"
139   after ["overpass-dispatcher"]
140   working_directory basedir
141   exec_start "#{basedir}/bin/dispatcher --areas #{meta_map_short[node[:overpass][:meta_mode]]} --db-dir=#{basedir}/db"
142   exec_stop "#{basedir}/bin/dispatcher --areas --terminate"
143   standard_output "append:#{logdir}/areas.log"
144   user username
145 end
146
147 service "overpass-area-dispatcher" do
148   action [:enable]
149 end
150
151 systemd_service "overpass-update" do
152   description "Overpass Update Application"
153   after ["overpass-dispatcher"]
154   working_directory basedir
155   exec_start "#{basedir}/bin/overpass-update-db"
156   standard_output "append:#{logdir}/update.log"
157   user username
158 end
159
160 if node[:overpass][:meta_mode] == "attic"
161   systemd_service "overpass-area-processor" do
162     description "Overpass Area Processor"
163     after ["overpass-area-dispatcher"]
164     working_directory basedir
165     exec_start "#{basedir}/bin/overpass-update-areas"
166     standard_output "append:#{logdir}/area-processor.log"
167     nice 19
168     user username
169   end
170 else
171   systemd_service "overpass-area-processor" do
172     description "Overpass Area Processor"
173     after ["overpass-area-dispatcher"]
174     working_directory basedir
175     exec_start "#{basedir}/bin/osm3s_query --progress --rules"
176     standard_input "file:#{srcdir}/rules/areas.osm3s"
177     standard_output "append:#{logdir}/area-processor.log"
178     nice 19
179     user username
180   end
181 end
182
183 systemd_timer "overpass-area-processor" do
184   description "Update areas in Overpass"
185   on_calendar "*-*-* *:*:00"
186 end
187
188 service "overpass-area-processor" do
189   action [:enable]
190 end