OliveTin EZ-Start: The Next Generation. Deploy OliveTin-for-Channels from the Command Line without the Need for Portainer to be Installed in Advance!

Let's take a look at the debug output. From the EZ-Start WebUI (on port 1338) run this Action:

screenshot-htpc6-2026_01_10-09_00_40

Select this debug log:

You may need to redact the password you're using in the debug, unless it's a throw-away. No need to redact your LAN IP addresses -- there's no security risk posting those.

In addition to posting the debug log, please confirm you're running the latest version of WSL2 by running the following from a PowerShell prompt:

wsl --update

Also, from a Linux prompt, post the output from:

cat /etc/os-release

All that should help give us an idea what state your system is in, and what's happening when the Portainer installation is happening.

Portainer Install Debug log:

/config/portainer.debug.log 2026-01-10 10:29:59

+ [[ -z '' ]]
+ portainerHost=http
+ portainerAdminPassword=(Redacted)
+ [[ 12 -lt 12 ]]
++ cut -d : -f 2
++ htpasswd -nbB admin 1206ld_4Port
+ hashedPassword='$2y$05$Z6T7A0WK1ZiVwJF8Mmrsb.051dkLn3DScrmWFMxgvYeBlT3w27CA2'
+ portainerHttpPort=9000
+ portainerHttpsPort=9443
+ docker run -d -p 9000:9000 -p 9443:9443 --name portainer --restart always --pull always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest --admin-password '$2y$05$Z6T7A0WK1ZiVwJF8Mmrsb.051dkLn3DScrmWFMxgvYeBlT3w27CA2'
+ echo 'Portainer container created successfully'
+ sleep 2
++ curl -s -X POST http://http:9000/api/auth -H 'Content-Type: application/json' -d '{"Username":"admin", "Password":"Redacted"}'
++ jq -r .jwt
+ jsonWebToken=
++ curl -s -X POST http://http:9000/api/users/1/tokens -H 'Authorization: Bearer ' -H 'Content-Type: application/json' -d '{"password": "(Redacted)", "description": "olivetin"}'
++ jq -r .rawAPIKey
+ portainerToken=
++ jq -r .Id
++ curl -s -X POST http://http:9000/api/endpoints -H 'Authorization: Bearer ' -F Name=local -F EndpointCreationType=1
+ portainerEnv=
+ [[ -n '' ]]
+ echo -e '\nPortainer token creation and environment initialization failed...'

Latest WSL2 is installed:

PS C:\Windows\system32> wsl --update
Checking for updates.
The most recent version of Windows Subsystem for Linux is already installed.

OS Release info:

PRETTY_NAME="Ubuntu 24.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.3 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo

BTW, I can get to Portainer on port 9000, and (no surprise) it doesn't list any access tokens.

If you look again at the instructions, you'll see you're only supposed to supply the ip:port. You used an http:// before it (URL style). That's the problem. I should have caught this when you posted your Docker run command earlier.

Start over with that in mind, and you should be good.

Yes, no http:, very good catch. Since the script was running with no errors I didn't pick up on the URL versus IP error.

After fixing that, things went fine until the Create an OliveTin Stack in Portainer Project One-Click Action. The error is:

JSON response from http://nnn.nnn.n.nnn:9000/api/stacks/create/standalone/string?endpointId=1:
{"message":"failed to deploy a stack: compose up operation failed: Error response from daemon: invalid volume specification: 'C:/Users/Public/olivetin/data:/web:rw'","details":"Failed to deploy a stack: compose up operation failed: Error response from daemon: invalid volume specification: 'C:/Users/Public/olivetin/data:/web:rw'"}
false

FYI #1 my HOST_DIR var is set to C:/Users/Public, and that directory (/mnt/c/Users/Public) is full r/w according to my linux terminal.

FYI #2: Docker desktop says I have a halverneus/static-file-server:latest image but it is not shown as running under containers.

Rather than fight with using Windows paths in Linux (which carries a slight performance penalty anyways), I suggest using /data for your HOST_DIR value. Windows paths do work, but the valid structure has changed in Windows 11, and I don't have any WIndows 10 systems around anymore to test on.

This won't be running until you deploy the full version of olivetin without error.

Thanks for sticking with me, Mr. Dev Sir. I am up and running. (Simple) Health check looks good.

As you suggested I used /data for my HOST_DIR value. I poked around looking for this directory and couldn't find it. It is a question for me because with multiple containers, WSL, and Windows all on the same server, there are multiple root directories around. Should I be able to find /data, or will it show up only after I run certain olivetin actions?

Also, I note the ez-start container/image is still there, but not running. Is there any reason to keep it around?

Yes. Connect to your WSL Ubuntu instance using Windows Terminal and:

slayer@Convertible-PC3:~$ ls -la /data
total 52
drwxr-xr-x 11 root   root    4096 Mar 31  2025 .
drwxr-xr-x 24 root   root    4096 Jan  9 11:46 ..
drwxr-xr-x  5 slayer slayer  4096 Mar 20  2024 ah4c
drwxr-xr-x  6 root   root    4096 Mar 31  2025 channels-data
drwxr-xr-x  4 root   root    4096 Mar 31  2025 channels-dvr
drwxr-xr-x  8 slayer slayer  4096 Mar 26  2024 filebot
drwxr-xr-x  4 slayer slayer  4096 Mar 29  2024 mediainfo
drwxr-xr-x  5 root   root    4096 Mar 31  2025 mlbserver
drwxrwxrwt  5 root   root   12288 Jan  8 03:49 olivetin
drwxr-xr-x  7    911 docker  4096 Mar 19  2024 organizr
drwxr-xr-x  3 root   root    4096 Mar 27  2025 plex

Not sure if this works in Windows 10, but in Windows 11, this is also an option:

You can stop and remove the EZ-Start container. The image though is used for the full version of OliveTin as well, so it cannot be removed.

Thanks for letting my know about keeping the olivetin image. That is obviously important.

At login I was starting in my HOME directory, thus not finding /data.

Thanks again for your help.

I am attempting to to install Olivetin EZ-Start following the directions in Next Generation. I successfully installed Portainer (although I had to add an additional env to force API version 1.43(?) . When I run " OliveTin Environment Variables Generator/Tester", I get the following result.

TAG=latest
DOMAIN=
HOST_PORT=1337
CHANNELS_DVR_HOST=172.17.5.5
CHANNELS_DVR_PORT=8089
CHANNELS_CLIENTS=
ALERT_SMTP_SERVER=
ALERT_EMAIL_FROM=
ALERT_EMAIL_PASS=
ALERT_EMAIL_TO=
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=US/Mountain
HOST_DIR=/data
DVR_SHARE=/channels-dvr/recordings
LOGS_SHARE=/channels-dvr
TUBEARCHIVIST_SHARE=/channels-dvr/recordings
DVR2_SHARE=
LOGS2_SHARE=
TUBEARCHIVIST2_SHARE=
DVR3_SHARE=
LOGS3_SHARE=
TUBEARCHIVIST3_SHARE=
HOST_SFS_PORT=8080
FOLDER=/web
cat: /config/olivetin.token: No such file or directory
PORTAINER_TOKEN=
PORTAINER_HOST=172.17.5.5
PORTAINER_PORT=9443
PORTAINER_ENV=13370
PERSISTENT_LOGS=false

As I have searched and worked on this for 3-4 days, I'd appreciate any assistance for this nubie Docker user.

You should probably post your issue in the Olive Tin Next Generation topic.

On your Synology, did you create all of the required folders?

You can't use /data on Synology. Most use /volume1/docker/olivetin (which you need to create in advance). You also need to create /volume1/docker/olivetin/data. This is only required on Synology, as Docker is not allowed to create folders during spin-ups on this platform.

I doubt either of these paths are correct on Synology either.

Your Portainer token didn't get stored during the EZ-Start process, typically because the Action wasn't run, or failed for some other reason (maybe to do with your outdated version of Docker, which required you to downgrade Portainer). You can still create this manually in Portainer, using the dropdown in the upper-right corner that shows the username (admin).

Definitely not right, but not super important anymore. The correct value is usually 1, 2 or 3.

I have a Windows machine and have used docker desktop for a while for EPlusTV so I have some experience but not much. Can someone please help me get started on this?!!?! I am running the latest 4.60.1 docker desktop and have pulled in the latest bnhf/olivetin image.

First thing I've done is hit Run for bnhf/olivetin, box popped up to run a new container and for host port i typed in 1338 and clicked Run.

I now see the image running under containers with port 1338:1337

I next pull up Windows Powershell and paste in this above with my CDVR IP and i get an error

docker run -d --name olivetin-ezstart
--pull always
-p 1338:1337
-e EZ_START=-ezstart
-e CHANNELS_DVR=192.168.1.180:8089
-e TZ=$(readlink /etc/localtime)
-v /config
-v /var/run/docker.sock:/var/run/docker.sock
bnhf/olivetin:latest

The Error

At line:2 char:3
+ --pull always \
+   ~
Missing expression after unary operator '--'.
At line:2 char:3
+ --pull always \
+   ~~~~
Unexpected token 'pull' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingExpressionAfterOperator

I'm no expert either, but maybe try --pull=always

Nope

At line:2 char:3
+ --pull=always \
+   ~
Missing expression after unary operator '--'.
At line:2 char:3
+ --pull=always \
+   ~~~~~~~~~~~
Unexpected token 'pull=always' in expression or statement.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : MissingExpressionAfterOperator

I tried to move on to step 2, Go to the IP, port 1338. The Olive tin for channels menu comes up but when I click on "Install Portainer on your Docker Host" I get the following error:

failed to connect to the docker API at unix:///var/run/docker.sock; check if the path is correct and if the daemon is running: dial unix /var/run/docker.sock: connect: no such file or directory
Portainer container creation failed

I assume this is because Step 1 hasn't been completed...?

@troyhough

The main place you're going wrong here is that you're trying to use PowerShell. As shown in Post #1, the Docker run command needs to be entered from a WSL2 Linux command line. Specifically, whatever WSL2 Linux distro you have setup to integrate with Docker Desktop.

Before you start this though, I'd suggest going into Docker Desktop to stop and delete any running instances of Portainer (assuming you didn't already have Portainer installed) and OliveTin. In addition delete any images for both of those. Also, under volumes, delete portainer_data.

The above only applies if you're not already using Portainer. If you are, there's a different process.

I used Portainer a year or 2 ago briefly so it's gone. I can start from scratch no prob. Just don't what to use to enter the commands. I haven't set up anything per se. Command Prompt?

Do you have a WSL2 Linux distro like Debian or Ubuntu installed? If not, grab Debian from the Windows store, and once that's installed (use your same Windows username and password, if possible) confirm Docker Desktop has integration checked:

Then, using Windows Terminal, open a command prompt in Debian:

And paste the EZ-Start run command in...

Awesome! That worked (partially). Got these errors on the way...

Portainer token creation and environment initialization failed...
OliveTin::timeout - this action timed out after 60 seconds. If you need more time for

and

signal: killed

TAG=latest
DOMAIN=
HOST_PORT=1337
CHANNELS_DVR_HOST=192.168.180
CHANNELS_DVR_PORT=8089
CHANNELS_CLIENTS=
ALERT_SMTP_SERVER=
ALERT_EMAIL_FROM=
ALERT_EMAIL_PASS=
ALERT_EMAIL_TO=
UPDATE_YAMLS=true
UPDATE_SCRIPTS=true
TZ=America/Chicago
HOST_DIR=/data
DVR_SHARE=
LOGS_SHARE=
TUBEARCHIVIST_SHARE=
DVR2_SHARE=
LOGS2_SHARE=
TUBEARCHIVIST2_SHARE=
DVR3_SHARE=
LOGS3_SHARE=
TUBEARCHIVIST3_SHARE=
HOST_SFS_PORT=8080
FOLDER=/web
cat: /config/olivetin.token: No such file or directory
PORTAINER_TOKEN=
PORTAINER_HOST=192.168.180
PORTAINER_PORT=9443
PORTAINER_ENV=13370
PERSISTENT_LOGS=false
OliveTin::timeout - this action timed out after 20 seconds. If you need more time for

IP addresses always have 4 octets, not 3 like we're seeing here. You'll need to go back to square one, stopping and deleting the same things I mentioned before via Docker Desktop. This is a measure twice, cut once kind of thing -- and it's no fun to end up with a board that's too short. :slight_smile: