freifunkmanager/runtime/node_ssh.go

132 lines
3.7 KiB
Go
Raw Permalink Normal View History

package runtime
import (
"fmt"
2019-06-10 02:57:36 +02:00
"github.com/bdlm/log"
"github.com/FreifunkBremen/freifunkmanager/ssh"
)
2018-08-10 17:17:00 +02:00
func (n *Node) SSHUpdate(sshmgmt *ssh.Manager) bool {
2018-07-26 14:14:23 +02:00
client, err := sshmgmt.ConnectTo(n.GetAddress())
if err != nil {
2018-08-10 17:17:00 +02:00
return false
}
defer client.Close()
2018-08-10 13:46:18 +02:00
if n.Hostname != n.HostnameRespondd {
2018-07-26 14:14:23 +02:00
ssh.Execute(n.Address, client, fmt.Sprintf(`
uci set system.@system[0].hostname='%s';
uci commit; echo $(uci get system.@system[0].hostname) > /proc/sys/kernel/hostname;`,
n.Hostname))
}
2018-08-10 13:46:18 +02:00
if n.Owner != n.OwnerRespondd {
2018-07-26 14:14:23 +02:00
ssh.Execute(n.Address, client, fmt.Sprintf(`
uci set gluon-node-info.@owner[0].contact='%s';
uci commit gluon-node-info;`,
n.Owner))
}
2018-08-10 13:46:18 +02:00
if !locationEqual(n.Location, n.LocationRespondd) {
2018-07-26 14:14:23 +02:00
ssh.Execute(n.Address, client, fmt.Sprintf(`
uci set gluon-node-info.@location[0].latitude='%f';
uci set gluon-node-info.@location[0].longitude='%f';
uci set gluon-node-info.@location[0].share_location=1;
uci commit gluon-node-info;`,
n.Location.Latitude, n.Location.Longitude))
}
runWifi := false
defer func() {
if runWifi {
2018-07-26 14:14:23 +02:00
ssh.Execute(n.Address, client, "wifi")
// send warning for running wifi, because it kicks clients from node
log.Warn("[cmd] wifi ", n.NodeID)
}
}()
// update settings for 2.4GHz (802.11g) radio
2018-07-26 14:14:23 +02:00
result, err := ssh.Run(n.Address, client, `
if [ "$(uci get wireless.radio0.hwmode | grep -c g)" -ne 0 ]; then
echo "radio0";
elif [ "$(uci get wireless.radio1.hwmode | grep -c g)" -ne 0 ]; then
echo "radio1";
fi;`)
if err != nil {
2018-08-10 17:17:00 +02:00
return true
}
radio := ssh.SSHResultToString(result)
ch := GetChannel(n.Wireless.Channel24)
if radio != "" {
if ch != nil {
if n.Wireless.TxPower24 != n.WirelessRespondd.TxPower24 {
ssh.Execute(n.Address, client, fmt.Sprintf(`
uci set wireless.%s.txpower='%d';
uci commit wireless;`,
radio, n.Wireless.TxPower24))
//runWifi = true
}
if n.Wireless.Channel24 != n.WirelessRespondd.Channel24 {
//ubus call hostapd.%s switch_chan '{"freq":%d}'
ssh.Execute(n.Address, client, fmt.Sprintf(`
uci set wireless.%s.channel='%d';
uci commit wireless;`,
//strings.Replace(radio, "radio", "client", 1), ch.Frequency,
radio, n.Wireless.Channel24))
runWifi = true
}
}
if n.Hostname != n.HostnameRespondd {
2018-07-26 14:14:23 +02:00
ssh.Execute(n.Address, client, fmt.Sprintf(`
uci set wireless.priv_%s.ssid='offline-%s';
uci commit wireless;`,
radio, n.Hostname))
2019-07-01 17:28:52 +02:00
// runWifi = true <- not needed for offline-ssid
}
}
// update settings for 5GHz (802.11a) radio
2018-07-26 14:14:23 +02:00
result, err = ssh.Run(n.Address, client, `
if [ "$(uci get wireless.radio0.hwmode | grep -c a)" -ne 0 ]; then
echo "radio0";
elif [ "$(uci get wireless.radio1.hwmode | grep -c a)" -ne 0 ]; then
echo "radio1";
fi;`)
if err != nil {
2018-08-10 17:17:00 +02:00
return true
}
radio = ssh.SSHResultToString(result)
ch = GetChannel(n.Wireless.Channel5)
if radio != "" {
if ch != nil {
if n.Wireless.TxPower5 != n.WirelessRespondd.TxPower5 {
ssh.Execute(n.Address, client, fmt.Sprintf(`
uci set wireless.%s.txpower='%d';
uci commit wireless;`,
radio, n.Wireless.TxPower5))
//runWifi = true
}
if n.Wireless.Channel5 != n.WirelessRespondd.Channel5 {
//ubus call hostapd.%s switch_chan '{"freq":%d}'
ssh.Execute(n.Address, client, fmt.Sprintf(`
uci set wireless.%s.channel='%d';
uci commit wireless;`,
//strings.Replace(radio, "radio", "client", 1), ch.Frequency,
radio, n.Wireless.Channel5))
runWifi = true
}
}
if n.Hostname != n.HostnameRespondd {
2018-07-26 14:14:23 +02:00
ssh.Execute(n.Address, client, fmt.Sprintf(`
uci set wireless.priv_%s.ssid='offline-%s';
uci commit wireless;`,
2019-07-01 17:28:52 +02:00
radio, n.Hostname))
// runWifi = true <- not needed for offline-ssid
}
}
2018-08-10 17:17:00 +02:00
return true
}