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 Requirements · riverrun/comeonin Wiki · GitHub 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 (C) 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.
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
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
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
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.
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.
Really appreciate all the help here. Looking at your post:
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
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:
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…