W dniu 25 czerwca 2012 15:05 użytkownik Sławomir Paszkiewicz <paszczus@gmail.com> napisał:
Moglbys podeslac te zmiany w nodeedit.php jako patch, albo po prostu caly plik? dzieki ;-)

Coś takiego mam np.:

####################
nodeedit.php:
####################
if($nodeinfo['mac'] != $nodeedit['mac']) {
$subject = 'Zmienił się adres MAC komputera ('.$nodeedit['id'].')';
$body = 'Było: '.$nodeinfo['mac'].', zostało zmienione na: '.$nodeedit['mac'];
$LMS->AddLogMessages($customerid, $subject, $body);
$LMS->ZmianaMAC($nodeinfo['mac'], $nodeedit['mac'], $nodeinfo['ip']);
}
// najpierw zmieniamy maca pozniej IP, wiec do zmiany IP korzystamy juz z nowego MACa
if($nodeinfo['ip'] != $nodeedit['ipaddr']) {
$subject = 'Zmienił się adres IP komputera ('.$nodeedit['id'].')';
$body = 'Było: '.$nodeinfo['ip'].', zostało zmienione na: '.$nodeedit['ipaddr'];
$LMS->AddLogMessages($customerid, $subject, $body);
$LMS->ZmianaAdresuIP($nodeinfo['ip'], $nodeedit['ipaddr'], $nodeedit['mac']);
}
####################

####################
LMS.class.php (Przykładowa funkcja):
####################

function ZmianaMAC($bylo='', $mabyc='', $adresip='')
{
$msgid = $this->DB->GetLastInsertID('messages');
$nodeid = $this->GetNodeIDByIP($adresip);

$data = '
# Zmieniamy MACa kompa o ID: '.$nodeid.' (MSGID: '.$msgid.')
BYLMAC="'.$bylo.'"
MABYC="'.$mabyc.'"
ADRESIP="'.$adresip.'"
if [ "`/usr/local/sbin/ipset -T TychWpuszczamy ${ADRESIP},${BYLMAC}`" = "${ADRESIP},${BYLMAC} is in set TychWpuszczamy." ]; then
/usr/local/sbin/ipset -D TychWpuszczamy ${ADRESIP},${BYLMAC}
/usr/local/sbin/ipset -A TychWpuszczamy ${ADRESIP},${MABYC}
/usr/sbin/conntrack -D -s ${ADRESIP}
RESTARTDHCP="tak"
elif [ "`/usr/local/sbin/ipset -T WpuszczaneVoipy ${ADRESIP},${BYLMAC}`" = "${ADRESIP},${BYLMAC} is in set WpuszczaneVoipy." ]; then
/usr/local/sbin/ipset -D WpuszczaneVoipy ${ADRESIP},${BYLMAC}
/usr/local/sbin/ipset -A WpuszczaneVoipy ${ADRESIP},${MABYC}
/usr/sbin/conntrack -D -s ${ADRESIP}
RESTARTDHCP="tak"
fi
';

$this->DB->Execute('UPDATE daemonconfig SET value = CONCAT(value, ?) WHERE id=XXX', array($data));
}

####################

Na końcu jak widać, treść skrypciku leci do instancji, która jest wyłączona. Skrypcik poniżej na routerze łączy się co 5min do tej instancji i sprawdza czy ma coś przeładować czy nie. Nie jest to idealne rozwiązanie, przy więcej niż jednym routerze, ale przy jednym działa.

####################
Skrypcik na routerze odpalany z crontaba
####################
#!/bin/bash

# Połączenie z bazą
user=`cat /etc/default/lmsd | grep "LMSD_DBUSER" | sed 's/^.*"\(.*\)"$/\1/g'`
pass=`cat /etc/default/lmsd | grep "LMSD_DBPASS" | sed 's/^.*"\(.*\)"$/\1/g'`
database=`cat /etc/default/lmsd | grep "LMSD_DBNAME" | sed 's/^.*"\(.*\)"$/\1/g'`
host=`cat /etc/default/lmsd | grep "LMSD_DBHOST" | sed 's/^.*"\(.*\)"$/\1/g'`
query_skip="mysql --skip-column-names -h $host -u $user --password=$pass -D $database -e"

DAWAJDANE=`$query_skip "SELECT value FROM daemonconfig WHERE id = 168"`

if [ -n "$DAWAJDANE" ]; then
        # Kasujemy liste rzeczy do zrobienia
        `$query_skip "UPDATE daemonconfig SET value = '' WHERE id=168"`

DATA=`date "+%Y.%m.%d-%H:%M:%S"`
PLIK="/router/logi/individual_reload/${DATA}.sh"
LOG="/router/logi/individual_reload/${DATA}.log"
echo -e "$DAWAJDANE" > "$PLIK"

# Tylko raz restartujemy DHCP na końcu (jeśli jest kilka zmian na raz)
cat << "STOP" >> "$PLIK"
if [ "$RESTARTDHCP" = "tak" ] ; then
/etc/init.d/lmsd reload "DHCP"
fi
if [ "$RESTARTHTB" = "tak" ] ; then
        /etc/init.d/lmsd reload "PreHTB HTB"
fi
if [ "$RESTARTHOSTS" = "tak" ] ; then
        /etc/init.d/lmsd reload "Hosts RoutingForARP VLANforARP"
fi
STOP
chmod +x "$PLIK"
/bin/bash "$PLIK" > "$LOG" 2>&1

MSGID=`grep "(MSGID:" "$PLIK" | sed 's/^.*MSGID: \(.*\))$/\1/' | tr '\n' ', ' | sed 's/^\(.*\),$/\1/'`
TIMESTAMP=`date "+%s"`

# Zaznaczamy, że zdarzenia zostały przeładowane
`$query_skip "UPDATE messageitems SET lastdate = $TIMESTAMP, status = 2 WHERE id IN ($MSGID)"`
fi
####################