Die Snom Telefone können automatisch aus der Ferne aktualisiert werden. Im SNOM WIKI sind dazu informationen abgelegt wie das geht. Hier nun eine Schritt für Schritt anleitung für eine Aktualisierung unter Einsatz des ISC DHCP-Servers.
Der Webserver hat die IP 172.31.253.2. Die Konfigurationsdateien snom.htm und firmware.htm liegen im Documentroot des Webservers. Es geht um ein Snom360 VoIP Phone. Die Firmwaredatei liegt im Webserver unter $DOCUMENT_ROOT/firmware/snom360-6.5.1-SIP-j.bin
Als erstes gilt es den DHCP zu konfigurieren. Die Snom Telefone werten die Werte „server-name“ und „filename“ aus. Hier eine Minimalkonfig:
subnet 172.31.253.0 netmask 255.255.255.0 {
option domain-name-servers 172.31.253.2;
option ntp-servers pool.ntp.org;
option routers 172.31.253.2;
option broadcast-address 172.31.253.255;
option subnet-mask 255.255.255.0;
range 172.31.253.90 172.31.253.99;
server-name "http://172.31.253.2";
filename "snom.htm";
}
Wer die die Snom-Telefone über einen eigenen Pool konfigurieren möchte findet auch eine Anleitung dazu: Anleitung im Linuxforum
Die Konfigurationsdateien für die Telefone sollen .htm Endungen haben und nicht .html (Aussage vom Snom Support). Es folgen zwei Konfigurationsdateien die auf den Webserver zu legen sind.
Die Grundkonfigurationsdatei(snom.htm):
<html> <pre> update_policy$: auto_update firmware_status: http://172.31.253.2/firmware.html </pre> </html>
Die Firmwarekonfigurationsdatei:
<html> <pre> firmware: http://172.31.253.2/firmware/snom360-6.5.1-SIP-j.bin </pre> </html>
Snom Telefon anschliessen, ggf. In Auslieferungszustand zurücksetzen und zuschauen wie sich das Telefon aktualisiert.
Wer dynamisch Firmware bereitstellen möchte der kann sich im Snom-Wiki PHP-Skripte herunterladen die das machen. Hier eine Variante auf lua basierend(Benutzung auf eigene Gefahr, nur für Telefone mit Firmware von >= 6.x verwenden):
<%
require "web"
web.out("Content-type: text/html\n\n")
%>
<html>
<pre>
<%
require "web"
local fwserver ="172.31.253.2"
local fwversion ="6.5.1"
function split (arg)
-- splits string arg.string by using delimiter arg.delim
-- returns sequential table
local index=1
local elements={}
while(index)
do
match = string.find(arg.string,arg.delim,index)
if(match) then
table.insert( elements,
trim(
string.sub(arg.string,index,match - string.len(arg.delim))
)
)
index=match+1
else
index=nil
end
end
return elements
end
function trim(arg)
-- needs a string arg
-- returns trimmed string without leading and trailing whitespaces --
return arg:match("^%s*(.-)%s*$")
end
function generate_firmware_url (arg)
return "http://"..fwserver.."/firmware/"..arg.phone.."-"..fwversion.."-SIP-j.bin"
end
function getsnomtype (arg)
fields=split{ string=arg.user_agent,delim=";"}
fields=split{ string=fields[3], delim=" "}
return fields[1]
end
require "web"
local snomtype=getsnomtype { user_agent=os.getenv("HTTP_USER_AGENT") }
web.out("firmware: " .. generate_firmware_url { phone=snomtype }.."\n" )
%> </pre> </html>