1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
#!/usr/bin/make -f
#
# Copyright (C) 2013 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# -*- Make -*-
all: substitutions-done gitano-configured lorry-configured cache-configured mason-configured nfs-configured cert-generated
USERS := git lorry cache mason
.PHONY: substitutions-done
substitutions-done: /etc/trove-setup.sed hostname-not-baserock
sed -f /etc/trove-setup.sed -i \
/usr/share/gitano/skel/gitano-admin/*/*.lace \
/usr/share/gitano/skel/gitano-admin/*/*.lua \
/usr/share/gitano/skel/gitano-admin/users/*/user.conf \
/etc/cgitrc /etc/gitano-setup.clod /etc/lorry.conf
/etc/trove-setup.sed:
@echo "You need to create $@ to continue."
@echo "There is $@.example which you can work from."
@echo "re-run trove-early-setup once you're done with this."
@exit 1
.PHONY: hostname-not-baserock
hostname-not-baserock:
test "x$$(hostname)" != "baserock"
# $1 == username to make
define make_user_rules
/home/$1/.created:
adduser -g "Trove $1 service" -s /bin/bash -D $1
su -c 'mkdir .ssh; chmod 750 .ssh' - $1
su -c 'ssh-keygen -t rsa -N "" -q -f .ssh/id_rsa' - $1
(cat /etc/ssh/ssh_host_*_key.pub | cut -d\ -f1,2 | \
sed -e's/^/'$(shell hostname)',localhost /' > \
/home/$1/.ssh/known_hosts)
chown $1:$1 /home/$1/.ssh/known_hosts
chmod 600 /home/$1/.ssh/known_hosts
touch $$@
ALL_USER_TARGETS := $$(ALL_USER_TARGETS) /home/$1/.created
endef
$(eval $(foreach USER,$(USERS),$(call make_user_rules,$(USER))))
/home/git/.git-setup: $(ALL_USER_TARGETS)
su -c 'git config --global user.name "Trove Git Controller"' - git
su -c 'git config --global user.email "git@trove"' - git
touch $@
/home/git/.gitano-setup: /home/git/.git-setup
su -c 'gitano-setup /etc/gitano-setup.clod' - git
passwd -u git
touch $@
/home/git/.gitano-lorry-setup: /home/git/.gitano-setup
cp /home/lorry/.ssh/id_rsa.pub /tmp/lorry.pub
su -c 'ssh git@localhost as lorry sshkey add trove < /tmp/lorry.pub' - git
rm /tmp/lorry.pub
touch $@
.PHONY: gitano-configured
gitano-configured: /home/git/.gitano-setup
/home/lorry/.lorry-setup: $(ALL_USER_TARGETS)
su -c 'mkdir /home/lorry/bundles /home/lorry/tarballs' - lorry
touch $@
/home/lorry/.lorry-controller-setup: /home/lorry/.lorry-setup /home/git/.gitano-lorry-setup
PREFIX=$$(echo "##PREFIX##" | sed -f /etc/trove-setup.sed); \
su -c "ssh localhost create $${PREFIX}/local-config/lorries" - git; \
su -c "git clone ssh://localhost/$${PREFIX}/local-config/lorries.git /tmp/lorries" - git; \
su -c "mkdir /home/lorry/lorry-controller-area" - lorry; \
su -c "git clone ssh://git@localhost/$${PREFIX}/local-config/lorries.git /home/lorry/lorry-controller-area/git" - lorry
su -c "sed -f /etc/trove-setup.sed < /usr/share/trove-setup/lorry-controller.conf > /tmp/lorries/lorry-controller.conf" - git
su -c "sed -f /etc/trove-setup.sed < /usr/share/trove-setup/README.lorry-controller > /tmp/lorries/README" - git
su -c "mkdir /tmp/lorries/open-source-lorries" - git
su -c "cp /usr/share/trove-setup/open-source-lorries/README /tmp/lorries/open-source-lorries/README" - git
su -c "mkdir /tmp/lorries/closed-source-lorries" - git
su -c "cp /usr/share/trove-setup/closed-source-lorries/README /tmp/lorries/closed-source-lorries/README" - git
su -c "cd /tmp/lorries; git add README lorry-controller.conf open-source-lorries/README closed-source-lorries/README; git commit -m 'Initial configuration'; git push origin master" - git
su -c "rm -rf /tmp/lorries" - git
su -c "cd /home/lorry/lorry-controller-area/git; git remote update; git checkout master" - lorry
su -c "echo '*/1 * * * * flock -x -n /home/lorry/lorry-controller-area/lockfile -c lorry-controller --work-area=/home/lorry/lorry-controller-area --log=syslog --log-level=info --html-file=/home/lorry/lc-status.html' | crontab -" - lorry
touch $@
.PHONY: lorry-configured
lorry-configured: /home/lorry/.lorry-setup /home/lorry/.lorry-controller-setup
/home/cache/.cache-setup: $(ALL_USER_TARGETS)
su -c 'mkdir /home/cache/artifacts' - cache
su -c 'mkdir /home/cache/ccache' - cache
echo '/home/cache/ccache *(rw,all_squash,no_subtree_check,anonuid=1002,anongid=1002)' > /etc/exports.cache
touch $@
.PHONY: cache-configured
cache-configured: /home/cache/.cache-setup
/home/git/.mason-setup: /home/git/.gitano-setup $(ALL_USER_TARGETS)
PREFIX=$$(echo "##PREFIX##" | sed -f /etc/trove-setup.sed); \
su -c "ssh localhost create $${PREFIX}/local-config/mason" - git; \
su -c "git clone ssh://localhost/$${PREFIX}/local-config/mason.git /tmp/mason-config" - git
su -c "mkdir /tmp/mason-config/ci1" - git
su -c "cp /var/lib/trove-setup/hosts.json.txt /tmp/mason-config/ci1" - git
su -c "cp /var/lib/trove-setup/systems.json.txt /tmp/mason-config/ci1" - git
su -c "cd /tmp/mason-config; git add ci1; git commit -m 'Set initial Mason config'; git push origin master" - git
su -c "rm -fr /tmp/mason-config" - git
su -c 'mkdir /home/mason/jobs' - mason
echo '/home/mason/jobs *(rw,all_squash,no_subtree_check,anonuid=1003,anongid=1003)' > /etc/exports.mason
touch $@
.PHONY: mason-configured
mason-configured: /home/git/.mason-setup
/etc/exports: /home/cache/.cache-setup /home/git/.mason-setup
cat /etc/exports.cache /etc/exports.mason >/etc/exports
.PHONY: nfs-configured
nfs-configured: /etc/exports
/home/git/.cert-generated:
mkdir -p /etc/lighttpd/certs
echo -ne '\n\n\n\n\n\n\n' | openssl req -new -x509 \
-keyout /etc/lighttpd/certs/lighttpd.pem \
-out /etc/lighttpd/certs/lighttpd.pem -days 36525 -nodes
touch $@
.PHONY: cert-generated
cert-generated: /home/git/.cert-generated
|