You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.6 KiB

  1. #!/bin/sh /etc/rc.common
  2. # Copyright (C) 2015 OpenWrt.org
  3. START=50
  4. STOP=10
  5. USE_PROCD=1
  6. PROG=/usr/lib/gnunet/libexec/gnunet-service-arm
  7. GNUNET_HOME=/var/run/gnunet
  8. LOGFILE=$GNUNET_HOME/gnunet.log
  9. CONFIGFILE=$GNUNET_HOME/gnunet.conf
  10. SUID_ROOT_HELPERS="exit nat-server nat-client transport-bluetooth transport-wlan vpn"
  11. chmodown_execbin() {
  12. execname=/usr/lib/gnunet/libexec/gnunet-$1
  13. if [ -x $execname ]; then
  14. chmod $2 $execname
  15. [ "$3" ] && chown $3 $execname
  16. fi
  17. }
  18. fix_libexec_permissions() {
  19. [ -e /usr/share/gnunet/.permfix ] && return
  20. for helper in $SUID_ROOT_HELPERS; do
  21. chmodown_execbin helper-$helper u+s
  22. done
  23. chmodown_execbin helper-dns 4750 root:gnunetdns
  24. chmodown_execbin service-dns 2750 root:gnunetdns
  25. touch /usr/share/gnunet/.permfix
  26. }
  27. prepare_config() {
  28. mkdir -p $GNUNET_HOME
  29. chown gnunet:gnunet $GNUNET_HOME
  30. chmod 0750 $GNUNET_HOME
  31. touch $CONFIGFILE
  32. chown root:gnunet $CONFIGFILE
  33. chmod 0640 $CONFIGFILE
  34. gnunet-config -c $CONFIGFILE -s PATHS -o GNUNET_HOME -V $GNUNET_HOME
  35. # minimal persistency in /etc/gnunet
  36. [ ! -d /etc/gnunet ] && {
  37. mkdir -p /etc/gnunet
  38. chown gnunet:gnunet /etc/gnunet
  39. }
  40. gnunet-config -c $CONFIGFILE -s PATHS -o GNUNET_CONFIG_HOME -V /etc/gnunet
  41. gnunet-config -c $CONFIGFILE -s PEER -o PRIVATE_KEY -V /etc/gnunet/private_key.ecc
  42. gnunet-config -c $CONFIGFILE -s identity -o EGODIR -V /etc/gnunet/identity/egos
  43. gnunet-config -c $CONFIGFILE -s revocation -o DATABASE -V /etc/gnunet/revocation.dat
  44. gnunet-config -c $CONFIGFILE -s nse -o PROOFFILE -V /etc/gnunet/proof.dat
  45. gnunet-config -c $CONFIGFILE -s namestore-sqlite -o FILENAME -V /etc/gnunet/namestore.sqlite
  46. # minimal datastore (todo: make this configurable)
  47. gnunet-config -c $CONFIGFILE -s datastore -o QUOTA -V "4 MB"
  48. # limit dhtcache memory usage to 4 MB
  49. gnunet-config -c $CONFIGFILE -s dhtcache -o QUOTA -V "4 MB"
  50. # enable dns2gns
  51. gnunet-config -c $CONFIGFILE -s dns2gns -o AUTOSTART -V YES
  52. # enable all installed transport plugins
  53. transport_plugins=$(gnunet-config -c $CONFIGFILE -s transport -o PLUGINS)
  54. for transplug in /usr/lib/gnunet/libgnunet_plugin_transport_*.so; do
  55. transplug=$( echo $transplug |
  56. sed -ne 's!^.*_transport_\(.*\)\.so$!\1!p' )
  57. [ -n "$( echo $transport_plugins | grep $transplug )" ] ||
  58. transport_plugins="$transport_plugins $transplug"
  59. done
  60. gnunet-config -c $CONFIGFILE -s transport -o PLUGINS -V "$transport_plugins"
  61. }
  62. start_service() {
  63. fix_libexec_permissions
  64. [ ! -e $GNUNET_HOME ] && prepare_config
  65. procd_open_instance
  66. procd_set_param user gnunet
  67. procd_set_param command $PROG -c $CONFIGFILE -l $LOGFILE
  68. procd_set_param respawn
  69. procd_close_instance
  70. }