From 3eaf9e38beef43f317bf42d32af3411943b865d8 Mon Sep 17 00:00:00 2001 From: David Kebler Date: Wed, 21 Feb 2024 13:25:54 -0800 Subject: [PATCH] add new uci shell install update library --- install/scripts/git.sh.tmpl | 4 ++ install/scripts/remote-install.sh | 6 -- modules/install-shell-repos.lib | 47 ------------ modules/uci-shell-install.lib | 115 ++++++++++++++++++++++++++++++ 4 files changed, 119 insertions(+), 53 deletions(-) create mode 100644 install/scripts/git.sh.tmpl delete mode 100644 install/scripts/remote-install.sh delete mode 100644 modules/install-shell-repos.lib create mode 100644 modules/uci-shell-install.lib diff --git a/install/scripts/git.sh.tmpl b/install/scripts/git.sh.tmpl new file mode 100644 index 0000000..3ef2b24 --- /dev/null +++ b/install/scripts/git.sh.tmpl @@ -0,0 +1,4 @@ +BASH_SHELL_GIT_REMOTE=remote +BASH_SHELL_GIT_SEVER=gserver +BASH_SHELL_GIT_URL=gurl + diff --git a/install/scripts/remote-install.sh b/install/scripts/remote-install.sh deleted file mode 100644 index 4a563bf..0000000 --- a/install/scripts/remote-install.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -# module will install the uci-shell system on a remote machine -# must be run as sudo -mkdir -p /shell -chown 1000:users /shell -git clone https://git.kebler.net/base/shell-base.git /shell/base \ No newline at end of file diff --git a/modules/install-shell-repos.lib b/modules/install-shell-repos.lib deleted file mode 100644 index fe285c3..0000000 --- a/modules/install-shell-repos.lib +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/bash -# assumes that bash is installed -#!/bin/bash - -# must! be run as sudo - - -install_shell_repo () { - # 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 -} - -install_shell_host () { - module_load sudo - local user - [[ $1 == "-u" ]] && user="-u $2" && shift 2 - Sudo install_shell_repo $user host $1 -} - -install_shell_network () { - module_load sudo - local user - [[ $1 == "-u" ]] && user="-u $2" && shift 2 - Sudo install_shell_repo $user network $1 - } - -update_shell_host () { - cd $BASH_SHELL_ANY_HOST || { echo not directory $BASH_SHELL_ANY_HOST; return 2; } - git pull origin master - } - -update_shell_network () { - cd $BASH_SHELL_NETWORK || { echo not directory $BASH_SHELL_NETWORK; return 2; } - git pull origin master - } - diff --git a/modules/uci-shell-install.lib b/modules/uci-shell-install.lib new file mode 100644 index 0000000..bc6163b --- /dev/null +++ b/modules/uci-shell-install.lib @@ -0,0 +1,115 @@ +#!/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 [[ $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 + 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 + + echo /bin/bash /shell/base/install/install.sh ${1:-1000} +} + +# # if script was executed then call the function + ( return 0 2>/dev/null ) || install_shell_base $@ + + +install_shell_host () { + if [[ $BASH_SHELL_HOST ]]; 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 $UCI_GIT_SERVER_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 +} + +install_shell_network () { + if [[ $BASH_SHELL_NETWORK ]]; 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 $UCI_GIT_SERVER_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\' + return 1 + fi + git pull ${UCI_GIT_REMOTE:-origin} master + } + +update_shell_host () { + cd $BASH_SHELL_NETWORK || { echo not directory $BASH_SHELL_NETWORK; return 2; } + git pull ${UCI_GIT_REMOTE:-origin} master + } + +update_shell_network () { + cd $BASH_SHELL_NETWORK || { echo not directory $BASH_SHELL_NETWORK; return 2; } + git pull ${UCI_GIT_REMOTE:-origin} master + }