dev_mode I was using a
layout so that
erl could fine
erlexec without modification:
Erlang is built and installed with
--prefix=/usr which is why the layout creates a symlink for
/usr/lib/erlang, it is where
erl script will look for the
layout is not supported by classic confinement I’m wondering what is the best alternative for this snap to work?
Can you just use
Is that standard practice? I had thought that a bad solution since
current is a symlink and could be pointed to a different install. But if running a non-current version is supposed to not work I suppose it would work. Is that the case?
ERL_LIBS make any difference? It looks like, from a very quick scan of the docs so I might be very wrong, this environment variable sets the library path. Try setting it to
ERL_LIBS is for discovering Erlang libraries that are only loaded after initial boot which requires finding
You can see how the
erl script is generated when compiling Erlang and how it references the install directory directly here:
You could manually patch that file before building with the following substitution:
sed -i 's|ROOTDIR="%FINAL_ROOTDIR%"|ROOTDIR="$SNAP/%FINAL_ROOTDIR%"|' erl.src.src
current symlink will always be there and point to a valid install when your snap is installed and enabled (except for bugs of course), so I would say try this and see what happens. It’s possibly you might run into issues down the road installing this snap on distros that don’t use
/snap/... and instead have
/var/lib/snapd/snap/... but I’m not sure.
Ok. I had done that in my very first snap attempt and it worked for
erl at least. I worried there might be other places that reference the install directly and then discovered
layouts in the docs so moved on with that.
There must be other snaps that build projects don’t work if where they are told to install with
--prefix is different from where they actually are on the filesystem? Is patching the strategy usually used? I couldn’t find anything in the docs for what I thought would be a common issue – well except for
I’ll move forward with patching the
erl script for now.
So the use of patching the script to use
$SNAP breaks when the snap is used to build other snaps.
I was creating an Elixir snap using the Erlang snap as a
build-snap depedency which lead to:
/root/parts/elixir/install/usr/bin/erl: 29: exec: /snap/snapcraft/4007/usr/lib/erlang/erts-10.6.4/bin/erlexec: not found
Which makes sense, in the case of building a snap the
$SNAP path is
So I may have to switch to use
/snap/erlang/current for now, until a better solution is known.
Is there at least a environment variable that is set for where
snap directory is in case it isn’t in the root at
Also concerned about how this will work with parallel installs?
Oh wait, duh, if I’m going this direction I might as well just make the path by constructing it from the location of the script itself.
So I’m going to try to use the
(path to the script)/../lib/erts-10.6.4/bin.