Makefile 8.79 KB
Newer Older
Michael Ott's avatar
Michael Ott committed
1
2
include config.mk

3
PROJECTS = FilePusher SysFsPusher CollectAgent ParastationProvider IPMIPusher
Axel Auweter's avatar
Axel Auweter committed
4
DISTFILES = thrift-0.9.1.tar.gz;https://dist.apache.org/repos/dist/release/thrift/0.9.1/thrift-0.9.1.tar.gz \
Axel Auweter's avatar
Axel Auweter committed
5
		apache-cassandra-1.2.11.tar.gz;http://mirror.netcologne.de/apache.org/cassandra/1.2.11/apache-cassandra-1.2.11-bin.tar.gz \
6
7
		mosquitto-1.1.3.tar.gz;http://mosquitto.org/files/source/mosquitto-1.1.3.tar.gz \
		rudeconfig-5.0.5.tar.gz;http://rudeserver.com/config/download/rudeconfig-5.0.5.tar.gz \
8
9
		popt-1.16.tar.gz;http://rpm5.org/files/popt/popt-1.16.tar.gz \
		ncurses-5.9.tar.gz;http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz \
Axel Auweter's avatar
Axel Auweter committed
10
		OpenIPMI-2.0.19.tar.gz;http://optimate.dl.sourceforge.net/project/openipmi/OpenIPMI%202.0%20Library/OpenIPMI-2.0.19.tar.gz \
11
		boost_1_54_0.tar.gz;http://netcologne.dl.sourceforge.net/project/boost/boost/1.54.0/boost_1_54_0.tar.gz
12
FETCH = wget -c --no-check-certificate -O -
13
MAKETHREADS ?= 4
14

15
CASSANDRA_CLUSTER_NAME                 = Datacenter Monitor Database
Axel Auweter's avatar
Axel Auweter committed
16
17
18
19
20
21
CASSANDRA_FLUSH_LARGEST_MEMTABLES_AT   = 0.5
CASSANDRA_REDUCE_CACHE_SIZES_AT        = 0.6
CASSANDRA_REDUCE_CACHE_CAPACITY_TO     = 0.4
CASSANDRA_PARTITIONER                  = org.apache.cassandra.dht.ByteOrderedPartitioner
CASSANDRA_COMMITLOG_TOTAL_SPACE_IN_MB  = 256
CASSANDRA_COMMITLOG_SEGMENT_SIZE_IN_MB = 16
22

23
24
25
DISTFILESNAMES = $(foreach f,$(DISTFILES),$(shell echo "$(f)" | sed 's/;.*//'))
DISTFILESPATHS = $(foreach f,$(DISTFILES),$(shell echo "$(f)" | sed 's/.tar.gz;.*//'))

Axel Auweter's avatar
Axel Auweter committed
26
CFLAGS += -I$(DCDBDEPLOYPATH)/include -I$(DCDBDEPLOYPATH)/include/ncurses -O0 -g
27
CXX11FLAGS = --std=c++11
Axel Auweter's avatar
Axel Auweter committed
28
LDFLAGS += -L$(DCDBDEPLOYPATH)/lib -O0 -g
29

30
.PHONY : info all clean cleanall distclean $(PROJECTS)
31
32
33
34
35
36

info:
	@echo ""
	@echo "DCDB - Data Center Database"
	@echo "Buildsystem description"
	@echo ""
Axel Auweter's avatar
Axel Auweter committed
37
38
	@echo "Use the DCDBDEPSPATH environment variable to specify a build path for the"
	@echo "dependencies. Currently, the project dependenceis will be built to:"
Michael Ott's avatar
Michael Ott committed
39
	@echo "$(DCDBDEPSPATH)"
40
	@echo ""
41
42
	@echo "Use the DCDBDEPLOYPATH environment variable to specifiy the path for deployment"
	@echo "of all tools. Currently, the directory for deployment/staging is:"
43
	@echo "$(DCDBDEPLOYPATH)"
44
45
46
47
48
49
50
	@echo ""
	@echo "There should only be a few requirements to build DCDB."
	@echo "On Ubuntu, these are: build-essential, cmake, libssl-dev"
	@echo "To run Cassandra, you should also have a JAVA runtime installed."
	@echo ""
	@echo "To start, please type:"
	@echo "     make all"
51
52

clean:
Michael Ott's avatar
Michael Ott committed
53
	@$(foreach p,$(PROJECTS),echo "Cleaning $(p)..." && make -C $(p) clean && echo;)
54
55

cleanall: clean
Michael Ott's avatar
Michael Ott committed
56
57
	@cd $(DCDBDEPSPATH) && rm -f .prerequesites .extract-distfiles .download-distfiles
	@cd $(DCDBDEPSPATH) && rm -rf mosquitto_build
Michael Ott's avatar
Michael Ott committed
58
	@$(foreach f,$(DISTFILESPATHS),echo "Cleaning $(f)..." && rm -rf $(DCDBDEPSPATH)/$(f) && echo;)
59

Michael Ott's avatar
Michael Ott committed
60
61
distclean: clean
	@echo "Wiping dependencies..."
Michael Ott's avatar
Michael Ott committed
62
	@rm -rf $(DCDBDEPSPATH)
63

Axel Auweter's avatar
Axel Auweter committed
64
65
66
67
68
69
70
mrproper: distclean
	$(eval U := $(shell whoami))
	@if [ "$(U)" = "root" ]; then echo "Sorry, I won't allow you to use mrproper as root."; exit 1; fi
	@echo ""
	@echo "Wiping installation directory..."
	@rm -rf $(DCDBDEPLOYPATH)

Michael Ott's avatar
Michael Ott committed
71
all: $(DCDBDEPSPATH)/.prerequesites
72
	@make $(PROJECTS)
73

Michael Ott's avatar
Michael Ott committed
74
$(DCDBDEPSPATH)/.prerequesites: $(DCDBDEPSPATH)/.extract-distfiles
75
76
77
78
	@echo ""
	@echo "Preparing patches..."
	@cp -a patches $(DCDBDEPSPATH)/

79
80
	@echo ""
	@echo "Building Mosquitto library..."
Michael Ott's avatar
Michael Ott committed
81
	@mkdir -p $(DCDBDEPSPATH)/mosquitto_build
82
	$(eval M := $(shell echo "$(DISTFILESPATHS)" | sed 's/.*mosquitto/mosquitto/' | sed 's/\ .*//'))
Michael Ott's avatar
Michael Ott committed
83
	@cd $(DCDBDEPSPATH)/mosquitto_build && cmake -DWITH_TLS=OFF -DCMAKE_INSTALL_PREFIX:PATH=$(DCDBDEPLOYPATH)/ $(DCDBDEPSPATH)/$(M) && make -j $(MAKETHREADS) && make install
84
85
86
87
	
	@echo ""
	@echo "Building Rudeconfig library..."
	$(eval R := $(shell echo "$(DISTFILESPATHS)" | sed 's/.*rudeconfig/rudeconfig/' | sed 's/\ .*//'))
Michael Ott's avatar
Michael Ott committed
88
	@cd $(DCDBDEPSPATH)/$(R) && ./configure --prefix=$(DCDBDEPLOYPATH) && make -j $(MAKETHREADS) && chmod +x install-sh && make install
89
90
91
92
93
94
95
96
97

	@echo ""
	@echo "Buidling Popt library..."
	$(eval P := $(shell echo "$(DISTFILESPATHS)" | sed 's/.*popt/popt/' | sed 's/\ .*//'))
	@cd $(DCDBDEPSPATH)/$(P) && ./configure --prefix=$(DCDBDEPLOYPATH) && make -j $(MAKETHREADS) && make install

	@echo ""
	@echo "Buidling Ncurses library..."
	$(eval N := $(shell echo "$(DISTFILESPATHS)" | sed 's/.*ncurses/ncurses/' | sed 's/\ .*//'))
98
	@if [ -e $(DCDBDEPSPATH)/patches/$(N).patch ]; then echo "Patching Ncurses..."; cd $(DCDBDEPSPATH)/$(N) && patch -p1 < $(DCDBDEPSPATH)/patches/$(N).patch; fi
99
100
101
102
103
104
	@cd $(DCDBDEPSPATH)/$(N) && ./configure --prefix=$(DCDBDEPLOYPATH) --with-shared --without-ada --without-manpages \
		--without-progs --without-tests && make -j $(MAKETHREADS) && make install

	@echo ""
	@echo "Buidling OpenIPMI library..."
	$(eval O := $(shell echo "$(DISTFILESPATHS)" | sed 's/.*OpenIPMI/OpenIPMI/' | sed 's/\ .*//'))
105
106
107
	@cd $(DCDBDEPSPATH)/$(O) && env CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" ./configure --prefix=$(DCDBDEPLOYPATH) --with-swig=no --with-perl=no --with-python-no
	@if [ `uname` == "Darwin" ]; then echo "Fixing OpenIPMI for Mac OS..."; cd $(DCDBDEPSPATH)/$(O) && find . -name 'Makefile*' | xargs sed -i '' -e 's/Map/map/g'; fi
	@cd $(DCDBDEPSPATH)/$(O) && env CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" make -j $(MAKETHREADS) && make install
108
109
110
111
	
	@echo ""
	@echo "Building Boost..."
	$(eval B := $(shell echo "$(DISTFILESPATHS)" | sed 's/.*boost/boost/' | sed 's/\ .*//'))
112
113
	@cd $(DCDBDEPSPATH)/$(B) && ./bootstrap.sh --prefix=$(DCDBDEPLOYPATH) \
		--with-libraries=atomic,chrono,date_time,exception,filesystem,program_options,thread,timer && ./b2 -j $(MAKETHREADS) install
114
115
116
117

	@echo ""
	@echo "Buidling Thrift..."
	$(eval T := $(shell echo "$(DISTFILESPATHS)" | sed 's/.*thrift/thrift/' | sed 's/\ .*//'))
118
119
	@if [ -e $(DCDBDEPSPATH)/patches/$(T).patch ]; then echo "Patching Thrift..."; cd $(DCDBDEPSPATH)/$(T) && patch -p1 < $(DCDBDEPSPATH)/patches/$(T).patch; fi
	@cd $(DCDBDEPSPATH)/$(T) && env CXXFLAGS="$(CXX11FLAGS)" ./configure --prefix=$(DCDBDEPLOYPATH) --without-qt4 --without-csharp \
120
		--without-java --without-erlang --without-python --without-perl --without-php --without-php_extension \
Axel Auweter's avatar
Axel Auweter committed
121
		--without-ruby --without-haskell --without-go --without-d --with-cpp --with-boost=$(DCDBDEPLOYPATH) \
122
		--enable-libtool-lock --without-tests && env CXXFLAGS="$(CXX11FLAGS)" make -j $(MAKETHREADS) && env CXXFLAGS="$(CXX11FLAGS)" make install
123

124
125
126
	@echo ""
	@echo "Staging and configuring Cassandra..."
	@$(eval C := $(shell echo "$(DISTFILESPATHS)" | sed 's/.*apache-cassandra/apache-cassandra/' | sed 's/\ .*//'))
Michael Ott's avatar
Michael Ott committed
127
	@rsync -a $(DCDBDEPSPATH)/$(C)/ $(DCDBDEPLOYPATH)/cassandra
128
129
	@$(eval P := $(shell echo "$(DCDBDEPLOYPATH)" | sed 's/\//\\\//g'))
	@sed -i.original -e 's/\/var\/lib\/cassandra/$(P)\/var\/lib\/cassandra/g' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
130
	@sed -i -e 's/.*cluster_name:.*/cluster_name:\ '\''$(CASSANDRA_CLUSTER_NAME)'\''/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
Axel Auweter's avatar
Axel Auweter committed
131
132
133
134
135
136
	@sed -i -e 's/.*flush_largest_memtables_at:.*/flush_largest_memtables_at:\ $(CASSANDRA_FLUSH_LARGEST_MEMTABLES_AT)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*reduce_cache_sizes_at:.*/reduce_cache_sizes_at:\ $(CASSANDRA_REDUCE_CACHE_SIZES_AT)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*reduce_cache_capacity_to:.*/reduce_cache_capacity_to:\ $(CASSANDRA_REDUCE_CACHE_CAPACITY_TO)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*partitioner:.*/partitioner:\ $(CASSANDRA_PARTITIONER)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*commitlog_total_space_in_mb:.*/commitlog_total_space_in_mb: $(CASSANDRA_COMMITLOG_TOTAL_SPACE_IN_MB)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
	@sed -i -e 's/.*commitlog_segment_size_in_mb:.*/commitlog_segment_size_in_mb: $(CASSANDRA_COMMITLOG_SEGMENT_SIZE_IN_MB)/' $(DCDBDEPLOYPATH)/cassandra/conf/cassandra.yaml
137
138
	@sed -i.original -e 's/\/var\/log\/cassandra/$(P)\/var\/log\/cassandra/g' $(DCDBDEPLOYPATH)/cassandra/conf/log4j-server.properties

Michael Ott's avatar
Michael Ott committed
139
	@touch $(DCDBDEPSPATH)/.prerequesites
140
	
Michael Ott's avatar
Michael Ott committed
141
142
$(DCDBDEPSPATH)/.extract-distfiles: $(foreach f,$(DISTFILESPATHS),$(DCDBDEPSPATH)/$(f)/.dirstamp)
	@touch $(DCDBDEPSPATH)/.extract-distfiles
143
	
Michael Ott's avatar
Michael Ott committed
144
145
$(DCDBDEPSPATH)/.download-distfiles: $(foreach f,$(DISTFILESNAMES),$(DCDBDEPSPATH)/distfiles/$(f))
	@touch $(DCDBDEPSPATH)/.download-distfiles
146

Michael Ott's avatar
Michael Ott committed
147
148
$(DCDBDEPSPATH)/distfiles/%: 
	@mkdir -p $(DCDBDEPSPATH)/distfiles
149
150
151
	$(eval F := $(shell echo "$@" | sed 's/.*\///'))
	$(eval FF := $(shell echo "$(DISTFILES)" | sed 's/.*$(F);//' | sed 's/ .*//'))
	@echo "Downloading $(FF) as $(F)..."
Michael Ott's avatar
Michael Ott committed
152
	@cd $(DCDBDEPSPATH)/distfiles && $(FETCH) $(FF) > $(F)
153

Michael Ott's avatar
Michael Ott committed
154
$(DCDBDEPSPATH)/%/.dirstamp: $(DCDBDEPSPATH)/.download-distfiles
155
156
	$(eval F := $(shell echo "$@" | sed 's/\/.dirstamp//' | sed 's/.*\///'))
	@echo "Extracting $(F)..."
Michael Ott's avatar
Michael Ott committed
157
	@cd $(DCDBDEPSPATH) && tar xzf distfiles/$(F).tar.gz
158
159
	@touch $@

Michael Ott's avatar
Michael Ott committed
160
$(PROJECTS): $(DCDBDEPSPATH)/.prerequesites
Michael Ott's avatar
Michael Ott committed
161
	@echo ""
162
	@echo "Building $@..."
163
	@$(MAKE) -j $(MAKETHREADS) -C $@ 
164
	@echo "Installing $@..."
Michael Ott's avatar
Michael Ott committed
165
	@$(MAKE) -C $@ install