#!/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 }