3 # fixes the cakelampvm permissions according to the way.
7 if [[ $EUID != 0 ]]; then
8 echo "This script must be run as root or sudo."
14 export WORKDIR="$( \cd "$(\dirname "$0")" && \pwd )" # obtain the script's working directory.
15 export FEISTY_MEOW_APEX="$( \cd "$WORKDIR/../.." && \pwd )"
18 source "$FEISTY_MEOW_APEX/scripts/core/launch_feisty_meow.sh"
19 # load dependencies for our script.
20 source "$FEISTY_MEOW_SCRIPTS/system/common_sysadmin.sh"
21 source "$FEISTY_MEOW_SCRIPTS/security/password_functions.sh"
25 # it's a requirement to have sql root password, since we may need some sql db configuration.
26 load_password /etc/mysql/secret_password mysql_passwd
27 if [ -z "$mysql_passwd" ]; then
28 read_password "Please enter the MySQL root account password:" mysql_passwd
30 if [ -z "$mysql_passwd" ]; then
31 echo "This script must have the sql root password to proceed."
34 store_password /etc/mysql/secret_password "$mysql_passwd"
41 echo "Regenerating feisty meow loading dock."
44 test_or_die "regenerating feisty meow configuration"
45 chown -R "$(logname)":"$(logname)" /home/$(logname)/.[a-zA-Z0-9]*
46 test_or_die "fix after reconfigured as sudo"
50 # set up some crucial users in the mysql db that we seem to have missed previously.
54 echo "Adding users to the mysql database."
56 #hmmm: good application for hiding output unless error here.
57 mysql -u root -p"$mysql_passwd" &>/dev/null <<EOF
58 create user if not exists 'root'@'%' IDENTIFIED BY '$mysql_passwd';
59 grant all privileges on *.* TO 'root'@'%' with grant option;
61 create user if not exists 'wampcake'@'%' IDENTIFIED BY 'bakecamp';
62 grant all privileges on *.* TO 'wampcake'@'%' with grant option;
64 create user if not exists 'lampcake'@'%' IDENTIFIED BY 'bakecamp';
65 grant all privileges on *.* TO 'lampcake'@'%' with grant option;
67 test_or_die "configuring root, wampcake and lampcake users on mysql"
73 echo "Making some important permission changes..."
75 # fix up the main web storage.
76 chown -R www-data:www-data /var/www
77 test_or_die "chown www-data"
79 test_or_die "group_perm www-data"
83 # set up access on some important folders for the developer user.
84 chown -R developer:developer /home/developer /home/developer/.[a-zA-Z0-9]*
85 test_or_die "chown developer home"
86 harsh_perm /home/developer/.ssh
87 test_or_die "harsh_perm setting on developer .ssh"
88 chown -R developer:developer /etc/apache2 /etc/bind
89 test_or_die "chown apache2 and bind to developer"
90 group_perm /etc/apache2 /etc/bind
91 test_or_die "group perms on apache2 and bind"
92 chown -R developer:developer /opt/feistymeow.org
93 test_or_die "chown feisty meow to developer"
94 group_perm /opt/feistymeow.org
95 test_or_die "group perms on feisty meow"
99 # fix perms for fred user.
100 chown -R fred:fred /home/fred /home/archives/stuffing /home/fred/.[a-zA-Z0-9]*
101 test_or_die "chown fred home"
102 group_perm $HOME/apps
103 test_or_die "group perms on fred's apps"
104 harsh_perm /home/fred/.ssh
105 test_or_die "harsh_perm setting on fred .ssh"
106 group_perm /home/fred/apps/mapsdemo
107 test_or_die "group perms on mapsdemo app"
109 echo "Done with important permission changes."
113 # some slightly tricky bits start here. we want to massage the vm into the
114 # best possible shape without needing to re-release it.
120 echo "Updating developer welcome file."
122 # only update hello if they've still got the file there. we don't want to
123 # keep forcing our hellos at people.
124 if [ -f "$HOME/hello.txt" ]; then
125 # copy the most recent hello file into place for the user.
126 \cp -f "$FEISTY_MEOW_APEX/production/sites/cakelampvm.com/hello.txt" "$HOME"
127 test_or_continue "copying hello file for user"
132 # install a better editor app.
136 echo "The script is about to install the bluefish editor and some dependencies.
137 If the app is not already installed, then this process takes about one minute
138 on a slow home DSL internet connection..."
140 apt-get install -y bluefish &> "/tmp/install_bluefish-$(logname).log"
141 test_or_continue "installing bluefish editor"
145 # deploy any site updates here to the VM's cakelampvm.com site.
147 # we want to upgrade the default apache site to the latest, since the new
148 # version mirrors the one on the internet (but with green checks instead
149 # of red X's) and since we also support https on the new default version.
150 # we can do this again later if needed, by upping the numbers on the apache
151 # site config files. our original site was 000 and the new version is 001,
152 # which we've done as a prefix on the config for some reason. makes the
153 # code below easy at least.
154 if [ -L /etc/apache2/sites-enabled/000-default.conf ]; then
158 # the old site is in place still, so let's update that.
159 echo "Updating default web sites to latest version."
162 test_or_die "enabling SSL for secure websites"
165 test_or_die "getting SSL loaded in apache"
167 a2dissite 000-default
168 test_or_die "disabling old apache site"
170 rm -f /etc/apache2/sites-available/000-default.conf
171 test_or_die "removing old apache site"
173 # copy in our new version of the default page.
174 #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.
175 \cp -f $FEISTY_MEOW_APEX/production/sites/cakelampvm.com/rolling/default_page.001/* \
176 /etc/apache2/sites-available
177 test_or_die "installing new apache default sites"
179 # there should only be ours at this version level and with that prefix.
181 test_or_die "enabling new apache default sites"
188 # fix up the apache site so that HSTS is disabled. otherwise we can't view
189 # the https site for cakelampvm.com once the domain name switch has occurred.
193 # we operate only on our own specialized tls conf file. hopefully no one has messed with it besides revamp.
194 # note the use of the character class :blank: below to match spaces or tabs.
195 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
196 if [ $? -ne 0 ]; then
197 echo the apache tls-enabling.conf file seems to have already been patched to disable strict transport security.
200 echo successfully patched the apache tls-enabling.conf file to disable strict transport security.
205 # fix up bind so that we think of any address with cakelampvm.com on the end
206 # as being on the vm. this is already true for some specific sites, but we
207 # want the wildcard enabled to ease the use of DNS for windows folks.
211 grep -q "\*[[:blank:]]*IN A[[:blank:]]*10.28.42.20" /etc/bind/cakelampvm.com.conf
212 if [ $? -eq 0 ]; then
214 echo the bind settings for wildcard domains off of cakelampvm.com seems to already be present.
221 ; our bind magic, a wildcard domain, for all other sites with cakelampvm.com
222 ; in the domain. this forces any other sites besides the ones above to route
223 ; to the actual vm IP address, which currently is singular and very fixated.
225 IN HINFO \"linux vm\" \"ubuntu\"
231 " >> /etc/bind/cakelampvm.com.conf
233 echo "successfully added wildcard domains to the cakelampvm.com bind configuration."
238 # fix samba configuration for (ass-headed) default of read-only in user homes.
239 # why cripple a necessary feature by default?
243 pattern="[#;][[:blank:]]*read only = yes"
244 replacement="read only = no"
246 # we just always do the replacement now, after realizing the sentinel pattern
247 # was acutally already in the file... too much subtlety can get one into trouble.
248 sed -i "0,/$pattern/{s/$pattern/$replacement/}" /etc/samba/smb.conf
249 test_or_die "patching samba configuration to enable write acccess on user home dirs"
250 # sweet, looks like that worked...
252 echo successfully patched the samba configuration to enable writes on user home directories.
256 # add the latest version of the cakelampvm environment variables for apache.
260 # drop existing file, if already configured. ignore errors.
261 a2disconf env_vars_cakelampvm &>/dev/null
263 # plug in the new version, just stomping anything there.
264 # note: we only expect to have one version of the env_vars dir at a time in place in feisty...
265 \cp -f $FEISTY_MEOW_APEX/production/sites/cakelampvm.com/rolling/env_vars.*/env_vars_cakelampvm.conf /etc/apache2/conf-available
266 test_or_die "copying environment variables file into place"
268 # enable the new version of the config file.
269 a2enconf env_vars_cakelampvm
270 test_or_die "enabling the new cakelampvm environment config for apache"
272 echo Successfully configured the apache2 environment variables needed for cakelampvm.
276 # add in a swap mount if not already configured.
280 echo "Checking existing swap partition configuration.
283 # check for existing swap.
284 free | grep -q "Swap:[[:blank:]]*[1-9][0-9]"
285 if [ $? -ne 0 ]; then
286 # no swap in current session, so add it.
287 echo "Enabling ramdisk swap partition...
291 Enabled ramdisk swap partition for current boot session."
294 # the above just gives this session a swap partition, but we want to have
295 # the vm boot with one also.
297 # check if there is already swap mentioned in the root crontab. we will get root's
298 # crontab below since this script has to run as sudo.
299 crontab -l | grep -iq add_swap_mount
300 if [ $? -ne 0 ]; then
301 # no existing swap setup in crontab, so add it.
303 Adding a boot-time ramdisk swap partition...
305 # need to do it carefully, since sed won't add lines to a null file. we thus
306 # create a temporary file to do our work in and ignore sed as a tool for this.
307 tmpfile="$(mktemp junk.XXXXXX)"
308 crontab -l 2>/dev/null >"$tmpfile"
310 # need to explicitly set any variables we will use.
311 FEISTY_MEOW_APEX=${FEISTY_MEOW_APEX}
312 # add swap space to increase memory available.
313 @reboot bash $FEISTY_MEOW_APEX/scripts/system/add_swap_mount.sh
315 # now install our new version of the crontab.
320 Added boot-time ramdisk swap partition to crontab for root."
327 echo Adding site avenger packages to composer.
328 # add in site avenger dependencies so we can build avcore properly.
329 composer config -g repositories.siteavenger composer https://packages.siteavenger.com/
334 # sequel--tell them they're great and show the hello again also.
339 test_or_die "regenerating feisty meow scripts"
340 chown -R "$(logname)":"$(logname)" /home/$(logname)/.[a-zA-Z0-9]*
341 test_or_die "fix after regenerate as sudo"
345 Thanks for revamping your cakelampvm. :-)
347 You may want to update your current shell's feisty meow environment by typing: