Selecting hardware appropriate for a particular Asterisk installation has been a topic of discussion ever since the emergence of Asterisk. This typically centers around choosing hardware to handle n users or x concurrent calls. Often the focus is on how to scale up to the greatest number of users for a given server. However, there can be different but related considerations as we consider ever smaller applications.
In various circles I’ve lately witnessed a minor spike in interest in small form factor Asterisk systems. I have found it curious to survey the various hardware platforms that people are considering when creating their own DIY Asterisk Appliances. To establish some perspective on this I recently posted my own history of using Asterisk my own little Asterisk retrospective.
There are quite a range of small computing platforms available to the enthusiast seeking to tinker with Asterisk. It seemed to me that an overview of such hardware and related resources would be helpful.
Hardware that can be used for Asterisk Appliances
For my purposes I’ll only consider generic platforms suitable for a DIY project , not the commercially offered embedded Asterisk devices, of which there are many. These small host platforms tend to be in the $50-$300 range which makes them approachable for hobbyists, home users and some small businesses.
To begin, you should know that the VoIP Wiki has a good deal of info about selecting hardware on the basis of technical specs like CPU speed, memory, disk, etc. Some of the info there is quite dated, but there may be some value to know that in the technological dark ages people deployed Asterisk on a 133 MHz Pentium platform.
Before we dive into looking at the hardware, it might be helpful to understand a couple of things about the software. You may be installing Asterisk from source code. That implies that you will be compiling the binary executable on your target platform. In general this is a simple task, but there may be a couple of gotchas; like the CPU, the compiler and link libraries.
Asterisk itself can be compiled on a variety of target platforms. You'll find ports of Asterisk on various processor architectures including; x86-32, x86-64, ARM, SPARC, Blackfin, Xscale, PowerPC, etc.
CPUs for DIY Asterisk boxes
However, there may be some related bits of code that you will not be able to compile into your installation. The most common are Digium's G.729a codec and the Skype-For-Asterisk module. Both of these are proprietary, licensed code that is delivered as a binary executable supporting only x86 processors. The source code is not available, so you cannot compile them for your target platform.
So if you intend to use either of these modules, you should constrain your platform choice to something x86 based.
GCC vs uClibc
Even if you settle upon an x86 based platform, you may find yourself not able to use a module because of incompatibility with a link library or compiler. Some Asterisk distributions don't use the common gcc compiler and libraries. In particular, the Astlinux project long ago made a decision to use uClibc. Theirs is an embedded distro and uClibc offers some specific advantages for such systems.
In moving to uClibc, the Astlinux folks found that they could no longer run Digium's G.729a codec. To run the G.729a codec in Astlinux, the project requires that Digium compile a new release of the codec that is compatible with uClibc. While that has been discussed, it has not happened. So Astlinux users cannot run Digium's G.729a codec, even on x86-based hardware.
With these few caveats out of the way, here's a list of possible platforms that I've compiled for consideration, listed in order of scale from smallest to largest:
- The Sheeva Plug (Pogo Plug)
- The Seagate Dockstar
- Consumer router platforms (Asus, Linksys, NETGEAR, etc)
- Thin clients
- Embedded PC systems (Soekris, ALIX, etc)
- Net-top systems