Issue installing Argon2_elixir (can't compile comeonin)

Hey, I’m pretty new to elixir and am following along with Programming Phoenix >1.4. I’m trying to get argon_2 working (seems like the successor to comeonin, which is what the book recommends).

Seeing the following issue, and am not sure where to go from here. Any thoughts?

My info:
Mac OS 10.14.6
Erlang/OTP 22 [erts-10.6.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]
Elixir 1.10.2 (compiled with Erlang/OTP 22)

Full Error below

** (Mix.Error) Could not compile Comeonin.
Please make sure that you are using Erlang / OTP version 18.0 or later
and that you have a C compiler installed.
Please follow the directions below for the operating system you are
using:
Mac OS X: You need to have gcc and make installed. Try running the
commands gcc --version and / or make --version. If these programs
are not installed, you will be prompted to install them.
Linux: You need to have gcc and make installed. If you are using
Ubuntu or any other Debian-based system, install the packages
build-essential. Also install erlang-dev package if not
included in your Erlang/OTP version.
See https://github.com/riverrun/comeonin/wiki/Requirements for more
information.
/Users/steve/Sites/rumbl/deps/comeonin/mix.exs:44: Mix.Tasks.Compile.Comeonin.build_error/1
/Users/steve/Sites/rumbl/deps/comeonin/mix.exs:19: Mix.Tasks.Compile.Comeonin.run/1
(mix 1.10.2) lib/mix/task.ex:330: Mix.Task.run_task/3
(mix 1.10.2) lib/mix/tasks/compile.all.ex:76: Mix.Tasks.Compile.All.run_compiler/2
(mix 1.10.2) lib/mix/tasks/compile.all.ex:56: Mix.Tasks.Compile.All.do_compile/4
(mix 1.10.2) lib/mix/tasks/compile.all.ex:27: anonymous fn/2 in Mix.Tasks.Compile.All.run/1
(mix 1.10.2) lib/mix/tasks/compile.all.ex:43: Mix.Tasks.Compile.All.with_logger_app/2
(mix 1.10.2) lib/mix/task.ex:330: Mix.Task.run_task/3ElixirLS

steves-mbp:rumbl steve$ gcc --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

steves-mbp:rumbl steve$ make --version
GNU Make 3.81
Copyright © 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i386-apple-darwin11.3.0

No, not really, it is the recommended password hashing function for comeonin, and depends on it.

It would be nice to know how You did that… with asdf? packages? other?

Do You have XCode installed?

That sounds like a Mac related issue :slight_smile:

1 Like

Hey,

I installed elixir via homebrew as elixir-lang.org suggested. This installed Erlang along with it.

I have Xcode and apples developer tools, etc installed installed as well.

Have you tried running make manually in the argon2_elixir directory?

Most people prefer to use a package manager…

I also prefer to use asdf-vm.

You probably can find some topics to help You if You choose this installation path.

1 Like

I just tried to clone argon2_elixir recursively (to pick up the submodules) and that seems to break (permissions error). I’ll dig in a little more, but I don’t think it’s a Mac issue at this stage. Error I got was:

 !  ~/c/e/temp  git clone https://github.com/riverrun/argon2_elixir.git --recursive   Sat 28 Mar 2020 11:47:22 AWST
Cloning into 'argon2_elixir'...
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 657 (delta 7), reused 14 (delta 5), pack-reused 640
Receiving objects: 100% (657/657), 113.82 KiB | 282.00 KiB/s, done.
Resolving deltas: 100% (371/371), done.
Submodule 'argon2' (git@github.com:riverrun/phc-winner-argon2.git) registered for path 'argon2'
Cloning into '/home/john/code/elix/temp/argon2_elixir/argon2'...
Warning: Permanently added the RSA host key for IP address '52.64.108.95' to the list of known hosts.
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'git@github.com:riverrun/phc-winner-argon2.git' into submodule path '/home/john/code/elix/temp/argon2_elixir/argon2' failed
Failed to clone 'argon2'. Retry scheduled
Cloning into '/home/john/code/elix/temp/argon2_elixir/argon2'...
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'git@github.com:riverrun/phc-winner-argon2.git' into submodule path '/home/john/code/elix/temp/argon2_elixir/argon2' failed
Failed to clone 'argon2' a second time, aborting

1 Like

Just running make in that directory produces:

make: Nothing to be done for `all'.

So I manually cloned https://github.com/riverrun/phc-winner-argon2.git into an argon2 subdirectory of argon2_elixir, ran make and it built ok. For me it looks like there’s something weird with bringing in the git submodule automatically.

EDIT: Try git clone https://github.com/riverrun/argon2_elixir.git --recursive - if that complains then you might have to do some git kung-fu to get dependencies with git submodules to work properly. There’s a discussion here that might help: https://github.com/facebookresearch/deepmask/issues/23

1 Like

So if I’m understanding you right, you’re saying to clone the repo and replace the deps/argon2_elixir directory with that?

Before doing anything manually in deps I’d focus on figuring out the underlying issue. I suspect it is one of two - either broken git (in turn breaking mix), or broken make. To troubleshoot, I’d suggest the following

  1. git/mix isn’t bringing down deps/argon2_elixir properly - check whether the there is an argon2 subdirectory and that it has plenty of c files - if so, the argon2_elixir is more than likely downloading ok. If not, this is likely a git problem rather than a mix problem. You can isolate this by trying to clone into a fresh directory using the --recursive option. I think this is the most likely problem. Once you have it resolved (e.g. by creating appropriate ssh key as per the link to the discussion I posted), you should find mix behaves itself for deps with git submodules. You may need to blow away deps/argon2_elixir and re-fetch.
  2. make is broken on your machine. Again, the best way to isolate issues here is to clone the argon2_elixir repo with the --recursive option into a new directory. Change into that directory and run make. If if complains or says it has nothing to do you have a problem there. We will need more info to help troubleshoot that.
3 Likes

Really appreciate all the help here. Looking at your post:

  1. deps/argon2_elixir does contain a folder argon2. Within that folder there is an include folder that has a single file, argon2.h, and a src folder which has 14 files most of which are .c files, with some .h files.

Trying number 2 now, and will update with the results

EDIT: Thinking your git comment was right, as this is in the output when I tried recursively cloning argon2_elixir:

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
fatal: clone of ‘git@github.com:riverrun/phc-winner-argon2.git’ into submodule path ‘/Users/steve/Sites/argon2_elixir/argon2’ failed
Failed to clone ‘argon2’. Retry scheduled

Ok so after adding an SSH key I was able to clone the repo properly. From within that directory I ran make and got

steves-mbp:argon2_elixir steve$ make
mkdir -p priv
cc -pthread -O3 -Wall -g -Iargon2/include -Iargon2/src -Ic_src -I"/usr/local/Cellar/erlang/22.2.8/lib/erlang/erts-10.6.4/include/" -dynamiclib -undefined dynamic_lookup argon2/src/argon2.c argon2/src/core.c argon2/src/blake2/blake2b.c argon2/src/thread.c argon2/src/encoding.c argon2/src/ref.c c_src/argon2_nif.c -o priv/argon2_nif.so
steves-mbp:argon2_elixir Steve$

Since this didn’t complain about any errors, I took it that mix was working. So I went back to my project, and completely removed argon2_elixir and comeonin. I then re-added argon2_elixir and ran mix deps.get and mix deps.compile and got the following output:

steves-mbp:rumbl steve$ mix deps.compile
===> Compiling ranch
===> Compiling telemetry
==> comeonin
Compiling 4 files (.ex)
Generated comeonin app
==> argon2_elixir
mkdir -p priv
cc -pthread -O3 -Wall -g -Iargon2/include -Iargon2/src -Ic_src -I"/usr/local/Cellar/erlang/22.2.8/lib/erlang/erts-10.6.4/include/" -dynamiclib -undefined dynamic_lookup argon2/src/argon2.c argon2/src/core.c argon2/src/blake2/blake2b.c argon2/src/thread.c argon2/src/encoding.c argon2/src/ref.c c_src/argon2_nif.c -o priv/argon2_nif.so
Compiling 3 files (.ex)
Generated argon2_elixir app
===> Compiling cowlib
===> Compiling cowboy

Everything seemed to work fine, but I’m still seeing the error, could not compile comeonin

2 Likes

So I noticed that the simple CRUD pages in my app were still working, which I thought was weird if there was a compile issue. I moved on in the chapter of the book, and after changing some of the methods to use Argon2 instead of Comeonin. It looks? like it’s successfully hashing passwords…

i> ex(2)> changeset = User.registration_changeset(%User{}, %{username: “max”, name: “Max”, password: “123 super secret”})

#Ecto.Changeset<
action: nil,
changes: %{
name: “Max”,
password: “123 super secret”,
password_hash: “$argon2id$v=19$m=131072,t=8,p=4$4CG3VexFrxrSapxuAa7AuQ$JW51t4KA/9XIlFOyASNBKTMEiizO3SOHJgTh3RmEXxg”,
username: “max”
},
errors: [],
data: #Rumbl.User<>,
valid?: true

Is it possible that it’s just my linter complaining and that there is actually no problem?

Ok after to test my hunch I removed the VSCode plugin that I was using, restarted VSCode, installed the plugin again, and now there are no errors.

I think the ssh key was a key point, but not sure why I needed to uninstall and reinstall my editor plugin.

For reference this was ElixirLS fork. https://marketplace.visualstudio.com/items?itemName=elixir-lsp.elixir-ls