31592b9babd6ab4380a6c362981a152824165eb4
[chef.git] / cookbooks / taginfo / recipes / default.rb
1 #
2 # Cookbook Name:: taginfo
3 # Recipe:: default
4 #
5 # Copyright 2014, 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 #     http://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 require "json"
21
22 include_recipe "apache::ssl"
23 include_recipe "passenger"
24 include_recipe "git"
25
26 package "libsqlite3-dev"
27 package "zlib1g-dev"
28 package "libosmpbf-dev"
29 package "libprotobuf-dev"
30 package "libboost-dev"
31 package "libexpat1-dev"
32 package "libsparsehash-dev"
33 package "libgd2-xpm-dev"
34 package "make"
35 package "g++"
36
37 package "sqlite3"
38
39 package "osmosis"
40
41 package "ruby"
42 package "rubygems"
43 gem_package "json"
44 gem_package "sqlite3"
45 gem_package "sinatra"
46 gem_package "sinatra-r18n"
47 gem_package "rack-contrib"
48
49 directory "/var/log/taginfo" do
50   owner "taginfo"
51   group "taginfo"
52   mode 0755
53 end
54
55 template "/etc/logrotate.d/taginfo" do
56   source "logrotate.erb"
57   owner "root"
58   group "root"
59   mode 0644
60 end
61
62 node[:taginfo][:sites].each do |site|
63   name = site[:name]
64   directory = site[:directory] || "/srv/#{name}"
65   description = site[:description]
66   icon = site[:icon]
67   contact = site[:contact]
68
69   directory "/var/log/taginfo/#{site}" do
70     owner "taginfo"
71     group "taginfo"
72     mode 0755
73   end
74
75   directory directory do
76     owner "taginfo"
77     group "taginfo"
78     mode 0755
79   end
80
81   git "#{directory}/osmium" do
82     action :sync
83     repository "git://github.com/joto/osmium.git"
84     revision "master"
85     user "taginfo"
86     group "taginfo"
87   end
88
89   git "#{directory}/taginfo" do
90     action :sync
91     repository "git://github.com/joto/taginfo.git"
92     revision "master"
93     user "taginfo"
94     group "taginfo"
95   end
96
97   settings = JSON.parse(IO.read("#{directory}/taginfo/taginfo-config-example.json"))
98
99   settings["instance"]["url"] = "http://#{name}/"
100   settings["instance"]["description"] = description
101   settings["instance"]["icon"] = "/img/logo/#{icon}.png"
102   settings["instance"]["contact"] = contact
103   settings["logging"]["directory"] = "/var/log/taginfo/#{site}"
104   settings["opensearch"]["shortname"] = "Taginfo"
105   settings["opensearch"]["contact"] = "webmaster@openstreetmap.org"
106   settings["sources"]["db"]["planetfile"] = "#{directory}/planet/planet.pbf"
107   settings["tagstats"]["cxxflags"] = "-I../../osmium/include"
108
109   file "#{directory}/taginfo-config.json" do
110     owner "taginfo"
111     group "taginfo"
112     mode 0644
113     content JSON.pretty_generate(settings)
114   end
115
116   execute "#{directory}/taginfo/tagstats/Makefile" do
117     action :nothing
118     command "make"
119     cwd "#{directory}/taginfo/tagstats"
120     user "taginfo"
121     group "taginfo"
122     subscribes :run, "git[#{directory}/osmium]"
123     subscribes :run, "git[#{directory}/taginfo]"
124     notifies :restart, "service[apache2]"
125   end
126
127   directory "#{directory}/taginfo/web/tmp" do
128     owner "taginfo"
129     group "taginfo"
130     mode 0755
131   end
132
133   directory "#{directory}/data" do
134     owner "taginfo"
135     group "taginfo"
136     mode 0755
137   end
138
139   directory "#{directory}/download" do
140     owner "taginfo"
141     group "taginfo"
142     mode 0755
143   end
144
145   directory "#{directory}/sources" do
146     owner "taginfo"
147     group "taginfo"
148     mode 0755
149   end
150
151   directory "#{directory}/planet" do
152     owner "taginfo"
153     group "taginfo"
154     mode 0755
155   end
156
157   remote_file "#{directory}/planet/planet.pbf" do
158     action :create_if_missing
159     source "http://planet.openstreetmap.org/pbf/planet-latest.osm.pbf"
160     owner "taginfo"
161     group "taginfo"
162     mode 0644
163   end
164
165   directory "#{directory}/planet/log" do
166     owner "taginfo"
167     group "taginfo"
168     mode 0755
169   end
170
171   directory "#{directory}/planet/replication" do
172     owner "taginfo"
173     group "taginfo"
174     mode 0755
175   end
176
177   template "#{directory}/planet/replication/configuration.txt" do
178     source "configuration.txt.erb"
179     owner "taginfo"
180     group "taginfo"
181     mode 0644
182   end
183
184   file "#{directory}/planet/replication/download.lock" do
185     owner "taginfo"
186     group "taginfo"
187     mode 0644
188   end
189
190   directory "#{directory}/bin" do
191     owner "taginfo"
192     group "taginfo"
193     mode 0755
194   end
195
196   template "#{directory}/bin/update-planet" do
197     source "update-planet.erb"
198     owner "taginfo"
199     group "taginfo"
200     mode 0755
201     variables :directory => directory
202   end
203
204   template "#{directory}/bin/update-taginfo" do
205     source "update-taginfo.erb"
206     owner "taginfo"
207     group "taginfo"
208     mode 0755
209     variables :directory => directory
210   end
211
212   template "#{directory}/bin/update" do
213     source "update.erb"
214     owner "taginfo"
215     group "taginfo"
216     mode 0755
217     variables :directory => directory
218   end
219
220   apache_site name do
221     template "apache.erb"
222     directory "#{directory}/taginfo/web/public"
223   end
224 end