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"
- grep "alex@barton.de" "$dst" >/dev/null 2>&1
- if [ $? -ne 0 ]; then
- echo " (B)\c"
- cp "$dst" "$dst.bak"
+ Msg " $src -> $dst"
+ if [ -e "$dst" ]; then
+ grep "alex@barton.de" "$dst" >/dev/null 2>&1
+ if [ $? -ne 0 ]; then
+ Msg " (B)"
+ cp "$dst" "$dst.bak"
+ fi
+ fi
+ Msg " "
+ cp -p "$src" "$dst" || Abort
+ if [ -n "$own" ]; then
+ chown "$own" "$dst" || Abort
fi
- echo " \c"
- cp "$src" "$dst" || Abort
- [ -n "$own" ] && chown "$own" "$dst" || Abort
- [ -n "$perm" ] && chmod "$perm" "$dst" || Abort
- echo "- OK."
+ if [ -n "$perm" ]; then
+ chmod "$perm" "$dst" || Abort
+ fi
+ Msg "- OK.\n"
}
-echo "Running $NAME ..."
+Config_System() {
+ if [ "$UID" = "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
+}
+
+Config_User() {
+ # $1: user name
+ # $2: home directory
+
+ user="$1"
+ home="$2"
-if [ "$UID" -eq 0 ]; then
- echo "Starting system configuration:"
- echo " - bash shell:"
- if [ -e /etc/bash.bashrc ]; then
- Copy_File sys/bashrc /etc/bash.bashrc root 644
+ 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 -u`
+export UID
+
+Msg "Running $NAME (uid=$UID) ...\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-