WARNING This page contains incomplete and possibly incorrect info. The page is constantly being edited and worked on. Many of these should work but some may be broken. Use at your own risk.
Credit for IOCAGE setup goes to https://forums.freenas.org/index.php?resources/fn11-1-iocage-jails-plex-tautulli-sonarr-radarr-lidarr-jackett-ombi-transmission-organizr.58/
Setup
myVol > media -series
-movies
-downloads > -radarr
-sonarr
-complete
-incomplete
-recycle bin
```
I have pool named myVol. I created a dataset named "media" owned by the default freenas user media:media. The dataset contains the folders series,movies,downloads. Radarr, Sonarr, Transmission will need to run as the user media:media to have access to them. I also have dataset named "apps"
**Changing the config file location**
This is optional and adds another layer of complexity but keeps the files safe when the jail is deleted
Using Radarr for example: /mnt/myVol/apps/Radarr to /config
In the jail you then link the files ln -s /config/config.xml /usr/local/sonarr/config.xml ln -s /config/nzbdrone.db /usr/localsonarr/nzbdrone.db
You will either need to delete the config files or move them depending on if you already have the files before linking. After you do this your config files will be safe if you delete the jail
**Permissions**
Each time you create a new jail you will have to change the default user to media:media so the jails can work together properly.
Use the name of your plugin instead of PLUGIN
service PLUGIN onestop chown -R media:media /usr/local/PLUGIN (this location might be different for some of the apps) sysrc 'PLUGIN_user=media' sysrc 'PLUGIN_group=media' service PLUGIN start
My current setup (dates show the last successful test):
+ [Sonarr](#sonarr) 10/22/17
+ [Radarr](#radarr) 10/22/17
+ [Jackett](#jackett) 10/22/17
+ [Transmission](#transmission) 10/22/17
+ [Plex](#plex) 10/22/17
+ [Tautulli](#tautulli) 6/21/18
+ [Organizr](#organizr) 10/22/17
+ [Ombi](#ombi) 10/22/17
Configuration:
+ [Backups](#backups) 2/20/17
+ [Updates](#updates)
+ [Common Commands](#commands)
+ [Testing](#testing)
+ [Default Jail Ports/UID/Location](#default)
+ [Config File Locations](#config)
<a name="default"></a>
**Default User Ports/UID/Location**
info not correct
PORT - SERVICE - USER (UID) - DATA-DIRECTORY
sonarr - 8989 - media (816) - /usr/local/share/sonarr
radarr - 7878 - radarr (352) - /usr/local/share/radarr
jackett - 9117 - jackett (818) - /usr/local/share/jackett
Ombi - - jackett (819) - /usr/local/share/
plexmediaserver 32400 - plex (972) - /usr/local/plexdata
transmission - 9091 -transmission (921) - /usr/local/etc/transmission
unifi - 8443
echo '{"pkgs":["bash","unzip","unrar","transmission","openvpn","ca_root_nss"]}' > /tmp/pkg.json
iocage create -n "transmission" -p /tmp/pkg.json -r 11.1-RELEASE ip4_addr="vnet0|10.68.69.99/24" defaultrouter="10.68.69.1" vnet="on" allow_raw_sockets="1" boot="on"
rm /tmp/pkg.json
iocage exec transmission pkg install -y transmission
iocage fstab -a transmission /mnt/myVol/apps/transmission /config nullfs rw 0 0
iocage fstab -a transmission /mnt/myVol/media/downloads /mnt/downloads nullfs rw 0 0
iocage exec transmission mkdir -p /config/transmission-home
iocage exec transmission chown -R transmission:transmission /config/transmission-home
iocage exec transmission sysrc "transmission_enable=YES"
iocage exec transmission sysrc "transmission_conf_dir=/config/transmission-home"
iocage exec transmission sysrc "transmission_download_dir=/mnt/downloads/complete"
iocage exec transmission service transmission start
# you may need to change the white list in settings.json to 0.0.0.0
echo '{"pkgs":["nginx","php56","php56-curl","php56-hash","php56-json","php56-openssl","php56-pdo","php56-pdo_sqlite","php56-session","php56-simplexml","php56-sqlite3","php56-zip","git","ca_root_nss"]}' > /tmp/pkg.json iocage create -n "organizr" -p /tmp/pkg.json -r 11.1-RELEASE ip4_addr="vnet0|10.68.69.7/24" defaultrouter="10.68.69.1" vnet="on" allow_raw_sockets="1" boot="on" rm /tmp/pkg.json
pkg install -y nginx wget php70 php70-curl php70-pdo php70-sqlite3 php70-simplexml php70-zip php70-openssl curl php70-hash php70-json php70-session php70-pdo_sqlite ca_root_nss
iocage fstab -a organizr /mnt/myVol/apps/organizr /config nullfs rw 0 0
iocage exec organizr sed -i '' -e 's?listen = 127.0.0.1:9000?listen = /var/run/php-fpm.sock?g' /usr/local/etc/php-fpm.conf iocage exec organizr sed -i '' -e 's/;listen.owner = www/listen.owner = www/g' /usr/local/etc/php-fpm.conf iocage exec organizr sed -i '' -e 's/;listen.group = www/listen.group = www/g' /usr/local/etc/php-fpm.conf iocage exec organizr sed -i '' -e 's/;listen.mode = 0660/listen.mode = 0600/g' /usr/local/etc/php-fpm.conf iocage exec organizr cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini iocage exec organizr sed -i '' -e 's?;date.timezone =?date.timezone = "Universal"?g' /usr/local/etc/php.ini iocage exec organizr sed -i '' -e 's?;cgi.fix_pathinfo=1?cgi.fix_pathinfo=0?g' /usr/local/etc/php.ini
iocage exec organizr git clone https://github.com/causefx/Organizr.git /usr/local/www/Organizr iocage exec organizr chown -R www:www /usr/local/www /config iocage exec organizr sysrc nginx_enable=YES iocage exec organizr sysrc php_fpm_enable=YES iocage exec organizr service nginx start iocage exec organizr service php-fpm start
iocage exec organizr cp -a /usr/local/www/Organizr/config/config.php /config/config.php iocage exec organizr rm /usr/local/www/Organizr/config/config.php iocage exec organizr ln -s /config/config.php /usr/local/www/
https://github.com/Jackett/Jackett/releases https://forums.freenas.org/index.php?threads/need-help-installing-jackett-on-freenas-in-a-jail.38384/
echo '{"pkgs":["mono","curl","ca_root_nss"]}' > /tmp/pkg.json
iocage create -n "jackett" -p /tmp/pkg.json -r 11.1-RELEASE ip4_addr="vnet0|10.68.69.98/24" defaultrouter="10.68.69.1" vnet="on" allow_raw_sockets="1" boot="on"
rm /tmp/pkg.json
iocage exec jackett pkg install mono curl ca_root_nss
iocage fstab -a jackett /mnt/myVol/apps/jackett /config nullfs rw 0 0
iocage exec jackett ln -s /usr/local/bin/mono /usr/bin/mono
iocage exec jackett "fetch https://github.com/Jackett/Jackett/releases/download/v0.9.23/Jackett.Binaries.Mono.tar.gz -o /usr/local/share"
iocage exec jackett "tar -xzvf /usr/local/share/Jackett.Binaries.Mono.tar.gz -C /usr/local/share"
iocage exec jackett rm /usr/local/share/Jackett.Binaries.Mono.tar.gz
iocage exec jackett "pw user add jackett -c jackett -u 818 -d /nonexistent -s /usr/bin/nologin"
iocage exec jackett chown -R jackett:jackett /usr/local/share/Jackett /config
iocage exec jackett mkdir /usr/local/etc/rc.d
ee /mnt/iocage/jails/jackett/root/usr/local/etc/rc.d/jackett
#!/bin/sh
# $FreeBSD$
#
# PROVIDE: jackett
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# jackett_enable: Set to YES to enable jackett
# Default: NO
# jackett_user: The user account used to run the jackett daemon.
# This is optional, however do not specifically set this to an
# empty string as this will cause the daemon to run as root.
# Default: media
# jackett_group: The group account used to run the jackett daemon.
# This is optional, however do not specifically set this to an
# empty string as this will cause the daemon to run with group wheel.
# Default: media
# jackett_data_dir: Directory where jackett configuration
# data is stored.
# Default: /var/db/jackett
. /etc/rc.subr
name=jackett
rcvar=${name}_enable
load_rc_config $name
: ${jackett_enable:="NO"}
: ${jackett_user:="jackett"}
: ${jackett_group:="jackett"}
: ${jackett_data_dir:="/config"}
command="/usr/sbin/daemon"
procname="/usr/local/bin/mono"
command_args="-p ${jackett_data_dir}/jackett.pid -f ${procname} /usr/local/share/Jackett/JackettConsole.exe -d ${jackett_data_dir}"
start_precmd=jackett_precmd
jackett_precmd() {
export USER=${jackett_user}
if [ ! -d ${jackett_data_dir} ]; then
install -d -o ${jackett_user} -g ${jackett_group} ${jackett_data_dir}
fi
export XDG_CONFIG_HOME=${jackett_data_dir}
}
run_rc_command "$1"
iocage exec jackett chmod u+x /usr/local/etc/rc.d/jackett
iocage exec jackett sysrc "jackett_enable=YES"
iocage exec jackett service jackett restart
https://github.com/Sonarr/Sonarr/wiki/Installation-FreeBSD
echo '{"pkgs":["mono","mediainfo","sqlite3","ca_root_nss","curl"]}' > /tmp/pkg.json
iocage create -n "sonarr" -p /tmp/pkg.json -r 11.1-RELEASE ip4_addr="vnet0|10.68.69.99/24" defaultrouter="10.68.69.1" vnet="on" allow_raw_sockets="1" boot="on"
rm /tmp/pkg.json
iocage exec sonarr pkg install mono mediainfo sqlite3 ca_root_nss curl
iocage fstab -a sonarr /mnt/myVol/apps/sonarr /config nullfs rw 0 0
iocage fstab -a sonarr /mnt/myVol/media/downloads /mnt/downloads nullfs rw 0 0
iocage fstab -a sonarr /mnt/myVol/media/series /mnt/series nullfs rw 0 0
iocage exec sonarr ln -s /usr/local/bin/mono /usr/bin/mono
iocage exec sonarr "fetch http://download.sonarr.tv/v2/master/mono/NzbDrone.master.tar.gz -o /usr/local/share"
iocage exec sonarr "tar -xzvf /usr/local/share/NzbDrone.master.tar.gz -C /usr/local/share"
iocage exec sonarr rm /usr/local/share/NzbDrone.master.tar.gz
iocage exec sonarr "pw user add sonarr -c sonarr -u 351 -d /nonexistent -s /usr/bin/nologin"
iocage exec sonarr chown -R sonarr:sonarr /usr/local/share/NzbDrone /config
iocage exec sonarr mkdir /usr/local/etc/rc.d
iocage exec sonarr "pw user add media -c media -u 8675309 -d /nonexistent -s /usr/bin/nologin"
iocage exec sonarr chown -R media:media /usr/local/share/NzbDrone /config
# not a good option but works for in app updates if you want
chmod 777 /usr/local/share/sonarr
https://github.com/Radarr/Radarr/releases https://github.com/Radarr/Radarr
echo '{"pkgs":["mono","mediainfo","sqlite3","ca_root_nss","curl"]}' > /tmp/pkg.json
iocage create -n "radarr" -p /tmp/pkg.json -r 11.1-RELEASE ip4_addr="vnet0|10.68.69.97/24" defaultrouter="10.68.69.1" vnet="on" allow_raw_sockets="1" boot="on"
rm /tmp/pkg.json
iocage exec radarr pkg install mono mediainfo sqlite3 curl ca_root_nss
iocage fstab -a radarr /mnt/myVol/apps/radarr /config nullfs rw 0 0
iocage fstab -a radarr /mnt/myVol/media/downloads /mnt/downloads nullfs rw 0 0
iocage fstab -a radarr /mnt/myVol/media/movies /mnt/movies nullfs rw 0 0
iocage exec radarr ln -s /usr/local/bin/mono /usr/bin/mono
iocage exec radarr "fetch https://github.com/Radarr/Radarr/releases/download/v0.2.0.1120/Radarr.develop.0.2.0.1120.linux.tar.gz -o /usr/local/share"
iocage exec radarr "tar -xzvf /usr/local/share/Radarr.develop.0.2.0.1120.linux.tar.gz -C /usr/local/share"
iocage exec radarr rm /usr/local/share/Radarr.develop.0.2.0.1120.linux.tar.gz
iocage exec radarr "pw user add radarr -c radarr -u 352 -d /nonexistent -s /usr/bin/nologin"
iocage exec radarr chown -R radarr:radarr /usr/local/share/Radarr /config
iocage exec radarr mkdir /usr/local/etc/rc.d
iocage exec radarr service radarr onestop
iocage exec radarr sysrc 'radarr_user=radarr'
iocage exec radarr "pw user add media -c media -u 8675309 -d /nonexistent -s /usr/bin/nologin"
iocage exec radarr chown -R media:media /usr/local/share/Radarr /config
iocage exec radarr service radarr start
iocage exec radarr "pw groupadd -n media -g 8675309"
iocage exec radarr "pw groupmod media -m radarr"
iocage exec radarr "mkdir -p /usr/local/etc/pkg/repos"
iocage exec radarr "ee /usr/local/etc/pkg/repos/FreeBSD.conf"
FreeBSD: { url: "pkg+http://pkg.FreeBSD.org/${ABI}/latest" }
use ee editor or it won't work at leats for me! Create an rc file for radarr using your favorite editor at /mnt/iocage/jails/radarr/root/usr/local/etc/rc.d/radarr
#!/bin/sh
# $FreeBSD$
#
# PROVIDE: radarr
# REQUIRE: LOGIN
# KEYWORD: shutdown
#
# Add the following lines to /etc/rc.conf.local or /etc/rc.conf
# to enable this service:
#
# radarr_enable: Set to YES to enable radarr
# Default: NO
# radarr_user: The user account used to run the radarr daemon.
# This is optional, however do not specifically set this to an
# empty string as this will cause the daemon to run as root.
# Default: media
# radarr_group: The group account used to run the radarr daemon.
# This is optional, however do not specifically set this to an
# empty string as this will cause the daemon to run with group wheel.
# Default: media
# radarr_data_dir: Directory where radarr configuration
# data is stored.
# Default: /var/db/radarr
. /etc/rc.subr
name=radarr
rcvar=${name}_enable
load_rc_config $name
: ${radarr_enable:="NO"}
: ${radarr_user:="radarr"}
: ${radarr_group:="radarr"}
: ${radarr_data_dir:="/config"}
pidfile="${radarr_data_dir}/nzbdrone.pid"
command="/usr/sbin/daemon"
procname="/usr/local/bin/mono"
command_args="-f ${procname} /usr/local/share/Radarr/Radarr.exe --data=${radarr_data_dir} --nobrowser"
start_precmd=radarr_precmd
radarr_precmd() {
if [ ! -d ${radarr_data_dir} ]; then
install -d -o ${radarr_user} -g ${radarr_group} ${radarr_data_dir}
fi
export XDG_CONFIG_HOME=${radarr_data_dir}
}
run_rc_command "$1"
iocage exec radarr chmod u+x /usr/local/etc/rc.d/radarr
iocage exec radarr sysrc "radarr_enable=YES"
iocage exec radarr service radarr start
echo '{"pkgs":["plexmediaserver","ca_root_nss"]}' > /tmp/pkg.json
iocage create -n "plex" -p /tmp/pkg.json -r 11.1-RELEASE ip4_addr="vnet0|10.68.69.3/24" defaultrouter="10.68.69.1" vnet="on" allow_raw_sockets="1" boot="on"
rm /tmp/pkg.json
iocage exec plex pkg install -y plexmediaserver ca_root_nss
iocage fstab -a plex /mnt/myVol/apps/plex /config nullfs rw 0 0
iocage fstab -a plex /mnt/myVol/media /mnt/media nullfs ro 0 0
iocage exec plex chown -R plex:plex /config
iocage exec plex sysrc "plexmediaserver_enable=YES"
iocage exec plex sysrc plexmediaserver_support_path="/config"
iocage exec plex service plexmediaserver start
iocage fstab -a plex /mnt/myVol/media /media nullfs ro 0 0
mv /mnt/myVol/jails/Plex/usr/local/plexdata/Plex /mnt/myVol/apps/plex/Plex
<a name="ombi"></a>
**Ombi**
echo '{"pkgs":["mono","ca_root_nss","unzip","sqlite3"]}' > /tmp/pkg.json
iocage create -n "ombi" -p /tmp/pkg.json -r 11.1-RELEASE ip4_addr="vnet0|10.68.69.21/24" defaultrouter="10.68.69.1" vnet="on" allow_raw_sockets="1" boot="on"
rm /tmp/pkg.json
iocage exec ombi pkg install -y mono ca_root_nss unzip sqlite3
iocage fstab -a ombi /mnt/myVol/apps/ombi /config nullfs rw 0 0
iocage exec ombi ln -s /usr/local/bin/mono /usr/bin/mono
iocage exec ombi "fetch https://ci.appveyor.com/api/buildjobs/0s9th9l5c0you5c1/artifacts/Ombi.zip -o /usr/local/share"
iocage exec ombi "unzip -d /usr/local/share /usr/local/share/Ombi.zip"
iocage exec ombi mv /usr/local/share/Release /usr/local/share/ombi
iocage exec ombi rm /usr/local/share/Ombi.zip
iocage exec ombi service ombi onestop
You only need to run the next two commands if you are creating the jail for the first time.
iocage exec ombi sqlite3 /config/Ombi.sqlite "create table aTable(field1 int); drop table aTable;"
iocage exec ombi mkdir -p /config/Backups
iocage exec ombi ln -s /config/Ombi.sqlite /usr/local/share/ombi/Ombi.sqlite
iocage exec ombi ln -s /config/Backups /usr/local/share/ombi/Backups
iocage exec ombi "pw user add ombi -c ombi -u 819 -d /nonexistent -s /usr/bin/nologin"
iocage exec ombi chown -R ombi:ombi /usr/local/share/ombi /config
iocage exec ombi mkdir /usr/local/etc/rc.d
ee /mnt/iocage/jails/ombi/root/usr/local/etc/rc.d/ombi
#!/bin/sh
. /etc/rc.subr
name=ombi rcvar=ombi_enable load_rc_config ${name}
:
procname="/usr/local/bin/mono" command="/usr/sbin/daemon" command_args="-f ${procname} /usr/local/share/ombi/Ombi.exe"
start_precmd=ombi_precmd
ombi_precmd() {
if [ ! -d
run_rc_command "$1"
iocage exec ombi chmod u+x /usr/local/etc/rc.d/ombi
iocage exec ombi sysrc ombi_enable=YES
iocage exec ombi service ombi start
<a name="unifi"></a>
**Unifi**
https://www.freshports.org/net-mgmt/unifi5/
https://forums.freenas.org/index.php?resources/installing-ubiquiti-unifi-controller-in-a-jail.55/
pkg update && pkg upgrade -y pkg install -y bash llvm40 openjdk8 portsnap fetch extract cd /usr/ports/net-mgmt/unifi5/ && make -DBATCH install clean sysrc unifi_enable=YES service unifi start
You must use the ssl site https://yourip:8443
Updates: portsnap fetch extract cd /usr/ports/net-mgmt/unifi5 service unifi stop make reinstall clean service unifi start
<a name="tautulli"></a>
**Tautulli**
echo '{"pkgs":["python2","py27-sqlite3","py27-openssl","ca_root_nss","git"]}' > /tmp/pkg.json iocage create -n "tautulli" -p /tmp/pkg.json -r 11.1-RELEASE ip4_addr="vnet0|10.68.69.97/24" defaultrouter="10.68.69.1" vnet="on" allow_raw_sockets="1" boot="on" rm /tmp/pkg.json iocage fstab -a tautulli /mnt/myVol/apps/tautulli /config nullfs rw 0 0 iocage exec tautulli git clone https://github.com/Tautulli/Tautulli.git /usr/local/share/Tautulli iocage exec tautulli "pw user add tautulli -c tautulli -u 109 -d /nonexistent -s /usr/bin/nologin" iocage exec tautulli chown -R tautulli:tautulli /usr/local/share/Tautulli /config iocage exec tautulli cp /usr/local/share/Tautulli/init-scripts/init.freenas /usr/local/etc/rc.d/tautulli iocage exec tautulli chmod u+x /usr/local/etc/rc.d/tautulli iocage exec tautulli sysrc "tautulli_enable=YES" iocage exec tautulli sysrc "tautulli_flags=--datadir /config" iocage exec tautulli service tautulli start
<a name="updates"></a>
**Updates**
pkg upgrade "name of package without quotes" pkg upgrade :updates all the packages in the jail
<a name="config"></a>
**Config Locations**
Jackett /usr/local/jackett/ServerConfig.json /usr/local/jackett/indexers
Sonarr /usr/local/sonarr/cofig.xml /usr/local/sonarr/nzbdrone.db
Radarr /usr/local/radarr/cofig.xml /usr/local/radarr/nzbdrone.db
Transmission /usr/local/etc/transmission/home
Plex /usr/local/plexdata/Plex Media Server
<a name="backups"></a>
Backups
-------
**Important files**
Sonarr: download backup through web interface or nzbdrone.db & config.xml Radarr: download backup through web interface or nzbdrone.db & config.xml Unifi: download backup through web interface Ombi: Ombi.sqlite Headphones: headphones.db config.ini PEXPY:/usr/local/plexpy/config.ini /usr/local/plexpy/plexpy.db /usr/local/plexpy/plexpy.log /usr/local/plexpy/backups
<a name="common commands"></a>
**Common Commands**
https://www-uxsup.csx.cam.ac.uk/pub/doc/suse/suse9.0/userguide-9.0/ch24s04.html
cd /directorypath : Change to directory. chmod [options] mode filename : Change a file’s permissions. chown [options] filename : Change who owns a file. cp [options] :source destination : Copy files and directories. ln -s test symlink : Creates a symbolic link named symlink that points to the file test mkdir [options] directory : Create a new directory. mv -i myfile yourfile : Move the file from "myfile" to "yourfile". This effectively changes the name of "myfile" to "yourfile". mv -i /data/myfile : Move the file from "myfile" from the directory "/data" to the current working directory. rm [options] directory : Remove (delete) file(s) and/or directories. tar [options] filename : Store and extract files from a tarfile (.tar) or tarball (.tar.gz or .tgz). touch filename : Create an empty file with the specified name.
<a name="testing"></a>
**Testing**
service [name of service] start service [name of service] stop service [name of service] restart
iocage exec transmission service transmission onestop
iocage exec transmission "pw user add media -c media -u 8675309 -d /nonexistent -s /usr/bin/nologin"
iocage exec transmission "pw groupadd -n media -g 8675309"
iocage exec transmission "pw groupmod media -m transmission"
iocage exec transmission chown -R media:media /config/transmission-home
iocage exec transmission chown -R media:media /mnt/downloads
iocage exec transmission sysrc 'transmission_user=media'
iocage exec radarr service radarr onestop
iocage exec radarr "pw user add media -c media -u 8675309 -d /nonexistent -s /usr/bin/nologin"
iocage exec radarr "pw groupadd -n media -g 8675309"
iocage exec radarr "pw groupmod media -m radarr"
iocage exec radarr chown -R media:media /usr/local/share/Radarr /config
iocage exec radarr sysrc 'radarr_user=media'
iocage exec sonarr service sonarr onestop
iocage exec sonarr "pw user add media -c media -u 8675309 -d /nonexistent -s /usr/bin/nologin"
iocage exec sonarr "pw groupadd -n media -g 8675309"
iocage exec sonarr "pw groupmod media -m sonarr"
iocage exec sonarr chown -R media:media /usr/local/share/NzbDrone /config
iocage exec sonarr sysrc 'sonarr_user=media'