diff --git a/src/freedombone-mesh b/src/freedombone-mesh index eb11ec01..643c9eb9 100755 --- a/src/freedombone-mesh +++ b/src/freedombone-mesh @@ -37,10 +37,10 @@ CONFIG_FILE=$HOME/${PROJECT_NAME}.cfg MUMBLE_PATH=/usr/bin/mumble if [ -f /usr/local/bin/${PROJECT_NAME} ]; then - TOXIC_FILE=$(cat /usr/local/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}') + TOXIC_FILE=$(cat /usr/local/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}') else - TOXIC_FILE=$(cat /usr/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}') -fi + TOXIC_FILE=$(cat /usr/bin/${PROJECT_NAME} | grep "TOXIC_FILE=" | head -n 1 | awk -F '=' '{print $2}') +fi DHTNODES=/usr/share/toxic/DHTnodes PEERS_FILE=/tmp/meshpeers.txt @@ -69,225 +69,226 @@ QTOX_INI="/home/$USER/.config/tox/qtox.ini" SERVER_INSTALLATION="no" function install_toxcore { - if [ -f /etc/tox-bootstrapd.conf ]; then - return - fi + if [ -f /etc/tox-bootstrapd.conf ]; then + return + fi - sudo apt-get -y install build-essential libtool autotools-dev - sudo apt-get -y install automake checkinstall check git yasm - sudo apt-get -y install libsodium13 libsodium-dev libcap2-bin - sudo apt-get -y install libconfig9 libconfig-dev + sudo apt-get -y install build-essential libtool autotools-dev + sudo apt-get -y install automake checkinstall check git yasm + sudo apt-get -y install libsodium13 libsodium-dev libcap2-bin + sudo apt-get -y install libconfig9 libconfig-dev - if [ ! -d ~/develop ]; then - mkdir ~/develop - fi - cd ~/develop - git clone $TOXCORE_REPO ~/develop/toxcore - cd ~/develop/toxcore - autoreconf -i - ./configure --enable-daemon - if [ ! "$?" = "0" ]; then - exit 78467 - fi - make - if [ ! "$?" = "0" ]; then - exit 84562 - fi - sudo make install - sudo cp /usr/local/lib/libtoxcore* /usr/lib/ + if [ ! -d ~/develop ]; then + mkdir ~/develop + fi + cd ~/develop + git clone $TOXCORE_REPO ~/develop/toxcore + cd ~/develop/toxcore + git checkout $TOXCORE_COMMIT -b $TOXCORE_COMMIT + autoreconf -i + ./configure --enable-daemon + if [ ! "$?" = "0" ]; then + exit 78467 + fi + make + if [ ! "$?" = "0" ]; then + exit 84562 + fi + sudo make install + sudo cp /usr/local/lib/libtoxcore* /usr/lib/ - if [ ! -f /usr/local/bin/tox-bootstrapd ]; then - echo $"File not found /usr/local/bin/tox-bootstrapd" - exit 73862 - fi + if [ ! -f /usr/local/bin/tox-bootstrapd ]; then + echo $"File not found /usr/local/bin/tox-bootstrapd" + exit 73862 + fi - sudo useradd --home-dir /var/lib/tox-bootstrapd --create-home --system --shell /sbin/nologin --comment "Account to run Tox's DHT bootstrap daemon" --user-group tox-bootstrapd - sudo chmod 700 /var/lib/tox-bootstrapd - if [ ! -f ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf ]; then - echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf" - exit 476835 - fi + sudo useradd --home-dir /var/lib/tox-bootstrapd --create-home --system --shell /sbin/nologin --comment "Account to run Tox's DHT bootstrap daemon" --user-group tox-bootstrapd + sudo chmod 700 /var/lib/tox-bootstrapd + if [ ! -f ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf ]; then + echo $"File not found $INSTALL_DIR/toxcore/other/bootstrap_daemon/tox-bootstrapd.conf" + exit 476835 + fi - # create configuration file - echo "port = $TOX_PORT" > /tmp/tox-bootstrapd.conf - echo 'keys_file_path = "/var/lib/tox-bootstrapd/keys"' >> /tmp/tox-bootstrapd.conf - echo 'pid_file_path = "/var/run/tox-bootstrapd/tox-bootstrapd.pid"' >> /tmp/tox-bootstrapd.conf - echo 'enable_ipv6 = true' >> /tmp/tox-bootstrapd.conf - echo 'enable_ipv4_fallback = true' >> /tmp/tox-bootstrapd.conf - echo 'enable_lan_discovery = true' >> /tmp/tox-bootstrapd.conf - echo 'enable_tcp_relay = true' >> /tmp/tox-bootstrapd.conf - echo "tcp_relay_ports = [443, 3389, $TOX_PORT]" >> /tmp/tox-bootstrapd.conf - echo 'enable_motd = true' >> /tmp/tox-bootstrapd.conf - echo 'motd = "tox-bootstrapd"' >> /tmp/tox-bootstrapd.conf - sudo cp /tmp/tox-bootstrapd.conf /etc/tox-bootstrapd.conf - rm /tmp/tox-bootstrapd.conf + # create configuration file + echo "port = $TOX_PORT" > /tmp/tox-bootstrapd.conf + echo 'keys_file_path = "/var/lib/tox-bootstrapd/keys"' >> /tmp/tox-bootstrapd.conf + echo 'pid_file_path = "/var/run/tox-bootstrapd/tox-bootstrapd.pid"' >> /tmp/tox-bootstrapd.conf + echo 'enable_ipv6 = true' >> /tmp/tox-bootstrapd.conf + echo 'enable_ipv4_fallback = true' >> /tmp/tox-bootstrapd.conf + echo 'enable_lan_discovery = true' >> /tmp/tox-bootstrapd.conf + echo 'enable_tcp_relay = true' >> /tmp/tox-bootstrapd.conf + echo "tcp_relay_ports = [443, 3389, $TOX_PORT]" >> /tmp/tox-bootstrapd.conf + echo 'enable_motd = true' >> /tmp/tox-bootstrapd.conf + echo 'motd = "tox-bootstrapd"' >> /tmp/tox-bootstrapd.conf + sudo cp /tmp/tox-bootstrapd.conf /etc/tox-bootstrapd.conf + rm /tmp/tox-bootstrapd.conf - if [ -f /bin/systemctl ]; then - if [ ! -f ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.service ]; then - echo $"File not found ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.service" - exit 7359 - fi - sudo cp ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.service /etc/systemd/system/ + if [ -f /bin/systemctl ]; then + if [ ! -f ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.service ]; then + echo $"File not found ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.service" + exit 7359 + fi + sudo cp ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.service /etc/systemd/system/ - sudo systemctl daemon-reload - sudo systemctl enable tox-bootstrapd.service - sudo systemctl start tox-bootstrapd.service - if [ ! "$?" = "0" ]; then - sudo systemctl status tox-bootstrapd.service - exit 5846 - fi + sudo systemctl daemon-reload + sudo systemctl enable tox-bootstrapd.service + sudo systemctl start tox-bootstrapd.service + if [ ! "$?" = "0" ]; then + sudo systemctl status tox-bootstrapd.service + exit 5846 + fi - sudo systemctl restart tox-bootstrapd.service - else - sudo cp ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.sh /etc/init.d/tox-bootstrapd - sudo chmod 755 /etc/init.d/tox-bootstrapd - sudo update-rc.d tox-bootstrapd defaults - sudo service tox-bootstrapd start - fi + sudo systemctl restart tox-bootstrapd.service + else + sudo cp ~/develop/toxcore/other/bootstrap_daemon/tox-bootstrapd.sh /etc/init.d/tox-bootstrapd + sudo chmod 755 /etc/init.d/tox-bootstrapd + sudo update-rc.d tox-bootstrapd defaults + sudo service tox-bootstrapd start + fi - TOX_PUBLIC_KEY=$(cat /var/log/syslog | grep tox | grep "Public Key" | awk -F ' ' '{print $8}' | tail -1) - if [ ${#TOX_PUBLIC_KEY} -lt 30 ]; then - echo $'Could not obtain the tox node public key' - exit 6529 - fi + TOX_PUBLIC_KEY=$(cat /var/log/syslog | grep tox | grep "Public Key" | awk -F ' ' '{print $8}' | tail -1) + if [ ${#TOX_PUBLIC_KEY} -lt 30 ]; then + echo $'Could not obtain the tox node public key' + exit 6529 + fi - # save the public key for later reference - echo "$TOX_PUBLIC_KEY" > /tmp/boostrapid - sudo mv /tmp/boostrapid $TOX_BOOTSTRAP_ID_FILE + # save the public key for later reference + echo "$TOX_PUBLIC_KEY" > /tmp/boostrapid + sudo mv /tmp/boostrapid $TOX_BOOTSTRAP_ID_FILE } function install_toxid { - if [ -f /usr/local/bin/toxid ]; then - return - fi - cd ~/develop - git clone $TOXID_REPO ~/develop/toxid - cd ~/develop/toxid - make - sudo make install + if [ -f /usr/local/bin/toxid ]; then + return + fi + cd ~/develop + git clone $TOXID_REPO ~/develop/toxid + cd ~/develop/toxid + make + sudo make install - if [ ! -f /usr/local/bin/toxid ]; then - echo $"Couldn't install toxid" - exit 6389 - fi + if [ ! -f /usr/local/bin/toxid ]; then + echo $"Couldn't install toxid" + exit 6389 + fi - if ! grep -Fxq "toxavahi" /etc/crontab; then - cp /etc/crontab /tmp/crontab - echo "* * * * * root toxavahi > /dev/null" >> /tmp/crontab - sudo cp /tmp/crontab /etc/crontab - rm /tmp/crontab - fi + if ! grep -Fxq "toxavahi" /etc/crontab; then + cp /etc/crontab /tmp/crontab + echo "* * * * * root toxavahi > /dev/null" >> /tmp/crontab + sudo cp /tmp/crontab /etc/crontab + rm /tmp/crontab + fi } function run_tox { - echo $QTOX_INI - if [[ -f $TOXIC_FILE || -f $QTOX_INI ]]; then - if [[ $SERVER_INSTALLATION == "no" ]]; then - # update bootstrap nodes - if [ -f $DHTNODES ]; then - if [ ! -f $DHTNODES.internet ]; then - sudo cp $DHTNODES $DHTNODES.internet - fi - fi - lstox -f dht > /tmp/dht - sudo cp /tmp/dht $DHTNODES - fi + echo $QTOX_INI + if [[ -f $TOXIC_FILE || -f $QTOX_INI ]]; then + if [[ $SERVER_INSTALLATION == "no" ]]; then + # update bootstrap nodes + if [ -f $DHTNODES ]; then + if [ ! -f $DHTNODES.internet ]; then + sudo cp $DHTNODES $DHTNODES.internet + fi + fi + lstox -f dht > /tmp/dht + sudo cp /tmp/dht $DHTNODES + fi - # get a list of peers - PEER_TOX_ID_LIST=$(lstox | grep $AVAHI_DOMAIN | sort -u) - if [ ! "$PEER_TOX_ID_LIST" ]; then - echo $'No peers found' - exit 0 - fi - PEER_TOX_ID_LIST_COUNT=$(echo "$PEER_TOX_ID_LIST" | wc -l) - PEER_TOX_ID='' - if [ $PEER_TOX_ID_LIST_COUNT -lt "2" ]; then - # single peer - PEER_TOX_ID=$(echo "$PEER_TOX_ID_LIST" | awk -F ' ' '{print $3}') - else - # choose a user from a list - echo '' - echo $"Select a user on $AVAHI_DOMAIN:" - ctr=0 - while IFS='' read -r line || [[ -n "$line" ]]; do - toxusername=$(echo $line | awk -F ' ' '{print $2}') - echo " $ctr. $toxusername" - ctr=$((ctr + 1)) - done < "$PEER_TOX_ID_LIST" - read user_index - PEER_TOX_ID=$(echo "$PEER_TOX_ID_LIST" | tail -n+${user_index} | head -n1 | awk -F ' ' '{print $3}') - fi + # get a list of peers + PEER_TOX_ID_LIST=$(lstox | grep $AVAHI_DOMAIN | sort -u) + if [ ! "$PEER_TOX_ID_LIST" ]; then + echo $'No peers found' + exit 0 + fi + PEER_TOX_ID_LIST_COUNT=$(echo "$PEER_TOX_ID_LIST" | wc -l) + PEER_TOX_ID='' + if [ $PEER_TOX_ID_LIST_COUNT -lt "2" ]; then + # single peer + PEER_TOX_ID=$(echo "$PEER_TOX_ID_LIST" | awk -F ' ' '{print $3}') + else + # choose a user from a list + echo '' + echo $"Select a user on $AVAHI_DOMAIN:" + ctr=0 + while IFS='' read -r line || [[ -n "$line" ]]; do + toxusername=$(echo $line | awk -F ' ' '{print $2}') + echo " $ctr. $toxusername" + ctr=$((ctr + 1)) + done < "$PEER_TOX_ID_LIST" + read user_index + PEER_TOX_ID=$(echo "$PEER_TOX_ID_LIST" | tail -n+${user_index} | head -n1 | awk -F ' ' '{print $3}') + fi - # if this is a valid ID - if [ ${#PEER_TOX_ID} -gt 30 ]; then - # start client and make a friend request - if [ -f $QTOX_INI ]; then - echo $'Launch qTox' - qtox & - else + # if this is a valid ID + if [ ${#PEER_TOX_ID} -gt 30 ]; then + # start client and make a friend request + if [ -f $QTOX_INI ]; then + echo $'Launch qTox' + qtox & + else - echo "n + echo "n /nick $USER /add $PEER_TOX_ID /exit " | $TOXIC_FILE -d - # Running twice is a hack to get around buggyness in the client - $TOXIC_FILE -d - fi - exit 0 - else - # ID was invalid - echo $PEER_TOX_ID - echo $"Tox ID for $AVAHI_DOMAIN was not found" - exit 6 - fi - fi + # Running twice is a hack to get around buggyness in the client + $TOXIC_FILE -d + fi + exit 0 + else + # ID was invalid + echo $PEER_TOX_ID + echo $"Tox ID for $AVAHI_DOMAIN was not found" + exit 6 + fi + fi } if [ -f /var/lib/batman ]; then - SERVER_INSTALLATION="yes" + SERVER_INSTALLATION="yes" fi if [[ $SERVER_INSTALLATION == "no" ]]; then - if [ ! -f /usr/bin/batman ]; then - ${PROJECT_NAME}-client - fi + if [ ! -f /usr/bin/batman ]; then + ${PROJECT_NAME}-client + fi fi # alternative toxic paths if [ -f /usr/local/bin/toxic ]; then - TOXIC_FILE=/usr/local/bin/toxic + TOXIC_FILE=/usr/local/bin/toxic fi if [ -f /usr/local/share/toxic/DHTnodes ]; then - DHTNODES=/usr/local/share/toxic/DHTnodes + DHTNODES=/usr/local/share/toxic/DHTnodes fi if [[ $SERVER_INSTALLATION == "no" ]]; then - if [ ! -f /tmp/meshtype ]; then - install_toxcore - install_toxid - sudo batman start - if [ ! "$?" = "0" ]; then - exit 2 - fi - fi + if [ ! -f /tmp/meshtype ]; then + install_toxcore + install_toxid + sudo batman start + if [ ! "$?" = "0" ]; then + exit 2 + fi + fi fi avahi-browse -atl | awk -F ' ' '{print $4}' | sort -u > $PEERS_FILE if [ ! -f $PEERS_FILE ]; then - echo $'No peers were found' - exit 0 + echo $'No peers were found' + exit 0 fi ctr=0 while IFS='' read -r line || [[ -n "$line" ]]; do - ctr=$((ctr + 1)) + ctr=$((ctr + 1)) done < "$PEERS_FILE" if [ ${ctr} -lt "1" ]; then - echo $'No peers were found' - exit 0 + echo $'No peers were found' + exit 0 fi clear @@ -302,8 +303,8 @@ echo '' echo $'Please choose a peer to connect to:' idx=1 while IFS='' read -r line || [[ -n "$line" ]]; do - echo " $idx. $line" - idx=$((idx + 1)) + echo " $idx. $line" + idx=$((idx + 1)) done < "$PEERS_FILE" peer_index=0 @@ -311,42 +312,42 @@ read peer_index # if no selection made if [ ! $peer_index ]; then - echo $'Nothing was selected' - echo '' - exit 0 + echo $'Nothing was selected' + echo '' + exit 0 fi # get the avahi domain name AVAHI_DOMAIN= idx=1 while IFS='' read -r line || [[ -n "$line" ]]; do - if [ ${idx} -eq "$peer_index" ]; then - AVAHI_DOMAIN=${line}.local - fi - idx=$((idx + 1)) + if [ ${idx} -eq "$peer_index" ]; then + AVAHI_DOMAIN=${line}.local + fi + idx=$((idx + 1)) done < "$PEERS_FILE" if [ ! $AVAHI_DOMAIN ]; then - echo $'No domain name' - exit 3 + echo $'No domain name' + exit 3 fi # if only mumble is installed if [ ! -f $TOXIC_FILE ]; then - if [ -f $MUMBLE_PATH ]; then - $MUMBLE_PATH & - exit 0 - fi - echo $'You need mumble/toxic/qTox installed on your system' - if [[ $SERVER_INSTALLATION == "no" ]]; then - sudo batman stop - fi - exit 4 + if [ -f $MUMBLE_PATH ]; then + $MUMBLE_PATH & + exit 0 + fi + echo $'You need mumble/toxic/qTox installed on your system' + if [[ $SERVER_INSTALLATION == "no" ]]; then + sudo batman stop + fi + exit 4 fi # if only tox is installed if [ ! -f $MUMBLE_PATH ]; then - run_tox + run_tox fi echo '' @@ -359,32 +360,32 @@ read peer_index # if no selection made if [ ! $peer_index ]; then - echo $'Nothing was selected' - echo '' - exit 0 + echo $'Nothing was selected' + echo '' + exit 0 fi if [[ $peer_index == 1 ]]; then - if [ -f $MUMBLE_PATH ]; then - echo '' - echo $'To setup for the first time click "Add New", then set:' - echo $" Label: $AVAHI_DOMAIN" - echo $" Address: $AVAHI_DOMAIN" - echo $' Port: 64738' - echo $" Username: $USER" - echo '' - echo $'Press Enter to continue.' - echo '' - read peer_index - $MUMBLE_PATH & - else - echo $'Mumble may not be installed on this system' - exit 5 - fi + if [ -f $MUMBLE_PATH ]; then + echo '' + echo $'To setup for the first time click "Add New", then set:' + echo $" Label: $AVAHI_DOMAIN" + echo $" Address: $AVAHI_DOMAIN" + echo $' Port: 64738' + echo $" Username: $USER" + echo '' + echo $'Press Enter to continue.' + echo '' + read peer_index + $MUMBLE_PATH & + else + echo $'Mumble may not be installed on this system' + exit 5 + fi fi if [[ $peer_index == 2 ]]; then - run_tox + run_tox fi exit 0