in asterisk, software, voip

Auto-provisioning with Asterisk and ST2030 Technicolor/Thomson phones

An introduction to the ST2030

The ST2030 is one of the few SIP phones distributed by Thomson (now changed name to Technicolor). In fact there are only 2 models: the ST2020, and the ST2030, and also a new one, the TB30, which is the successor to the ST2030. The ST2030 is supposed to have an End-of-Life set to the end of this year (2010), but I read that its EOL has been extended to the end of 2012.
In my personal experience, I think the ST2030 has the best price/functionalities/quality ratio. It has features like:

  • PoE (Power over Ethernet).
  • Headphone plug with a button on the phone to pickup with the headphone (or if you have a compatible headphone, pickup directly with a button on the headphone).
  • XML based Directory support, that you can interface with a remote HTTP server.
  • 4 differents lines/profiles (but not at the same time).
  • BLF (Busy Lamp Fields) to monitor other’s phone status (if they are using their phone, and even possibility to intercept a call).
  • Full compatibilty with Asterisk (tested on Asterisk 1.6+ and 1.8+).
  • Auto-provisioning with support for TFTP but also for HTTP/HTTPS, which simplifies quite a lot the provisioning configuration.

In this document, we’ll see the auto-provisioning process through DHCP+HTTP.

The main web pages related on the ST2030 are the pages and the official Technicolor/Thomson web page.


  • Linux
  • Asterisk (1.8+)
  • Technicolor ST2030 phones
  • DHCP server
  • HTTP server (Apache, nginx)

Manual upgrade of the Boot, DSP and APP firmware

  • Boot your phone (yes it’s very long, 5+ minutes)
  • Long press the ‘menu’ button, which will display the phone’s ip address

  • Connect to http://your_ip/admin.html and enter ‘administrator‘ as login and 784518 as password (the default)
  • Finally go to ‘Utility’ tab, and upload the v2030_boot_v111.zz, v2030_dsp_R11.1_SED_v320.zz and v2030SG.R11.1.SED.100804.2.72.2.zz files (each one needs to reboot your phone, it will take a loooooong time :-)

To verify that you’ve correctly upgraded your phone, go to the admin Home page, you should get something like:

Deploying ST2030 IP phones using DHCP and HTTP

This is called auto-provisioning. Normally, one use DHCP/PXE/BOOTP + TFTP to deploy servers, but it is so slow, unreliable, and the tftp protocol is so primitive, that it gets really hard when you need to deploy different phones.

Today, I’ll show you how to deploy ST2030 phones with only DHCP and HTTP servers, nothing more. The most useful documentation you’ll need is the “official” doc named “Auto provisioning and customization for IP Phone ST2030 and ST2022, November 16, 2009”. You can find it in the latest zip file (currently “ST2030 SIP firmware and documents v2.72“.
The latest versions of these phones support provisioning not only by TFTP, but also by HTTP. I don’t know since which version of the firmware it works that way, but I advise you to upgrade to the latest version (you can also try the upgrade by provisioning, as it does the firmware upgrade too).

My version shows:

Boot workflow

As detailed in the official documentation, here is its workflow:

Configuring the DHCP server

Personnaly I use the default ISC DHCPv3 server (on Ubuntu), but it should work the same way on any implementation (not sure about MS Windows).
As you can see on the workflow, we need to get in the ‘Option 43’ state. But to get there, you need to be sure your phone is in a default/factory reset state (otherwise your phone may be setup to boot without DHCP, or not use the HTTP/TFTP data, and get it directly).

In your DHCP server configuration you must be sure you haven’t defined or played with the 150, 66 or 67 option codes, otherwise you’ll get into the TFTP boot workflow! If you want to be sure, or to debug your workflow, I recommend you use tcpdump, or even better, tshark. You’ll get something like that:

Which is BAD!

So edit your /etc/dhcp3/dhcpd.conf configuration file, and *REMOVE* lines like:

A correct example would be:

Configuration of the HTTP server and the served files

I used NGINX as web server, but it will work equaly well with Apache2 or anything that can serve files throught HTTP.
Just define a root where you will put your firmware and configuration files:

After uncompressing the firmware files (from the ZIP), the directory structure in your web root should be the following:

The most important file is the ST2030.inf file (you can find a default file named ‘ST2030S-ip.inf‘ in the ZIP. The goal of this file is to define where to get all the following files (firmware and configuration files). Mine looks like this:

All your phone specific files will be looked according to the ‘config’ variable. Here, it’s ‘/provisioning/ST2030/config/‘, where it will look for ST2030S_ .txt (the ‘S’ is for SIP).

Before you boot you phone(s), you should at least configure your common file (ComConf2030SG.R11.1.SED.100804.2.72.2.txt) to most used values. Then add a file named ST2030S_ .txt where you put only the differences with that common file. One of mine’s looks like:

This file has NTP and several other parameters adjusted for french infos/timezone. Another note, please take great details when editing this file, as any mistake, will make it be skipped by the phone boot process. Also, don’t forget to increase/modify the ‘config_sn’ attribute (attention, that attribute *MUST* be 12 digits long, i.e. 201007300008).

Boot workflow

To force a firmware update/workflow from scratch, you can click the ‘restore default’ button in the phone web interface, or, when the phone starts (unplug/plug the power supply/network cable for PoE), press and hold down the headset and mute buttons.

Here, it gets the main configuration file, ST2030.inf, and, from it, the APP, DSP and BOOT firmwares.

The phone reboots…

Here, it gets the common configuration files for the phone, and looks for a file the the phone’s MAC address name (ST2030S_001F9F16E849.txt).
The phone reboots…

When there is no modification, you’ll get the following HTTP request on your server (if you want to force a firmware update/workflow from scratch, you can click the ‘restore default’ button in the web interface, or, when the phone boots, press and hold down the headset and mute buttons)

Here, as you can see with the 404 error code, the ST2030S_001F9F16E849.ser is missing, but that’s normal. This file only exists if you encrypt your configuration file (tools available in the zip file). So it’s the same as the .txt file, but encrypted.

So , to summarize the workflow, the phone gets an IP address from the DHCP, and also the url to get the main configuration, throught the option-43 DHCP attribute.

Another way to find out what went wrong, is to look at the APS logs, which are available on the web phone’s GUI, in the ‘setup’ menu, option ‘APS Log’:

Update: One last note, when you edit/update your MAC named file, do not forget to update/increment the config_sn file, otherwise the phone will think the data hasn’t changed!

Now, to finish, you just have to create a new file (named with a MAC address) for each of your phones. In the next article, I’ll show you how to make Asterisk do it for you, all automatically, from sip.conf’s files!