Exec runner - 404 Error on Ping

I’m rather new to drone and I’m trying to compile server & baremetal runner from source and install it on archlinux.
For the server, I mainly followed the OSS build instructions and set it up with systemd. I successfully set up the integration with the gitea instance on the same host and a drone pipeline, which is now pending.

I then tried to setup https://github.com/drone-runners/drone-runner-exec the same way by compiling the master branch with go build, generating the systemd service and setting up the environment variables. When I start the runner, it tries to connect to the server and throws a row of errors:

time="2020-08-23T01:24:16+02:00" level=error msg="cannot ping the remote server" error="404 page not found\n"
time="2020-08-23T01:24:17+02:00" level=error msg="cannot ping the remote server" error="404 page not found\n"
time="2020-08-23T01:24:18+02:00" level=error msg="cannot ping the remote server" error="404 page not found\n"

When I enable the http dump, I get the following:

Aug 23 01:26:14 basil drone-runner-exec[83729]: POST /rpc/v2/ping HTTP/1.1
Aug 23 01:26:14 basil drone-runner-exec[83729]: Host: 192.168.1.6:8080
Aug 23 01:26:14 basil drone-runner-exec[83729]: User-Agent: Go-http-client/1.1
Aug 23 01:26:14 basil drone-runner-exec[83729]: Content-Length: 0
Aug 23 01:26:14 basil drone-runner-exec[83729]: X-Drone-Token: my-redacted-token
Aug 23 01:26:14 basil drone-runner-exec[83729]: Accept-Encoding: gzip
Aug 23 01:26:14 basil drone-runner-exec[83729]: 
Aug 23 01:26:14 basil drone-runner-exec[83729]: HTTP/1.1 404 Not Found
Aug 23 01:26:14 basil drone-runner-exec[83729]: Content-Length: 19
Aug 23 01:26:14 basil drone-runner-exec[83729]: Content-Type: text/plain; charset=utf-8
Aug 23 01:26:14 basil drone-runner-exec[83729]: Date: Sat, 22 Aug 2020 23:26:14 GMT
Aug 23 01:26:14 basil drone-runner-exec[83729]: X-Content-Type-Options: nosniff
Aug 23 01:26:14 basil drone-runner-exec[83729]: 
Aug 23 01:26:14 basil drone-runner-exec[83729]: time="2020-08-23T01:26:14+02:00" level=error msg="cannot ping the remote server" error="404 page not found\n"

Env vars of the drone server:

DRONE_GITEA_CLIENT_ID=someid
DRONE_GITEA_CLIENT_SECRET=giteasecret
DRONE_GITEA_SERVER=http://192.168.1.6:3000
DRONE_DATABASE_DATASOURCE=/var/lib/drone-server/database.sqlite
DRONE_RPC_SECRET=my-redacted-token
DRONE_SERVER_HOST=192.168.1.6:8080
DRONE_SERVER_PROTO=http

The env vars of the exec runner:

# deactivating those three lines does not make a difference
DRONE_HTTP_BIND=:3034
DRONE_HTTP_HOST=192.168.1.6
DRONE_HTTP_PROTO=http

DRONE_RPC_DUMP_HTTP=true
DRONE_RPC_HOST=192.168.1.6:8080
DRONE_RPC_PROTO=http
DRONE_RPC_SECRET=my-redacted-token
DRONE_RUNNER_CAPACITY=2
DRONE_RUNNER_NAME=Basil Baremetal
DRONE_TRACE=true
DRONE_DEBUG=true
DRONE_LOG_FILE=/var/lib/drone-runner-exec/logfile

I made sure that my firewall lets the relevant ports through (8080,3000,3034) and there are no reverse proxies active currently (I plan to add one in the future though).

I also tried curl http://192.168.1.6:8080/rpc/v2/ping --data '' which also returned 404 page not found.

So I traced it down to server-oss.go and was surprised. I thought that there are only two editions, OSS and Enterprise (and limits about runners are not really discussed) but now I find that there is also a Non-Commercial-licensed “Edition” (which I could use since this is just for a homelab).

I also have some questions about that. The documentation says nothing about the three different executables that are in this “edition”. what does e.g. drone-controller do? How do I have to set it up(path, is it a daemon, etc? What do I have to configure(e.g. which env vars)? What is drone-agent? is that just another runner? what are the differences to https://github.com/drone-runners/drone-runner-docker? And so on. I get that running drone in docker is preferred but I like to understand what is running on my machines and not having useless layers in there.

Another thing that really, really irks me that nothing about the OSS limitations is even mentioned once in the docs. You could search for “community” or “enterprise” and nothing relevant props up. Configuring the OSS version also seems to be missing. Where do I configure the OSS runner/agent?

So far, the OSS version really seems more of a trial version to me than the official trial period of 32 days. Nothing of value is in there (for me anyway). No problem with that but please document it.

Am I understanding correctly that the OSS version does not support runners?!

I’m trying to get a non-docker drone-OSS server (which seems to be working) to work with an exec runner and i’m running into the same problem that /rpc/v2 does not seem to exist.

Correct. The OSS version is optimized for single machine installations and has an embedded docker runner. See https://www.drone.io/enterprise/opensource/#features

Wait, am I reading this right? So the OSS version supports no runners? Meaning, the OSS version only works with an embedded docker runner that runs on the same machine the web interface runs? There is no way to run a ssh or exec runner using the OSS version?

Guys, look at the google search results for this error, and how many people run into this exact issue so late in their setup process. They pour hours of their day(s) looking at CI solutions, see drone and comb through the docs and go “nice, this seems pretty awesome, lets try this out”. They see all these mentions of runners in the docs, look at the official guide and see how the setup involves setting up an explicitly separately running runner. Nowhere, not in one place in the docs, does it make a mention of such a limitation. Not to mention where (somewhere, I forgot where exactly) there are recommendations against running a runner on the same machine as machine as the web UI. And then when things don’t work, all you see is;

level=error msg="cannot ping the remote server" error="404 page not found\n

So you look into how on earth there are connectivity issues, and then run CURL by hand, use httpie, and see, huh, there is indeed a 404. Google around, and find this post, and realize they wasted hours of their time. Sure, there is the website, but to find this you have to explicitly go to the enterprise tab and compare the OSS and enterprise versions. Fair, you are free to make money with your product how you wish, it’s your product, but for all that is holy, please post somewhere in the docs the discrepancy for such a core part of your product. If anything, at least have the logs show such a 404 may be expected when using the OSS version due to lack of support.

Regardless, is there any hope for an “enterprise-lite” version that allows runners (say for the reddit.com/r/homelab community and similar)? Even if it’s limited to, say, two runners in total would be totally fine, and cost a smaller sum, or at least having the pricing visible such that it’s not in the usual “if you have to call us for pricing, chances are it will cost a small fortune” territory, would do a lot of good.

Again, you are free to segment your product however you choose. But please, respect users time, and don’t guide users to set up runners in your docs without making a single mention that runners aren’t supported in the OSS version.

The trial license for the enterprise edition (LICENSE) has a waiver for small businesses and installations, so for a homelab you can just build drone normally (see BUILDING, without the nolimit and oss tags). The runners have similar terms.

So there is a homelab version. But, following the tradition, this is not documented.