This page lists steps to prepare the SmartOS hypervisor for the installation of FreeSWITCH.
Get SmartOS up and running. If using desktop virtualization, be forewarned that the KVM features of SmartOS will not be available (they're not needed in this case). This is rather like installing ESXi under virtualbox, it's a wonder it works at all.
An automated script for doing this on virtualbox under some kind of *nix is available from:
Instructions for installing in other ways (including under vmware) can be found here:
The key items here are: Boot from the live CD (image) or USB key, then follow the instructions on screen to do the initial setup of any attached hard drive(s). If you only give it one hard drive, this is as simple as just retyping the disk name back in when it displays it and asks you which drives to use.
The default root password changes with each release and will be in the text file linked on this page:
Import VM Image
After the install is done, login to the console and import the 64 bit basic VM root image (assume $# is the root prompt from now on). "
imgadm avail" will show you the latest available image for base-64, and you copy the image UUID from its output.
$# imgadm avail | grep base-64
1f32508c-e6e9-11e6-bc05-8fea9e979940 base-64-lts 16.4.1 smartos zone-dataset 2017-01-30
$# imgadm import 1f32508c-e6e9-11e6-bc05-8fea9e979940
The following privileges are used by FreeSWITCH daemon, and some of them are not available by default in a SmartOS zone:
|Name or alias||ID||Description||Available by default in a zone|
|Basic set of privileges, as output by ||yes|
|Access to the high-resolution clock. FreeSWITCH will refuse to start without this privilege.||no, needs to be added by host admin|
|Allow a process to exceed the resource limits||yes|
|Allow a process to read directories belonging to other uid||yes|
|Allow a process to control its scheduler. If granted, this allows FreeSWITCH to set the real-time priority scheduler for itself. Otherwise, it tries to use ||no, needs to be added by host admin|
|Allow a process to elevate its priority. This privilege is used if ||yes|
Create a "Zone definition" JSON file in a folder under
/opt (remember that
/root is mounted on ramdisk and will be flushed after reboot). The zone should receive the
proc_clock_highres privilege in order to get use of high-resolution timer. FreeSWITCH would crash immediately at start if this privilege is not available within the zone. This means that hosting at Joyent is problematic.
Create the Zone
Create your virtual zone within smartos:
$# vmadm create -f /opt/vm-def.json
Find the UUID assigned to your new VM:
$# vmadm list
Using the UUID from the above list ( refered to as <UUID> ):
$# zlogin <UUID>
We are now inside the VM and we can execute all the commands to set up for building freeswitch:
Contributed by Kim Culhan 2017.01.12
I've hacked together this manifest which appears to work well on smartos:
In your FreeSWITCH smartos zone you could copy this to
This is based on having the FreeSWITCH executable installed at
/opt/local/bin/freeswitch and running as user 'freeswitch'
You could create a user 'freeswitch' with:
useradd -d /opt/local/etc/freeswitch -m -c "freeswitch user" freeswitch
After installing freeswitch with 'make install' it will be necessary to set the ownership of some file locations
or freeswitch will fail to start, leaving the service status in 'maintenance' state. This will be true after setting
the service configurations in the next few steps, so before attempting to enable the service
with: 'svcadm enable freeswitch' you will need to set ownership correctly.
svccfg validate freeswitch.xml
Import the manifest with:
svccfg import freeswitch.xml
svcadm enable freeswitch
Check that it is online:
svcs -a|grep freeswitch
- FreeSWITCH will refuse to start if the process does not have the
proc_clock_highresprivilege. This means, the zone manifest should be configured to receive this privilege. If you add it to an existing zone, do "
vmadm update" and then reboot the zone. Also
proc_priocntlprivilege is highly recommended.
- ZRTP is not yet supported:
libs/libzrtpfails to compile.
Fixed, please test:
cannot bind to IPv6 loopback, and "::" in "listen-ip" does not work. You need to specify "127.0.0.1" in it.
- As of 05-22-18 with Freeswith 1.6 it is necessary to set, in ~/freeswitch/autoload_configs/event_socket.conf.xml, <param name="listen-ip" value="127.0.0.1"/> as IPv6 loopback "::" does not work on my setup. I'm using a Smartos zone created with the latest Joyent zone-dataset available at the moment: base-64 18.1.0 2018-04-08 with nothing special adjusted for IPv6.
Without modifying the as-shipped freeswitch value, it would not be possible to run fs_cli and the freeswitch console, amonst other things.