chiark / gitweb /
site: Pass msg into enter_new_state
[secnet.git] / setup.mac
1 #!/bin/bash
2 #
3 # Richard Kettlewell 2011-06-18
4 #
5 # This file is part of secnet.
6 # See README for full list of copyright holders.
7 #
8 # secnet is free software; you can redistribute it and/or modify it
9 # under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 3 of the License, or
11 # (at your option) any later version.
12
13 # secnet is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 # General Public License for more details.
17
18 # You should have received a copy of the GNU General Public License
19 # version 3 along with secnet; if not, see
20 # https://www.gnu.org/licenses/gpl.html.
21 #
22 set -e
23
24 group=${group:-secnet}
25 user=${user:-secnet}
26
27 # pick ID1 ID2 ... IDn
28 # Echoes an ID matching none of ID1..IDn
29 pick() {
30   local n
31   n=250                         # better not choose 0!
32   while :; do
33     ok=true
34     for k in "$@"; do
35       if [ $n = $k ]; then
36         ok=false
37         break
38       fi
39     done
40     if $ok; then
41       echo $n
42       return
43     fi
44     n=$((1+$n))
45   done
46 }
47
48 if dscl . -read /Groups/$group >/dev/null 2>&1; then
49   :
50 else
51   gids=$(dscl . -list /Groups PrimaryGroupID|awk '{print $2}')
52   gid=$(pick $gids)
53   dscl . -create /Groups/$group
54   dscl . -create /Groups/$group PrimaryGroupID $gid
55   dscl . -create /Groups/$group Password \*
56 fi
57
58 if dscl . -read /Users/$user >/dev/null 2>&1; then
59   :
60 else
61   uids=$(dscl . -list /Users UniqueID|awk '{print $2}')
62   uid=$(pick $uids)
63   gid=$(dscl . -read /Groups/$group PrimaryGroupID | awk '{print $2}')
64   dscl . -create /Users/$user
65   dscl . -create /Users/$user UniqueID $uid
66   dscl . -create /Users/$user UserShell /usr/bin/false
67   dscl . -create /Users/$user RealName 'secnet'
68   dscl . -create /Users/$user NFSHomeDirectory /var/empty
69   dscl . -create /Users/$user PrimaryGroupID $gid
70   dscl . -create /Users/$user Password \*
71 fi
72
73 cp uk.org.greenend.secnet.plist /Library/LaunchDaemons/.
74 launchctl load /Library/LaunchDaemons
75 echo "To start secnet:"
76 echo "  sudo launchctl start uk.org.greenend.secnet"
77 echo
78 echo "To stop secnet:"
79 echo "  sudo launchctl stop uk.org.greenend.secnet"
80 echo
81 echo "To uninstall:"
82 echo "  sudo launchctl unload /Library/LaunchDaemons/uk.org.greenend.secnet.plist"
83 echo "  sudo rm -f /Library/LaunchDaemons/uk.org.greenend.secnet.plist"