On Sunday, 11 March 2018 at 11:10:09 UTC, Tamas wrote:
On Thursday, 8 March 2018 at 22:53:11 UTC, aberba wrote:
On Thursday, 8 March 2018 at 09:35:08 UTC, Andrew Benton wrote:
On Thursday, 8 March 2018 at 07:54:29 UTC, Jacob Carlborg wrote:
On Thursday, 8 March 2018 at 07:20:53 UTC, Radu wrote:

This guys says that vide.d works https://forum.dlang.org/thread/[email protected]

Yes, it's pretty straightforward:

1. Build on Ubuntu, or some other dist
2. Statically link the whole binary with LDC, then you don't need to use Musl
3. Run it on Alpine

--
/Jacob Carlborg

Looks like that works out much nicer than using alpine as the first stage right now. I'm not sure anyone will be too upset about the extra 7MB.

Building directly in alpine will simplify automated builds too.

Simple Vibe.d app talking to Redis, packed into docker containers:
https://github.com/tam4s/hello-redis

The takeaway is that I could not use Alpine as a host image, because I could not build the app statically on ubuntu.

warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

I've put up a new binary release of ldc 1.9 for Alpine, which fixes the vibe.d issues by pulling in two upstream commits from druntime, adds druntime and Phobos as shared libraries, and includes dub and rdmd:

https://github.com/ldc-developers/ldc/releases

I tested by unpacking that release in an Alpine VPS, adding its bin/ to my path, and simply running the following:

dub fetch vibe-d
dub build vibe-d

The list of Alpine packages needed to run ldc are listed in the release notes. You can also cross-compile using the regular linux build of ldc by using ldc-build-runtime, the included tool to rebuild the stdlib for other platforms, and these instructions from the wiki:

https://wiki.dlang.org/Building_LDC_runtime_libraries#Usage_for_cross-compilation

I'm looking at adding a flag to dmd to enable building for the Musl C runtime:

https://github.com/dlang/dmd/pull/8020

While the Musl port is mostly there, it appears that yshui didn't bother porting all of druntime, so there may still be other dub packages that need other missing C declarations. However, I'm done working on this port, beyond finishing off the above pull and the druntime pull linked from the release notes, as I don't use Alpine, containers, or microservices. I simply chipped in because I have porting experience and thought I could push D for microservices a bit farther along. I'll keep putting out official builds of ldc for Alpine though, as long as there's demand for them.

If you'd like to use D in Alpine containers, now's the time to contribute to whatever else is missing. A good idea of the current status can be found in the first post of the dmd pull linked above.

This may be a good project for the hackathon, as it's mostly polishing up a bunch of small things.

Reply via email to