Provisional snap for DUB (D language package/build manager)

Sergio Schvezov sergio.schvezov at
Sat Oct 29 14:59:33 UTC 2016

El 27/10/16 a las 17:13, Joseph Rushton Wakeling escribió:
> On 27/10/16 08:37, Didier Roche wrote:
>> It would be great to have D support! Thanks for working on that :)
> Great to hear :-)
> Just to be clear, it's already in principle possible to package D 
> applications as snaps; DUB support isn't needed, but is very helpful, 
> because a lot of D projects do use it.
>> I'm going to try to answer to some of your questions, but I'm sure
>> Sergio (CCed) would be able to give deeper insights on some parts as
>> being the snapcraft upstream.
> Thanks very much.  I'll respond to some of your suggestions below ...
>> I would really advise going the route. Doing a custom snapcraft
>> plugin as you started is definitively the right path.
> Yes, agreed.  I was curious about the `` option not because I 
> think it's a good idea, but because I was thinking: "What if it was 
> the only build option for this project?"  I'd like to know how to 
> handle that situation if I ever encounter it in another project.
>> From your questions and the statement that there is no explicit install
>> steps, I think you mean that D programs just build in tree (snapcraft
>> tries to encourage builds out of trees) and then, the install step for
>> people is to copy the resulting binaries and assets manually?
> Yes, exactly.  It's not _entirely_ as bad as it sounds because each 
> project's `dub.json` config file can define a `targetPath` variable 
> where built programs will be placed.  The plugin can use that if 
> available.
>> If so, I can see 2 paths here:
>> - either you expect people to explicitely list assets and binaries that
>> should be installed (this could again be a custom option of your plugin)
> This is pretty much the direction I've taken for now.

The make plugin has an `artifacts` option (if you inherit from it you 
get it for free). If necessary we can move this to the base plugin or 
even as a core capability. Used for projects that are older or do not 
follow GNU conventions of having an `install` target.

>> - either you try to be starter, as you told, and detect extra files
>> being created in the parts/<part_name>/build. There is no built-in
>> features in snapcraft for this as far as I know, but, it would be quite
>> easy to build it as part of your plugin: list at the start of the build
>> phase files in parts/<part_name>/build and redo the same thing after the
>> build. Then, in the install phase, use that list (that you store on
>> disk) to copy newly created content in parts/<part_name>/install. Then,
>> snapcraft will pick it up from there. Note that I think you still need a
>> manual options for your users to list eventual assets (or they can use
>> the dump plugin in another part).
> Nice thought.  I'll try to look into that.
> There is a 3rd option which could be for the plugin to read the 
> `dub.json` config file of the project being built, and parse that to 
> discover the targets that will be built, but honestly that feels like 
> duplication of effort, and it would probably be better to encourage 
> the DUB developers to provide an `install` option.
>> If you prefer to copy everything and have your users filtering from the
>> stage area to the prime area, you can use the "snap:" stenza (don't use
>> filesets for now if you don't plan to repeat the file list name).
> Yup, this is the option I use now.
>> I would advise in a first step to consider the D compiler used by DUB to
>> build other things to be part of your snap. You want to control the
>> version in it and consider it as part of your dependencies you need in
>> your snap. We can discuss later about an interface, but I would really
>> go that way as a first step.
> Yup, bundling the compiler into the snap is the way I have gone as a 
> first step.
> However, the real issue is that DUB is supposed to provide the user 
> with the option to choose the D compiler to use.  It's tolerable as a 
> first step to just give one option bundled, but ideally the user would 
> be able to invoke DUB and specify to it any compiler they like -- 
> whether a snap-packaged one, or one installed on the host system.
> I was assuming that allowing the user to (optionally) specify a 
> compiler of choice via an interface would be easier to achieve, but I 
> don't know if that's true.
>> There is no way right now on definining new interfaces apart from
>> building them in snapd, and so, use your own local version. (That's the
>> reason why I advise you to not bother with this right now, let's take an
>> easier path first, figure the rest, and then, we can rediscuss)
> Well, I already took the easier path, so that's why I raised the 
> discussion of alternatives ... :-)
>> I would look at /var/log/syslogs. Apparmor and seccomp denials are
>> listed there. Note that if you didn't already, you should really start
>> developping your snap in devmode. That way, it will get confinment out
>> of the equasion to get your relocatable code and dependencies working.
>> Then, we can turn on confinement and figure out those issues to be able
>> to publish in the stable channel.
> Yea, I probably should have started with devmode.  Thanks for the 
> advice about syslogs; I'll check it out and see what I can find.

snap install snappy-debug, it will provide nice hints.

>> Don't make your snap calling other snap endpoints. It's better from your
>> own snap code to ensure that your local ldc2 is in your snap $PATH, and
>> call ldc2 directly (it will then use the parent process confinment
>> profile, of course). I think that will help you a little bit more to
>> control what you are calling at, and how.
> Well, as I said, it's less about ensuring there is a local LDC, and 
> really more about finding a way to ensure the user can get DUB to work 
> with any D compiler on their system, whether installed on the host 
> system, in another snap, or in the DUB snap itself.
> I definitely don't intend for the DUB snap to have a hard dependency 
> on another snap's existence, if that's what you were concerned about.
> Thanks again for the thoughts and feedback -- I'll look into the 
> AppArmor side of things soon.  Meanwhile, congratulations on your own 
> very nice video on snap packages! :-)
> Best wishes,
>     -- Joe

More information about the Snapcraft mailing list