diff --git a/setup/.gitignore b/setup/.gitignore new file mode 100644 index 0000000..5ae98e6 --- /dev/null +++ b/setup/.gitignore @@ -0,0 +1,2 @@ +/backup-users/ +/backup/ diff --git a/setup/backup.sh b/setup/backup.sh new file mode 100755 index 0000000..522f604 --- /dev/null +++ b/setup/backup.sh @@ -0,0 +1,31 @@ +#!/bin/bash +[[ ! $(groups | grep sudo) ]] && echo this script must be run by a user with sudo privileges && exit 1 +[[ ! $BASH_SHELL_BASE ]] && echo "set BASH_SHELL_BASE before running this script" && exit 2 || echo backing up shell files... +set -o errexit +mkdir -p $BASH_SHELL_BASE/setup/backup/etc/profile.d +mkdir -p $BASH_SHELL_BASE/setup/backup/user +mkdir -p $BASH_SHELL_BASE/setup/backup/root +# host system files in /etc +[[ -f /etc/profile ]] && cp -v /etc/profile $BASH_SHELL_BASE/setup/backup/etc +[[ -f /etc/bash.bashrc ]] && cp -v /etc/bash.bashrc $BASH_SHELL_BASE/setup/backup/etc +[[ -d /etc/profile.d ]] && cp -vR /etc/profile.d/ $BASH_SHELL_BASE/setup/backup/etc/ +# current user files in $HOME +[[ -f $HOME/.bash_profile ]] && cp -v $HOME/.bash_profile $BASH_SHELL_BASE/setup/backup/user +[[ -f $HOME/.profile ]] && cp -v $HOME/.profile $BASH_SHELL_BASE/setup/backup/user +[[ -f $HOME/.bashrc ]] && cp -v $HOME/.bashrc $BASH_SHELL_BASE/setup/backup/user +[[ -f $HOME/.bash_logout ]] && cp -v $HOME/.bash_logout $BASH_SHELL_BASE/setup/backup/user +if [[ $(stat -c "%G" /root) = "sudo" ]]; then +[[ -f /root/.bash_profile ]] && cp -v /root/.bash_profile $BASH_SHELL_BASE/setup/backup/root +[[ -f /root/.profile ]] && cp -v /root/.profile $BASH_SHELL_BASE/setup/backup/root +[[ -f /root/.bashrc ]] && cp -v /root/.bashrc $BASH_SHELL_BASE/setup/backup/root +[[ -f /root/.bash_logout ]] && cp -v /root/.bash_logout $BASH_SHELL_BASE/setup/backup/root +else +echo no sudo group read access to /root so backing up /root as root +sudo -E -- bash -c '[[ ! -f /root/.profile ]] && exit 0; cp -v /root/.profile $BASH_SHELL_BASE/setup/backup/root' +sudo -E -- bash -c '[[ ! -f /root/.bashrc ]] && exit 0; cp -v /root/.bashrc $BASH_SHELL_BASE/setup/backup/root' +sudo -E -- bash -c '[[ ! -f /root/.bash_profile ]] && exit 0; cp -v /root/.bash_profile $BASH_SHELL_BASE/setup/backup/root' +sudo -E -- bash -c '[[ ! -f /root/.bash_logout ]] && exit 0; cp -v /root/.bash_logout $BASH_SHELL_BASE/setup/backup/root' +fi +set +o errexit +echo backup of system shell files complete! +exit 0 diff --git a/setup/deploy-user.sh b/setup/deploy-user.sh new file mode 100755 index 0000000..031ba42 --- /dev/null +++ b/setup/deploy-user.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +_USER=${1:-USER} +[[ ! $(id -u $_USER) -ge 1000 ]] && echo "no user $_USER or user not a regular" && exit 1 +[[ ! $BASH_SHELL_BASE ]] && BASH_SHELL_BASE="$(dirname "$(cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )")" +echo Base Shell Directory as detected is $BASH_SHELL_BASE +echo ok to continue? +echo "type \`yes\` fully or just to exit" +read -e answer +[[ ! $answer = "yes" ]] && exit 1 + +UBDIR=$BASH_SHELL_BASE/setup/backup-users/$_USER +_USER_DIR=$(getent passwd "$USER" | cut -d : -f 6) +files=".bash_profile .profile .bashrc .bash_logout" +# uncomment for debugging +# rm -rf $UBDIR +if [[ ! -d $UBDIR ]]; then + echo "first backing up $_USER_DIR shell files before deploying" + mkdir -p $UBDIR + for file in $files ; do + [[ -f $_USER_DIR/$file ]] && sudo install -C -m 660 -o root -g sudo $_USER_DIR/$file $UBDIR +done +fi +echo "ready to deploy $_USER shell files" +echo "Double check files in $UBDIR" +echo "continue? type \`yes\` fully or just for no" +read -e answer +[[ ! $answer = "yes" ]] && echo aborting deploy && exit 1 +echo -----------------;echo deploying user shell files to /home/$_USER +echo +files=$(find $BASH_SHELL_BASE/setup/user/ -type f) +for file in $files; do +cmd="install -C -m 660 -o $_USER -g sudo $file $_USER_DIR" +[[ $USER = "$_USER" ]] && eval $cmd || sudo -E -- bash -c "$cmd" +done +echo "the default user bash shell repo subdirecty is \`bash/shell\`" +echo "enter an alternative subdirectory under $_USER_DIR or just to accept default" +read -e answer +[[ ! $answer ]] && echo will source default user shell repo at $_USER_DIR/bash/shell && exit 0 +sed -i '/[[ $BASH_SHELL_BASE_LOADED = true ]]/ i\ BASH_SHELL_USER='$answer'' $_USER_DIR/.bashrc +echo will be processing user shell repo at $_USER_DIR/$answer diff --git a/setup/deploy.sh b/setup/deploy.sh index 52df7a9..e6069bd 100755 --- a/setup/deploy.sh +++ b/setup/deploy.sh @@ -1,4 +1,48 @@ #!/bin/bash -sudo cp -viR $BASH_SHELL_BASE/setup/etc /etc/ -cp -viR $BASH_SHELL_BASE/setup/user $HOME/ -sudo cp -viR $BASH_SHELL_BASE/setup/root /root/ +BASH_SHELL_BASE="$(dirname "$(cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )")" +echo Base Shell Directory as detected is $BASH_SHELL_BASE +echo ok to continue? +echo "type \`yes\` fully or just for no" +read -e answer +[[ ! $answer = "yes" ]] && exit 1 +[[ ! $(groups | grep sudo) ]] && echo this script must be run by a user with sudo privileges && exit 1 +# uncomment for debugging +# rm -rf $BASH_SHELL_BASE/setup/backup/ +if [[ ! $(stat -c "%G" /root) = "sudo" ]]; then +echo "Allow all sudoers read access to /root directory and files?" +echo "type \`yes\` fully or just for no" +read -e answer +if [[ $answer = "yes" ]]; then +sudo chown -R root:sudo /root +sudo chmod -R g+rX /root +echo sudo group and permissions on /root were set || \ +echo error during sudo access setup +else +echo;echo sudoer access to /root was declined +fi +fi +if [[ ! -d $BASH_SHELL_BASE/setup/backup ]]; then + echo "backing up shell files before deploying" + $BASH_SHELL_BASE/setup/backup.sh + [[ $? -ne 0 ]] && echo issue with backup did not deploy && exit 1 + # echo backup finished to $BASH_SHELL_BASE/setup/backup +fi +echo "ready to deploy shell files" +echo "Double check files in $BASH_SHELL_BASE/setup/backup" +echo "continue? type \`yes\` fully or just for no" +read -e answer +[[ ! $answer = "yes" ]] && echo aborting deploy && exit 1 +echo -----------------;echo deploying /etc shell files +files=$(find $BASH_SHELL_BASE/setup/etc/ -maxdepth 1 -type f) +for file in $files; do sudo install -C -m 644 -o root -g root $file /etc; done +echo setting BASH_SHELL_BASE to $BASH_SHELL_BASE in etc/profile +sudo sed -i 's:BASH_SHELL_BASE=.*:BASH_SHELL_BASE='${BASH_SHELL_BASE}':' /etc/profile +files=$(find $BASH_SHELL_BASE/setup/etc/profile.d -maxdepth 1 -type f) +for file in $files; do sudo install -C -m 644 -o root -g root $file /etc/profile.d; done +echo -----------------;echo deploying /root shell files +group=root +[[ $(stat -c "%G" /root) = "sudo" ]] && group=sudo +files=$(find $BASH_SHELL_BASE/setup/root/ -type f) +for file in $files; do sudo install -C -m 640 -o root -g $group $file /root; done +echo ----------------- +source $BASH_SHELL_BASE/setup/deploy-user.sh diff --git a/setup/etc/profile b/setup/etc/profile index 7e9004f..62603d5 100644 --- a/setup/etc/profile +++ b/setup/etc/profile @@ -16,7 +16,7 @@ # Set the initial path export PATH=/bin:/usr/bin:/usr/local/bin # set directory for base shell repo -export BASH_SHELL_BASE=/opt/bash/shell/base # where +export BASH_SHELL_BASE=THISWILLCHANGEDBYDEPLOYSCRIPT # now bootstrap by souring the shell repo envinroment . $BASH_SHELL_BASE/shell.env # uncomment to NOT load the BASH SHELL Repos for interactive login shell diff --git a/setup/user/.bashrc b/setup/user/.bashrc index 9069b1e..046bab8 100644 --- a/setup/user/.bashrc +++ b/setup/user/.bashrc @@ -1,7 +1,7 @@ #!/bin/bash # echo "$USER .bashrc" - # processing user's shell repo if base was loaded [[ $BASH_SHELL_BASE_LOADED = true ]] && \ BASH_SHELL_USER=${BASH_SHELL_USER:-"bash/shell"} && \ -shell_process_directory "$HOME/$BASH_SHELL_USER" +[[ -d $HOME/$BASH_SHELL_USER ]] && shell_process_directory "$HOME/$BASH_SHELL_USER" ||\ +echo no user shell directory $HOME/$BASH_SHELL_USER to process, create one or clone a template