diff --git a/Dockerfile b/Dockerfile index 2e47158..08635ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,7 +8,6 @@ COPY . ~/ttn-gateway # Build the gateway WORKDIR ~/ttn-gateway -RUN ls -la RUN ./resin-install.sh # Make sure we start up within the bin directory diff --git a/Dockerfile~ b/Dockerfile~ index 08635ee..2e47158 100644 --- a/Dockerfile~ +++ b/Dockerfile~ @@ -8,6 +8,7 @@ COPY . ~/ttn-gateway # Build the gateway WORKDIR ~/ttn-gateway +RUN ls -la RUN ./resin-install.sh # Make sure we start up within the bin directory diff --git a/resin-install.sh b/resin-install.sh index 4ca31f8..4898fec 100755 --- a/resin-install.sh +++ b/resin-install.sh @@ -1,4 +1,4 @@ -!/bin/bash +#! /bin/bash # Stop on the first sign of trouble set -e diff --git a/resin-install.sh~ b/resin-install.sh~ index 4ca31f8..49eda91 100755 --- a/resin-install.sh~ +++ b/resin-install.sh~ @@ -1,92 +1,74 @@ -!/bin/bash +#! /bin/bash -# Stop on the first sign of trouble -set -e +# Display the environment, which is useful when debugging -if [ $UID != 0 ]; then - echo "ERROR: Operation not permitted. Forgot sudo?" - exit 1 -fi - -VERSION="master" -if [[ $1 != "" ]]; then VERSION=$1; fi - -echo "The Things Network Gateway installer" +echo "******************" +echo "*** Environment:" +env +echo "******************" echo "" -# Check dependencies -echo "Installing dependencies..." -apt-get update -apt-get install swig libftdi-dev python-dev +# Configure the global and local configuration files via the environment -# Install LoRaWAN packet forwarder repositories -INSTALL_DIR="/opt/ttn-gateway" -if [ ! -d "$INSTALL_DIR" ]; then mkdir $INSTALL_DIR; fi -pushd $INSTALL_DIR +echo "******************" +echo "*** Configuration:" +echo "******************" -# Build libraries -if [ ! -d libmpsse ]; then - git clone https://github.com/devttys0/libmpsse.git - pushd libmpsse/src -else - pushd libmpsse/src - git reset --hard - git pull +if [[ $GATEWAY_NAME == "" ]]; then + echo "ERROR: NO GATEWAY_NAME FOUND IN ENVIRONMENT" + exit 1 fi +echo GATEWAY_NAME: $GATEWAY_NAME -./configure --disable-python -make -make install -ldconfig - -popd - -# Build LoRa gateway app -if [ ! -d lora_gateway ]; then - git clone https://github.com/TheThingsNetwork/lora_gateway.git - pushd lora_gateway -else - pushd lora_gateway - git reset --hard - git pull +if [[ $GATEWAY_EMAIL == "" ]]; then + echo "ERROR: NO GATEWAY_EMAIL FOUND IN ENVIRONMENT" + exit 1 fi +echo GATEWAY_EMAIL: $GATEWAY_EMAIL -cp ./libloragw/99-libftdi.rules /etc/udev/rules.d/99-libftdi.rules - -sed -i -e 's/CFG_SPI= native/CFG_SPI= ftdi/g' ./libloragw/library.cfg -sed -i -e 's/PLATFORM= kerlink/PLATFORM= lorank/g' ./libloragw/library.cfg -sed -i -e 's/ATTRS{idProduct}=="6010"/ATTRS{idProduct}=="6014"/g' /etc/udev/rules.d/99-libftdi.rules - -make - -popd - -# Build packet forwarder -if [ ! -d packet_forwarder ]; then - git clone https://github.com/TheThingsNetwork/packet_forwarder.git - pushd packet_forwarder -else - pushd packet_forwarder - git pull - git reset --hard +if [[ $GATEWAY_LAT == "" ]]; then + echo "ERROR: NO GATEWAY_LAT (latitude) FOUND IN ENVIRONMENT" + exit 1 fi +echo GATEWAY_LAT: $GATEWAY_LAT -make +if [[ $GATEWAY_LON == "" ]]; then + echo "ERROR: NO GATEWAY_LON (longitude) FOUND IN ENVIRONMENT" + exit 1 +fi +echo GATEWAY_LON: $GATEWAY_LON -popd +if [[ $GATEWAY_ALT == "" ]]; then + echo "ERROR: NO GATEWAY_ALT (altitude) FOUND IN ENVIRONMENT" + exit 1 +fi +echo GATEWAY_ALT: $GATEWAY_ALT -# Symlink poly packet forwarder -if [ ! -d bin ]; then mkdir bin; fi -if [ -f ./bin/poly_pkt_fwd ]; then rm ./bin/poly_pkt_fwd; fi -ln -s $INSTALL_DIR/packet_forwarder/poly_pkt_fwd/poly_pkt_fwd ./bin/poly_pkt_fwd -cp -f ./packet_forwarder/poly_pkt_fwd/global_conf.json ./bin/global_conf.json +echo "******************" +echo "" -# Restore location back to where we started the install +echo -e "{\n\t\"gateway_conf\": {\n\t\t\"gateway_ID\": \"0000000000000000\",\n\t\t\"servers\": [ { \"server_address\": \"croft.thethings.girovito.nl\", \"serv_port_up\": 1700, \"serv_port_down\": 1701, \"serv_enabled\": true } ],\n\t\t\"ref_latitude\": $GATEWAY_LAT,\n\t\t\"ref_longitude\": $GATEWAY_LON,\n\t\t\"ref_altitude\": $GATEWAY_ALT,\n\t\t\"contact_email\": \"$GATEWAY_EMAIL\",\n\t\t\"description\": \"$GATEWAY_NAME\" \n\t}\n}" >./local_conf.json -popd +# Reset gateway ID based on MAC -# Copy startup shell script to the install directory +echo "******************" +../packet_forwarder/reset_pkt_fwd.sh start ./local_conf.json +echo "******************" +echo "" -cp ./resin-run.sh $INSTALL_DIR/bin/resin-run.sh +# Test the connection, wait if needed. +while [[ $(ping -c1 google.com 2>&1 | grep " 0% packet loss") == "" ]]; do + echo "[TTN Gateway]: Waiting for internet connection..." + sleep 30 + done -echo "Installation completed." +# Fire up the forwarder. +while true + do + echo "[TTN Gateway]: Starting packet forwarder..." + ./poly_pkt_fwd + echo "******************" + echo "*** [TTN Gateway]: EXIT (retrying in 15s)" + echo "******************" + sleep 15 + done