TorPostflight 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. #!/bin/sh
  2. # TorPostflight gets invoked after any install or upgrade.
  3. ADDSYSUSER=$RECEIPT_PATH/addsysuser
  4. if [ ! -x "$ADDSYSUSER" ]; then
  5. echo "Could not find addsysuser script."
  6. exit 1
  7. fi
  8. TORUSER=_tor
  9. TORGROUP=daemon
  10. TARGET=$2/Library/Tor
  11. TORDIR=$TARGET/var/lib/tor
  12. LOGDIR=$TARGET/var/log/tor
  13. # Check defaults for TARGET
  14. if [ "$TARGET" == "//Library/Tor" ]; then
  15. TARGET=/Library/Tor
  16. fi
  17. ## Determine OSX Version
  18. # map version to name
  19. if [ -x /usr/bin/sw_vers ]; then
  20. # This is poor, yet functional. We don't care about the 3rd number in
  21. # the OS version
  22. OSVER=`/usr/bin/sw_vers | grep ProductVersion | cut -f2 | cut -d"." -f1,2`
  23. case "$OSVER" in
  24. "10.5") OS="leopard";;
  25. "10.4") OS="tiger";;
  26. "10.3") OS="panther";;
  27. "10.2") OS="jaguar";;
  28. "10.1") OS="puma";;
  29. "10.0") OS="cheetah";;
  30. *) OS="unknown";;
  31. esac
  32. else
  33. OS="unknown"
  34. fi
  35. # Create user $TORUSER in group daemon. If it's already there, great.
  36. $ADDSYSUSER $TORUSER "Tor System user" $TORDIR
  37. # Create the tor directory, if it doesn't exist.
  38. if [ ! -d $TORDIR ]; then
  39. mkdir -p $TORDIR
  40. fi
  41. if [ ! -d $LOGDIR ]; then
  42. mkdir -p $LOGDIR
  43. fi
  44. # Check its permissions.
  45. chown $TORUSER $TORDIR
  46. chgrp daemon $TORDIR
  47. chmod 700 $TORDIR
  48. chown $TORUSER $LOGDIR
  49. chgrp daemon $LOGDIR
  50. chmod 700 $LOGDIR
  51. # Create the configuration file only if there wasn't one already.
  52. if [ ! -f $TARGET/torrc ]; then
  53. cp $TARGET/torrc.sample $TARGET/torrc
  54. fi
  55. # Ensure symbolic links
  56. cd /usr/bin
  57. if [ -e /usr/bin/tor -a ! -L /usr/bin/tor ]; then
  58. mv tor tor_old
  59. fi
  60. if [ -e /usr/bin/tor-resolve -a ! -L /usr/bin/tor-resolve ]; then
  61. mv tor-resolve tor-resolve_old
  62. fi
  63. ln -sf $TARGET/tor .
  64. ln -sf $TARGET/tor-resolve .
  65. cd /usr/share/man/man1
  66. MAN1=$TARGET/man/man1
  67. ln -sf $MAN1/*.1 .
  68. if [ ! -e /var/log/tor -o -L /var/log/tor ]; then
  69. cd /var/log
  70. rm -f tor
  71. ln -sf $LOGDIR tor
  72. fi
  73. if [ -d /Library/StartupItems/Privoxy ]; then
  74. find /Library/StartupItems/Privoxy -print0 | xargs -0 chown root:wheel
  75. fi
  76. # Copy Documentation
  77. if [ -d $PACKAGE_PATH/Contents/Resources/documents ];then
  78. cp -r $PACKAGE_PATH/Contents/Resources/documents $TARGET/documents
  79. fi
  80. # Copy Uninstaller
  81. if [ -f $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.applescript ]; then
  82. cp $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.applescript $TARGET/Tor_Uninstaller.applescript
  83. chmod 755 $TARGET/Tor_Uninstaller.applescript
  84. fi
  85. if [ -f $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.app.tar.gz ]; then
  86. cp $PACKAGE_PATH/Contents/Resources/Tor_Uninstaller.app.tar.gz $TARGET/Tor_Uninstaller.app.tar.gz
  87. cd $TARGET && tar zxf Tor_Uninstaller.app.tar.gz
  88. chmod -R 755 $TARGET/Tor_Uninstaller.app
  89. chown -R _tor:_tor Tor_Uninstaller.app
  90. rm $TARGET/Tor_Uninstaller.app.tar.gz
  91. fi
  92. if [ -f $PACKAGE_PATH/Contents/Resources/uninstall_tor_bundle.sh ]; then
  93. cp $PACKAGE_PATH/Contents/Resources/uninstall_tor_bundle.sh $TARGET/uninstall_tor_bundle.sh
  94. chmod 755 $TARGET/uninstall_tor_bundle.sh
  95. fi
  96. if [ -f $PACKAGE_PATH/Contents/Resources/package_list.txt ]; then
  97. cp $PACKAGE_PATH/Contents/Resources/package_list.txt $TARGET/package_list.txt
  98. fi
  99. # If the pre-install script did it's thing, it should have saved the
  100. # config and server keys; put these back and clean up
  101. if [ -f /tmp/TorSavedMe.tar.gz ]; then
  102. tar zxf /tmp/TorSavedMe.tar.gz -C /
  103. rm /tmp/TorSavedMe.tar.gz
  104. fi
  105. # Determine how to start by OS Version
  106. if [ $OS = "tiger" ]; then
  107. if [ -f $PACKAGE_PATH/Contents/Resources/net.freehaven.tor.plist ]; then
  108. rm -f /Library/StartupItems/Tor
  109. cp $PACKAGE_PATH/Contents/Resources/net.freehaven.tor.plist /System/Library/LaunchDaemons/net.freehaven.tor.plist
  110. chmod 644 /System/Library/LaunchDaemons/net.freehaven.tor.plist
  111. echo "#--START required settings--" >> $TARGET/torrc
  112. echo "RunAsDaemon 0" >> $TARGET/torrc
  113. echo "Log notice file $TARGET/var/log/tor/tor.log" >> $TARGET/torrc
  114. echo "DataDirectory $TARGET/var/lib/tor" >> $TARGET/torrc
  115. echo "Group daemon" >> $TARGET/torrc
  116. echo "User _tor" >> $TARGET/torrc
  117. echo "PidFile /var/run/Tor.pid" >> $TARGET/torrc
  118. echo "#--END required settings--" >> $TARGET/torrc
  119. fi
  120. /bin/launchctl load /System/Library/LaunchDaemons/net.freehaven.tor.plist
  121. /bin/launchctl start net.freehaven.tor
  122. else
  123. if [ -d /Library/StartupItems/Tor ]; then
  124. rm -f /Library/StartupItems/Tor/Tor.loc
  125. echo "$TARGET" > /Library/StartupItems/Tor/Tor.loc
  126. fi
  127. fi