#!/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