macos: add anchors to synthetic.conf grep pattern
[openafs.git] / src / packaging / MacOS / OpenAFS.post_install
1 #!/bin/sh
2 # Portions Copyright (c) 2003 Apple Computer, Inc.  All rights reserved.
3 if [ -d /afs -a ! -h /afs ]; then
4    rmdir /afs
5 fi
6 majorvers=`uname -r | sed 's/\..*//'`
7 if [ $majorvers -ge 19 ]; then
8   # Root mount point is read-only. To workaround this restriction, add a
9   # synthetic entity for afs into /etc/synthetic.conf. For more information,
10   # please read man synthetic.conf(5).
11   grep -qs '^afs$' /etc/synthetic.conf || echo 'afs' >> /etc/synthetic.conf
12 elif [ $majorvers -ge 7 ]; then
13   # /Network is now readonly, so put AFS in /afs; make sure /afs is a directory
14   if [ -e /afs ]; then
15     if [ -h /afs -o ! -d /afs ]; then
16       rm -f /afs
17       mkdir /afs
18     fi
19   else
20     mkdir /afs
21   fi
22 else
23   mkdir -p /Network/afs
24   if [ ! -h /afs ]; then
25     ln -s /Network/afs /afs
26   fi
27 fi
28
29 cd /var/db/openafs/etc
30
31 if [ ! -f cacheinfo ]; then
32    cp cacheinfo.sample cacheinfo
33 fi
34
35 if [ `grep /Network/afs cacheinfo` ]; then
36     cat cacheinfo |sed s#/Network/afs#/afs# > cacheinfo.new
37     mv cacheinfo.new cacheinfo
38 fi
39
40 # if the installer plugin generated ThisCell and/or CellAlias
41 # files, copy them in here
42 tmpthiscell=/private/tmp/org.OpenAFS.Install.ThisCell.$USER
43 tmpcellalias=/private/tmp/org.OpenAFS.Install.CellAlias.$USER
44 if [ -f $tmpthiscell ]; then
45     cp $tmpthiscell ThisCell
46     rm -f $tmpthiscell
47 fi
48 if [ -f $tmpcellalias ]; then
49     cp $tmpcellalias CellAlias
50     rm -f $tmpcellalias
51 fi
52
53 if [ ! -f ThisCell -a -f ThisCell.sample ]; then
54    cp ThisCell.sample ThisCell
55 fi
56
57 # force reversion of 10.4 memcache mistake
58 rm -f config/afsd.options.broken
59 echo '-memcache -afsdb -stat 2000 -dcache 800 -daemons 3 -volumes 70 -dynroot -fakestat-all' > config/afsd.options.broken
60 if cmp -s config/afsd.options.broken config/afsd.options ; then
61    rm -f config/afsd.options
62 fi
63 rm -f config/afsd.options.broken
64
65 # if the user hasn't changed these settings, then they should just use the new
66 # afsd.conf file
67 rm -f config/afsd.options.old
68 echo '-afsdb -stat 2000 -dcache 800 -daemons 3 -volumes 70 -dynroot -fakestat-all' >config/afsd.options.old
69 if cmp -s config/afsd.options.old config/afsd.options ; then
70    rm -f config/afsd.options
71 fi
72 rm -f config/afsd.options.old
73
74 if [ ! -f config/afs.conf -a -f config/afs.conf.sample ]; then
75    cp config/afs.conf.sample config/afs.conf
76 fi
77
78 # testing case -- upgrading from pre 1.2.7, but .last file exists.
79 # merge the .save and .last....
80 if [ ! -f CellServDB -a -f CellServDB.save -a -f CellServDB.master.last ]; then
81    cp CellServDB.save CellServDB
82 fi
83
84 # upgrading between 2 post-1.2.7 releases (or the testing case)
85 if [ -f CellServDB.master.last ]; then
86   if cmp -s CellServDB.master.last CellServDB.master ; then
87     echo No CellServDB updates
88     done=1
89   fi
90 fi
91
92 # the local changes were included in the update
93 if [ -z "$done" -a  -f CellServDB ]; then
94   if cmp -s CellServDB CellServDB.master ; then
95     echo CellServDB is up to date.
96     cp CellServDB.master CellServDB.master.last
97     if [ ! -f CellServDB ]; then
98       cp CellServDB.master CellServDB
99     fi
100     done=1
101   fi
102 fi
103
104 if [ -z "$done" ]; then
105   # there are local changes to be merged
106   if [ -f CellServDB -a -f CellServDB.master.last ]; then
107     echo Merging CellServDB entries....
108     perl $1/Contents/Resources/csrvdbmerge.pl
109     echo done
110   else
111     # this is a new install, or an upgrade from pre-1.2.7
112     echo "Installing new CellServDB"
113     cp CellServDB.master CellServDB.master.last
114     if [ ! -f CellServDB ]; then
115         cp CellServDB.master CellServDB
116     fi
117   fi
118 fi
119
120 if [ $majorvers -ge 7 ]; then
121   # make config/settings.plist if it doesn't exist
122   if [ ! -e config/settings.plist -a -e config/settings.plist.orig ]; then
123     cp config/settings.plist.orig config/settings.plist
124   else
125     /usr/libexec/PlistBuddy -c "Add :Darwin:All:FSEvents bool" config/settings.plist  && /usr/libexec/PlistBuddy -c "Set :Darwin:All:FSEvents true" config/settings.plist
126   fi
127 elif [ -e config/afssettings ]; then
128   # turn off execution of afssettings
129   chmod a-x config/afssettings
130 fi
131
132 # properly, we should acquire a certificate from a real CA and ship 
133 # signed binaries. for now, make Application Firewall (Security prefs pane)
134 # happy like this. See TN2206
135 if [ $majorvers -lt 14 ]; then
136     if [ -f /usr/bin/codesign ]; then
137         codesign -s - /usr/sbin/afsd
138     fi
139 fi
140
141 #here we should run tools which configure the client, and then if it's enabled:
142 #start the new launchd daemon
143 launchctl load -w /Library/LaunchDaemons/org.openafs.filesystems.afs.plist
144
145 if [ $majorvers -ge 19 ]; then
146     # Assume that, if /afs is not present, either OpenAFS is being installed for
147     # the first time or the system was not rebooted after the installation.
148     # If so, inform what needs to be done to load the client. This procedure is
149     # unnecessary if OpenAFS is being reinstalled.
150     if [ ! -d /afs ]; then
151         osascript -e 'display alert "OpenAFS successfully installed" message ¬
152         "If OpenAFS is being installed for the first time on this machine, " & ¬
153         "follow the steps below:\n\n" & ¬
154         "1. Navigate to System Preferences > Security & Privacy;\n\n" & ¬
155         "2. Under the General tab towards the bottom of the window, allow " & ¬
156         "the OpenAFS kernel extension to load by clicking on Allow;\n\n" & ¬
157         "3. Reboot the machine;\n\n" & ¬
158         "Note: An entry for /afs was added in /etc/synthetic.conf. This " & ¬
159         "change takes effect only after rebooting the system."'
160     fi
161 fi