#!/bin/bash # assumes that bash is installed #!/bin/bash # use this to improve same below # install_shell_base () { # # TODO have a cross distro package install # [[ ! $(which git) ]] && apt-get install --no-install-recommends git -y # [[ ! $EUID -eq 0 ]] && { echo ERROR script must be run as root; return; } # local user # [[ $1 == "-u" ]] && user=$2 && shift 2 # local dir=${2:-/shell} # local repo=${1:-base} # local rpath=$dir/$repo # mkdir -p $rpath # # TODO set git host via option or env var # git clone https://git.kebler.net/bash/shell-$repo.git $rpath # chown -R ${user:-1000}:${user:-1000} $rpath # chmod -R +r $rpath # } # must! be run as sudo install_shell_base () { if [[ $1 == "-f" ]];then shift echo forcing reinstall else if [[ $BASH_SHELL_BASE ]] && [[ -d $BASH_SHELL_BASE ]]; then echo appears that UCI shell base is already installed at $BASH_SHELL_BASE echo upgrade instead using: 'module_load uci-shell-install; update_shell_base' return 1 fi fi if [[ ! $BASH_SHELL_GIT_URL ]]; then echo BASH_SHELL_GIT_URL must be set before install can proceed return 1 fi # TODO have a cross distro package install module_load distro set_distro [[ ! $(command -v git) ]] && echo git must be installed first && $INSTALL_PKGS git # TODO, avoid which in all scripts. or put which in environment if not on machine [[ ! $(command -v which) ]] && echo 'which' must be installed first && $INSTALL_PKGS which echo $USER, $EUID [[ ! $EUID -eq 0 ]] && { echo ERROR script must be run as root; return 2; } echo I am ROOT, now running script echo UCI user: $1 # TODO make the repo and clone values dynamic or bundle current base on sending machine a archive mkdir -p /shell/base git clone $BASH_SHELL_GIT_URL/shell-base.git /shell/base chown -R ${1:-$1000}:${1:-1000} /shell chmod -R +r /shell /bin/bash /shell/base/install/install.sh ${1:-1000} # TODO now add BASH_SHELL_GIT_URL=$BASH_SHELL_GIT_URL to load directory echo "export BASH_SHELL_GIT_URL=$BASH_SHELL_GIT_URL" > $BASH_SHELL_BASE/load/ucishellgiturl } # # if script was executed then call the function ( return 0 2>/dev/null ) || install_shell_base $@ install_shell_host () { if [[ -d $BASH_SHELL_HOST/modules ]]; then echo appears that UCI shell host repo is already installed at $BASH_SHELL_HOST echo upgrade instead using: 'module_load uci-shell-install; update_shell_host' return 1 fi if [[ ! $BASH_SHELL_GIT_URL ]]; then echo BASH_SHELL_GIT_URL must be set before install can proceed return 1 fi export BASH_SHELL_HOST=$(dirname $BASH_SHELL_BASE)/host if mkdir -p $BASH_SHELL_HOST; then if git clone $BASH_SHELL_GIT_URL/shell-host.git $BASH_SHELL_HOST; then chown -R ${1:-$USER}:${1:-$USER} $BASH_SHELL_HOST chmod -R +r $BASH_SHELL_HOST export BASH_SHELL_HOSTNAME=$(dirname $BASH_SHELL_BASE)/$(hostnamectl hostname) mkdir -p $BASH_SHELL_HOSTNAME/load echo note: use $BASH_SHELL_HOSTNAME/load directory to load modules and other stuff from at prompt. fi fi bash $BASH_SHELL_HOST/distro/distro.inst } install_shell_network () { if [[ -d $BASH_SHELL_NETWORK/modules ]]; then echo appears that UCI shell network repo is already installed at $BASH_SHELL_NETWORK echo upgrade instead using: 'module_load uci-shell-install; update_shell_network' return 1 fi if [[ ! $BASH_SHELL_GIT_URL ]]; then echo BASH_SHELL_GIT_URL must be set before install can proceed return 1 fi export BASH_SHELL_NETWORK=$(dirname $BASH_SHELL_BASE)/network if mkdir -p $BASH_SHELL_NETWORK; then if git clone $BASH_SHELL_GIT_URL/shell-network.git $BASH_SHELL_NETWORK; then chown -R ${1:-$USER}:${1:-$USER} $BASH_SHELL_NETWORK chmod -R +r $BASH_SHELL_NETWORK fi fi } update_shell_base () { cd $BASH_SHELL_BASE || { echo not directory $BASH_SHELL_ANY_HOST; return 2; } if [[ ! $BASH_SHELL_GIT_REMOTE ]]; then echo WARNING: BASH_SHELL_GIT_REMOTE is not set will use \'origin\' fi git pull ${BASH_SHELL_GIT_REMOTE:-origin} master } update_shell_host () { [[ ! -d $BASH_SHELL_HOST/modules ]] && echo uci shell host repo not installed, run install_shell_host first && return 1 cd $BASH_SHELL_HOST || { echo not directory $BASH_SHELL_HOST; return 2; } git pull ${BASH_SHELL_GIT_REMOTE:-origin} master } update_shell_network () { [[ ! -d $BASH_SHELL_NETWORK/modules ]] && echo uci shell network repo not installed, run install_shell_network if desired && return 1 cd $BASH_SHELL_NETWORK || { echo not directory $BASH_SHELL_NETWORK; return 2; } git pull ${BASH_SHELL_GIT_REMOTE:-origin} master }