WARNING: June 1st is the Apps Migration Deadline for TrueNAS 24.04 and 23.10

(Editor’s note: it’s our 1st blog to use red ink - Upgrade NOW!)

On June 1st, 2025, an update to the TrueNAS Apps Catalog will enable per-App IP addressing. This update will also break the ability to automatically migrate Apps from Cobia (23.10) and Dragonfish (24.04) to Electric Eel (24.10.2.2).

TrueNAS Apps in Dragonfish and earlier run on Kubernetes, while Electric Eel Apps run on Docker. The TrueNAS Engineering team developed the automated migration to ensure that upgrades would be simplified and straightforward, which our community embraced by making Electric Eel the fastest-adopted version of TrueNAS ever. With months of refinement and hundreds of fixes behind it, Electric Eel delivers reliable storage and applications and is recommended for even the most mission-critical workloads.

TrueNAS SCALE systems running Cobia (23.10) or earlier should upgrade to Dragonfish (24.04.2.5) and then subsequently to Electric Eel (24.10.2.2) afterwards.

TrueNAS systems with Apps should be upgraded immediately to 24.10.2.2, before June 1st! For users who are not yet running 24.10, the Apps auto-migration will make the process simple to move from Kubernetes to Docker, and users already on 24.10 can simply upgrade to the latest release from within the web UI or by downloading the standalone upgrade bundle from the TrueNAS Community Edition website under the Legacy Version column.

After June 1st, Cobia and Dragonfish users with Kubernetes Apps will need to manually back up and restore their application data and configuration to a new Electric Eel installation. The manual update process is more complex and should be avoided.

Upgrade NOW!

Most TrueNAS systems are already running Electric Eel (24.10) or Fangtooth (25.04) and are already prepared to leverage the new IP addressing capabilities in the June 1st Apps update. Users running NAS-only systems and those running TrueNAS 13.x will not be impacted by this change, but the small percentage of TrueNAS Cobia and Dragonfish systems with Apps – about 5% of TrueNAS systems – will encounter errors attempting to update Apps after this update.

If your system is still running TrueNAS Dragonfish, Cobia, or even earlier – the time to upgrade to Electric Eel is now. There’s no need to upgrade to Fangtooth (25.04) immediately – but upgrading to the newer TrueNAS releases ensures that you receive the latest stability, security, and functionality enhancements.

3 Likes

1 Day to App Deadline day… is anyone having trouble updating?

si io!

Sorry if its been mentioned before but what timezone is used when referring to updates?

Currently in Sydney, Aus so its June 1st already :slight_smile:

And here in NZ, we’re even closer to June 2nd, while the US still slumbers in May.

1 Like

Wherever in the world you are, June 1st will work.

The switch will be made on June 2nd USA time… update before then.

1 Like

so how do I set a static IP on my main LAN for an APP now? O.o

1 Like

how will i know when the switch is made?

also does anyone from iX have a screenshot of what I am looking for in the apps settings to assign a custom IP to an app?

The switch is made

is this how its supposed to work?

how do i set a custom IP?

I was able to get this to populate by switching my network adapter from DHCP to a static IP (under Alias) in the network adapter settings.

Now that this is live, again to use it, you go add new IP “aliases” in your networking page. Those will then show up under the Application Host IPs section, where you can pick and choose which IPs to bind to / port forward from.

Go to the Discover page and click “Refresh Catalog”. That should fix it.

I carried out the minor point upgrade to ElectricEel-24.10.2.2 a few days ago, in readiness.

Today I was advised that my apps could all be updated: all OK except jellyfin which keeps insisting “the port is in use” so I changed the port (30013) to a new one (3004) and tried again. I get the same message.

Jellyfin is installed as an ix-app and it uses ix volumes for config cache and transcode.

Frigate, dockge, uptime-kuma and Tailscale upgraded OK though.

I can raise a ticker or a separate thread but this seemed a good point to mention it. Does anyone know how to fix the problem?

Here’s the fault log:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/middlewared/job.py", line 509, in run
    await self.future
  File "/usr/lib/python3/dist-packages/middlewared/job.py", line 556, in __run_body
    rv = await self.middleware.run_in_thread(self.method, *args)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1367, in run_in_thread
    return await self.run_in_executor(io_thread_pool_executor, method, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1364, in run_in_executor
    return await loop.run_in_executor(pool, functools.partial(method, *args, **kwargs))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/schema/processor.py", line 183, in nf
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/schema/processor.py", line 55, in nf
    res = f(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/upgrade.py", line 81, in upgrade
    new_values = self.middleware.call_sync(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1654, in call_sync
    return self.run_coroutine(methodobj(*prepared_call.args))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1694, in run_coroutine
    return fut.result()
           ^^^^^^^^^^^^
  File "/usr/lib/python3.11/concurrent/futures/_base.py", line 449, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
  File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/schema_normalization.py", line 34, in normalize_and_validate_values
    dict_obj = await self.middleware.call(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1629, in call
    return await self._call(
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/main.py", line 1460, in _call
    return await methodobj(*prepared_call.args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/middlewared/plugins/apps/schema_validation.py", line 55, in validate_values
    verrors.check()
  File "/usr/lib/python3/dist-packages/middlewared/service_exception.py", line 72, in check
    raise self
middlewared.service_exception.ValidationErrors: [EINVAL] app_create.network.https_port.port_number: Port is already in use.

A separate thread would be best if you don’t get an answer here.

A list of Apps and the port numbers might help us find the conflict (if it exists).

Thanks: understood - I’ll create something separate.

am i supposed to be picking an IP from the same subnet truenas is on? is there something i need to do in my router to make sure there isnt a collision?

for example, i went to my router device page and picked and IP from the current subnet which wasnt in use. but when i assigned that IP to a container the router did not recognize it was in use.

how is this supposed to work?

1 Like

The router uses ARP to discover the MAC addresses of assigned IP addresses. Make sure there is no conflicting IP address.

TrueNAS will respond to the ARP request.

is there a plan to put out documentation on this? i would love to be able to link to something official from iX.