It’s Back-to-School Time in most of the United States, and the Nerd Vittles crew needed a good fall project to distract us from all of this year’s dreadful politicians. We feel like a kid in a candy store with our new $35 Raspberry Pi® Model B. Imagine squeezing a 700 mHz ARM processor with 256MB of RAM, 2 USB ports, a 10/100 Ethernet port,if an HDMI port, composite video, a separate audio jack, an SDHC card slot, and a micro USB port onto a motherboard the size of a credit card with a total weight of 1.6 ounces and a typical power draw of 3.5 watts. Thanks to Gernot and his Asterisk for Raspberry Pi project, a full LAMP stack with Asterisk® and FreePBX® gave us a head start on turning the Raspberry Pi into yet another Incredible PBX™ platform complete with Google Voice™ for free inbound and outbound calling throughout the United States and Canada.

Trust us when we say the performance of this $35 computer is nothing short of amazing. Can it do everything a $200 dual-core Atom PC can do? No. Can it do 90% of everything for someone whose requirements do not exceed a few simultaneous calls at a time but still wants a full-blown PBX for call routing, voicemail, IVRs, music on hold, and text-to-speech and speech-to-text apps for a home, a SOHO office, a Little League team, or a dorm room? Absolutely.

Call our Raspberry Pi at 1-843-284-6844 and check out the Incredible Pi Smörgåsbord for yourself.

Other Incredible Pi Resources: Quick Start Guide for Incredible Pi 3.1 and 35 Free Incredible Pi Apps Tutorial

Incredible PBX for Raspberry Pi: What’s Included

If you’ve never heard of The Incredible PBX, here’s the Top 20 for the Raspberry Pi platform. In addition to the base install with Debian 6, Asterisk 1.8, FreePBX 2.10, Apache, SendMail, MySQL, PHP, and phpMyAdmin, Incredible Pi offers the following built-in PBX components using a wired or wireless network connection:

Ordering Information: What It Takes to Get Started

A complete Incredible PBX build for the Raspberry Pi (Incredible Pi™) is finally finished, and we wanted to give you a head start on ordering the pieces you’ll need to get things going since there is a three to five week delay on some of the components due to huge demand. Nothing is ever just $35, of course. So here’s what you’ll need. The Raspberry Pi itself can be ordered from Newark or MCM. Delivery times and stock vary so check both sites. At the time we ordered, they were quoting 5 weeks. We actually got one from Newark in one week, and as of now MCM has some in stock for immediate shipping. You also need a power adapter. If you have a micro USB power brick for your cellphone, chances are it will work. As long as it’s at least 1 amp and 5 volts, you’re good to go. The recommended 700 mA adapters have reportedly caused issues for some folks so splurge and order a good one. They’re $10 from Amazon while supporting Nerd Vittles.1 If you plan to add the WiFi adapter covered below, you will need at least 1.2 amps to avoid lockups. Next, you’ll need an SDHC card which serves as your hard disk. Be very careful here. The Type 10 cards which arguably would provide the best performance turn out to be a nightmare. Many of them simply don’t work. For a basic system, we’d recommend you start with either the SanDisk 4GB or 16GB SDHC Type 4 card. The 4GB card is available almost everywhere for under $10, or you can order two from Amazon with free Prime shipping for about the same money. If you already have a USB keyboard and a monitor or TV with an available HDMI port or composite video and audio ports, then you’ve got everything you need to get started. Actually, you can do without the monitor and use SSH if you’re either using Incredible Pi 1.3 or if you can decipher the DHCP address of Incredible Pi by reviewing your firewall log. With version 1.3 and beyond, you can plug in a pair of earbuds, and the server will whisper your IP address in your ear after the boot process completes. By the way, you may also want to put your name in the queue for a Pibow case, completely unnecessary but very cute with a long waiting list. It costs almost as much as the computer.

For down the road, suffice it to say, you’re probably not going to want to run Asterisk, FreePBX, and Google Voice on a disk platform of 4 gigabytes although our demo system does exactly that. Between Debian 6.0, Asterisk 1.8, FreePBX 2.10 plus numerous Incredible PBX utilities, well over half of the available 4GB will be consumed by software. For distribution purposes, we’re providing an image that you can write directly to the SDHC card. Unfortunately, the image size determines the amount of space it will actually use on an SDHC card. We will cover below how you can install the 4GB image onto a 16GB card and then expand the size of the main partition to fill the remaining space on the card. But it wouldn’t make sense to distribute a 16GB image because of bandwidth issues. So we’d recommend you purchase a 16GB SanDisk Type 4 SDHC card for production use. Take our advice. Don’t get creative in choosing your SDHC card. Use the one that we’ve already tested and that we know works. If you want to skip the 4GB card completely, that’s perfectly fine, too. The 16GB Type 4 SanDisk card is under $10 from Amazon with free Prime 2-day shipping, or you can pay double and pick one up at your neighborhood Radio Shack store. We’ll also show you how to back up your SDHC card (any size) with your own settings and restore it onto a 16GB card without missing a beat. Unfortunately, once you migrate and expand the main partition on the 16GB card, you’re stuck with that topology. There’s no going back without starting over, and your backups will consume 16GB of storage rather than 4GB. But it sure is convenient… and easy. By the way, here’s a more reasonably priced case and here’s an awesome clear case if you just want something that’s functional.

Finally, you’re going to need an existing Linux server or Mac on which to create your bootable SDHC cards for use with Raspberry Pi. You’ll also need this server to make backups of your existing setup. DD is a wonderful low-level disk copying utility found in Linux, and we’re going to be using it a lot. PBX in a Flash with or without Incredible PBX makes an ideal platform because all of the necessary SDHC disk management utilities already are installed. If you’re not using our recommended Foxconn server, then you’ll need a server with an SDHC card slot, or you can purchase an inexpensive USB-to-SDHC adapter from Amazon for under $2. Without the case, you can build an awesome Asterisk platform for home or SOHO use for under $50, and it can handle 3 simultaneous SIP calls without noticeable degradation.

Here’s a shot of our favorite Incredible Pi setup. You’ll need the LAN cable for the initial boot so that you can SSH into the device to plug in your WiFi SSID name and password. You’ll need the earbuds for the first and second boot to decipher the IP address of the device on your LAN, wired and wireless. No monitor connection is ever required. Just log in with SSH from your Mac or PC. After the first two boots, you can dispense with the CAT5 cable and the earbuds. All of the components are covered in this article.

Creating a Bootable Incredible Pi SDHC Card

SanDisk SDHC Type 4 cards come pre-formatted so all you need to do is insert the card into the SDHC slot of your Asterisk server and reboot it. If you prefer to use a Mac, go here for the tutorial. Before you insert your SDHC card and reboot, log in as root and run the following command: fdisk -l. This will tell you what the existing disk topology of your server is. Write it down. What you don’t want to do is accidentally choose your main Linux drive as the device to copy the Incredible Pi image to, or you end up with a mess. Now insert your SDHC card and reboot your Asterisk server so your SDHC card will be visible. Then run fdisk -l again to decipher the device node of your card. It should be at the bottom of the list and will be something like /dev/sdb. We don’t use /dev/sdb1 in the dd transfer step below, just the base devnode: /dev/sdb or whatever letter your SDHC drive happens to be.

Next, using a web browser, download the latest Incredible Pi image and transfer it to the /root directory of the Linux computer you’ll be using to copy the image to your SDHC card. As we said, we recommend a PBX in a Flash server because it has all of the SDHC utilities already included. Incredible Pi is a free download from SourceForge. The feature sets are described in the SourceForge readme.txt file. Once you’ve copied the desired tarball to your Linux server, decompress it: tar zxvf incrediblepi-1.x.tgz where x is the version you downloaded. Verify the integrity of the image file using md5sum:

1.7: md5sum debian6-incrediblepi-10-09-2012.img => e601ecd890a400de2e03009c034353c2
2.1: md5sum debian7-incrediblepi-16-09-2012.img => 007efb9d2cdf86f054c5cf26c4f5de9a

Finally, run the Linux install script: ./make-sdhc. It takes about 30-60 minutes to copy the image to your SDHC card. If you have a Mac, copy make-sdhc-mac to your Downloads folder and use it.

While you’re waiting, you can read about all the latest changes and additions to Incredible Pi here.

If you’re using our recommended 16GB SanDisk Type 4 SDHC card, then what you have at this juncture is a 16GB card on which only 4GB is being used. Here’s how to expand the main partition to use the other 12GB of space on the card while logged in as root. First, we need to make sure your card’s geometry matches our card setup. From the command prompt, issue the following commands using the proper device node (/dev/sdb) of your card:

parted /dev/sdb
(parted) unit chs
(parted) print

Here’s what you should see:

If the geometry of your card doesn’t match what’s shown above, do NOT use our commands below to adjust your card. Instead, review the original tutorial explaining what needs to be done.

If your geometry matches our geometry above, issue the following commands while still in parted:

move 3 239943,0,0
[press enter to accept default End]
rm 2
mkpart primary 1232,0,0 239942,3,31

After entering the above commands, your new card geometry should look like this:

Now type quit. Then complete the resizing by issuing the following commands using your correct device node:

e2fsck -f /dev/sdb2
resize2fs /dev/sdb2

Remove the card from your Linux machine and insert it into the SDHC card slot on the Raspberry Pi.

We’ve also found one 32GB Type 10 card that’s reliable, the Kingston Ultimate X (SD10G2/32gb) which costs about $40 at Amazon. We’ve included the resizing steps below:

fdisk -l
parted /dev/sdb
unit chs
move 3 483887,0,0
[press enter to accept End address]
rm 2
mkpart primary 1232,0,0 483886,3,31
e2fsck -f /dev/sdb2
resize2fs /dev/sdb2

Preparing the Raspberry Pi for Blastoff

Once the card is in place, there are a few more preliminary steps before you apply power to the device. Plug in a CAT5 LAN cable that is connected to your firewall-protected private network. Make certain that your router is handing out DHCP addresses properly since the Raspberry Pi can’t boot without a network connection to obtain the correct time from an NTP server on the Internet. It has no onboard time clock! Plug in a USB keyboard to one of the two USB ports on the Raspberry Pi. Connect either an HDMI or composite video cable between the Raspberry Pi and a monitor or TV. Finally, plug in a reliable power adapter and insert its micro USB connector into the slot on the Raspberry Pi. You should immediately see a raspberry on your screen with a scrolling list of commands that are executing while the Raspberry Pi is booting. Watch carefully. If you see a bunch of “waiting for hardware interrupt” notices, then you didn’t heed our advice on the type of SDHC card to use. Your card is not compatible for use on the Raspberry Pi so reformat it and use it with your camera. Then go buy the SanDisk card we recommended. The entire boot process should take about 30 seconds. With an incompatible card, that can stretch out to more than an hour. When the boot process completes, the IP address of your Incredible Pi should be displayed with a Linux login prompt. Write down your IP address. You’ll need it in a minute.

Securing Incredible Pi

Congratulations! You’re now ready to begin the Incredible Pi adventure. But, before we get started, first things first. Let’s secure your server. Log in with the username: pi. The password is raspberry. Now change the password to something really secure by issuing the command: passwd. Now do the same thing for the root password of the device: sudo passwd root.

Next, we need to set the default timezone on your machine for both Linux and PHP5. First, switch to the root user account so we don’t have to type sudo before each command: su root. Enter your new root password when prompted. Then run this command to set the default timezone with Debian: dpkg-reconfigure tzdata. For PHP5, you have to manually enter the timezone in the php.ini file: nano -w /etc/php5/apache2/php.ini. Press Ctrl-W to search for timezone. Be sure the line is uncommented and plug in your correct timezone. If you don’t know the magic words to use for your timezone, here’s the list. Save the file: Ctrl-X, Y, and press Enter. Now restart Apache: service apache2 restart.

First, we need to remove the default DUNDI secrets from Asterisk so fresh ones can be automatically generated when you restart Asterisk.

asterisk -rx "database del dundi secret"
asterisk -rx "database del dundi secretexpiry"
amportal restart

Now we need to do the same thing for your SSH keys:

rm /etc/ssh/ssh_host_* && dpkg-reconfigure openssh-server

Now let’s be sure Asterisk is up and running. Then you can continue your adventure using a web browser and the FreePBX GUI. Before we switch, start up the Asterisk CLI: asterisk -rvvvvvvvvvv. Verify that Flite is functioning for TTS: core show application like flite. And make sure the MySQL components are in place to support CDR reporting: module show like mysql. Finally, let’s verify that Jabber is alive and well even though we haven’t set up any Google Voice accounts yet: jabber show connections.

Finally, a few words of warning about security. Incredible Pi is designed to run behind a hardware-based firewall with no Internet exposure to the server itself. Don’t cheat! Prior to the 1.2 release, there are no security mechanisms in place: no IPtables firewall and no Fail2Ban. Beginning with Incredible Pi 1.2, the Linux firewall (iptables) is included, but our recommendation still stands unless you are using the preinstalled Travelin’ Man 3 to enable access of a remote phone connection to your PBX.

All builds do include Suhosin which has been properly configured to facilitate use of phpMyAdmin with MySQL. Within FreePBX, you can secure extensions with strong passwords and IP address filtering, and you need to do that. Exposing Incredible Pi‘s web server to Internet access would be an open invitation to an expensive phone bill. Don’t do it! You’ve been warned.

Securing Incredible Pi with Travelin’ Man 3

Travelin’ Man 3 is a collection of programs that implement firewall whitelists (safe IP addresses) using the Linux firewall, iptables. Before you ever expose your server to any kind of Internet access, read the Nerd Vittles Travelin’ Man 3 article. As delivered with Incredible Pi 1.2 and later, iptables is configured to block all access to your server except from non-routable IP addresses (typically used on LANs sitting behind hardware-based firewalls). The one exception is SIP and IAX access from VoIP Trusted Providers. This allows you to add trunks to your server from these providers without touching your firewall settings.

There are instances in which you may actually need to connect your server from a public Internet site. For example, if you travel for a living and want to use a softphone connected back to your server from a distant hotel room or customer site, you would need access through both your hardware-based firewall and iptables. If one of your children is away at school and needs a free telephone connection, this might also warrant a change in your firewalls. Because of the low cost of a Raspberry Pi, we still believe AND RECOMMEND that you use separate servers to meet remote requirements.

If you still believe remote access is necessary after reading the Travelin’ Man 3 article, then the tools are available by logging into your Incredible Pi server as root and changing to the /root directory. Here are the four apps:

For whiz kids only, Debian manages iptables quite differently than what you may be accustomed to on the CentOS platform. Debian stores iptables rules in /etc/network/iptables. You can reload the iptables rules like this: iptables-restore /etc/network/iptables. And you can display the rules currently in effect like this: iptables-save. Be careful!

Configuring Incredible Pi with FreePBX

Now we’re ready to configure Incredible Pi so that you can start making and receiving calls. We’ll be using the FreePBX web GUI. To begin, using a browser on your desktop, access Incredible Pi by pointing to the IP address of your server (that you wrote down above). Choose FreePBX Administration at the main menu. When prompted for your username and password, enter admin for both.

If you’re new to Asterisk, here’s the one paragraph primer on what needs to happen before you can make free calls with Google Voice. You’ll obviously need a free Google Voice account. This gets you a phone number for people to call you and a vehicle to place calls to plain old telephones throughout the U.S. and Canada at no cost. You’ll also need a softphone or SIP phone to actually place and receive calls. YATE makes a free softphone for PCs, Macs, and Linux machines so download your favorite and install it on your desktop. Phones connect to extensions in FreePBX to work with Incredible Pi. Extensions talk to trunks (like Google Voice) to make and receive calls. FreePBX uses outbound routes to direct outgoing calls from extensions to trunks, and FreePBX uses inbound routes to route incoming calls from trunks to extensions to make your phones ring. In a nutshell, that’s how a PBX works. There are lots of bells and whistles that we will cover later.

Before you do anything else, change your admin password to access FreePBX. From the main FreePBX GUI, choose Admin => Administrators. Next, set your default email address at the bottom of Settings -> General Settings.

So here’s our 7-Step Checklist to set things up. After you complete these steps, you can start making free calls throughout the U.S. and Canada. And people can call you using your new Google Voice number.

1. Create a free Google Voice account
2. Set up Extension to connect to softphone
3. Create a Google Voice Trunk using GV credentials
4. Create an Inbound Route from Google Voice to Extension
5. Create an Outbound Route from Extension to Google Voice
6. Download and Configure YATE softphone
7. Make Your First Call

Creating a Free Google Voice Account

You’ll need a dedicated Google Voice account to support Incredible Pi. The more obscure the username (with some embedded numbers), the better off you will be. This will keep folks from bombarding you with unsolicited Gtalk chat messages, and who knows what nefarious scheme will be discovered using Google messaging six months from now. So keep this account a secret!

We’ve tested this extensively using an existing Gmail account, and inbound calling is just not reliable. The reason seems to be that Google always chooses Gmail chat as the inbound call destination if there are multiple registrations from the same IP address. So, be reasonable. Do it our way! Set up a dedicated Gmail and Google Voice account, and use it exclusively with Incredible Pi. Google Voice no longer is by invitation only so, if you’re in the U.S. or have a friend that is, head over to the Google Voice site and register. Don’t use funky characters in your Google password! If you’re living on another continent, see MisterQ’s posting for some setup tips.

You must choose a telephone number (aka DID) for your new account, or Google Voice calling will not work… in either direction. Google used to permit outbound Gtalk calls using a fake CallerID, but that obviously led to abuse so it’s over! You also have to tie your Google Voice account to at least one working phone number as part of the initial setup process. Your cellphone number will work just fine. Don’t skip this step either. Just enter the provided 2-digit confirmation code when you tell Google to place the test call to the phone number you entered. Once the number is registered, you can disable it if you’d like in Settings, Voice Setting, Phones. But…

IMPORTANT: Be sure to enable the Google Chat option as one of your phone destinations in Settings, Voice Setting, Phones. That’s the destination we need for Incredible Pi to work its magic! Otherwise, all inbound and outbound calls will fail. If you don’t see this option, you may need to call up Gmail and enable Google Chat there first. Then go back to the Google Voice Settings.

While you’re still in Google Voice Settings, click on the Calls tab. Make sure your settings match these:

  • Call ScreeningOFF
  • Call PresentationOFF
  • Caller ID (In)Display Caller’s Number
  • Caller ID (Out)Don’t Change Anything
  • Do Not DisturbOFF
  • Call Options (Enable Recording)OFF
  • Global Spam FilteringON

Click Save Changes once you adjust your settings. Under the Voicemail tab, plug in your email address so you get notified of new voicemails. Down the road, receipt of a Google Voice voicemail will be a big hint that something has come unglued with Incredible Pi.

Configuring an Extension to Use with a SIP Phone

As mentioned, an Extension is the component in FreePBX that actually interfaces with a telephone. Whether to use a hardware-based phone or a softphone is your choice. Without an adapter, POTS phones won’t work with Incredible Pi. You’ll need a SIP phone. We’ll set up a softphone today to get you started, but first we need to configure an extension in FreePBX. We’ve actually made one for you to use, extension 701. So, rather than create a new one, let’s just modify the one that’s already in place. You can add additional extensions later to support additional phones.

From the main FreePBX GUI, choose Applications -> Extensions. Then click on 701 in the Extension List on the right side of your display. You’ll see a form that looks like this:

For now, we only need to make a few changes. First, you need a very secure password for both the extension itself and your voicemail account for this extension. The extension secret needs to be a combination of letters and numbers. The Voicemail Password needs to be all numbers, preferably six or more. Replace the existing 1234secret and 1234 with your own (very secure) entries. You also need to lock down this extension so that it is only accessible from devices on your private LAN. You do that with the deny and permit entries which currently are filled with zeroes. Leave the deny entry the way it is which tells Incredible Pi to block everybody except those allowed in the permit entry below. For the permit, we need the first three octets of your private LAN address, e.g. if your LAN is 192.168.0.something then the permit entry will be

Finally, you need to plug in your actual email address in the Voicemail section so that voicemails can be delivered to you when someone leaves a message. You can also include a pager email address if you want a text message alert with incoming voicemails. If you want the voicemails to automatically be deleted from the server after they are emailed to you (a good idea considering the disk storage limitations of an SDHC card), change the Delete Voicemail option from No to Yes. That’s it. Now save your settings by clicking the Submit button. Then reload the dialplan by clicking on the red prompt when it appears.

In case you’re curious, unless you’ve chosen to automatically delete voicemails after emailing them, you can retrieve your voicemails by dialing *98701 from any extension on your phone system. You’ll be prompted to enter the voicemail password you set up. In addition to managing your voicemails, you’ll also be given the opportunity to either return the call to the number of the person that called or to transfer the voicemail to another extension’s voicemail box. And you can always leave a voicemail for someone by dialing their extension number preceded by an asterisk, e.g. *701 would let someone leave you a voicemail without actually calling you.

Activating a Google Voice Trunk in FreePBX

To create a Trunk in FreePBX to handle calls to and from Google Voice, you’ll need three pieces of information for the Google Voice account you set up above: the 10-digit Google Voice phone number, your Google Voice account name, and your Google Voice password. Once you have these in hand, choose Other -> Google Voice from the FreePBX GUI. The following blank form will appear:

Fill in the blanks with your information and check all 3 boxes. If your Google Voice account name ends in, you can leave that out. Otherwise, include the full email address. Then click Submit Changes and reload your dialplan when prompted.

There’s one more step or your Google Voice account won’t work reliably with Incredible Pi! From the Linux command prompt while logged into your server as root, restart Asterisk: amportal restart

Creating an Inbound Route for Your Google Voice Trunk

Now that you’ve created your Google Voice Trunk, we need to tell FreePBX how to process the call when someone dials your Google Voice number. There are any number of choices. You could simply ring an extension. Or you could ring multiple extensions by first creating a Ring Group which is just a list of extension numbers. Or you could direct incoming calls to an Interactive Voice Response (IVR) system (we’ve actually set one up for you to play with). For the time being and since you only have one extension at the moment, let’s just route incoming Google Voice calls to extension 701.

To do this, you create an Inbound Route based upon the DID (phone number) of the Google Voice trunk. In FreePBX, choose Connectivity -> Inbound Routes. Fill in the form so that it looks like the example below using your own 10-digit Google Voice description and number instead of Atlanta GV and 6781234567. Be sure to set the Destination.

Then click Submit. But, before you reload the dialplan, make one change to the form. Click on the CID Lookup Source pull-down menu and choose CallerID Superfecta. This tells FreePBX to actually add names to phone numbers when someone calls. Now click Submit again and reload the dialplan when prompted.

Creating an Outbound Route for Google Voice Calls

FreePBX is actually smart enough to create an outbound route for your new Google Voice trunk so that you can place calls from any extension by dialing either a 10-digit number or 1 plus a 10-digit number to call anyone in the U.S. or Canada. If that’s all you care about, you can skip to the next section. But there’s more.

You can have more than one Google Voice trunk with Incredible Pi, and each one could be in a different area code. For example, you may do business in many different places and would like a local number for folks to call. Or Grandma may live in a distant city, and you’d like her to be able to call you without paying long distance charges. Then there are the kids. If you have three, you might want to give each of them their own Google Voice number which would ring just their phone. And, for outbound calls, you’d like each of them to use their own Google Voice trunk. All of these options are possible with Incredible Pi.

For outbound calls with multiple Google Voice trunks, you need a way to tell the system which trunk to use. We recommend dial prefixes that identify the city of the trunk, e.g. ATL, NYC, MIA. Or, for the kids, a dial prefix made up of initials, e.g. KHM, RWM, JSM. These dial prefixes get stripped off before the call is actually placed so the prefix is only used to determine the trunk used for placing the call.

To implement dial prefixes, you’ll need to adjust the default entries for your Google Voice Outbound Routes by adding the prefix option as an additional Dial Pattern. Here’s an example using an Atlanta Google Voice trunk where we want to allow a prefix of ATL-XXX-XXX-XXXX to force a call to go out on the Atlanta Google Voice trunk:

Another option may be appealing if you happen to make a lot of international calls and don’t want to pay for them. First, you can read all about iNum calling in this Nerd Vittles article. Another hidden feature in Google Voice is the ability to place iNum calls worldwide at no cost. To implement this, you’ll need to add another Dial Pattern to your Google Voice trunk. Prepend: 8835100 with Match Pattern: XXXXXXXX. Now you can dial iNum DIDs by dialing just the last 8 digits using any phone on your server. For example, try out the Nerd Vittles’ Dictionary Demo by calling 09901997. There also are a huge number of iNum Access Numbers that will let you call back to your server or any other iNum DID from almost anywhere in the world at no cost. These are covered in the Nerd Vittles article as well.

Configuring a YATE Softphone

As we mentioned, the easiest way to get started with Incredible Pi is to set up a YATE softphone on your Desktop computer. Versions are available at no cost for Macs, PCs, and Linux machines. Just download the appropriate one and install it from this link. Once installed, it’s a simple matter to plug in your extension 701 credentials and start making calls. Run the application and choose Settings -> Accounts and click the New button. Fill in the blanks using the IP address of Incredible Pi, 701 for your account name, and whatever password you created for the extension. Click OK.

Once you are registered to extension 701, close the Account window. Then click on YATE’s Telephony Tab and place your first call. It’s that easy!

Configuring Email Messaging

Incredible Pi comes preconfigured with SendMail to provide reliable delivery of outbound email messages. You can test it by logging in and issuing the following command using your own email address instead of

echo "test" | mail -s testmessage

If you don’t receive the message, chances are that your Internet Service Provider blocks downstream mail servers from sending email to reduce spam. To fix it, the simplest way is to configure SendMail to use your ISP as the smart relay host for outbound mail, e.g. with Comcast, it’s It takes about 10 seconds to configure. After logging in as root, edit /etc/mail/ Change line 116 from DS to using the SMTP gateway domain of your ISP. Save your change and restart SendMail: service sendmail restart. Then send another test message to make sure it works. If that fails, you can use Gmail as the mail relay. Here’s how. Now voicemail messages delivered directly to any email account by inserting your email address in the Voicemail section of the extension accepting your voicemail messages.

Configuring SMS Messaging

Incredible Pi also allows you to dictate messages and deliver them to any phone which accepts SMS messages. Just dial S-M-S (767) from any extension on your server. In addition, you can use Incredible Pi’s Message Blaster to send SMS messages to a group of individuals, e.g. a Little League team. In order to use SMS messaging, you must have at least one Google Voice account configured on your server. Then it’s a simple matter of inserting your Google Voice account name and password in two files. First, edit extensions_custom.conf in /etc/asterisk. On the second line of the 767 extension, replace acctname with your Google Voice account name (without On the third line, replace acctpass with your Google Voice password for this account. Reload your dialplan to activate the new settings:

asterisk -rx "dialplan reload"

For the message blasting service, change to the /root directory. Insert the numbers to be dialed in the smslist.txt file following the example in the file. Enter the SMS message to be sent in smsmsg.txt keeping in mind that many phone providers limit SMS messages to 140 characters or less. Finally, insert your Google Voice account name (with and password in smsblast. To kick off an SMS message blast, just issue the command: ./smsblast.

Configuring SAMBA for Windows Networking Support

Beginning with Incredible Pi 1.4, SAMBA is included in the distribution for transparent access using the Windows Networking Protocol from PCs, Macs, and other Linux machines. As delivered, SAMBA is deactivated. For obvious reasons, we recommend you never activate root login access to SAMBA. If you wish to enable SAMBA on your server, here are the steps while logged in as root:

  • 1. Set SAMBA password for user pi: smbpasswd -a pi
  • 2. Change Windows workgroup from WORKGROUP, if needed: nano -w /etc/samba/smb.conf
  • 3. Manually start SAMBA from command prompt: service samba start
  • 4. Set SAMBA to start on boot: rcconf and activate SAMBA option with space bar
  • 5. reboot

A Word of Warning: We’ve apparently reached the end of Memory Lane with SAMBA. Only activate it permanently (#4) after thoroughly testing it (#3) in your environment. We have found TTS IVRs in particular to be less than stable with SAMBA running.

Troubleshooting Audio Problems with Phone Calls

For most good routers/firewalls, there should be no problems connecting calls with Google Voice or SIP calls inbound or outbound. If you place a call and the audio is missing in one or both directions or your end of the call continues to ring even after the other person has answered, these are telltale signs of NAT and RTP connection issues. The quick fix is to plug in your public IP address and private LAN information under Settings -> Asterisk SIP Settings -> NAT Settings in FreePBX. If you continue to have connectivity issues, post the symptoms of your problem on the PIAF Forum and one of our helpful gurus will offer additional suggestions. Be sure to include the make and model of your router/firewall.

Using AsteriDex

Incredible Pi includes a robust phonebook application that uses MySQL for storage. You can access it with a browser by pointing to the following link using the IP address of your own server: Some entries for your favorite airlines are included to get you started. You can add, change, and delete entries under the Admin panel.

By dialing 411 from any phone on your system, you can speak the name of any entry in your AsteriDex database, and Incredible Pi will look up the name and dial the number. Try American Airlines just for fun.

Managing CallerID Superfecta

What began with our first release of CallerID Trifecta many years ago now has grown into one of the best examples of collaborative computing in the open source community. Maintained by the PBX Open Source Software Alliance, CallerID Superfecta now performs a number of functions in addition to matching names against phone numbers. Today you can display incoming call alerts and pop-ups on all sorts of devices in your home or office including XBMC, SqueezeBox, Winunciator, and many more. You can tailor CallerID Superfecta to meet your own local needs by opening the Default Superfecta tab under Other -> CallerID Superfecta in FreePBX. As with all database lookups, they take time. So keep in mind that you are trying to find the best match for inbound calls that takes the least time to retrieve corresponding CNAM information for the caller. To facilitate your search for the perfect combination, CallerID Superfecta includes a testing facility which will report the time required for each lookup. Then you can sort your lookup sources accordingly. To follow the latest developments, visit this thread on the PIAF Forums.

Adding Wireless Network Support

Particularly with a device the size of the Raspberry Pi, you may find it more convenient to place the unit on a bookshelf where a wired network connection is not feasible. This setup already is included in Incredible Pi 1.1 and later. For those using the 1.0 release, here’s how to use your Raspberry Pi wirelessly. First, order a TP-Link TL-WN722N USB 802.11n WiFi Adapter from Amazon for under $20. You won’t need a USB extender cable. This device can easily be plugged into one of the two USB slots without jeopardizing your ability to also connect a USB keyboard. Be sure your 5V power adapter is rated at 1.2 amps or greater to avoid lockups!2

We recommend the 1.3 Incredible Pi release or later if you plan to go the wireless route. All of the wireless networking components already are in place. Log into Incredible Pi as root (or su root for purists) and edit /etc/wpa.conf. Insert the SSID name and password for your wireless access point. Then reboot your server and wireless networking “just works.”

Beginning with the 1.3 release, support has been added for the ultra-tiny AirLink 101 Wireless N adapter (AWLL5088). The setup process is identical to the 1.1 setup above. Just edit /etc/wpa.conf and insert the SSID name and password for your wireless access point. We strongly recommend disabling network connections that you aren’t using, e.g. eth0 and wlan0 if you go the AirLink 101 route. Just edit /etc/network/interfaces and comment out the eth0 line as well as the block of commands pertaining to wlan0. Then reboot, a process that now will be much quicker. If you plug in earbuds when you reboot, Incredible Pi 1.3 or later will read you the DHCP-assigned IP address when the boot process finishes so you no longer need a monitor. SSH can be used to connect to your server from any desktop PC or Mac.

Adding a PPTP VPN Client to Incredible Pi

If you’ve followed the Nerd Vittles tutorial and previously set up a PPTP VPN Server for your devices, then it’s pretty simple to add Incredible Pi to the mix by activating a PPTP VPN client. It’s only a few steps. You’ll need the FQDN or public IP address of your VPN server as well as a username and password for VPN access to your VPN server. Once you have those in hand, log into Incredible Pi as root.

Lest we forget to mention, you cannot log into your PPTP server from an IP address on the same private LAN so you’ll need to take your Incredible Pi device to a neighbor’s house to test this.

If you’re using Incredible Pi 1.5 or later, all of the PPTP VPN client software already is in place. Edit the connection template: nano -w /etc/ppp/peers/my-pptp-server. Insert the following text and replace with the FQDN of your PPTP server, replace myname with your PPTP username, and replace mypassword with your PPTP password. Then save the file: Ctrl-X, Y, then Enter.

Now activate the PPTP VPN client. On your Incredible Pi server, run rcconf. If you’re using a release prior to 1.4, you’ll need to install rcconf first with the command: apt-get install rcconf. Scroll to the bottom of the list until you’ve highlighted pptp. Press the space bar to select it for automatic startup when you boot your server. Then tab to OK and press Enter.

To test it, issue the following command: /etc/init.d/pptp start. When you run ifconfig, you should now see a ppp0 entry:

ppp0 Link encap:Point-to-Point Protocol
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Remember, it won’t show an IP address if the Raspberry Pi and your PPTP VPN Server are on the same subnet (like ours). Once you install your Raspberry Pi in a remote location, you now can access it at the first IP address in your reserved PPTP IP address pool.

Power Adapters: The Hidden Gotcha

We’ve learned a lot about power adapters since acquiring the Raspberry Pi. First, not all adapters are created equal. Second, the type adapter you require depends upon what you’ve plugged into those USB ports. If one of the residents is a WiFi adapter, then the power draw of the WiFi adapter can add an additional wrinkle.

Here’s what we’ve found. If you decide to use the TP-Link TL-WN722N adapter, you’ll need a power adapter rated for at least 5V, 1.2 amps. These are few and far between and many adapters rated at even higher amperages (and not U/L approved) still won’t keep your RasPi from crashing regularly. We have had good results with $9.99 RND Power Solutions 2.1A Dual USB AC Adapter so long as you use the USB port closest to the red light and leave the second USB unoccupied.

If you use the AirLink 101 WiFi adapter or no WiFi adapter, then a less expensive 5V, 1A adapter may suffice. They’re typically about half the price, but some users have reported issues. For testing results and details, see this thread.

We’ve tested these adapters, and they both work. We can also count on both hands the number of adapters we tested that fail to keep the Raspberry Pi functioning. If you have a 1.2+ amp adapter from a reputable tablet computer, that will probably work as well. These replacement adapters tend to cost $25 or more. So the choice is yours. If your Raspberry Pi experiences frequent lockups, then an underperforming power adapter is the likely culprit, not the Raspberry Pi itself.

VoIP Redundancy: Use It to Your Advantage

As much as we love Google Voice, things do go wrong from time to time. The real beauty of VoIP telephony is there’s absolutely no reason to put all of your eggs in one basket. Multiple providers don’t cost you much particularly if you don’t use them regularly. And, when things go wrong, you won’t have to scramble to continue making phone calls. Vitelity has been a generous, long-term supporter of Nerd Vittles and our projects. You’ll find a compelling offer below, and we encourage you to consider them. Here’s the Incredible PBX Top 20 Trunk List with some reasons why these providers made our short list:

  • AxVoice ($14.99/mo. Business Plan; $16.58/mo. Unlimited Calls to 45 Countries)
  • CallCentric (Good International Calling Rates; Free iNum DID)
  • DIDforSale (20 channels per DID; unlimited DID calls for $8.99/mo.)
  • ENUM
  • FlowRoute (Good International Calling Rates)
  • FreeNum
  • Future-Nine (Supports CallerID Spoofing)
  • Google Voice (Free DIDs and free U.S./Canada calling)
  • IPkall (Free SIP/IAX DIDs)
  • (Supports CallerID Spoofing; very low rates)
  • LocalPhone (Dirt-cheap DIDs and calling rates worldwide; Free iNum DID)
  • Simon Telephonics (Free SIP-to-GoogleVoice Gateway)
  • SIPgate (Free residential DIDs sometimes)
  • Skype (Free Skype-to-Skype calls worldwide)
  • Teliax (Unlimited inbound DID $5/mo.)
  • Vitelity (Our supporter and the Best in the Business!)
  • VoIPms (CallerID spoofing; Free iNum calling; Very low rates)
  • VoIPMyWay (Residential Unlimited: $15.50/mo. Business Unlimited: $40/mo.)
  • VoIPStreet (Free DID)

Making Backups of Incredible Pi

Last, but not least, you’ll need to make periodic backups of your Incredible Pi system unless you don’t mind starting over when disaster strikes. It’s easy using almost any Linux server, and it’s especially easy with a PBX in a Flash server.

To begin, shutdown your Incredible Pi server gracefully: sudo shutdown -h now. Once the display shows that the system has halted, unplug it and remove the SDHC card. Then insert the SDHC card into the slot or reader on your PIAF system and reboot the server. Log into your server as root and issue the fdisk -l command to decipher the devname of your SDHC disk, e.g. /dev/sdb. To make a backup of your SDHC card, issue the following commands using today’s date and the proper devname for your SDHC drive:

dd if=/dev/sdb of=/root/incrediblepi-08-20-2012.img
gzip /root/incrediblepi-08-20-2012.img

When the process is finished, you’ll have a compressed image roughly one-third the size of your SDHC card.

Firmware and Kernel Updates

Only after making a backup, you may find it helpful to upgrade your Raspberry Pi firmware and kernel from time to time. Releases of Incredible Pi below 1.4 do not have the firmware updating tool in place. So you’ll first have to install it. Log into your server as root and issue these commands:

wget -O /usr/bin/rpi-update
chmod +x /usr/bin/rpi-update

You can decipher the kernel currently running on your Raspberry Pi by issuing the command: uname -a

To determine GPU’s firmware version, issue the command: /opt/vc/bin/vcgencmd version

Once the updater has been installed (and after you’ve made a backup!), you can update your Raspberry Pi’s kernel and firmware to the latest and greatest by issuing the following commands while logged in as root. The latest kernel addresses some issues with the USB ports and is worth installing: raspberrypi 3.2.27+ #66 PREEMPT Fri Aug 24 with GPU firmware version 332937.

Don’t forget to List Yourself in Directory Assistance so everyone can find you by dialing 411. And add your new number to the Do Not Call Registry to block telemarketing calls. Or just call 888-382-1222 from your new number.

Originally published: Monday, August 20, 2012

Continue Reading… Incredible PBX for Raspberry Pi Turns 21

Support Issues. With any application as sophisticated as this one, you’re bound to have questions. Blog comments are a terrible place to handle support issues although we welcome general comments about our articles and software. If you have particular support issues, we encourage you to get actively involved in the PBX in a Flash Forums. It’s the best Asterisk tech support site in the business, and it’s all free! In fact, there is a thread dedicated to support of Incredible Pi. Please have a look and post your support questions there. Unlike some forums, ours is extremely friendly and is supported by literally hundreds of Asterisk gurus and thousands of ordinary users just like you. You won’t have to wait long for an answer to your question.

Bug Fixes. A few bugs are to be expected. If you’re using Incredible Pi, please review these on the PIAF Forum. A serious problem with IPtables has now been fixed in Incredible Pi 1.5. A patch for previous versions is on the forum.

Astricon 2012. Astricon 2012 will be in Atlanta at the Sheraton beginning October 23 through October 25. We hope to see many of you there. We called Atlanta home for over 25 years so we’d love to show you around. Be sure to tug on my sleeve and mention you’d like a free PIAF Thumb Drive. We’ll have a bunch of them to pass out to our loyal supporters. Nerd Vittles readers also can save 20% on your registration by using coupon code: AC12VIT.

Need help with Asterisk? Visit the PBX in a Flash Forum. If you’re wondering what your fellow man is reading on Nerd Vittles these days, wonder no more. Visit our new statistical web site and check out what’s happening. It’s a terrific resource both for us and for you.


Special Thanks to Our Generous Sponsors

Awesome Vitelity Special. Vitelity has generously offered a terrific discount for Nerd Vittles readers. You now can get an almost half-price DID from our special Vitelity sign-up link. If you’re seeking the best flexibility in choosing an area code and phone number plus the lowest entry level pricing plus high quality calls, then Vitelity is the hands-down winner. Vitelity provides Tier A DID inbound service in over 3,000 rate centers throughout the US and Canada. When you use our special link to sign up, Nerd Vittles gets a few shekels down the road to support our open source development efforts while you get an incredible signup deal as well. The going rate for Vitelity’s DID service is $7.95 a month which includes up to 4,000 incoming minutes on two simultaneous channels with terminations priced at 1.45¢ per minute. Not any more! For our users, here’s a deal you can’t (and shouldn’t) refuse! Sign up now, and you can purchase a Tier A DID with unlimited incoming calls and four simultaneous channels for just $3.99 a month. To check availability of local numbers and tiers of service from Vitelity, click here. NOTE: You can only use the Nerd Vittles sign-up link to order your DIDs, or you won’t get the special pricing! Vitelity’s rate is just 1.44¢ per minute for outbound calls in the U.S. There is a $35 prepay when you sign up. This covers future usage. Any balance is refundable if you decide to discontinue service with Vitelity.

​​3CX is a software PBX that’s easy to install & manage. It includes integrated softphones, WebRTC conferencing and essential add-ons out of the box, at no additional cost. Try the free edition at Better yet, download the PIAF5 ISO powered by 3CX. Free version includes support for 8 simultaneous calls with a SIP trunk.

  • Run on Premise or in the Cloud, on Windows and now on Linux
  • Softphones for iOS, Android, Win & Mac
  • Easy install, backup & restore, version upgrades
  • Automatically configures IP Phones, SIP Trunks & Gateways

  • Some Recent Nerd Vittles Articles of Interest…

    Be Sociable, Share!

    1. DISCLOSURE: Most Amazon referral links include a Nerd Vittles referral code so that Amazon can send us a boatload of money each month. It costs you nothing while keeping the Nerd Vittles lights burning brightly. We never recommend Amazon unless their prices or products are the best we could find at the time of publication. []
    2. The TP-Link adapter is no longer recommended due to it substantial USB power requirements. We recommend the AirLink 101 which can coexist with a 5V, 1A power supply. You must use Incredible Pi 1.3 or later. []

    This article has 24 comments

    1. Awesome results with the RasPi Ward! Excited to try it out.

    2. well it’s made it to hackaday

      [WM: Yep. Busy day!]

    3. No Raspberry Pi Monitor? Let Incredible PBX whisper its IP address into your ear.

    4. Weren’t you guys poo-pooing the idea of PiaF on raspberry pi just a couple of months ago?

      [WM: Probably. 😉 ]

    5. Support for the ultra-tiny AirLink 101 (AWLL5088) Wireless N Network Adapter has just been announced. We will include it in the next release, or you can run the script to add the driver yourself.

    6. I knew it would just be a matter of time before there was a fully configured PBX for the pi. I was very close to installing freepbx from

      But I am happy to be running your version now!
      When i am complete with setting it up, it will be functioning like a previous frrepbx I had on far less power!

      Is it possible to dial SIP URI without creating a custom extension for each one? What if i wanted to call, I would need to create a custom ext for this? Is it possible to append onto the end of an address?

      Its nice to see google voice is functioning with this pbx. I gave up on gvoice and freepbx back in December 2010 (shortly after i discovered VOIP) since things between digium and gvoice broke. Nice to see its working!

      I think you did a good job with the number of modules you installed, not overboard and enough for people to experiment with.

      I look forward to v1.3 but its hard to imagine what there is to improve on!

      Thank you!

      [WM: Thanks. Here’s the module you need to add for SIP URI dialing.]

    7. Any thoughts on how hard this would be to port to the PogoPlug v2?
      They’ve been selling those off around here for $29 and $39 and I have two of them I’d love to use this on.

    8. Next question.

      Is this possible to setup to boot/run from USB instead of SD?
      I’d like the option of using it with an external USB HD.

      [WM: Take a look at this thread on the Raspberry Pi Forum.]

    9. We are disappointed to report that Google has pulled the plug on their Weather API. This means the Worldwide Weather Application no longer works. In version 1.5 of Incredible Pi, we’ve added a Weather by Zip Code application, and we are actively working on a replacement for the Worldwide Weather app. Our apologies. Sometimes Google does really stupid things in really arrogant ways. This is one of them. No warning. No notice. Just boom, and it vanished. Pretty crappy endorsement for Cloud Computing!

    10. Once you get your system operational and have deciphered the wired and/or wireless IP addresses for your server, we recommend you turn off some apps to free up some RAM breathing room for Asterisk and FreePBX. Here’s our recommended list and how to do it.

    11. New drop-in replacement for Google Weather reports featuring Weather Underground’s Worldwide Weather API is now available on the PIAF Forum.

    12. Hi,

      One question, I am experiencing some problem with the Follow Me function. On my previous few Freepbx installations, I am able to get Follow Me to work with say Ext 101 Follow me to 102, and 102 Follow me to an external number. But on IncrediblePi, I am only able to get the first Follow Me rule to work, eg. 101 to 102, and not 102 to external number.

      I’m using 1.5 by the way.

      Thanks! 🙂

      [WM: Log into your server and run free to see how much RAM you have left. I suspect you may be about maxed out. Try this or post on the forums, and we can troubleshoot it further.]

    13. How many simultanous calls and extensions support?

      [WM: That depends on many variables. You’ll just have to try it in your own environment. Two or three simultaneous calls seem to work fine without transcoding and assuming you have the 300K of bandwidth to support the calls.]

    14. You said 2 or 3 simultaneous calls. I am assuming that’s regular uLaw right? And no option to upgrade this board’s RAM? or is it a CPU bottleneck? It would have been perfect if it could do 7 G.729 calls.

      [WM: Then it wouldn’t cost $35. Sorry. Maybe this one. 😉 ]

    15. I’ve set up a conference call with 4 concurrent users and it was fine.

      I think the bottleneck would be with CPU and RAM usage. I tested with ulaw.

    16. Woohooo…that cubieboard is promising. Why would anyone buy a Raspberry Pi if that comes out?

    17. What is the best way to upgrade to the latest version of Incredible Pi?

      [WM: Copy down any additions/settings you’ve added to your current build. Then download the new image and copy in your settings. That’s the best we can do with image builds. So… keep good notes. We do. 😉 ]

    18. Thanks WM… I guess what I’d like to know is if the changes made between 1.5 and 1.6 are documented any place? I’m more than happy to make the changes/additions to my 1.5 to incorporate the changes you did to 1.6.

      [WM: We document major changes in the Raspberry Pi thread on the PIAF Forum. Sometimes this includes technical details and sometimes not. It would double or triple the development time (in addition to being something we hate doing) to create a running tutorial of everything that goes into the secret sauce. It’s really not a secret. It’s just a pain in the ass. All of the code is in the latest image, and you’re welcome to extract from it anything you desire subject to the GPL licenses covering the components.]

    19. Since the Raspberry PI’s are all the same it would be cool if you decided to post the end result .img file for us for those who are not that great with linux.

      [WM: Uh, David. Better read the article again. The .img file is always included in the download tarball.]

    20. So we can just write the img do the SD card and not have to do all the steps you outlined here?

      Like with the raspberry pi os install all you have to do it use win32diskimager to write it to the sd card and your done for the most part.

      [WM: Works just like the Raspberry Pi OS install as far as getting the image onto an SD card. There still are some configuration steps to secure your server, add a Google Voice trunk, and connect one or more phones. These are all covered in the tutorial. If you can bake slice-and-bake cookies, you can handle this.]

    21. Looks like in 1.6 the Airlink modules (8192cu) doesn’t load.

      FATAL: Error inserting 8192cu (/lib/modules/3.2.27+/kernel/drivers/net/wireless/8192cu.ko): Invalid module format

      Kernel is 3.2.27+
      Module vermagic is “3.2.27+ preempt mod_unload modversions ARMv6 p2v8”

      [WM: Download Mr. Engman’s script and rerun it. That should fix anything that has come unglued. Here’s the message thread covering the script.]

    22. Can you update this article with the info you found about the power adapter (

      It would be nice to have a link to the “recommended” power supplies and not the “not recommended” ones.

      [WM: You just did. 😉 Thanks.

    23. This is fantastic!
      I’m working on migrating my home asterisk server from an old machine that is about to die and it’s way too noisy into my newly acquired Pi.
      The part I can’t figure out is how to connect (which user) to mysql from localhost.
      I have a phonebook table with my own entries that I use for the CID Superfecta.
      Any hints?

      [WM: MySQL credentials are user: root with password: raspberry]

    24. Thank you! This is working now. 🙂