37440de33c9d6dc27a0e105b9a803aa51184cc24
[feisty_meow.git] / scripts / site_avenger / revamp_cakelampvm.sh
1 #!/bin/bash
2
3 # fixes the cakelampvm permissions according to the way.
4
5 ##############
6
7 if [[ $EUID != 0 ]]; then
8   echo "This script must be run as root or sudo."
9   exit 1
10 fi
11
12 ##############
13
14 export WORKDIR="$( \cd "$(\dirname "$0")" && \pwd )"  # obtain the script's working directory.
15 export FEISTY_MEOW_APEX="$( \cd "$WORKDIR/../.." && \pwd )"
16
17 export NO_HELLO=right
18 source "$FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh"
19 source "$FEISTY_MEOW_SCRIPTS/system/common_sysadmin.sh"
20
21 ##############
22
23 # new requirement is to get the sql root password, since we need to do some sql db configuration.
24 echo -n "Please enter the MySQL root account password: "
25 read mysql_passwd
26 if [ -z "$mysql_passwd" ]; then
27   echo "This script must have the sql root password to proceed."
28   exit 1
29 fi
30
31 ##############
32
33 sep
34
35 echo "Regenerating feisty meow loading dock."
36
37 reconfigure_feisty_meow
38 test_or_die "feisty meow reconfiguration"
39 chown -R "$(logname)":"$(logname)" /home/$(logname)/.[a-zA-Z0-9]*
40 test_or_die "fix after reconfigured as sudo"
41
42 ##############
43
44 # set up some crucial users in the mysql db that we seem to have missed previously.
45
46 sep
47
48 echo "Adding users to the mysql database."
49
50 mysql -u root -p"$mysql_passwd" <<EOF
51   create user if not exists 'root'@'%' IDENTIFIED BY '$mysql_passwd';
52   grant all privileges on *.* TO 'root'@'%' with grant option;
53
54   create user if not exists 'wampcake'@'%' IDENTIFIED BY 'bakecamp';
55   grant all privileges on *.* TO 'wampcake'@'%' with grant option;
56
57   create user if not exists 'lampcake'@'%' IDENTIFIED BY 'bakecamp';
58   grant all privileges on *.* TO 'lampcake'@'%' with grant option;
59 EOF
60 test_or_die "configuring root, wampcake and lampcake users on mysql"
61
62 ##############
63
64 echo "Making some important permission changes..."
65
66 # fix up the main web storage.
67 chown -R www-data:www-data /var/www 
68 test_or_die "chown www-data"
69 group_perm /var/www 
70 test_or_die "group_perm www-data"
71
72 ##############
73
74 # set up access on some important folders for the developer user.
75 chown -R developer:developer /home/developer /home/developer/.[a-zA-Z0-9]*
76 test_or_die "chown developer home"
77 harsh_perm /home/developer/.ssh
78 test_or_die "harsh_perm setting on developer .ssh"
79 chown -R developer:developer /etc/apache2 /etc/bind 
80 test_or_die "chown apache2 and bind to developer"
81 group_perm /etc/apache2 /etc/bind 
82 test_or_die "group perms on apache2 and bind"
83
84 ##############
85
86 # fix perms for fred user.
87 chown -R fred:fred /home/fred /home/archives/stuffing /home/fred/.[a-zA-Z0-9]*
88 test_or_die "chown fred home"
89 group_perm $HOME/apps
90 test_or_die "group perms on fred's apps"
91 harsh_perm /home/fred/.ssh
92 test_or_die "harsh_perm setting on fred .ssh"
93 chown -R fred:fred /opt/feistymeow.org 
94 test_or_die "chown feisty meow to fred"
95 group_perm /opt/feistymeow.org 
96 test_or_die "group perms on feisty meow"
97 group_perm /home/fred/apps/mapsdemo
98 test_or_die "group perms on mapsdemo app"
99
100 echo "Done with important permission changes."
101
102 ##############
103 #
104 # some slightly tricky bits start here.  we want to massage the vm into the
105 # best possible shape without needing to re-release it.
106 #
107 ##############
108
109 sep
110
111 echo "Updating developer welcome file."
112
113 # only update hello if they've still got the file there.  we don't want to
114 # keep forcing our hellos at people.
115 if [ -f "$HOME/hello.txt" ]; then
116   # copy the most recent hello file into place for the user.
117   \cp -f "$FEISTY_MEOW_APEX/production/sites/cakelampvm.com/hello.txt" "$HOME"
118   test_or_continue "copying hello file for user"
119 fi
120
121 ##############
122
123 # install a better editor app.
124
125 sep
126
127 echo "The script is about to install the bluefish editor and some dependencies.
128 If the app is not already installed, then this process takes only about a
129 minute on a slower home DSL internet connection..."
130
131 apt-get install -y bluefish &> "/tmp/install_bluefish-$(logname).log"
132 test_or_continue "installing bluefish editor"
133
134 ##############
135
136 # deploy any site updates here to the VM's cakelampvm.com site.
137 #
138 # we want to upgrade the default apache site to the latest, since the new
139 # version mirrors the one on the internet (but with green checks instead
140 # of red X's) and since we also support https on the new default version.
141 # we can do this again later if needed, by upping the numbers on the apache
142 # site config files.  our original site was 000 and the new version is 001,
143 # which we've done as a prefix on the config for some reason.  makes the
144 # code below easy at least.
145 if [ -L /etc/apache2/sites-enabled/000-default.conf ]; then
146
147   sep
148
149   # the old site is in place still, so let's update that.
150   echo "Updating default web sites to latest version."
151
152   a2enmod ssl
153   test_or_die "enabling SSL for secure websites"
154
155   restart_apache
156   test_or_die "getting SSL loaded in apache"
157
158   a2dissite 000-default
159   test_or_die "disabling old apache site"
160
161   rm -f /etc/apache2/sites-available/000-default.conf 
162   test_or_die "removing old apache site"
163
164   # copy in our new version of the default page.
165 #hmmm: would be nice if this worked without mods for any new version, besides just 001.  see apache env var file below for example implem.
166   \cp -f $FEISTY_MEOW_APEX/production/sites/cakelampvm.com/rolling/default_page.001/* \
167       /etc/apache2/sites-available
168   test_or_die "installing new apache default sites"
169
170   # there should only be ours at this version level and with that prefix.
171   a2ensite 001-*
172   test_or_die "enabling new apache default sites"
173
174   restart_apache
175 fi
176
177 ##############
178
179 # fix up the apache site so that HSTS is disabled.  otherwise we can't view
180 # the https site for cakelampvm.com once the domain name switch has occurred.
181
182 sep
183
184 # we operate only on our own specialized tls conf file.  hopefully no one has messed with it besides revamp.
185 # note the use of the character class :blank: below to match spaces or tabs.
186 search_replace "^[[:blank:]]*Header always set Strict-Transport-Security.*" "# not good for cakelampvm.com -- Header always set Strict-Transport-Security \"max-age=63072000; includeSubdomains;\"" /etc/apache2/conf-library/tls-enabling.conf
187 if [ $? -ne 0 ]; then
188   echo the apache tls-enabling.conf file seems to have already been patched to disable strict transport security. 
189 else
190   restart_apache
191   echo successfully patched the apache tls-enabling.conf file to disable strict transport security. 
192 fi
193
194 ##############
195
196 # fix up bind so that we think of any address with cakelampvm.com on the end
197 # as being on the vm.  this is already true for some specific sites, but we
198 # want the wildcard enabled to ease the use of DNS for windows folks.
199
200 sep
201
202 grep -q "\*[[:blank:]]*IN A[[:blank:]]*10.28.42.20" /etc/bind/cakelampvm.com.conf
203 if [ $? -eq 0 ]; then
204   # already present.
205   echo the bind settings for wildcard domains off of cakelampvm.com seems to already be present. 
206 else
207   echo "
208
209
210 ;;;;;;
211
212 ; our bind magic, a wildcard domain, for all other sites with cakelampvm.com
213 ; in the domain.  this forces any other sites besides the ones above to route
214 ; to the actual vm IP address, which currently is singular and very fixated.
215 *                               IN A            10.28.42.20
216                                 IN HINFO        "linux vm" "ubuntu"
217
218 ;;;;;;
219
220
221
222 " >> /etc/bind/cakelampvm.com.conf
223   restart_bind
224   echo "successfully added wildcard domains to the cakelampvm.com bind configuration."
225 fi
226
227 ##############
228
229 # fix samba configuration for (ass-headed) default of read-only in user homes.
230 # why cripple a necessary feature by default?
231
232 sep
233
234 pattern="[#;][[:blank:]]*read only = yes"
235 replacement="read only = no"
236
237 # we just always do the replacement now, after realizing the sentinel pattern
238 # was acutally already in the file...  too much subtlety can get one into trouble.
239 sed -i "0,/$pattern/{s/$pattern/$replacement/}" /etc/samba/smb.conf
240 test_or_die "patching samba configuration to enable write acccess on user home dirs"
241 # sweet, looks like that worked...
242 restart_samba
243 echo successfully patched the samba configuration to enable writes on user home directories. 
244
245 ##############
246
247 # add the latest version of the cakelampvm environment variables for apache.
248
249 sep
250
251 # drop existing file, if already configured.  ignore errors.
252 a2disconf env_vars_cakelampvm &>/dev/null
253
254 # plug in the new version, just stomping anything there.
255 # note: we only expect to have one version of the env_vars dir at a time in place in feisty...
256 \cp -f $FEISTY_MEOW_APEX/production/sites/cakelampvm.com/rolling/env_vars.*/env_vars_cakelampvm.conf /etc/apache2/conf-available
257 test_or_die "copying environment variables file into place"
258
259 # enable the new version of the config file.
260 a2enconf env_vars_cakelampvm
261 test_or_die "enabling the new cakelampvm environment config for apache"
262
263 echo Successfully configured the apache2 environment variables needed for cakelampvm.
264
265 ##############
266 ##############
267
268 # sequel--tell them they're great and show the hello again also.
269
270 sep
271
272 regenerate
273 test_or_die "regenerating feisty meow scripts"
274 chown -R "$(logname)":"$(logname)" /home/$(logname)/.[a-zA-Z0-9]*
275 test_or_die "fix after regenerate as sudo"
276 echo "
277
278
279 Thanks for revamping your cakelampvm.  :-)
280 "
281
282 ##############
283
284