| 
									
										
										
										
											2017-05-04 23:43:39 -06:00
										 |  |  | #!/bin/bash
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-08 21:40:05 +00:00
										 |  |  | # something or other about android and tmux using PREFIX | 
					
						
							| 
									
										
										
										
											2017-05-08 21:44:36 +00:00
										 |  |  | #: "${PREFIX:=''}" | 
					
						
							| 
									
										
										
										
											2017-05-08 21:47:31 +00:00
										 |  |  | MY_ROOT="" | 
					
						
							|  |  |  | if [ -z "${PREFIX-}" ]; then | 
					
						
							|  |  |  |   MY_ROOT="" | 
					
						
							|  |  |  | else | 
					
						
							|  |  |  |   MY_ROOT="$PREFIX" | 
					
						
							| 
									
										
										
										
											2017-05-08 21:34:52 +00:00
										 |  |  | fi | 
					
						
							| 
									
										
										
										
											2017-05-08 21:47:31 +00:00
										 |  |  | # Not every platform has or needs sudo, gotta save them O(1)s... | 
					
						
							| 
									
										
										
										
											2017-05-08 21:40:05 +00:00
										 |  |  | sudo_cmd="" | 
					
						
							|  |  |  | ((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  | ############################### | 
					
						
							|  |  |  | #                             # | 
					
						
							|  |  |  | #         http_get            # | 
					
						
							|  |  |  | # boilerplate for curl / wget # | 
					
						
							|  |  |  | #                             # | 
					
						
							|  |  |  | ############################### | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # See https://git.daplie.com/Daplie/daplie-snippets/blob/master/bash/http-get.sh | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | http_get="" | 
					
						
							|  |  |  | http_opts="" | 
					
						
							|  |  |  | http_out="" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | detect_http_get() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   if type -p curl >/dev/null 2>&1; then | 
					
						
							|  |  |  |     http_get="curl" | 
					
						
							|  |  |  |     http_opts="-fsSL" | 
					
						
							|  |  |  |     http_out="-o" | 
					
						
							|  |  |  |   elif type -p wget >/dev/null 2>&1; then | 
					
						
							|  |  |  |     http_get="wget" | 
					
						
							|  |  |  |     http_opts="--quiet" | 
					
						
							|  |  |  |     http_out="-O" | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     echo "Aborted, could not find curl or wget" | 
					
						
							|  |  |  |     return 7 | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | dap_dl() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   $http_get $http_opts $http_out "$2" "$1" | 
					
						
							| 
									
										
										
										
											2017-07-10 17:05:37 -06:00
										 |  |  |   touch "$2" | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | dap_dl_bash() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   dap_url=$1 | 
					
						
							|  |  |  |   #dap_args=$2 | 
					
						
							|  |  |  |   rm -rf dap-tmp-runner.sh | 
					
						
							|  |  |  |   $http_get $http_opts $http_out dap-tmp-runner.sh "$dap_url"; bash dap-tmp-runner.sh; rm dap-tmp-runner.sh | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | detect_http_get | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## END HTTP_GET ## | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ################### | 
					
						
							|  |  |  | #                 # | 
					
						
							|  |  |  | # Install service # | 
					
						
							|  |  |  | #                 # | 
					
						
							|  |  |  | ################### | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | my_app_name=goldilocks | 
					
						
							|  |  |  | my_app_pkg_name=com.daplie.goldilocks.web | 
					
						
							|  |  |  | my_app_dir=$(mktemp -d) | 
					
						
							|  |  |  | installer_base="https://git.daplie.com/Daplie/goldilocks.js/raw/master" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-08 16:50:41 -06:00
										 |  |  | my_app_etc_config="etc/${my_app_name}/${my_app_name}.yml" | 
					
						
							| 
									
										
										
										
											2017-05-23 14:21:26 -05:00
										 |  |  | my_app_etc_example_config="etc/${my_app_name}/${my_app_name}.example.yml" | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  | my_app_systemd_service="etc/systemd/system/${my_app_name}.service" | 
					
						
							|  |  |  | my_app_systemd_tmpfiles="etc/tmpfiles.d/${my_app_name}.conf" | 
					
						
							|  |  |  | my_app_launchd_service="Library/LaunchDaemons/${my_app_pkg_name}.plist" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | install_for_systemd() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   echo "" | 
					
						
							|  |  |  |   echo "Installing as systemd service" | 
					
						
							|  |  |  |   echo "" | 
					
						
							| 
									
										
										
										
											2017-05-08 21:56:40 +00:00
										 |  |  |   mkdir -p $(dirname "$my_app_dir/$my_app_systemd_service") | 
					
						
							|  |  |  |   dap_dl "$installer_base/$my_app_systemd_service" "$my_app_dir/$my_app_systemd_service" | 
					
						
							|  |  |  |   $sudo_cmd mv "$my_app_dir/$my_app_systemd_service" "$MY_ROOT/$my_app_systemd_service" | 
					
						
							|  |  |  |   $sudo_cmd chown -R root:root "$MY_ROOT/$my_app_systemd_service" | 
					
						
							|  |  |  |   $sudo_cmd chmod 644 "$MY_ROOT/$my_app_systemd_service" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   mkdir -p $(dirname "$my_app_dir/$my_app_systemd_tmpfiles") | 
					
						
							|  |  |  |   dap_dl "$installer_base/$my_app_systemd_tmpfiles" "$my_app_dir/$my_app_systemd_tmpfiles" | 
					
						
							|  |  |  |   $sudo_cmd mv "$my_app_dir/$my_app_systemd_tmpfiles" "$MY_ROOT/$my_app_systemd_tmpfiles" | 
					
						
							|  |  |  |   $sudo_cmd chown -R root:root "$MY_ROOT/$my_app_systemd_tmpfiles" | 
					
						
							|  |  |  |   $sudo_cmd chmod 644 "$MY_ROOT/$my_app_systemd_tmpfiles" | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   $sudo_cmd systemctl stop "${my_app_name}.service" >/dev/null 2>/dev/null | 
					
						
							|  |  |  |   $sudo_cmd systemctl daemon-reload | 
					
						
							|  |  |  |   $sudo_cmd systemctl start "${my_app_name}.service" | 
					
						
							|  |  |  |   $sudo_cmd systemctl enable "${my_app_name}.service" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-08 17:04:36 -06:00
										 |  |  |   echo "$my_app_name started with systemctl, check its status like so" | 
					
						
							|  |  |  |   echo "  $sudo_cmd systemctl status $my_app_name" | 
					
						
							| 
									
										
										
										
											2017-05-09 01:39:45 +00:00
										 |  |  |   echo "  $sudo_cmd journalctl -xe -u goldilocks" | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | install_for_launchd() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   echo "" | 
					
						
							|  |  |  |   echo "Installing as launchd service" | 
					
						
							|  |  |  |   echo "" | 
					
						
							|  |  |  |   # See http://www.launchd.info/ | 
					
						
							| 
									
										
										
										
											2017-05-08 21:56:40 +00:00
										 |  |  |   mkdir -p $(dirname "$my_app_dir/$my_app_launchd_service") | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  |   dap_dl "$installer_base/$my_app_launchd_service" "$my_app_dir/$my_app_launchd_service" | 
					
						
							| 
									
										
										
										
											2017-05-08 21:47:31 +00:00
										 |  |  |   $sudo_cmd mv "$my_app_dir/$my_app_launchd_service" "$MY_ROOT/$my_app_launchd_service" | 
					
						
							|  |  |  |   $sudo_cmd chown root:wheel "$MY_ROOT/$my_app_launchd_service" | 
					
						
							|  |  |  |   $sudo_cmd chmod 0644 "$MY_ROOT/$my_app_launchd_service" | 
					
						
							|  |  |  |   $sudo_cmd launchctl unload -w "$MY_ROOT/$my_app_launchd_service" >/dev/null 2>/dev/null | 
					
						
							|  |  |  |   $sudo_cmd launchctl load -w "$MY_ROOT/$my_app_launchd_service" | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |   echo "$my_app_name started with launchd" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-08 16:50:41 -06:00
										 |  |  | install_etc_config() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-05-23 14:21:26 -05:00
										 |  |  |   $sudo_cmd mkdir -p $(dirname "$MY_ROOT/$my_app_etc_example_config") | 
					
						
							|  |  |  |   mkdir -p $(dirname "$my_app_dir/$my_app_etc_example_config") | 
					
						
							|  |  |  |   dap_dl "$installer_base/$my_app_etc_example_config" "$my_app_dir/$my_app_etc_example_config" | 
					
						
							|  |  |  |   $sudo_cmd mv "$my_app_dir/$my_app_etc_example_config" "$MY_ROOT/$my_app_etc_example_config" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-08 16:50:41 -06:00
										 |  |  |   if [ ! -e "$MY_ROOT/$my_app_etc_config" ]; then | 
					
						
							| 
									
										
										
										
											2017-05-08 17:04:36 -06:00
										 |  |  |     $sudo_cmd mkdir -p $(dirname "$MY_ROOT/$my_app_etc_config") | 
					
						
							|  |  |  |     mkdir -p $(dirname "$my_app_dir/$my_app_etc_config") | 
					
						
							| 
									
										
										
										
											2017-05-08 16:50:41 -06:00
										 |  |  |     dap_dl "$installer_base/$my_app_etc_config" "$my_app_dir/$my_app_etc_config" | 
					
						
							|  |  |  |     $sudo_cmd mv "$my_app_dir/$my_app_etc_config" "$MY_ROOT/$my_app_etc_config" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-16 02:17:18 -05:00
										 |  |  |   # OS X | 
					
						
							|  |  |  |   $sudo_cmd chown -R _www:_www $(dirname "$MY_ROOT/$my_app_etc_config") || true | 
					
						
							|  |  |  |   # Linux | 
					
						
							|  |  |  |   $sudo_cmd chown -R www-data:www-data $(dirname "$MY_ROOT/$my_app_etc_config") || true | 
					
						
							| 
									
										
										
										
											2017-05-08 17:04:36 -06:00
										 |  |  |   $sudo_cmd chmod 775 $(dirname "$MY_ROOT/$my_app_etc_config") | 
					
						
							| 
									
										
										
										
											2017-05-08 16:50:41 -06:00
										 |  |  |   $sudo_cmd chmod 664 "$MY_ROOT/$my_app_etc_config" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  | install_service() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-05-08 16:50:41 -06:00
										 |  |  |   install_etc_config | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-05 01:37:53 -06:00
										 |  |  |   installable="" | 
					
						
							| 
									
										
										
										
											2017-05-08 21:47:31 +00:00
										 |  |  |   if [ -d "$MY_ROOT/etc/systemd/system" ]; then | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  |     install_for_systemd | 
					
						
							| 
									
										
										
										
											2017-05-05 01:37:53 -06:00
										 |  |  |     installable="true" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  |   if [ -d "/Library/LaunchDaemons" ]; then | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  |     install_for_launchd | 
					
						
							| 
									
										
										
										
											2017-05-05 01:37:53 -06:00
										 |  |  |     installable="true" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  |   if [ -z "$installable" ]; then | 
					
						
							| 
									
										
										
										
											2017-05-05 01:33:36 -06:00
										 |  |  |     echo "" | 
					
						
							|  |  |  |     echo "Unknown system service init type. You must install as a system service manually." | 
					
						
							|  |  |  |     echo '(please file a bug with the output of "uname -a")' | 
					
						
							|  |  |  |     echo "" | 
					
						
							|  |  |  |   fi | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-08 19:34:39 +00:00
										 |  |  | ## END SERVICE_INSTALL ## | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | set -e | 
					
						
							|  |  |  | set -u | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Install | 
					
						
							| 
									
										
										
										
											2017-05-22 14:23:18 -05:00
										 |  |  | # TODO install to tmp location, then move to /opt | 
					
						
							| 
									
										
										
										
											2017-05-15 23:34:30 -05:00
										 |  |  | export NODE_PATH=/opt/goldilocks/lib/node_modules | 
					
						
							|  |  |  | export NPM_CONFIG_PREFIX=/opt/goldilocks | 
					
						
							|  |  |  | $sudo_cmd mkdir -p /etc/goldilocks | 
					
						
							|  |  |  | $sudo_cmd mkdir -p /var/log/goldilocks | 
					
						
							|  |  |  | $sudo_cmd mkdir -p /srv/www | 
					
						
							| 
									
										
										
										
											2017-05-16 02:17:18 -05:00
										 |  |  | $sudo_cmd mkdir -p /var/www | 
					
						
							| 
									
										
										
										
											2017-05-15 23:34:30 -05:00
										 |  |  | $sudo_cmd mkdir -p /opt/goldilocks/{lib,bin,etc} | 
					
						
							| 
									
										
										
										
											2017-05-22 14:23:18 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-25 15:29:17 -06:00
										 |  |  | # Dependencies | 
					
						
							|  |  |  | dap_dl_bash "https://git.daplie.com/coolaj86/node-install-script/raw/master/setup-min.sh" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-22 14:23:18 -05:00
										 |  |  | # Change to user perms | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # OS X or Linux | 
					
						
							|  |  |  | $sudo_cmd chown -R $(whoami) /opt/goldilocks/ || true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-21 15:40:27 -06:00
										 |  |  | my_npm="$NPM_CONFIG_PREFIX/bin/npm" | 
					
						
							|  |  |  | $my_npm install -g npm@4 | 
					
						
							|  |  |  | $my_npm install -g 'git+https://git@git.daplie.com/Daplie/goldilocks.js.git#v1' | 
					
						
							| 
									
										
										
										
											2017-05-22 14:23:18 -05:00
										 |  |  | # Finish up with submodule | 
					
						
							|  |  |  | pushd /opt/goldilocks/lib/node_modules/goldilocks | 
					
						
							|  |  |  | bash ./update-packages.sh | 
					
						
							|  |  |  | popd | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Change to admin perms | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-16 02:17:18 -05:00
										 |  |  | # OS X | 
					
						
							| 
									
										
										
										
											2017-06-15 16:50:24 -06:00
										 |  |  | $sudo_cmd chown -R _www:_www /var/www /srv/www /opt/goldilocks || true | 
					
						
							| 
									
										
										
										
											2017-05-16 02:17:18 -05:00
										 |  |  | # Linux | 
					
						
							| 
									
										
										
										
											2017-06-15 16:50:24 -06:00
										 |  |  | $sudo_cmd chown -R www-data:www-data /var/www /srv/www /opt/goldilocks || true | 
					
						
							| 
									
										
										
										
											2017-05-08 19:34:39 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-15 16:50:24 -06:00
										 |  |  | # make sure the files are all read/write for the owner and group, and then set | 
					
						
							|  |  |  | # the setuid and setgid bits so that any files/directories created inside these | 
					
						
							|  |  |  | # directories have the same owner and group. | 
					
						
							|  |  |  | $sudo_cmd chmod -R ug+rwX /opt/goldilocks | 
					
						
							|  |  |  | find /opt/goldilocks -type d -exec $sudo_cmd chmod ug+s {} \; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Uninstall | 
					
						
							| 
									
										
										
										
											2017-05-08 20:08:25 -06:00
										 |  |  | dap_dl "https://git.daplie.com/Daplie/goldilocks.js/raw/master/uninstall.sh" "./goldilocks-uninstall" | 
					
						
							|  |  |  | $sudo_cmd chmod 755 "./goldilocks-uninstall" | 
					
						
							| 
									
										
										
										
											2017-06-19 13:11:46 -06:00
										 |  |  | # OS X | 
					
						
							|  |  |  | $sudo_cmd chown root:wheel "./goldilocks-uninstall" || true | 
					
						
							|  |  |  | # Linux | 
					
						
							|  |  |  | $sudo_cmd chown root:root "./goldilocks-uninstall" || true | 
					
						
							| 
									
										
										
										
											2017-05-08 20:08:25 -06:00
										 |  |  | $sudo_cmd mv "./goldilocks-uninstall" "/usr/local/bin/uninstall-goldilocks" | 
					
						
							| 
									
										
										
										
											2017-05-08 20:06:25 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-08 19:34:39 +00:00
										 |  |  | # Install Service | 
					
						
							| 
									
										
										
										
											2017-05-08 16:50:41 -06:00
										 |  |  | install_service |