Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

THIS LIBRARY IS NOT COMPATIBLE WITH ERLANG/OTP 25 #744

Open
roychowdhuryrohit-dev opened this issue May 27, 2022 · 23 comments
Open

THIS LIBRARY IS NOT COMPATIBLE WITH ERLANG/OTP 25 #744

roychowdhuryrohit-dev opened this issue May 27, 2022 · 23 comments

Comments

@roychowdhuryrohit-dev
Copy link

roychowdhuryrohit-dev commented May 27, 2022

Steps to reproduce

Producing a release using Distillery shows error.

Verbose Logs

Screenshot 2022-05-26 at 20 36 07

Description of issue

  • What are the expected results?
  • It should successfully produce release.
  • What version of Distillery?
  • 6700edb
  • What OS, Erlang/Elixir versions are you seeing this issue on?
  • All, Erlang/OTP 25
@roychowdhuryrohit-dev roychowdhuryrohit-dev changed the title THIS LIBRARY IS NOT COMPATIBLE WITH ERLANG/OTP 25 THIS LIBRARY IS NOT COMPATIBLE WITH ERLANG/OTP 25 ( commit 6700edb017804e51aec14dedb8df888d1db4e63c) May 27, 2022
@roychowdhuryrohit-dev roychowdhuryrohit-dev changed the title THIS LIBRARY IS NOT COMPATIBLE WITH ERLANG/OTP 25 ( commit 6700edb017804e51aec14dedb8df888d1db4e63c) THIS LIBRARY IS NOT COMPATIBLE WITH ERLANG/OTP 25 May 27, 2022
@brooksmtownsend
Copy link

brooksmtownsend commented Jun 2, 2022

Getting this as well, which makes our MacOS builds that install via brew (and brew doesn't let you downgrade versions, ugh) unusable

Just wanted to echo that I'm running into this too for wasmCloud/wasmcloud-otp#409, and would be happy to help test a fix

cc @bitwalker / @mobileoverlord since this issue has been open for a bit

@narrowtux
Copy link

@brooksmtownsend this is off-topic, but I can recommend using asdf for managing developer dependencies where you can pin on the exact version you need, per project even.

@brooksmtownsend
Copy link

@narrowtux Yeah asdf is pretty fantastic and what I ended up falling back to, the reason I preferred brew was simply for the speed of installation in CI builds

@ziyouchutuwenwu
Copy link

similar for me

MIX_ENV=prod mix distillery.release

output

MIX_ENV=prod mix distillery.release                       
Generated demo app
==> Assembling release..
==> Building release demo:0.1.0 using environment prod
==> Including ERTS 13.0.3 from /usr/lib/erlang/erts-13.0.3
==> Release failed: no match of right hand side value: {:error, :eacces}
    (distillery 2.1.1) lib/distillery/releases/assembler.ex:863: Distillery.Releases.Assembler.create_RELEASES/2
    (distillery 2.1.1) lib/distillery/releases/assembler.ex:290: Distillery.Releases.Assembler.write_release_scripts/1
    (distillery 2.1.1) lib/distillery/releases/assembler.ex:50: Distillery.Releases.Assembler.assemble/1
    (distillery 2.1.1) lib/distillery/tasks/release.ex:130: Mix.Tasks.Distillery.Release.do_release/2
    (mix 1.13.2) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
    (mix 1.13.2) lib/mix/cli.ex:84: Mix.CLI.run_task/2
    (elixir 1.13.2) src/elixir_compiler.erl:73: :elixir_compiler.dispatch/4
    (elixir 1.13.2) src/elixir_compiler.erl:58: :elixir_compiler.compile/3

@randysecrist
Copy link

Also seeing this;

==> Including ERTS 13.0.4 from /opt/homebrew/Cellar/erlang/25.0.4/lib/erlang/erts-13.0.4
==> Release failed: no match of right hand side value: {:error, :eacces}
    (distillery 2.1.1) lib/distillery/releases/assembler.ex:863: Distillery.Releases.Assembler.create_RELEASES/2
    (distillery 2.1.1) lib/distillery/releases/assembler.ex:290: Distillery.Releases.Assembler.write_release_scripts/1
    (distillery 2.1.1) lib/distillery/releases/assembler.ex:50: Distillery.Releases.Assembler.assemble/1
    (distillery 2.1.1) lib/distillery/tasks/release.ex:130: Mix.Tasks.Distillery.Release.do_release/2
    (mix 1.13.4) lib/mix/task.ex:397: anonymous fn/3 in Mix.Task.run_task/3
    (mix 1.13.4) lib/mix/cli.ex:84: Mix.CLI.run_task/2
    (elixir 1.13.4) src/elixir_compiler.erl:73: :elixir_compiler.dispatch/4
    (elixir 1.13.4) src/elixir_compiler.erl:58: :elixir_compiler.compile/3

@andyleclair
Copy link

+1 here

@cplotter
Copy link

+1

@tensor-programming
Copy link

same, it seems to be due to the changes to the release handler in erlang otp 25.

@carflynn2009
Copy link

Same issue here

erlang - 25.0.4
elixir - 1.14.0-otp-25
OS - MacOS

Downgrading is not an option for me as we need the latest version of Elixir

==> Assembling release..
==> Building release management_portal_umbrella:0.1.0 using environment prod
==> Including ERTS 13.0.4 from /Users/carlflynn/.asdf/installs/erlang/25.0.4/erts-13.0.4
==> Packaging release..
==> Failed to archive release: _build/prod/rel/management_portal_umbrella/releases/RELEASES: no such file or directory

@lkananowicz
Copy link

+1

@austinsalonen
Copy link

austinsalonen commented Oct 14, 2022

--- a/lib/distillery/releases/assembler.ex
+++ b/lib/distillery/releases/assembler.ex
@@ -860,7 +860,7 @@ defmodule Distillery.Releases.Assembler do
     # no work around for this
     old_cwd = File.cwd!()
     File.cd!(output_dir)
-    :ok = :release_handler.create_RELEASES('./', 'releases', '#{relfile}', [])
+    :ok = :release_handler.create_RELEASES(File.cwd!(), Path.join([File.cwd!(), 'releases']), '#{relfile}', [])
     File.cd!(old_cwd)
     :ok
   end

I have a local fork that works with just this change within lib/ so if you use a git dependency in your mix file, you can use your own fork with this change.

Getting the tests to run has been a challenge and required quite a few changes. I had to comment out the cookie tests because I couldn't hit quvic.com from behind a firewall. Also, the "directory with space in name" wouldn't work for me so I just removed it.

If I can find the time to run tests across several versions of Elixir & OTP, I'll submit a MR. If someone else submits this fix based on this post, thanks!

Tested with Elixir 1.12.3 & 1.13.4 + Erlang 25.0.4.

gusbicalho added a commit to gusbicalho/distillery that referenced this issue Oct 17, 2022
tres added a commit to tres/distillery that referenced this issue Oct 23, 2022
This comes from here:

bitwalker#744

  ,--^----------,--------,-----,-------^--,
  | |||||||||   `--------'     |          O
  `+---------------------------^----------|
    `\_,-------, _________________________|
      / XXXXXX /`|     /
     / XXXXXX /  `\   /
    / XXXXXX /\______(
   / XXXXXX /
  / XXXXXX /
 (________(
  `------'                 Steven Paul Adams
bors bot added a commit to bors-ng/bors-ng that referenced this issue Nov 4, 2022
1561: Switch to a fork that fixes distillery for OTP 25 r=notriddle a=notriddle

CC bitwalker/distillery#744

Co-authored-by: Michael Howell <[email protected]>
@MichaelSzer
Copy link

MichaelSzer commented Dec 21, 2022

==> Assembling release..
==> Building release phoenix_sample:0.1.0 using environment prod
==> Including ERTS 13.1.2 from /home/miguel/.asdf/installs/erlang/25.1.2/erts-13.1.2
==> Packaging release..
==> Failed to archive release: _build/prod/rel/phoenix_sample/releases/RELEASES: no such file or directory

Using {:distillery, "~> 2.1"} and {:phoenix, "~> 1.6.15"}

@zazaian
Copy link

zazaian commented Feb 17, 2023

==> Assembling release.. ==> Building release phoenix_sample:0.1.0 using environment prod ==> Including ERTS 13.1.2 from /home/miguel/.asdf/installs/erlang/25.1.2/erts-13.1.2 ==> Packaging release.. ==> Failed to archive release: _build/prod/rel/phoenix_sample/releases/RELEASES: no such file or directory

Using {:distillery, "~> 2.1"} and {:phoenix, "~> 1.6.15"}

@carflynn2009 @MichaelSzer I would recommend simply adding the RELEASES directory inside of _build/prod/rel/phoenix_sample/releases. This worked for me on my local development environment. It doesn't seem like this is generated by default.

@Lucian-Bosinceanu
Copy link

This has fixed the distillery issue for me when upgrading to Elixir 1.15.4 and OTP 26:
bors-ng/bors-ng#1561

However, the remote-console command ended up crashing with this error:

=CRASH REPORT==== 5-Oct-2023::18:34:46.165601 ===
  crasher:
    initial call: supervisor_bridge:user_sup/1
    pid: <0.3882.0>
    registered_name: []
    exception error: undefined function 'Elixir.IEx.CLI':start/0
      in function  user_sup:start_user/3 (user_sup.erl, line 102)
      in call from user_sup:init/1 (user_sup.erl, line 51)
      in call from supervisor_bridge:init/1 (supervisor_bridge.erl, line 87)
      in call from gen_server:init_it/2 (gen_server.erl, line 962)
      in call from gen_server:init_it/6 (gen_server.erl, line 917)
    ancestors: [kernel_sup,<0.3850.0>]

I was able to fix the above by adding exec before iex here:

iex --erl "-hidden -kernel net_ticktime $TICKTIME" \

Hope this helps someone in need.

randysecrist added a commit to randysecrist/distillery that referenced this issue Dec 5, 2023
@randysecrist
Copy link

Has anyone seen this when using remote_console? If I read this right; it seems like Elixir.iEx.CLI is undefined - however it is part of the release and I can see its beams in the ebin dir within the release directory ...

OTP: 26.1 (only erts is installed as part of the release)
Elixir 1.15.7
2023-12-05 21:33:12.185235 crash_report
    initial_call: {supervisor_bridge,user_sup,['Argument__1']}
    pid: <0.71.0>
    registered_name: []
    error_info: {error,undef,[{'Elixir.IEx.CLI',start,[],[]},{user_sup,start_user,3,[{file,"user_sup.erl"},{line,102}]},{user_sup,init,1,[{file,"user_sup.erl"},{line,51}]},{supervisor_bridge,init,1,[{file,"supervisor_bridge.erl"},{line,87}]},{gen_server,init_it,2,[{file,"gen_server.erl"},{line,962}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,917}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,241}]}]}
    ancestors: [kernel_sup,<0.47.0>]
    message_queue_len: 0
    messages: []
    links: [<0.49.0>]
    dictionary: []
    trap_exit: true
    status: running
    heap_size: 1598
    stack_size: 28
    reductions: 334
=SUPERVISOR REPORT==== 5-Dec-2023::21:33:12.185290 ===
    supervisor: {local,kernel_sup}
    errorContext: start_error
    reason: {undef,
                [{'Elixir.IEx.CLI',start,[],[]},
                 {user_sup,start_user,3,[{file,"user_sup.erl"},{line,102}]},
                 {user_sup,init,1,[{file,"user_sup.erl"},{line,51}]},
                 {supervisor_bridge,init,1,
                     [{file,"supervisor_bridge.erl"},{line,87}]},
                 {gen_server,init_it,2,[{file,"gen_server.erl"},{line,962}]},
                 {gen_server,init_it,6,[{file,"gen_server.erl"},{line,917}]},
                 {proc_lib,init_p_do_apply,3,
                     [{file,"proc_lib.erl"},{line,241}]}]}
    offender: [{pid,undefined},
               {id,user},
               {mfargs,{user_sup,start,[]}},
               {restart_type,temporary},
               {significant,false},
               {shutdown,2000},
               {child_type,supervisor}]

@Lucian-Bosinceanu
Copy link

@randysecrist I had the same problem, please see above.

@randysecrist
Copy link

@Lucian-Bosinceanu

I did try that; and it works great if a full install is available.

I am however using the set include_erts: true in the rel/config.exe .. thus iex isn't available directly; only erts. (small footprint required)

@jweinkam
Copy link

@randysecrist did you find a solution?

@randysecrist
Copy link

@jweinkam no, not when using a base image with only the release + erts (include_erts ) copied into it. This used to work just fine with OTP 24. (i'm using 26 now; so it could be an issue not covered by this issue?)

@jweinkam
Copy link

jweinkam commented Dec 15, 2023

@randysecrist
We have been using OTP 25 and Elixir 1.14.1 with a forked version of this library. The only change is

+++ b/lib/distillery/releases/assembler.ex
@@ -860,15 +860,7 @@ defmodule Distillery.Releases.Assembler do
     # no work around for this
     old_cwd = File.cwd!()
     File.cd!(output_dir)
-    :ok = :release_handler.create_RELEASES('./', 'releases', '#{relfile}', [])
+
+    :ok =
+      :release_handler.create_RELEASES(
+        File.cwd!(),
+        Path.join([File.cwd!(), 'releases']),
+        '#{relfile}',
+        []
+      )
+
     File.cd!(old_cwd)
     :ok
   end

We are attempting to switch to Elixir 1.15.7, but then get error

crasher:
 initial call: supervisor_bridge:user_sup/1
 pid: <0.4290.0>
 registered_name: []
 exception error: undefined function 'Elixir.IEx.CLI':start/0
   in function  user_sup:start_user/3 (user_sup.erl, line 100)
   in call from user_sup:init/1 (user_sup.erl, line 49)
   in call from supervisor_bridge:init/1 (supervisor_bridge.erl, line 87)
   in call from gen_server:init_it/2 (gen_server.erl, line 851)
   in call from gen_server:init_it/6 (gen_server.erl, line 814)
 ancestors: [kernel_sup,<0.4268.0>]
 message_queue_len: 0
 messages: []

We too are using set include_erts: true

@randysecrist
Copy link

@jweinkam my intuition tells me this is a problem with the erlang boot file -> I can see that the `Elixir.IEx.CLI' module is included in the release; but erlang crying about it being undefined means that it isn't in the beam path for some reason.

I spent a day learning more about releases ; so next step is to go back and try to figure out if I can find where this plugin is broken .. or if I'm going to just script the release myself.

This is going to take some time ; i'm on holiday in a bit as well.

@randysecrist
Copy link

randysecrist commented Feb 5, 2024

So after a new year rest; and some poking - the problem is not that the module Elixir.IEx.CLI isn't on the code path ... it is that this value is passed to the -user switch when erl is invoked.

  • What was the intent of using this switch on startup?
  • Shouldn't this be Elixir.IEx? Testing with Elixir.IEx.CLI doesn't seem to spawn a new shell when I test it out with CTRL-G.

ref: https://hexdocs.pm/iex/1.15.7/IEx.html#module-the-user-switch-command

When I test with Elixir.IEx - this is what I see:

{{badmatch,{error,{kernel,{{shutdown,{failed_to_start_child,user,nouser}},
                           {kernel,start,[normal,[]]}}}}},
 [{'Elixir.IEx','-start/2-fun-3-',1,[{file,"lib/iex.ex"},{line,873}]}]}```

@randysecrist
Copy link

fixed this in my fork: bors-ng@578f12b

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests