#!/bin/bash set -e set -u my_tmp=$(mktemp -d) my_app_name=walnut my_app_pkg_name=com.daplie.walnut.web ### IMPORTANT ### ### VERSION ### #my_app_ver="v1.1" my_app_ver="installer-v2" my_launchpad_ver="v1.2" my_azp_oauth3_ver="v1.1.3" my_iss_oauth3_rest_ver="v1.2.0" my_iss_oauth3_pages_ver="v1.2.1" my_www_daplie_ver=v1.0.15 export NODE_VERSION="v8.9.0" ################# export NODE_PATH=$my_tmp/opt/$my_app_name/lib/node_modules export PATH=$PATH:$my_tmp/opt/$my_app_name/bin/ export NPM_CONFIG_PREFIX=$my_tmp/opt/$my_app_name my_npm="$NPM_CONFIG_PREFIX/bin/npm" ################# my_app_dir=$my_tmp # TODO un-hardcode core at al #my_app_dist=$my_tmp/opt/$my_app_name/lib/node_modules/$my_app_name/dist my_app_dist=$my_tmp/opt/$my_app_name/core/dist git_base="https://git.daplie.com/Daplie/walnut.js.git" installer_base="https://git.daplie.com/Daplie/walnut.js/raw/$my_app_ver" # # Install to tmp location, then move to /opt # echo "Installing to $my_tmp (will be moved after install)" #mkdir -p $my_tmp/opt/$my_app_name/lib/node_modules/$my_app_name mkdir -p $my_tmp/opt/$my_app_name/lib/node_modules/$my_app_name #git clone $git_base $my_tmp/opt/$my_app_name/lib/node_modules/$my_app_name git clone $git_base $my_tmp/opt/$my_app_name/core #pushd $my_tmp/opt/$my_app_name/lib/node_modules/$my_app_name pushd $my_tmp/opt/$my_app_name/core git checkout $my_app_ver mkdir -p $my_tmp/{etc,opt,srv,var}/$my_app_name mkdir -p "$my_tmp/var/log/$my_app_name" mkdir -p "$my_tmp/opt/$my_app_name"/{bin,config,core,etc,lib,node_modules,var} ln -s ../core/bin/$my_app_name.js $my_tmp/opt/$my_app_name/bin/$my_app_name ln -s ../core/bin/$my_app_name.js $my_tmp/opt/$my_app_name/bin/$my_app_name.js #ln -s ../lib/node_modules/$my_app_name/bin/$my_app_name.js $my_tmp/opt/$my_app_name/bin/$my_app_name #ln -s ../lib/node_modules/$my_app_name/bin/$my_app_name.js $my_tmp/opt/$my_app_name/bin/$my_app_name.js mkdir -p "$my_tmp/opt/$my_app_name"/packages/{api,pages,rest,services} mkdir -p "$my_tmp/opt/$my_app_name"/etc/client-api-grants # TODO move packages and sites to /srv, grants to /etc ln -s ../etc/client-api-grants "$my_tmp/opt/$my_app_name"/packages/client-api-grants mkdir -p "$my_tmp/opt/$my_app_name"/var/sites ln -s ../var/sites "$my_tmp/opt/$my_app_name"/packages/sites mkdir -p "$my_tmp/etc/$my_app_name" chmod 775 "$my_tmp/etc/$my_app_name" cat "$my_app_dist/etc/$my_app_name/$my_app_name.example.yml" > "$my_tmp/etc/$my_app_name/$my_app_name.example.yml" chmod 664 "$my_tmp/etc/$my_app_name/$my_app_name.example.yml" mkdir -p $my_tmp/var/log/$my_app_name # # Helpers # source ./installer/sudo-cmd.sh source ./installer/http-get.sh # # Dependencies # echo $NODE_VERSION > /tmp/NODEJS_VER # This will read the NODE_* and PATH variables set previously, as well as /tmp/NODEJS_VER http_bash "https://git.coolaj86.com/coolaj86/node-installer.sh/raw/v1.1/install.sh" $my_npm install -g npm@4 $my_npm install -g bower touch $my_tmp/opt/$my_app_name/.bowerrc echo '{ "allow_root": true }' > $my_tmp/opt/$my_app_name/.bowerrc #pushd $my_tmp/opt/$my_app_name/lib/node_modules/$my_app_name pushd $my_tmp/opt/$my_app_name/core mkdir -p ../node_modules ln -s ../node_modules node_modules $my_npm install popd git clone https://git.daplie.com/Daplie/walnut_launchpad.git $my_tmp/opt/$my_app_name/core/lib/walnut@daplie.com/setup pushd $my_tmp/opt/$my_app_name/core/lib/walnut@daplie.com/setup git pull git checkout $my_launchpad_ver git clone https://git.daplie.com/OAuth3/oauth3.js.git ./assets/oauth3.org pushd assets/oauth3.org git checkout $my_azp_oauth3_ver popd popd pushd $my_tmp/opt/$my_app_name/packages git clone https://git.daplie.com/OAuth3/issuer_oauth3.org.git rest/issuer@oauth3.org pushd rest/issuer@oauth3.org/ git checkout $my_iss_oauth3_rest_ver $my_npm install popd git clone https://git.daplie.com/OAuth3/org.oauth3.git pages/issuer@oauth3.org pushd pages/issuer@oauth3.org git checkout $my_iss_oauth3_pages_ver bash ./install.sh pushd ./assets/oauth3.org git checkout $my_azp_oauth3_ver popd popd git clone https://git.daplie.com/Daplie/walnut_rest_www_daplie.com.git rest/www@daplie.com pushd rest/www@daplie.com git checkout $my_www_daplie_ver $my_npm install popd popd # # System Service # source ./installer/my-root.sh echo "Pre-installation to $my_tmp complete, now installing to $my_root/ ..." set +e if type -p tree >/dev/null 2>/dev/null; then #tree -I "node_modules|include|share" $my_tmp tree -L 6 -I "include|share|npm" $my_tmp else ls $my_tmp fi set -e source ./installer/my-user-my-group.sh echo "User $my_user Group $my_group" $sudo_cmd chown -R $my_user:$my_group $my_tmp rsync -a $my_tmp/ $my_root/ rsync -a --ignore-existing $my_app_dist/etc/$my_app_name/$my_app_name.yml $my_root/etc/$my_app_name/$my_app_name.yml source ./installer/install-system-service.sh # Change to admin perms $sudo_cmd chown -R $my_user:$my_group $my_root/opt/$my_app_name $sudo_cmd chown -R $my_user:$my_group $my_root/var/www $my_root/srv/www # 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/$my_app_name find /opt/$my_app_name -type d -exec $sudo_cmd chmod ug+s {} \; popd rm -rf $my_tmp 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 "" echo "Unistall: rm -rf /srv/walnut/ /var/walnut/ /etc/walnut/ /opt/walnut/ /var/log/walnut/ /etc/systemd/system/walnut.service"