User Tools

Site Tools


How to install serviio to always run at boot in any modern Solaris flavour.

Note that, Solaris or OpenIndiana or any other Solaris descendant, is NOT Linux

The differences are by no means obvious, and stem from the large-server heritage of Solaris.
Most of the visible differences occur in admin software, but a few quirks exist in userland, too.
And the package system is aggressively different.
Still, most any Java library is likely to run w/o any problem, and most Linux software
can be automatically transformed to run in Solaris descendants.
And, given its heritage, Solaris makes for very good and reliable servers.

The below procedure installs serviio as a service under SMF in Openindiana v 151a and later.
It will likely work just as well, with possibly minor details changed, on Solaris 10 or 11, Nexenta and OpenSolaris b134 (possibly earlier versions too).

The serviio console should normally be started from a separate copy of serviio, given the below setup.
In most useful cases, this is anyway the case, since you want serviio running on a server machine, and you run the console from another machine, say your laptop.

First, make sure you have the appropriate supporting SW installed:
ffmpeg 0.9.1 with rtmp-support, librtmp and lame mp3 can all be found in the sfe-encumbered repository at,
from where you can install using the IPS installer, pkg, of your OpenIndiana OI_151a.

Get the distro and install it

Download the serviio linux tar distro, and extract it under /usr/local/.

Create a group “serviio” with a group id > 100:

prompt> groupadd -g 103 serviio

and a user “serviio” with home directory /usr/local/serviio-1.1/ and a uid > 100, and with the group serviio as it's primary group

prompt> useradd -u 103 -g 103 -d /usr/local/serviio-1.1 serviio

On my system, 103 was free in both cases, and one might as well use the same number for both.

Now, make sure the /usr/local/serviio-1.1 tree is owned by the group serviio and the user serviio:

prompt> cd /usr/local; chown -R serviio:serviio serviio-1.1

Now test it by running it manually, as user serviio:

prompt> pfexec su serviio
prompt> cd /usr/local/serviio-1.1

prompt> ./bin/

prompt> ./bin/ &

Enter the correct address to bind to explicitly on the Status panel, and save.
Add media folder trees in the Library panel, and save.

Check to see that there are discovered renderers listed on the Status panel, and try using serviio from one of those.
Be patient, and fiddle around until it works, at least for a few video files.

When satisfied, right-click on the serviio panel app and choose “exit serviio”, or find the processes (they're Java, and you need to be a bit clever to find them) and send them kill signals, or do “kill %%” twice with a few secs in between, if you're in a csh-like shell.
Make sure serviio is stopped!

Lastly, define a system service that controls Serviio, and start it
Save the xml text found at the end of this page in a file “serviio.xml”, and put it inside the serviio home dir (see above), and do:

prompt> pfexec svccfg validate ~serviio/serviio.xml

prompt> pfexec svccfg import ~serviio/serviio.xml

This creates a new service svc:/application/UPnP-AV/serviio:default, which is the complete fmri handle used by the system to start and stop serviio from now on.

Next enable the service, so that it will start up whenever the machine is booted, and will be restarted if it gets shot down by mistake.

prompt> pfexec svcadm enable serviio

You can look at the serviio service by doing

prompt> svcs -l serviio

and as you can see, you need not use the full fmri, as long as you use enough of the name to make it unique.

As a final check, just in case, look at /var/tmp/Serviio, and make sure it's owned by serviio, group serviio.
This might be wrong if you had an earlier copy running as some user other than serviio, or you did the manual test above not as user serviio.

---------serviio.xml file contents------------

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
        Created by Manifold
--><service_bundle type="manifest" name="serviio">

    <service name="application/UPnP-AV/serviio" type="service" version="1">

        <create_default_instance enabled="false"/>

        <dependency name="network" grouping="require_all" restart_on="error" type="service">
            <service_fmri value="svc:/milestone/network:default"/>

        <dependency name="filesystem" grouping="require_all" restart_on="error" type="service">
            <service_fmri value="svc:/system/filesystem/local"/>
            <method_credential user="serviio" group="serviio"/>

        <exec_method type="method" name="start" exec="/usr/local/serviio-1.1/bin/" timeout_seconds="60"/>

        <exec_method type="method" name="stop" exec=":kill" timeout_seconds="60"/>

        <property_group name="startd" type="framework">
            <propval name="duration" type="astring" value="child"/>
            <propval name="ignore_error" type="astring" value="core,signal"/>

        <property_group name="application" type="application">
        <stability value="Evolving"/>

                <loctext xml:lang="C">


-------end of serviio.xml contents---------------
howto/solaris/install.txt · Last modified: 2013/01/10 17:35 by zip