Inhaltsverzeichnis

change-ip.sh

Das Skript change-ip.sh ändert die IP-Adresse der UCware-Konfiguration. Die Systemkonfiguration (/etc/interfaces) bleibt dabei unangestastet.

Kurzanleitung

  1. change-ip.sh auf die UCware kopieren.
  2. Die Berechtigung zum Ausführen setzen:
chmod +x change-ip.sh
  1. Skript unter dem Benutzer root ausführen:
sudo ./change-ip.sh

Das Skript fragt jetzt dialoggesteuert nach der neuen IP-Adresse und konfiguriert anschließend die UCWare um.

Um auch die reale IP-Adresse der UCware zu ändern, muss die Datei /etc/network/interfaces noch manuell angepasst werden.

Best Practice

Die Netzwerkeinstellungen in der /etc/network/interfaces ändern und mit ifdown eth0; ifup eth1 aktivieren. Wird anschließend change-ip.sh gestatrtet, wird die aktuelle IP-Adresse automatisch vorgeschlagen.

change-ip.sh
#!/bin/bash
 
export LANG="C"
LOGFILE="/var/log/ipinstaller.log"
 
# handle ctrl+c / cancel
function handle_exit() {
   if [[ $1 -ne 0 ]]; then
      export DIALOGRC
      export DIALOGOPTS='--backtitle "IPinstaller" --title "Error"'
      dialog --msgbox "IPinstaller was interrupted!" 8 40
      clear
      exit 1
   fi
}
 
# check for root privileges
[ "$(id -u)" -eq 0 ] || { echo "This installer needs root privileges, please re-run with sudo. Exiting."; exit 1; }
 
apt-get install --assume-yes --quiet --no-install-recommends --no-install-suggests dialog subnetcalc pwgen wget debconf-utils gzip >$LOGFILE 2>&1
 
# set up dialog
TMPFILE=$(mktemp --quiet)
DIALOGRC=$(mktemp --quiet)
echo "screen_color = (WHITE,GREEN,ON)" > $DIALOGRC
export DIALOGRC
export DIALOGOPT#!/bin/bash
 
export LANG="C"
LOGFILE="/var/log/ipinstaller.log"
 
# handle ctrl+c / cancel
function handle_exit() {
   if [[ $1 -ne 0 ]]; then
      export DIALOGRC
      export DIALOGOPTS='--backtitle "IPinstaller" --title "Error"'
      dialog --msgbox "IPinstaller was interrupted!" 8 40
      clear
      exit 1
   fi
}
 
# check for root privileges
[ "$(id -u)" -eq 0 ] || { echo "This installer needs root privileges, please re-run with sudo. Exiting."; exit 1; }
 
apt-get install --assume-yes --quiet --no-install-recommends --no-install-suggests dialog subnetcalc pwgen wget debconf-utils gzip >$LOGFILE 2>&1
 
# set up dialog
TMPFILE=$(mktemp --quiet)
DIALOGRC=$(mktemp --quiet)
echo "screen_color = (WHITE,GREEN,ON)" > $DIALOGRC
export DIALOGRC
export DIALOGOPTS='--backtitle "IPinstaller"'
 
trap "rm -f $TMPFILE $DIALOGRC" 0 1 2 5 15
 
# the disclaimer
dialog --msgbox "This installer will configure automatically your UCware VoIP config" 8 40
 
# get the VoIP interface, so we can suggest its IP later
INTERFACE="eth0"
export DIALOGOPTS='--backtitle "UCware installer" --title "Network configuration"'
dialog --inputbox "Please enter the name of the VoIP interface" 8 40 "$INTERFACE" 2>$TMPFILE
INTERFACE=$(awk 'NR==1 {print;exit}' $TMPFILE)
 
# basic variable initialization
IP=$(ifconfig $INTERFACE | grep "inet addr" | cut -d ':' -f 2 | cut -d ' ' -f 1)
NETMASK=$(ifconfig $INTERFACE | grep "inet addr" | cut -d ':' -f 4 | cut -d ' ' -f 1)
NTPSERVER="0.de.pool.ntp.org"
DNSSERVER="8.8.8.8"
 
# IP configuration, uses subnetcalc for validation and processing
IPVALID=1
while [[ $IPVALID -ne 0 ]]; do
   dialog  --separate-widget $'\n' \
         --inputbox "Please enter the VoIP network IP" 8 40 "$IP" \
         --inputbox "Please enter the VoIP network netmask" 8 40 "$NETMASK" 2>$TMPFILE
   handle_exit $?
 
   # read answers
   IP=$(awk 'NR==1 {print;exit}' $TMPFILE)
   NETMASK=$(awk 'NR==2 {print;exit}' $TMPFILE)
 
   # extrapolate router, broadcast, dhcp range
   SUBNETCALC=$(subnetcalc $IP $NETMASK)
   IPVALID=$?
 
   if [[ $IPVALID -ne 0 ]]; then
      dialog --title "Network configuration" --msgbox "Invalid IP configuration, please try again" 8 40
   else
      IP=$(echo "$SUBNETCALC" | awk '/Address/ {print $3}')
      NETMASK=$(echo "$SUBNETCALC" | awk '/Netmask/ {print $3}')
      BROADCAST=$(echo "$SUBNETCALC" | awk '/Broadcast/ {print $3}')
      ROUTER=$(echo "$SUBNETCALC" | awk '/Host Range/ {print $5}')
      NET=$(echo "$SUBNETCALC" | awk '/Network/ {print $3}')
      DHCPMIN="${NET%.*}.100"
      DHCPMAX="${NET%.*}.250"
   fi
done
 
# Gateway and DHCP configuration
dialog  --title "Network configuration" --separate-widget $'\n' \
      --inputbox "Please enter the VoIP network gateway IP" 8 40 "$ROUTER" \
      --inputbox "Please enter the VoIP DHCP range minimum" 8 40 "$DHCPMIN" \
      --inputbox "Please enter the VoIP DHCP range maximum" 8 40 "$DHCPMAX" 2>$TMPFILE
handle_exit $?
ROUTER=$(awk 'NR==1 {print;exit}' $TMPFILE)
DHCPMIN=$(awk 'NR==2 {print;exit}' $TMPFILE)
DHCPMAX=$(awk 'NR==3 {print;exit}' $TMPFILE)
 
# present summary, ask user to confirm values
dialog --title "Summary" --yesno "VoIP net address: $IP/$NETMASK
 
Router: $ROUTER
Broadcast: $BROADCAST
DHCP range: $DHCPMIN - $DHCPMAX
 
This UCware server will be configured using those settings, proceed?" 18 50
 
PROCEED=$?
 
if [[ "$PROCEED" -ne 0 ]]; then
   dialog --title "Error" --msgbox "Not continuing due to user abort." 8 40
   clear
   exit 1
fi
 
export DIALOGOPTS='--backtitle "IPinstaller" --title "Installation in progress"'
dialog --infobox "Configuring ip configs ..." 8 40
 
DBPW=$(/opt/ucware/sbin/gs-get-conf DB_MASTER_PWD)
DBUSER=$(/opt/ucware/sbin/gs-get-conf DB_MASTER_USER)
 
mysql --user=$DBUSER --password=$DBPW <<< "USE \`asterisk\`; UPDATE \`hosts\` SET \`host\`='$IP' WHERE \`id\`='1';"
 
OLDINTERFACE=$(awk '/INTERFACES=/ {print}' /etc/default/isc-dhcp-server | cut -d '"' -f2)
OLDNETMASK=$(awk '/netmask/ {print $3 " " $4}' /etc/dhcp/dhcpd.conf)
 
zcat /usr/share/doc/ucware-core/misc/dhcpd-3-example.conf.gz > /etc/dhcp/dhcpd.conf
sed --in-place "s/192.168.1.130/$IP/" /etc/dhcp/dhcpd.conf
sed --in-place "s/broadcast-address 192.168.1.255/broadcast-address $BROADCAST/" /etc/dhcp/dhcpd.conf
sed --in-place "s/routers 192.168.1.1/routers $ROUTER/" /etc/dhcp/dhcpd.conf
sed --in-place "s/domain-name-servers 192.168.1.1/domain-name-servers $IP/" /etc/dhcp/dhcpd.conf
sed --in-place "s/subnet-mask 255.255.255.0/subnet-mask $NETMASK/" /etc/dhcp/dhcpd.conf
sed --in-place "s/netmask 255.255.255.0/netmask $NETMASK/" /etc/dhcp/dhcpd.conf
sed --in-place "s/subnet 192.168.1.0/subnet $NET/" /etc/dhcp/dhcpd.conf
sed --in-place "s/range 192.168.1.2 192.168.1.129/range $DHCPMIN $DHCPMAX/" /etc/dhcp/dhcpd.conf
sed --in-place "s/[[:space:]]*range 192.168.1.131 192.168.1.254;//" /etc/dhcp/dhcpd.conf
 
sed -i "s/INTERFACES=\"$OLDINTERFACE\"/INTERFACES=\"$INTERFACE\"/" /etc/default/isc-dhcp-server
 
OLDPROVHOST=$(awk -F '$' '/PROV_HOST/ {print $2; exit;}' /etc/ucware/ucware.php)
OLDNTPSERVER=$(awk -F '$' '/NTP_SERVER/ {print $2;}' /etc/ucware/ucware.php)
OLDBUTTONDAEMONHOST=$(awk -F '$' '/BUTTONDAEMON_HOST/ {print $2; exit;}' /etc/ucware/ucware.php)S
 
sed --in-place "s/$OLDPROVHOST/PROV_HOST = '$IP';/" /etc/ucware/ucware.php
sed --in-place "s/$OLDNTPSERVER/NTP_SERVER = '$IP';/" /etc/ucware/ucware.php
sed --in-place "s/$OLDBUTTONDAEMONHOST/BUTTONDAEMON_HOST = '$IP';/" /etc/ucware/ucware.php
 
 
PERMIT=$()
sed --in-place "s|permit[\s]*=[\s]*$OLDPROVHOST/$OLDNETMASK|permit = $NET/$NETMASK|" /etc/ucware/asterisk/manager.conf.d-available/ucwared.conf
sed --in-place "s/$OLDPROVHOST/$IP/" /opt/ucwared/ucwared.conf
 
 
echo "VoIP net interface: $INTERFACE
VoIP net address: $IP/$NETMASK
Router: $ROUTER
DHCP range: $DHCPMIN - $DHCPMAX
SQL password for ucware: $SQLPASS
SQL password for root: $SQLROOTPASS
UCware package user: $UCUSER
UCware package password: $UCPASS
NTP server: $NTPSERVER
DNS server: $DNSSERVER" > /var/log/ucware/choices.log
 
service isc-dhcp-server restart
service asterisk restart
service ucwared restart