diff --git a/install-helper.sh b/install-helper.sh deleted file mode 100755 index 5e3c20f..0000000 --- a/install-helper.sh +++ /dev/null @@ -1,301 +0,0 @@ -#!/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_curl_opts="-fsSL" -http_wget_opts="--quiet" - -http_bin="" -http_opts="" -http_out="" - -detect_http_bin() -{ - if type -p curl >/dev/null 2>&1; then - http_bin="curl" - http_opts="$http_curl_opts" - http_out="-o" - #curl -fsSL "$url" -o "$PREFIX/tmp/$pkg" - elif type -p wget >/dev/null 2>&1; then - http_bin="wget" - http_opts="$http_wget_opts" - http_out="-O" - #wget --quiet "$url" -O "$PREFIX/tmp/$pkg" - else - echo "Aborted, could not find curl or wget" - return 7 - fi -} - -http_get() -{ - if [ -e "$1" ]; then - rsync -a "$1" "$2" - elif type -p curl >/dev/null 2>&1; then - $http_bin $http_curl_opts $http_out "$2" "$1" - elif type -p wget >/dev/null 2>&1; then - $http_bin $http_wget_opts $http_out "$2" "$1" - else - echo "Aborted, could not find curl or wget" - return 7 - fi -} - -dap_dl() -{ - http_get "$1" "$2" -} - -dap_dl_bash() -{ - dap_url=$1 - #dap_args=$2 - rm -rf /tmp/dap-tmp-runner.sh - $http_bin $http_opts $http_out /tmp/dap-tmp-runner.sh "$dap_url"; bash /tmp/dap-tmp-runner.sh; rm /tmp/dap-tmp-runner.sh -} - -detect_http_bin - -## END HTTP_GET ## - - -mvdir_backward_compat() -{ - old_dir=$1 - new_dir=$2 - # The symlink has already been set up, so no need to do anything. - if [ -L $old_dir ] && [ $(readlink $old_dir) == "$new_dir" ]; then - return 0 - fi - - if [ -d $old_dir ]; then - if [ $(ls $old_dir | wc -l) -gt 0 ]; then - mv ${old_dir}/* ${new_dir}/ - fi - rm -r ${old_dir} - #rmdir ${old_dir} - fi - - ln -snf $new_dir $old_dir -} - -################### -# # -# 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 $my_app_name" -} - -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() -{ - #echo "install etc config $MY_ROOT / $my_app_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") || true - $sudo_cmd chown -R _www:_www $(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 - #echo "install service" - - 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 - echo "" -} - -## 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() -{ - #echo "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 -export NODE_PATH=/opt/walnut/lib/node_modules -export NPM_CONFIG_PREFIX=/opt/walnut -$sudo_cmd mkdir -p $NODE_PATH -$sudo_cmd chown -R $(whoami) /opt/walnut -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#v1' - -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" -#installer_base="$( dirname "${BASH_SOURCE[0]}" )/dist" -installer_base="/srv/walnut/core/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 -install_my_app() -{ - # This function shouldn't need to use $sudo_cmd because it is called immediately after - # /srv/walnut is chown-ed and we only mess with things in that directory. - - #git clone git@git.daplie.com:Daplie/walnut.js.git - #git clone https://git.daplie.com/Daplie/walnut.js.git /srv/walnut/core - mkdir -p /srv/walnut/{core,lib,var,etc,config,node_modules} - rm -rf /srv/walnut/core/node_modules - ln -sf ../node_modules /srv/walnut/core/node_modules - mkdir -p /srv/walnut/var/sites - mkdir -p /srv/walnut/etc/org.oauth3.consumer - mkdir -p /srv/walnut/etc/client-api-grants - mkdir -p /srv/walnut/packages/{rest,api,pages,services} - - # backwards compat - mvdir_backward_compat /srv/walnut/packages/client-api-grants /srv/walnut/etc/client-api-grants - mvdir_backward_compat /srv/walnut/packages/sites /srv/walnut/var/sites - - - if [ ! -d "/srv/walnut/core/lib/walnut@daplie.com/setup" ]; then - git clone https://git.daplie.com/Daplie/walnut_launchpad.git /srv/walnut/core/lib/walnut@daplie.com/setup - fi - - pushd /srv/walnut/core/lib/walnut@daplie.com/setup - if [ ! -d "./.git/" ]; then - echo "'/srv/walnut/core/lib/walnut@daplie.com/setup' exists but is not a git repository... not sure what to do here..." - fi - git checkout v1.2 - git pull - popd - - pushd /srv/walnut/core - export NODE_PATH=/opt/walnut/lib/node_modules - export NPM_CONFIG_PREFIX=/opt/walnut - /opt/walnut/bin/npm install - popd -} - -$sudo_cmd mkdir -p /srv/walnut -$sudo_cmd chown -R $(whoami) /srv/walnut - -install_my_app -create_skeleton -install_uninstaller -install_service - -$sudo_cmd chown -R www-data:www-data /opt/walnut || true -$sudo_cmd chown -R _www:_www /opt/walnut || true -$sudo_cmd chown -R www-data:www-data /srv/walnut || true -$sudo_cmd chown -R _www:_www /srv/walnut || true -$sudo_cmd chmod -R ug+rwX /srv/walnut -$sudo_cmd chmod -R ug+rwX /opt/walnut -# +s sets the setuid/setgid bit, which when set on directories makes it so anything -# created inside the directory maintains the same user/group (depending on the bits -# set). Any directory created within a directory with those bits set will also have -# those bits set. When setuid or setgid bits are set on a file however it means that -# if the file is executed it will run with the permissions of the user/group no matter -# who actually runs it (see the ping executable for example). -# I'm not sure that all systems actually support the use of these bits. -find /srv/walnut -type d -exec $sudo_cmd chmod ug+s {} \; || true -find /opt/walnut -type d -exec $sudo_cmd chmod ug+s {} \; || true diff --git a/install.sh b/install.sh index 8505656..fbbb931 100644 --- a/install.sh +++ b/install.sh @@ -1,121 +1,4 @@ #!/bin/bash -# Not every platform has or needs sudo, gotta save them O(1)s... -sudo_cmd="" -((EUID)) && [[ -z "$ANDROID_ROOT" ]] && sudo_cmd="sudo" - -set -e -set -u - -############################### -# # -# boilerplate for curl / wget # -# # -############################### - -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" - #curl -fsSL "$caddy_url" -o "$PREFIX/tmp/$caddy_pkg" - elif type -p wget >/dev/null 2>&1; then - http_get="wget" - http_opts="--quiet" - http_out="-O" - #wget --quiet "$caddy_url" -O "$PREFIX/tmp/$caddy_pkg" - 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 - -############################### -# # -# actual script continues... # -# # -############################### - -install_walnut() -{ - $sudo_cmd mkdir -p /srv/walnut/{var,etc,packages,node_modules} - # www-data exists on linux, _www exists on mac OS - $sudo_cmd chown -R $(whoami):www-data /srv/walnut || $sudo_cmd chown -R $(whoami):_www /srv/walnut - if [ ! -d "/srv/walnut/core/" ]; then - git clone https://git.daplie.com/Daplie/walnut.js.git /srv/walnut/core - fi - pushd /srv/walnut/core - if [ ! -d "./.git/" ]; then - echo "'/srv/walnut/core' exists but is not a git repository... not sure what to do here..." - fi - git checkout v1.2 - git pull - popd - rm -rf /srv/walnut/core/node_modules - ln -sf ../node_modules /srv/walnut/core/node_modules - /srv/walnut/core/install-helper.sh /srv/walnut - # Now that the install is finished we need to set the owner to the user that will actually - # be running the walnut server. - $sudo_cmd chown -R www-data:www-data /srv/walnut || $sudo_cmd chown -R _www:_www /srv/walnut -} - -# Install node -echo "----Installing Nodejs and NPM----" -echo "v8.2.1" > /tmp/NODEJS_VER -daplie-install-node-dev -npm install -g npm@4 - -# Install goldilocks -echo "----Installing goldilocks.js----" -daplie-install-goldilocks - -echo "----Installing walnut.js----" -#$sudo_cmd mkdir -p /opt/goldilocks/{lib,bin,etc} -#export NODE_PATH=/opt/walnut/lib/node_modules -#export NPM_CONFIG_PREFIX=/opt/walnut -old_PATH=$PATH -export PATH=/opt/walnut/bin:$PATH - -# Install walnut -install_walnut - -# Install bower, some systems may be missing it, and it is a dependency -/opt/walnut/bin/npm install -g bower -touch /.bowerrc -echo '{ "allow_root": true }' > /.bowerrc - -# Restore PATH to original value -export PATH=$old_PATH - -echo "" -echo "You must have some set of domain set up to properly use goldilocks+walnut:" -echo "" -echo " example.com" -echo " www.example.com" -echo " api.example.com" -echo " assets.example.com" -echo " cloud.example.com" -echo " api.cloud.example.com" -echo "" -echo "Check the WALNUT README.md for more info and how to set up /etc/goldilocks/goldilocks.yml" -echo "" +curl -fsSL https://git.daplie.com/Daplie/walnut.js/raw/master/installer/install.sh -o walnut-installer.sh +bash walnut-installer.sh