225 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			225 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # something or other about android and tmux using PREFIX
 | |
| #: "${PREFIX:=''}"
 | |
| MY_ROOT=""
 | |
| if [ -z "${PREFIX-}" ]; then
 | |
|   MY_ROOT=""
 | |
| else
 | |
|   MY_ROOT="$PREFIX"
 | |
| fi
 | |
| # Not every platform has or needs sudo, gotta save them O(1)s...
 | |
| sudo_cmd=""
 | |
| ((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo"
 | |
| 
 | |
| ###############################
 | |
| #                             #
 | |
| #         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"
 | |
|   touch "$2"
 | |
| }
 | |
| 
 | |
| 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"
 | |
| 
 | |
| my_app_etc_config="etc/${my_app_name}/${my_app_name}.yml"
 | |
| my_app_etc_example_config="etc/${my_app_name}/${my_app_name}.example.yml"
 | |
| 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 ""
 | |
|   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"
 | |
| 
 | |
|   $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"
 | |
| 
 | |
|   echo "$my_app_name started with systemctl, check its status like so"
 | |
|   echo "  $sudo_cmd systemctl status $my_app_name"
 | |
|   echo "  $sudo_cmd journalctl -xe -u goldilocks"
 | |
| }
 | |
| 
 | |
| install_for_launchd()
 | |
| {
 | |
|   echo ""
 | |
|   echo "Installing as launchd service"
 | |
|   echo ""
 | |
|   # See http://www.launchd.info/
 | |
|   mkdir -p $(dirname "$my_app_dir/$my_app_launchd_service")
 | |
|   dap_dl "$installer_base/$my_app_launchd_service" "$my_app_dir/$my_app_launchd_service"
 | |
|   $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"
 | |
| 
 | |
|   echo "$my_app_name started with launchd"
 | |
| }
 | |
| 
 | |
| install_etc_config()
 | |
| {
 | |
|   $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"
 | |
| 
 | |
|   if [ ! -e "$MY_ROOT/$my_app_etc_config" ]; then
 | |
|     $sudo_cmd mkdir -p $(dirname "$MY_ROOT/$my_app_etc_config")
 | |
|     mkdir -p $(dirname "$my_app_dir/$my_app_etc_config")
 | |
|     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
 | |
| 
 | |
|   # 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
 | |
|   $sudo_cmd chmod 775 $(dirname "$MY_ROOT/$my_app_etc_config")
 | |
|   $sudo_cmd chmod 664 "$MY_ROOT/$my_app_etc_config"
 | |
| }
 | |
| 
 | |
| install_service()
 | |
| {
 | |
|   install_etc_config
 | |
| 
 | |
|   installable=""
 | |
|   if [ -d "$MY_ROOT/etc/systemd/system" ]; then
 | |
|     install_for_systemd
 | |
|     installable="true"
 | |
|   fi
 | |
|   if [ -d "/Library/LaunchDaemons" ]; then
 | |
|     install_for_launchd
 | |
|     installable="true"
 | |
|   fi
 | |
|   if [ -z "$installable" ]; then
 | |
|     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
 | |
| }
 | |
| 
 | |
| ## END SERVICE_INSTALL ##
 | |
| 
 | |
| 
 | |
| 
 | |
| set -e
 | |
| set -u
 | |
| 
 | |
| # Install
 | |
| # TODO install to tmp location, then move to /opt
 | |
| 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
 | |
| $sudo_cmd mkdir -p /var/www
 | |
| $sudo_cmd mkdir -p /opt/goldilocks/{lib,bin,etc}
 | |
| 
 | |
| # Dependencies
 | |
| dap_dl_bash "https://git.daplie.com/Daplie/node-install-script/raw/master/setup-min.sh"
 | |
| 
 | |
| # Change to user perms
 | |
| 
 | |
| # OS X or Linux
 | |
| $sudo_cmd chown -R $(whoami) /opt/goldilocks/ || true
 | |
| 
 | |
| 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'
 | |
| # Finish up with submodule
 | |
| pushd /opt/goldilocks/lib/node_modules/goldilocks
 | |
| bash ./update-packages.sh
 | |
| popd
 | |
| 
 | |
| # Change to admin perms
 | |
| 
 | |
| # OS X
 | |
| $sudo_cmd chown -R _www:_www /var/www /srv/www /opt/goldilocks || true
 | |
| # Linux
 | |
| $sudo_cmd chown -R www-data:www-data /var/www /srv/www /opt/goldilocks || true
 | |
| 
 | |
| # 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
 | |
| dap_dl "https://git.daplie.com/Daplie/goldilocks.js/raw/master/uninstall.sh" "./goldilocks-uninstall"
 | |
| $sudo_cmd chmod 755 "./goldilocks-uninstall"
 | |
| # OS X
 | |
| $sudo_cmd chown root:wheel "./goldilocks-uninstall" || true
 | |
| # Linux
 | |
| $sudo_cmd chown root:root "./goldilocks-uninstall" || true
 | |
| $sudo_cmd mv "./goldilocks-uninstall" "/usr/local/bin/uninstall-goldilocks"
 | |
| 
 | |
| # Install Service
 | |
| install_service
 |