]> arthur.barton.de Git - ConfigScripts.git/blob - install.sh
install.sh: Don't do "skel" installation when called with "--local"
[ConfigScripts.git] / install.sh
1 #!/bin/sh
2 #
3 # ConfigScripts - install.sh
4 # Written by Alexander Barton <alex@barton.de>. Public Domain.
5 #
6
7 NAME=`basename "$0"`
8
9 Msg() {
10         printf -- "$*"
11 }
12
13 Abort() {
14         Msg "- ERROR!\n"
15         exit 1
16 }
17
18 Copy_File() {
19         src="$1"; dst="$2"; own="$3"; perm="$4"
20         Msg "     $src -> $dst"
21         if [ -e "$dst" ]; then
22                 grep "alex@barton.de" "$dst" >/dev/null 2>&1
23                 if [ $? -ne 0 ]; then
24                         Msg " (B)"
25                         cp "$dst" "$dst.bak"
26                 fi
27         fi
28         Msg " "
29         cp "$src" "$dst" || Abort
30         if [ -n "$own" -a "$own" != "$USER" ]; then
31                 chown "$own" "$dst" || Abort
32         fi
33         if [ -n "$perm" ]; then
34                 chmod "$perm" "$dst" || Abort
35         fi
36         Msg "- OK.\n"
37 }
38
39 Config_System() {
40         if [ "$UID" = "0" -a -z "$I_local" ]; then
41                 Msg "Starting system configuration:\n"
42                 Msg " - bash shell:\n"
43                 if [ -e /etc/bash.bashrc ]; then
44                         Copy_File sys/bashrc /etc/bash.bashrc root 644
45                 else
46                         Copy_File sys/bashrc /etc/bashrc root 644
47                 fi
48                 Copy_File sys/profile /etc/profile root 644
49         else
50                 Msg "Not running with root privileges - system configuration SKIPPED.\n"
51                 grep "alex@barton.de" /etc/profile >/dev/null 2>&1
52                 if [ $? -ne 0 -o -n "$I_local" ]; then
53                         Msg "Installing system files to $HOME/.etc/ ...\n"
54                         mkdir -p "$HOME/.etc"
55                         Copy_File sys/bashrc $HOME/.etc/bashrc "$user" 600
56                         Copy_File sys/profile $HOME/.etc/profile "$user" 600
57                 else
58                         Msg "System configuration seems to be modified: not installing locally.\n"
59                 fi
60         fi
61 }
62
63 Config_User() {
64         # $1: user name
65         # $2: home directory
66
67         user="$1"
68         home="$2"
69
70         Msg "Starting user configuration ($user in $home):\n"
71         touch "$home/.test.$$" >/dev/null 2>&1
72         if [ $? -eq 0 ]; then
73                 rm -f "$home/.test.$$"
74                 Msg " - bash shell:\n"
75                 if [ -e "$home/.profile" ]; then
76                         Copy_File user/bash_profile "$home/.profile" "$user" 600
77                 else
78                         Copy_File user/bash_profile "$home/.bash_profile" "$user" 600
79                 fi
80                 Copy_File user/bashrc "$home/.bashrc" "$user" 600
81                 Copy_File user/bash_logout "$home/.bash_logout" "$user" 600
82         else
83                 Msg "Can't write to user home directory - user configuration SKIPPED.\n"
84         fi
85 }
86
87 Config_Skel() {
88         if [ -w /etc/skel -a -z "$I_local" ]; then
89                 Msg "Starting \"/etc/skel\" configuration:\n"
90                 Copy_File user/bash_logout /etc/skel/.bash_logout
91                 if [ -e /etc/skel/.profile ]; then
92                         Copy_File user/bash_profile /etc/skel/.profile root 644
93                 else
94                         Copy_File user/bash_profile /etc/skel/.bash_profile root 644
95                 fi
96                 Copy_File user/bashrc /etc/skel/.bashrc root 644
97         else
98                 [ -z "$I_local" ] \
99                         && Msg "Can't write to \"/etc/skel\" - configuration SKIPPED.\n" \
100                         || Msg "Local install selected, \"/etc/skel\" configuration SKIPPED.\n"
101         fi
102 }
103
104 Config_RootUser() {
105         if [ "$UID" = "0" ]; then
106                 user=`grep "^.*:.*:0:" /etc/passwd | head -n 1 | cut -d':' -f1`
107                 home=`grep "^.*:.*:0:" /etc/passwd | cut -d':' -f6`
108                 Config_User "$user" "$home"
109         else
110                 Msg "Not running with root privileges - root user configuration SKIPPED.\n"
111         fi
112 }
113
114 while [ $# -gt 0 ]; do
115         case "$1" in
116         "--local"|"-l")
117                 export I_local=1; ;;
118         *)
119                 echo "Usage: $0 [--local|-l]"
120                 exit 1
121         esac
122         shift
123 done
124
125 [ -n "$UID" ] || UID=`id -u`
126 export UID
127
128 Msg "Running $NAME (uid=$UID) ...\n"
129
130 user=`basename "$HOME"`
131
132 Config_Skel
133 Config_System
134 Config_User "$user" "$HOME"
135 Config_RootUser
136
137 Msg "$NAME: Done.\n"
138
139 # -eof-