]> arthur.barton.de Git - ConfigScripts.git/blobdiff - install.sh
Read ~/.profile.user-1st after initializing basic environment
[ConfigScripts.git] / install.sh
index c7e7d257964c96e5bbcc03852b0041d5ce18dc97..e3b0359d97da73b35246a198243c3de811cac2ad 100755 (executable)
 
 NAME=`basename "$0"`
 
+Msg() {
+       printf -- "$*"
+}
+
 Abort() {
-       echo "- ERROR!"
+       Msg "- ERROR!\n"
        exit 1
 }
 
 Copy_File() {
        src="$1"; dst="$2"; own="$3"; perm="$4"
-       echo "     $src -> $dst\c"
+       Msg "     $src -> $dst"
        if [ -e "$dst" ]; then
                grep "alex@barton.de" "$dst" >/dev/null 2>&1
                if [ $? -ne 0 ]; then
-                       echo " (B)\c"
+                       Msg " (B)"
                        cp "$dst" "$dst.bak"
                fi
        fi
-       echo " \c"
-       cp "$src" "$dst" || Abort
-       [ -n "$own" ] && chown "$own" "$dst" || Abort
-       [ -n "$perm" ] && chmod "$perm" "$dst" || Abort
-       echo "- OK."
+       Msg " "
+       cp -p "$src" "$dst" || Abort
+       if [ -n "$own" ]; then
+               chown "$own" "$dst" || Abort
+       fi
+       if [ -n "$perm" ]; then
+               chmod "$perm" "$dst" || Abort
+       fi
+       Msg "- OK.\n"
 }
 
-[ -n "$UID" ] || UID=`id -u`
-export UID
+Config_System() {
+       if [ "$EUID" = "0" -a -z "$I_local" ]; then
+               Msg "Starting system configuration:\n"
+               Msg " - bash shell:\n"
+               if [ -e /etc/bash.bashrc ]; then
+                       Copy_File sys/bashrc /etc/bash.bashrc root:0 644
+               else
+                       Copy_File sys/bashrc /etc/bashrc root:0 644
+               fi
+               Copy_File sys/profile /etc/profile root:0 644
+       else
+               Msg "Not running with root privileges - system configuration SKIPPED.\n"
+               grep "alex@barton.de" /etc/profile >/dev/null 2>&1
+               if [ $? -ne 0 -o -n "$I_local" -o -d $HOME/.etc ]; then
+                       Msg "Installing system files to $HOME/.etc/ ...\n"
+                       mkdir -p "$HOME/.etc"
+                       Msg " - bash shell:\n"
+                       Copy_File sys/bashrc $HOME/.etc/bashrc "$user" 600
+                       Copy_File sys/profile $HOME/.etc/profile "$user" 600
+               else
+                       Msg "System configuration seems to be modified: not installing locally.\n"
+               fi
+       fi
+}
 
-echo "Running $NAME (uid=$UID) ..."
+Config_User() {
+       # $1: user name
+       # $2: home directory
 
-if [ "$UID" = "0" ]; then
-       echo "Starting system configuration:"
-       echo " - bash shell:"
-       if [ -e /etc/bash.bashrc ]; then
-               Copy_File sys/bashrc /etc/bash.bashrc root 644
+       user="$1"
+       home="$2"
+
+       Msg "Starting user configuration ($user in $home):\n"
+       touch "$home/.test.$$" >/dev/null 2>&1
+       if [ $? -eq 0 ]; then
+               rm -f "$home/.test.$$"
+               Msg " - bash shell:\n"
+               if [ -e "$home/.profile" ]; then
+                       Copy_File user/bash_profile "$home/.profile" "$user" 600
+               else
+                       Copy_File user/bash_profile "$home/.bash_profile" "$user" 600
+               fi
+               Copy_File user/bashrc "$home/.bashrc" "$user" 600
+               Copy_File user/bash_logout "$home/.bash_logout" "$user" 600
        else
-               Copy_File sys/bashrc /etc/bashrc root 644
+               Msg "Can't write to user home directory - user configuration SKIPPED.\n"
        fi
-       Copy_File sys/profile /etc/profile root 644
-else
-       echo "Not running with root privileges - system configuration SKIPPED."
-fi
+}
+
+Config_Skel() {
+       if [ -w /etc/skel -a -z "$I_local" ]; then
+               Msg "Starting \"/etc/skel\" configuration:\n"
+               Msg " - bash shell:\n"
+               Copy_File user/bash_logout /etc/skel/.bash_logout root:0 644
+               if [ -e /etc/skel/.profile ]; then
+                       Copy_File user/bash_profile /etc/skel/.profile root:0 644
+               else
+                       Copy_File user/bash_profile /etc/skel/.bash_profile root:0 644
+               fi
+               Copy_File user/bashrc /etc/skel/.bashrc root:0 644
+       else
+               [ -z "$I_local" ] \
+                       && Msg "Can't write to \"/etc/skel\" - configuration SKIPPED.\n" \
+                       || Msg "Local install selected, \"/etc/skel\" configuration SKIPPED.\n"
+       fi
+}
+
+while [ $# -gt 0 ]; do
+       case "$1" in
+       "--local"|"-l")
+               export I_local=1; ;;
+       *)
+               echo "Usage: $0 [--local|-l]"
+               exit 1
+       esac
+       shift
+done
+
+[ -n "$UID" ] || UID=`id -r -u`
+[ -n "$EUID" ] || EUID=`id -u`
+export UID EUID
+
+Msg "Running $NAME (uid=$UID; euid=$EUID) ...\n"
 
 user=`basename "$HOME"`
-echo "Starting user configuration ($user in $HOME):"
-echo " - bash shell:"
-Copy_File user/bash_profile "$HOME/.bash_profile" "$user" 600
-Copy_File user/bashrc "$HOME/.bashrc" "$user" 600
-Copy_File user/bash_logout "$HOME/.bash_logout" "$user" 600
 
-echo "$NAME: Done."
+Config_Skel
+Config_System
+Config_User "$user" "$HOME"
+
+Msg "$NAME: Done.\n"
 
 # -eof-