| #!/bin/sh /etc/rc.common |
| # Copyright (C) 2015 OpenWrt.org |
| |
| START=90 |
| |
| USE_PROCD=1 |
| PROG=/usr/lib/gnunet/libexec/gnunet-service-arm |
| |
| GNUNET_HOME=/var/run/gnunet |
| # LOGFILE=$GNUNET_HOME/gnunet.log |
| CONFIGFILE=$GNUNET_HOME/gnunet.conf |
| |
| extra_command "restart_transport" "Restart transport" |
| |
| prepare_config() { |
| local had_exit_service=0 |
| |
| if [ ! -e "$GNUNET_HOME" ]; then |
| mkdir -m 0750 -p "$GNUNET_HOME" |
| chown gnunet:gnunet "$GNUNET_HOME" |
| fi |
| touch "$CONFIGFILE" |
| chown gnunet:gnunet "$CONFIGFILE" |
| chmod 0640 "$CONFIGFILE" |
| gnunet-config -c "$CONFIGFILE" -s PATHS -o GNUNET_HOME -V "$GNUNET_HOME" |
| |
| # minimal persistency in /etc/gnunet |
| [ ! -d /etc/gnunet ] && mkdir -m 0750 -p /etc/gnunet |
| chown -R gnunet:gnunet /etc/gnunet |
| |
| # defaults paths for persistent files |
| gnunet-config -c "$CONFIGFILE" -s PATHS -o GNUNET_CONFIG_HOME -V /etc/gnunet |
| gnunet-config -c "$CONFIGFILE" -s PEER -o PRIVATE_KEY -V /etc/gnunet/private_key.ecc |
| gnunet-config -c "$CONFIGFILE" -s identity -o EGODIR -V /etc/gnunet/identity/egos |
| gnunet-config -c "$CONFIGFILE" -s revocation -o DATABASE -V /etc/gnunet/revocation.dat |
| gnunet-config -c "$CONFIGFILE" -s nse -o PROOFFILE -V /etc/gnunet/proof.dat |
| |
| # enable all installed transport plugins |
| transport_plugins=$(gnunet-config -c "$CONFIGFILE" -s transport -o PLUGINS) |
| for transplug in /usr/lib/gnunet/libgnunet_plugin_transport_*.so; do |
| transplug="$( echo "$transplug" | |
| sed -ne 's!^.*_transport_\(.*\)\.so$!\1!p' )" |
| echo "$transport_plugins" | grep -q "$transplug" || |
| transport_plugins="$transport_plugins $transplug" |
| done |
| gnunet-config -c "$CONFIGFILE" -s transport -o PLUGINS -V "$transport_plugins" |
| |
| # do not touch sysctl, iptables and routing |
| gnunet-config -c "$CONFIGFILE" -s dns -o SKIP_ROUTING_SETUP -V YES |
| gnunet-config -c "$CONFIGFILE" -s exit -o EXIT_IFNAME -V '' |
| |
| # apply config from UCI |
| _gnunet_section="" |
| config_cb() |
| { |
| # $1 "Type" |
| # $2 "Name" |
| local __TYPE="$1" |
| local __NAME="${2/_/-}" |
| [ "${__TYPE}" = "gnunet-config" ] && _gnunet_section="${__NAME}" |
| [ "${__TYPE}" = "gnunet-exit-service" ] && { |
| had_exit_service=1 |
| _gnunet_section="${__NAME}.gnunet." |
| } |
| } |
| option_cb() { |
| # $1 name of variable |
| # $2 value |
| local __OPT="$1" |
| local __VAL="$2" |
| gnunet-config -c "$CONFIGFILE" -s "${_gnunet_section}" -o "${__OPT}" -V "${__VAL}" |
| } |
| |
| config_load gnunet |
| |
| [ "$had_exit_service" -eq 1 ] && gnunet-config -c "$CONFIGFILE" -s exit -o FORCESTART -V YES |
| |
| return 0 |
| } |
| |
| restart_transport() { |
| gnunet-arm -c "$CONFIGFILE" -k transport |
| gnunet-arm -c "$CONFIGFILE" -i transport |
| } |
| |
| start_service() { |
| prepare_config |
| |
| procd_open_instance |
| procd_set_param user gnunet |
| # procd_set_param env GNUNET_LOG="dht;;;;info" |
| procd_set_param stderr 1 |
| procd_set_param command "$PROG" -c "$CONFIGFILE" |
| [ "$LOGFILE" ] && procd_append_param command -l "$LOGFILE" |
| procd_set_param respawn |
| procd_close_instance |
| } |
| |
| service_triggers() |
| { |
| procd_add_reload_trigger "gnunet" |
| procd_add_raw_trigger "interface.*.up" 3000 /etc/init.d/gnunet restart_transport |
| } |