Docker on Turris Omnia

There was a question about docker in addition to LXC on Indiegogo. I wasn’t able to reply to the question there. Martin Strbačka replied that the problem with docker would be libgo. I’m not sure what he meant by that.

Go compiles for arm, on arm and docker runs on arm ( e.g. debian arm ports: https://packages.debian.org/search?keywords=docker.io ). The real problem will be users who expect they can run x86 containers on their arm router, but Martin didn’t even mention that in his short reply.

Any thoughts on the matter?

Cheers,
Paul

1 Like

(partly adressed to OP, partly to Turris Omnia team)

Runtime and kernel dependencies can be found here https://docs.docker.com/engine/installation/binaries/
Since the kernel is 4.x there should be no problems with kernel dependencies if nothing important is disabled.
Runtime dependencies should be fixable by the user, but I would prefer if they were available out of the box.
A guide for compiling Go for ARM devices can be found here http://blog.hypriot.com/post/how-to-compile-go-on-arm/ although it can’t be applied directly because it’s written for RPi 2.
They have some precompiled builds (links at the end of their post), so I would recommend testing if the appropriate one works.
If not …
Their Hypriot OS should be only there because of missing kernel features in other RPi 2 distributions - so Turris Omnia won’t need that - and runtime dependencies being pre installed. In case of Turris Omnia maybe it would better to cross compile instead of running a compiler on the router :smiley: Also I’m sure they will assist in building Go and Docker for Turris Omnia if someone emailed them … (they even put it on a Nvidia ShieldTV, although not by request but personal interest)

And of course: all images/software to be run in Docker containers on Turris Omnia need to be compiled for arm -
(if I’m wrong at some point please feel free to correct me)

The problems are described by Alex Samorukov in his GitHub repo: https://github.com/samm-git/turris-containers
There are also other attempts to port Docker to OpenWrt, so I guess it just needs some time. Right now, I think we don’t have capacities to do it ourselves, at least not any time soon.

Moreover, OpenWrt is not really ready for compilation on the device, it’d require a lot of changes in the buildroot, so you need to cross-compile the binaries in the OpenWrt buildroot or using any other way, which kinda reduces the options how you can get the Docker to Omnia.

1 Like

Go is designed to be easy to cross-compile. See http://dave.cheney.net/2015/08/22/cross-compilation-with-go-1-5 and https://github.com/laher/goxc

But I don’t know if docker cgo modules make it hard.

@Paul_Totterman I have a working port of the docker for the TurrisOS, so it should not be hard to do. There are few problems, however:

  1. My port compiled outside the openwrt build tree.
  2. Docker itself is not yet supporting architects in the HUB, so you should pick only containers for your specific arch. However with arm it should not be such a big issue as with OpenWRT PPC i am currently using

I am one of the backers, so if i will have a time - i will prepare working docker port for the Omnia, of course as non-official package (i am not CZNIC employee)

5 Likes

BTW, because router is using ARM and Go officially supports arm arch (and binaries are statically compiled, btw, so no libc deps) it should be much easier to build docker for it compared to original Turris. I will do this when my router will arrive :slight_smile: May be it will be also great idea to build own hub for the Omnia, with pre-configured docker containers for our architect.

1 Like

Ah, the Power-based P2020 explains the use of gccgo. Yes, the official Go compiler has pretty good support for ARM, let’s stick to that.

1 Like

Is there anything new regarding docker? This is the newest information I could find so far: https://wiki.openwrt.org/doc/howto/docker_openwrt_image

I’m interested in running ownCloud on the Turris Omnia - would be nice to be able to use the docker image https://store.docker.com/images/a66e9029-57d7-4aef-89b0-a98987e8dbf2

Well isnt this already possible? Owncloud needs, LAMP or alternative.

To my knowledge mysql already runs, (sadly no MariaDB), PHP5.x also already runs on it (no PHP7 yet), Apache off course also.

These are the minimum things if i am correct. This also could be a fact for Nextcloud as well.

System requirements Nextcloud: https://docs.nextcloud.com/server/10/admin_manual/installation/system_requirements.html

Openwrt lamp: Set up a LAMP stack on OpenWrt [Old OpenWrt Wiki]

About php7: GitHub - kea/openwrt-php7-package: OpenWRT PHP7 packages and Onion Omega PHP7 module

Thanks!

After some reading, Nextcloud looks like the way to go. I’ll check it out! Need to order a mSATA SSD too :slight_smile:

To be honest, i see no future for owncloud anymore. The core developers as well the founder owncloud, left owncloud and started Nextcloud. I am rather suprised that you missed this. Were you living under a rock XD.

Nextcloud is going to be the way i think.

I am also planning to buy a mSATA, but those guys are seriously expensive :(. I plan to buy the Samsung 840 evo 1 TB.

If you’re at it, maybe an idea to also run some torrent “server” on it also. I mean Omnia is day and night on, so why not use it for the better if you also have a mSATA SSD in it right?

Transmission is a good torrent applications(webbased possibility), although i am planning my self to use Deluge(also webbased possibility) within a Ubuntu Linux container, because the package has some issues with openwrt.

On your desktop you can have a plugin that sends the torrents directly to the torrent client on your omnia and off course do the necessary setup that it sends you an email when it is done downloading the torrent. Or/also you can maybe use Sabnzbd(webbased) for Newsgroups.

BTW, i am not sure which version of the Omnia you got. Altough i think 1 GB is more then enough, but i myself ordered the 2 GB version.

I’ve no idea how I missed it - started a new job and didn’t read much IT stuff.

I’m not using torrent as much as I used to. But running a TOR node is one thing I’ve in mind because I think TOR is very very important for “us” (as a society).

Thanks for your ideas :slight_smile:

I’ve got the 2 GB version to be safe.

Do keep in mind that if you are planning to use a TOR-node, that you will be banned/blocked from many websites.

I had my NAS running 24/7 so i decided to also give something back to society, like how you are thinking. However, my ip was being blocked on some websites. TOR sadly is being used A LOT by spammers/spambots, so your ip is also being used for that. So that is why some websites have decided to ban the ip addresses used as TOR-nodes.

I would like to ask if someone (samm_git?) has any news regarding docker on Turris as M4x question was took discussion different way.

Thanks

I’m certainly interested in getting info on progress on this, if any, or to add my name to the list of those interested in this feature.

I have tried adding an Ubuntu environment in LXC, and then installing Docker in it, but that fails with “Error starting daemon: madvise: function not implemented”.

I haven’t found any openwrt packages for Docker. My openwrt foo is very weak, and I have no idea where to go to find non-stock packages for openwrt. If one exists, I’m hoping someone links it. (Sorry if you did already and I missed it…)

I am getting this error: madvise: function not implemented when running ubuntu (16.10) on lxc and trying to run a simple wiki app: https://github.com/peterhellberg/wiki

App did compile with golang 1.6.3 but doesn’t run and exits with the error: madvise: function not implemented

It seems that Omnia’s kernel is not compiled with CONFIG_ADVISE_SYSCALLS option. You could ask CZ.NIC if they would add that to Omnia’s kernel.

@sairon could you be kind to talk to your team about including: CONFIG_ADVISE_SYSCALLS in the next kernel release because I cannot even run a simple golang wiki inside of ubuntu (LXC) -> https://github.com/peterhellberg/wiki

I second this, imap daemon dovecot also uses madvise().

Could someone from dev team explain why is it a big deal to enable CONFIG_ADVISE_SYSCALLS in the kernel?