Browse Source

Set static IP within control panel

Bob Mottram 9 years ago
parent
commit
4a9bed8e9c
1 changed files with 104 additions and 9 deletions
  1. 104
    9
      src/freedombone-controlpanel

+ 104
- 9
src/freedombone-controlpanel View File

@@ -733,6 +733,99 @@ function set_tls_time_source {
733 733
     esac
734 734
 }
735 735
 
736
+function set_static_IP {
737
+    STATIC_IP='192.168.1.60'
738
+    STATIC_GATEWAY='192.168.1.1'
739
+    NEW_STATIC_IP=
740
+    NEW_STATIC_GATEWAY=
741
+    if grep -q 'iface eth0 inet static' /etc/network/interfaces; then
742
+        STATIC_IP=$(cat /etc/network/interfaces | grep "address " | awk -F ' ' '{print $2}' | head -n 1)
743
+        STATIC_GATEWAY=$(cat /etc/network/interfaces | grep "gateway " | awk -F ' ' '{print $2}' | head -n 1)
744
+    fi
745
+
746
+    # get the IP for the box
747
+    data=$(tempfile 2>/dev/null)
748
+    trap "rm -f $data" 0 1 2 5 15
749
+    dialog --title $"Set a static local IP address" \
750
+           --backtitle $"Freedombone Control Panel" \
751
+           --inputbox $"In order to forward incoming internet traffic to this system most internet routers need to know a static local IP address to send the data to.\n\n
752
+Enter a static local IP address for this system.\n\nIt will typically be 192.168.1.x" 15 60 "$STATIC_IP" 2>$data
753
+    sel=$?
754
+    case $sel in
755
+        0) NEW_STATIC_IP=$(<$data)
756
+           if [[ "$NEW_STATIC_IP" != *"."* ]]; then
757
+               return
758
+           fi
759
+           if grep -q 'iface eth0 inet static' /etc/network/interfaces; then
760
+               if [[ "$NEW_STATIC_IP" != "$STATIC_IP" ]]; then
761
+                   sed -i "s|${STATIC_IP}|${NEW_STATIC_IP}|g" /etc/network/interfaces
762
+               fi
763
+           fi
764
+           ;;
765
+    esac
766
+
767
+    # get the gateway
768
+    data=$(tempfile 2>/dev/null)
769
+    trap "rm -f $data" 0 1 2 5 15
770
+    dialog --title $"Set the IP address of your internet router/modem" \
771
+           --backtitle $"Freedombone Control Panel" \
772
+           --inputbox $"Set the local IP address for your internet router or ADSL modem.\n\nIt will typically be 192.168.1.1, 192.168.1.254, or similar" 12 60 "$STATIC_GATEWAY" 2>$data
773
+    sel=$?
774
+    case $sel in
775
+        0) NEW_STATIC_GATEWAY=$(<$data)
776
+           if [[ "$NEW_STATIC_GATEWAY" != *"."* ]]; then
777
+               return
778
+           fi
779
+           if grep -q 'iface eth0 inet static' /etc/network/interfaces; then
780
+               if [[ "$NEW_STATIC_GATEWAY" != "$STATIC_GATEWAY" ]]; then
781
+                   sed -i "s|${STATIC_GATEWAY}|${NEW_STATIC_GATEWAY}|g" /etc/network/interfaces
782
+               fi
783
+               return
784
+           fi
785
+           ;;
786
+    esac
787
+
788
+    if ! grep -q 'iface eth0 inet static' /etc/network/interfaces; then
789
+        if [ "$NEW_STATIC_GATEWAY" && "$NEW_STATIC_IP" ]; then
790
+            echo '# This file describes the network interfaces available on your system' > /etc/network/interfaces
791
+            echo '# and how to activate them. For more information, see interfaces(5).' >> /etc/network/interfaces
792
+            echo '' >> /etc/network/interfaces
793
+            echo '# The loopback network interface' >> /etc/network/interfaces
794
+            echo 'auto lo' >> /etc/network/interfaces
795
+            echo 'iface lo inet loopback' >> /etc/network/interfaces
796
+            echo '' >> /etc/network/interfaces
797
+            echo '# The primary network interface' >> /etc/network/interfaces
798
+            echo 'auto eth0' >> /etc/network/interfaces
799
+            echo 'iface eth0 inet static' >> /etc/network/interfaces
800
+            echo "    address ${NEW_STATIC_IP}" >> /etc/network/interfaces
801
+            echo '    netmask 255.255.255.0' >> /etc/network/interfaces
802
+            echo "    gateway ${NEW_STATIC_GATEWAY}" >> /etc/network/interfaces
803
+            echo "    dns-nameservers 213.73.91.35 85.214.20.141" >> /etc/network/interfaces
804
+            echo '# Example to keep MAC address between reboots' >> /etc/network/interfaces
805
+            echo '#hwaddress ether DE:AD:BE:EF:CA:FE' >> /etc/network/interfaces
806
+            echo '' >> /etc/network/interfaces
807
+            echo '# The secondary network interface' >> /etc/network/interfaces
808
+            echo '#auto eth1' >> /etc/network/interfaces
809
+            echo '#iface eth1 inet dhcp' >> /etc/network/interfaces
810
+            echo '' >> /etc/network/interfaces
811
+            echo '# WiFi Example' >> /etc/network/interfaces
812
+            echo "#auto $WIFI_INTERFACE" >> /etc/network/interfaces
813
+            echo "#iface $WIFI_INTERFACE inet dhcp" >> /etc/network/interfaces
814
+            echo '#    wpa-ssid "essid"' >> /etc/network/interfaces
815
+            echo '#    wpa-psk  "password"' >> /etc/network/interfaces
816
+            echo '' >> /etc/network/interfaces
817
+            echo '# Ethernet/RNDIS gadget (g_ether)' >> /etc/network/interfaces
818
+            echo '# ... or on host side, usbnet and random hwaddr' >> /etc/network/interfaces
819
+            echo '# Note on some boards, usb0 is automaticly setup with an init script' >> /etc/network/interfaces
820
+            echo '#iface usb0 inet static' >> /etc/network/interfaces
821
+            echo '#    address 192.168.7.2' >> /etc/network/interfaces
822
+            echo '#    netmask 255.255.255.0' >> /etc/network/interfaces
823
+            echo '#    network 192.168.7.0' >> /etc/network/interfaces
824
+            echo '#    gateway 192.168.7.1' >> /etc/network/interfaces
825
+        fi
826
+    fi
827
+}
828
+
736 829
 function menu_backup_restore {
737 830
     while true
738 831
     do
@@ -885,7 +978,7 @@ function menu_top_level {
885 978
         trap "rm -f $data" 0 1 2 5 15
886 979
         dialog --backtitle $"Freedombone Control Panel" \
887 980
                --title $"Control Panel" \
888
-               --radiolist $"Choose an operation:" 22 70 15 \
981
+               --radiolist $"Choose an operation:" 23 70 16 \
889 982
                1 $"Backup and Restore" off \
890 983
                2 $"Show SIP Phone Extensions" off \
891 984
                3 $"Reset Tripwire" off \
@@ -897,10 +990,11 @@ function menu_top_level {
897 990
                9 $"Media menu" off \
898 991
                10 $"Change the name of this system" off \
899 992
                11 $"Set the TLS date/time source" off \
900
-               12 $"Check for updates" off \
901
-               13 $"Power off the system" off \
902
-               14 $"Restart the system" off \
903
-               15 $"Exit" on 2> $data
993
+               12 $"Set a static local IP address" off \
994
+               13 $"Check for updates" off \
995
+               14 $"Power off the system" off \
996
+               15 $"Restart the system" off \
997
+               16 $"Exit" on 2> $data
904 998
         sel=$?
905 999
         case $sel in
906 1000
             1) exit 1;;
@@ -918,10 +1012,11 @@ function menu_top_level {
918 1012
             9) menu_media;;
919 1013
             10) change_system_name;;
920 1014
             11) set_tls_time_source;;
921
-            12) check_for_updates;;
922
-            13) shut_down_system;;
923
-            14) restart_system;;
924
-            15) break;;
1015
+            12) set_static_IP;;
1016
+            13) check_for_updates;;
1017
+            14) shut_down_system;;
1018
+            15) restart_system;;
1019
+            16) break;;
925 1020
         esac
926 1021
     done
927 1022
 }