#!/bin/bash set -e set -u # 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" } 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 # # # ################### 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() { 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 $sudo_cmd chown -R www-data:www-data $(dirname "$MY_ROOT/$my_app_etc_config") $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 ## # Create dirs, set perms create_skeleton() { $sudo_cmd mkdir -p /srv/www $sudo_cmd mkdir -p /var/log/$my_app_name $sudo_cmd mkdir -p /etc/$my_app_name $sudo_cmd mkdir -p /var/$my_app_name $sudo_cmd mkdir -p /srv/$my_app_name $sudo_cmd mkdir -p /opt/$my_app_name } # Unistall install_uninstaller() { dap_dl "https://git.daplie.com/Daplie/walnut.js/raw/master/uninstall.sh" "./walnut-uninstall" $sudo_cmd chmod 755 "./walnut-uninstall" $sudo_cmd chown root:root "./walnut-uninstall" $sudo_cmd mv "./walnut-uninstall" "/usr/local/bin/uninstall-walnut" } # Dependencies dap_dl_bash "https://git.daplie.com/coolaj86/node-install-script/raw/master/setup-min.sh" # Install # npm install -g 'git+https://git@git.daplie.com/Daplie/walnut.js.git#fs-nosql' my_app_name=walnut my_app_pkg_name=com.daplie.walnut.web my_app_dir=$(mktemp -d) installer_base="https://git.daplie.com/Daplie/walnut.js/raw/master/dist" my_app_etc_config="etc/${my_app_name}/${my_app_name}.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 #git clone git@git.daplie.com:Daplie/walnut.js.git #git clone https://git.daplie.com/Daplie/walnut.js.git /srv/walnut/core sudo mkdir -p /srv/walnut/{core,lib,etc,config,node_modules} ln -sf ../node_modules /srv/walnut/core/node_modules sudo mkdir -p /srv/walnut/etc/org.oauth3.consumer sudo mkdir -p /srv/walnut/etc/org.oauth3.provider sudo mkdir -p /srv/walnut/packages/{api,pages,services} sudo chown -R $(whoami):$(whoami) /srv/walnut pushd /srv/walnut/core npm install popd create_skeleton install_uninstaller install_service