/mnt/.ix-apps vs /mnt/[pool]/ix-applications

Hi,
Im stuck - Have spent 2 days on this now and still scratching my head over this.
Just migrated from truenas 13.3 to Scale FangTooth 25.04
All good until I stumbled across this issue…

No matter what I do, the ix-apps content ends up outside my pools.
There;s no ix-applications created anywhere.
So I tried to start from scratch by…

  1. Unset Pool
  2. Manually deleted the /mnt/.ix-apps
  3. Choose Pool (in my case /mnt/STORE05)

Once created I can see STORE05 being the default when re-entering Choose Pool
No /mnt/STORE05/ix-applications created on my /mnt/STORE05 pool
However a fresh /mnt/.ix-apps located outside my pools

So figured that the ix-applications only might be created once I actually install an app - so installed Plex - Runs - but NO ix-applications created.

What the…???

The missing ix-applications creates issues when I plan to install openvpn as part of transmission.
Also not keen on having stuff hanging outside my pools

Anyone with ideas on why this is happening and the solution, please get in touch

The answer is simple: the ix-application dataset was used by the old kubernetes apps backend until 24.04 and doesn’t get used by the new docker backend from 24.10 or newer. The docker backend uses a hidden dataset called .ix-apps which gets created on the pool you choose.

2 Likes

Thank for the reply Lars *eller blir det Lasse i Svea :wink: )

I am trying to follow some vids on how to install openvpn for transmission on scale and so far they all expects this ix-applications on the pool.
The ./ix-apps that get created on my system doesnt seem to have anything near the content the ix-applications used to have.

Any idea/suggestion of installation source on how to integrate openvpn PIA with transmission?
As it sits I setup the vpn on my router but since all apps goes through the main trunas scale ip, there’s some drawbacks I dont like.
For one, there;;s no way I can open a port on router level since PIA’s port assisgned is dynamic and keep changing.
I had a nice openvpn setup for pia running on core 13.3 but I havent found a way to implement this on scale :frowning:

That’s because those videos are propably for the old kubernetes based apps backend and are no longer applicable for the new docker backend.

i’d suggest you follow this guide since it’s written for the new docker backend.

Edit:
Another option would be to assign transmition its own ip address and then tell your router to tunnel to that ip address.
But i believe there’s still routing issues with the per-app-ip setup

Option 1 is where I started going down the rabbit hole of ix-applications

Option 2 is pretty much what I have used up until recently, but that option wont allow me to find the ever changing port that PIA provides dynamically.

I just tried the YAML but that also shat itself once I tried to run " docker-compose up -d" resulting in “command not found”

Honestly think it was easier under freebsd - At least I could see what the f’ actually goes on. Feels like I am blind here - No visibility or access to bin libraries etc and scratching my head biig time atm

Im sure once I get over this hurdle it will be fine, but right now it feels very frustrating

I would propably not use docker commands from shell, you’re supposed to use the truenas gui, which has a build in way to deploy compose yaml.
Sadly that option is kind of hidden away. If you navigate to the apps section in the gui top right corner big blue “discover apps” button and then click on the three dots next to the blue custom app button. That should open a window where you can paste in your compose files or you follow this version

which saves the yaml on a dataset but deploys it via truenas gui
If it fails to deploy from the gui you can check with

sudo cat /var/log/app_lifecycle.log

why it failed.

1 Like

The ix-apps dataset is stored on one of your pools, but the mountpoint is different. You’re not really intended to be doing anything with that mountpoint or the hidden dataset for that matter.

ix-applications isn’t used anymore.

Did you also try docker compose up -d?
And why run it in the first place?

Hi Lars. I need your input - going complete nuts over this and I feel like a complete idiot :frowning:
Can you see whats wrong with this YAML???
What I need…
Transmission with openvpn for PIA

Trying to use “haugene/transmission-openvpn” image
Have created the following datasets.
/mnt/STORE05/TrueNasScaleApps
/mnt/STORE05/TrueNasScaleApps/Transmission-vpn
/mnt/STORE05/TrueNasScaleApps/Transmission-vpn/TransmissionConfig

Above datasets was all created with the “apps” user as owner. i.e Uid and Gid=568

The YAML deploys but spits the dummy with “No containers are available.”
During its deployment I see the following cycling between
"tcp://0.0.0.0:51413 : 51413
tcp://::::51413 : 51413
tcp://0.0.0.0:30096 : 9091
tcp://::::30096 : 9091

Containers 1"

and
“No containers are available.”

until it gives up in stopped mode.

This is the YAML I plastered together from various sources

services:
transmission-vpn:
image: haugene/transmission-openvpn:latest
container_name: transmission-vpn
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
volumes:
- >-
/mnt/STORE05/TrueNasScaleApps/Transmission-vpn/TransmissionConfig:/config
- /mnt/TORRENT/BitTorrent:/media
- /mnt/TORRENT/BitTorrent/tv-sonarr:/media/tv-sonarr
- /mnt/TORRENT/BitTorrent/radarr:/media/radarr
environment:
- OPENVPN_PROVIDER=PIA
- OPENVPN_CONFIG=Australia/Perth
- OPENVPN_COUNTRY=AU
- OPENVPN_USERNAME=
- OPENVPN_PASSWORD=
- LOCAL_NETWORK=192.168.2.0/24
- PUID=568
- PGID=568
- TZ=Australia/Perth
- TRANSMISSION_WEB_HOME=/transmission/web
- TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=false
- TRANSMISSION_RPC_USERNAME=
- TRANSMISSION_RPC_PASSWORD=
- WEBUI_PORT=9091
ports:
# Map the Web UI port to a host port (e.g., 30096)
- “30096:9091”
# Optional: Port for torrent traffic
- “51413:51413”
restart: unless-stopped

I expect to be able to access transmission web UI via
(http://192.168.2.100:30096/transmission/web/) or http://192.168.2.100:9091/transmission/web/
… also expect the vpn to provide PIA’s provided open port

first thing i notice is that you have quotes around the port mappings, which should not be nessessary. But it was kinda hard to read without the proper formating. For the future post yaml or any code for that matter as “preformated text” using ``` at the start and end of the code. It will look much cleaner and lets you copy the code

services:
  transmission-vpn:
    image: haugene/transmission-openvpn:latest
    container_name: transmission-vpn
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun
    volumes:
      - /mnt/STORE05/TrueNasScaleApps/Transmission-vpn/TransmissionConfig:/config
      - /mnt/TORRENT/BitTorrent:/media
      - /mnt/TORRENT/BitTorrent/tv-sonarr:/media/tv-sonarr
      - /mnt/TORRENT/BitTorrent/radarr:/media/radarr
    environment:
      - OPENVPN_PROVIDER=PIA
      - OPENVPN_CONFIG=Australia/Perth
      - OPENVPN_COUNTRY=AU
      - OPENVPN_USERNAME=
      - OPENVPN_PASSWORD=
      - LOCAL_NETWORK=192.168.2.0/24
      - PUID=568
      - PGID=568
      - TZ=Australia/Perth
      - TRANSMISSION_WEB_HOME=/transmission/web
      - TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=false
      - TRANSMISSION_RPC_USERNAME=
      - TRANSMISSION_RPC_PASSWORD=
      - WEBUI_PORT=9091
    ports:
      - 30096:9091    # Web UI
      - 51413:51413   # Torrent traffic
    restart: unless-stopped

just deployed this YAML and it starts at least, but the transmission log spits out
“[2025-10-15 15:46:23.456] ERR utils.cc:105 Couldn’t read ‘/transmission/web/index.html’: No such file or directory (2) (utils.cc:105)”
when trying to access http://192.168.2.100:30096/transmission/web/

This is the YAML config

services:
transmission-vpn:
image: haugene/transmission-openvpn:latest
container_name: transmission-vpn
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
volumes:
- >-
/mnt/STORE05/TrueNasScaleApps/Transmission-vpn/TransmissionConfig:/config
- /mnt/TORRENT/BitTorrent:/media
- /mnt/TORRENT/BitTorrent/tv-sonarr:/media/tv-sonarr
- /mnt/TORRENT/BitTorrent/radarr:/media/radarr
environment:
- OPENVPN_PROVIDER=PIA
- OPENVPN_COUNTRY=AU
- OPENVPN_USERNAME=
- OPENVPN_PASSWORD=
- LOCAL_NETWORK=192.168.2.0/24
- PUID=568
- PGID=568
- TZ=Australia/Perth
- TRANSMISSION_WEB_HOME=/transmission/web
- TRANSMISSION_RPC_AUTHENTICATION_REQUIRED=false
- TRANSMISSION_RPC_USERNAME=
- TRANSMISSION_RPC_PASSWORD=
- WEBUI_PORT=9091
ports:
# Map the Web UI port to a host port (e.g., 30096)
- “30096:9091”
# Optional: Port for torrent traffic
- “51413:51413”
restart: unless-stopped

I don’t have time to test right now, i’m off to work in like 5 Minutes, but i’ll take a look when i’m back home

1 Like

Ok i may have trouble testing further since i don’t have a vpn subscription i could test it with. I can’t even get the container to start… it just fails in a reboot loop because i can’t provide vpn login credentials.

For comparison i used the linuxserver transmition compose file and had no problems… so it may be something specific to the included vpn setup i can’t test… I’m sorry.

Appreciate your help regardless - I will continue my quest :wink:
At least it runs and apart from not finding the transmission/web it seem to work.
I found a similar issue with transmissions pid id. Default json tries to write it to /var/run/transmission/ folder, but this folder isnt created as part of the installation and creating it manually is pointless since the container would be re-created on each start. So I ended up pointing it to the config root instead and that worked just fine.

cheers

lol - I simply removed TRANSMISSION_WEB_HOME=transmission/web from the yaml and it works - Go figure :wink:
Interestingly it ignores my vpn location and takes me to a different country - But at least it works.
Will now try to figure out why my preferred vpn location is ignored.

No sure if your interested, but might be interesting to others scratching their head over this.

I found a couple of interesting quirks that I had to resolve.
Apart from completely removing the TRANSMISSION_WEB_HOME from the YAML I had to do these fixes as well.

The YAML must have a

  • TRANSMISSION_DOWNLOAD_DIR=<location>

if you want to use something other than the default /data/completed
Pointless trying to change this within the webUI since it will revert back

As for my preferred vpn location. Apparently you need to replace

OPENVPN_COUNTRY=<CountryCode>

with

  • OPENVPN_CONFIG=<country_city>

when using PIA
If you don’t specify this, PIA ignores your location picks first available service regardless of you location.
So to get you closes server you need to replace this with the

OPENVPN_CONFIG=<country_city>

within the YAML
The country_city is case sensitive so you need to enter it like

OPENVPN_CONFIG=au_sydney

The exact naming of the <country_city> would be found within the list of .ovpm’s
i.e

docker exec -it transmission ls /etc/openvpn/pia

Next I need to fix some permission issues with the integration of sonarr and radarr.
But at least I now have a fully working transmission using vpn

All good :wink: