Skip to content

Instantly share code, notes, and snippets.

@gylns
Created February 6, 2017 10:52
Show Gist options
  • Select an option

  • Save gylns/e10edcad6b1b09e79db64fe0fb6efb10 to your computer and use it in GitHub Desktop.

Select an option

Save gylns/e10edcad6b1b09e79db64fe0fb6efb10 to your computer and use it in GitHub Desktop.

Revisions

  1. gylns created this gist Feb 6, 2017.
    151 changes: 151 additions & 0 deletions quanergy_net_install.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,151 @@
    #!/bin/bash
    sudo apt-get install isc-dhcp-server -y
    set interfaces
    set addresses
    set ip
    # Find network interfaces
    function find_interfaces()
    {
    local ip_result=$(ip link | awk '{print $2}')
    ip_result=($ip_result)
    local counter=0
    while [ $counter -lt "${#ip_result[@]}" ]
    do
    interface="${ip_result[$counter]}"
    if [ "$interface" == "lo:" ]; then counter=$[$counter +2]; continue; fi
    interface=${interface::-1}
    interfaces+=($interface)
    counter=$[$counter +1]
    mac="${ip_result[$counter]}"
    addresses+=($mac)
    counter=$[$counter +1]
    done
    }

    # Find network interfaces
    function display_interfaces()
    {
    counter=0
    while [ $counter -lt "${#interfaces[@]}" ]
    do
    echo "To use ${interfaces[$counter]} enter $counter"
    counter=$[$counter +1]
    done
    }

    # Test an IP address for validity
    function valid_ip()
    {
    ip=$1
    local stat=1

    if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
    OIFS=$IFS
    IFS='.'
    ip=($ip)
    IFS=$OIFS
    [[ ${ip[0]} -le 255 && ${ip[1]} -le 255 \
    && ${ip[2]} -le 255 && ${ip[3]} -le 252 && ${ip[3]} -ge 1 ]]
    stat=$?
    fi
    return $stat
    }

    set -e

    echo "Looking for network interfaces..."
    find_interfaces
    if [ "${#interfaces[@]}" == "0" ]
    then
    echo "No network interfaces found, please check your system"
    exit
    fi

    echo "Found ${#interfaces[@]} interfaces $interfaces"
    echo "Choose the network interface to be used"
    display_interfaces
    iface=-1
    while [[ "$iface" -ge "${#interfaces[@]}" || "$iface" -le "-1" ]]; do
    read -p "Ethernet interface " iface
    done

    ip_state="bad"
    while [ "$ip_state" == "bad" ]; do
    read -p "IP address " subnet
    if valid_ip $subnet; then ip_state="good"; break; else echo "Please provide a valid IP address in [X.X.X.1 X.X.X.252]"; fi
    done

    # Create /etc/network/interfaces
    if [ -e /etc/network/interfaces ]
    then
    sudo mv /etc/network/interfaces /etc/network/interfaces.bak
    sudo touch /etc/network/interfaces
    fi

    echo "# interfaces(5) file used by ifup(8) and ifdown(8)
    auto lo
    iface lo inet loopback
    allow-hotplug ${interfaces[$iface]}
    iface ${interfaces[$iface]} inet static
    address $subnet
    netmask 255.255.255.0
    post-up service isc-dhcp-server restart" > /etc/network/interfaces
    sudo chown root:root /etc/network/interfaces
    sudo chmod 644 /etc/network/interfaces

    if [ -e /etc/default/isc-dhcp-server ]
    then
    sudo mv /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.bak
    sudo touch /etc/default/isc-dhcp-server
    fi

    echo "INTERFACES=\"${interfaces[$iface]}\"" > /etc/default/isc-dhcp-server
    sudo chown root:root /etc/default/isc-dhcp-server
    sudo chmod 644 /etc/default/isc-dhcp-server

    # Create /etc/dhcp/dhcpd.conf
    if [ -e /etc/dhcp/dhcpd.conf ]
    then
    sudo mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
    sudo touch /etc/dhcp/dhcpd.conf
    fi

    echo "#
    # Simple configuration file for ISC dhcpd for Debian
    #
    ddns-update-style none;
    option domain-name \"example.org\";
    option domain-name-servers ns1.example.org, ns2.example.org;
    log-facility local7;
    subnet ${ip[0]}.${ip[1]}.${ip[2]}.0 netmask 255.255.255.0 {
    range ${ip[0]}.${ip[1]}.${ip[2]}.$[${ip[3]} +1] ${ip[0]}.${ip[1]}.${ip[2]}.254;
    option routers $subnet;
    default-lease-time 345600;
    max-lease-time 31557600;
    }" > /etc/dhcp/dhcpd.conf
    sudo chown root:root /etc/dhcp/dhcpd.conf
    sudo chmod 644 /etc/dhcp/dhcpd.conf

    # Make the chosen interface unmanaged
    if [ -e /etc/NetworkManager/NetworkManager.conf ]
    then
    sudo mv /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.bak
    sudo touch /etc/NetworkManager/NetworkManager.conf
    fi
    echo "[main]
    plugins=ifupdown,keyfile,ofono
    dns=dnsmasq
    [ifupdown]
    managed=false
    [keyfile]
    unmanaged-devices=mac:${addresses[$iface]}
    " > /etc/NetworkManager/NetworkManager.conf
    sudo chown root:root /etc/NetworkManager/NetworkManager.conf
    sudo chmod 644 /etc/NetworkManager/NetworkManager.conf