I'm really sorry about bringing this up a month after your original email, 
but I don't quite see where I would use such a script.

Your non-goal of no version management makes the script unsuitable for 
development, since a developer wouldn't be able to upgrade to newer elixir 
versions seamlessly. Additionally a user wouldn't be able to switch between 
projects with different elixir/otp versions. Indeed this problem is solved 
better with tools like asdf, kerl or nix. Other language stacks have 
introduced their own version managers for this like rustup 
<https://rustup.rs/>, GHCup <https://www.haskell.org/ghcup/install/>, 
(which manages cabal, stack and HLS in addition to the GHC), opam 
<https://opam.ocaml.org/> (which handles the entire OCaml development 
environment including libraries), and coursier 
<https://www.scala-lang.org/download/>. This is effectively what BEAMup is 
aiming to be. For those who do not want to install an additional package 
manager, development could be done on top of a docker container, or with 
the linux distro's elixir binary.

>From a deployment perspective, I feel the elixir docker image has solved 
the problem, since today the vast majority deploy at the 
container/kubernetes level. This leads me to believe that the only place 
such a script would be used is in deploying to a regular VM or even 
bare-metal. Though I'm not too knowledgeable on what the current trends 
are, I suspect that today this may be too niche a use case for the effort 
of maintaining and testing such a script to be worth, especially one that 
is Windows compliant.

Is this the scenario you have in mind, or is it something else?

-- bp
On Thursday 31 October 2024 at 15:04:11 UTC+5:30 woj...@wojtekmach.pl wrote:

> I just submitted the PR: 
> https://github.com/elixir-lang/elixir-lang.github.com/pull/1778
>
> wtorek, 17 września 2024 o 12:47:03 UTC+2 José Valim napisał(a):
>
>> For other environments, using "asdf/kerl" is still the best route. Elixir 
>> install mostly relies on prebuilt binaries, which currently are available 
>> for Windows (via Erlang) and Ubuntu (via Hex).
>>
>> On Tue, Sep 17, 2024 at 12:45 PM Jim Freeze <jimf...@gmail.com> wrote:
>>
>>> What do we need to do to support FreeBSD?
>>>
>>> Dr. Jim Freeze, Ph.D.
>>> ElixirConf®
>>> ElixirConf.com
>>> ElixirConf.eu
>>> (m) 512 949 9683 <(512)%20949-9683>
>>>
>>>
>>> On Fri, Sep 13, 2024 at 7:06 AM Wojtek Mach <woj...@wojtekmach.pl> 
>>> wrote:
>>>
>>>> Hey everyone,
>>>>
>>>> We already have multiple ways of installing Elixir (
>>>> https://elixir-lang.org/install.html) but I believe we can still do 
>>>> better. Elixir is cross-platform but Erlang/OTP is not. We need to get OTP 
>>>> for **our OS/architecture**, ideally prebuilt or otherwise we need to 
>>>> compile it from source. I've listed some challenges with existing 
>>>> installation methods here: 
>>>> https://github.com/erlef/build-and-packaging-wg/issues/80.
>>>>
>>>> Since a few releases ago, Elixir project maintains installer for 
>>>> Windows, e.g. <
>>>> https://github.com/elixir-lang/elixir/releases/download/v1.17.2/elixir-otp-27.exe>,
>>>>  
>>>> but that still requires OTP. The installer tries to be helpful, finds 
>>>> whether OTP is already installed and the version matches and otherwise 
>>>> show 
>>>> a link to download it. This is a GUI installer that fortunately can be 
>>>> running headless, `.\elixir-otp-27.exe /S /D=C:\elixir`, but, again, we 
>>>> need to first install OTP.
>>>>
>>>> I believe we can significantly improve Elixir getting started 
>>>> experience by having a "one click install" but for terminals, download a 
>>>> single script that installs Elixir and OTP for their system.
>>>>
>>>> I've created a proof-of-concept called Elixir Install (
>>>> https://elixir-install.org) and we can use it in bash  for 
>>>> macOS/Ubuntu/Windows:
>>>>
>>>>     $ curl -fsS https://elixir-install.org/install.sh
>>>>     $ sh install.sh eli...@1.17.2 o...@27.0.1
>>>>     $ export PATH=$HOME/.elixir-install/installs/otp/27.0.1/bin:$PATH
>>>>     $ export 
>>>> PATH=$HOME/.elixir-install/installs/elixir/1.17.2-otp-27/bin:$PATH
>>>>     iex
>>>>
>>>> and Powershell on Windows:
>>>>
>>>>     > curl.exe -fsS https://elixir-install.org/install.bat
>>>>     > .\install.bat eli...@1.17.2 o...@27.0.1
>>>>     > $env:PATH = 
>>>> "$env:USERPROFILE\.elixir-install\installs\otp\27.0.1\bin;$env:PATH"
>>>>     > $env:PATH = 
>>>> "$env:USERPROFILE\.elixir-install\installs\elixir\1.17.2-otp-27\bin;$env:PATH"
>>>>     > iex.bat
>>>>
>>>> (The actual script is .bat because I noticed that even though Windows 
>>>> ships with Powershell, by default running external scripts is prohibited.)
>>>>
>>>> The script can also be executed without arguments, it will install the 
>>>> latest Elixir & OTP (hardcoded inside the script)
>>>>
>>>>     $ curl -fsS https://elixir-install.org/install.sh | sh
>>>>     downloading 
>>>> https://github.com/erlef/otp_builds/releases/download/OTP-27.0.1/OTP-27.0.1-macos-arm64.tar.gz
>>>>     downloading 
>>>> https://github.com/elixir-lang/elixir/releases/download/v1.17.2/elixir-otp-27.zip
>>>>     (...)
>>>>
>>>> The script is downloading OTP from these places:
>>>>
>>>>   *  macOS: <
>>>> https://github.com/erlef/otp_builds/releases/download/OTP-27.0.1/OTP-27.0.1-macos-arm64.tar.gz>,
>>>>  
>>>> see https://github.com/erlef/build-and-packaging-wg/issues/80
>>>>   *  Ubuntu: <
>>>> https://builds.hex.pm/builds/otp/arm64/ubuntu-22.04/OTP-27.0.1.tar.gz>, 
>>>> see <https://github.com/hexpm/bob?tab=readme-ov-file#erlang-builds>. 
>>>> In the future I'd like to move it to <github.com/erlef/otp_builds> too.
>>>>   *  Windows: <
>>>> https://github.com/erlang/otp/releases/download/OTP-27.0.1/otp_win64_27.0.1.zip
>>>> >
>>>>
>>>> I'd like to propose making this official under elixir-lang.org, that 
>>>> is:
>>>>
>>>>   *  https://elixir-lang.org/install.sh
>>>>   *  https://elixir-lang.org/install.bat
>>>>
>>>> ## Security
>>>>
>>>> In my proof of concept there are no additional security considerations 
>>>> besides using https. If this is not good enough, I think we could use the 
>>>> same security model as `mix local.hex`, that is, we'd download the build, 
>>>> the builds.txt (with all builds and their checksums), and the 
>>>> builds.txt.signed, and verify the signature against the public key the 
>>>> install would ship with. See https://blog.voltone.net/post/25 for more 
>>>> information.
>>>>
>>>> To have an idea, this would be along the lines of:
>>>>
>>>>     curl -fsSO https://builds.hex.pm/installs/hex-1.x.csv
>>>>     curl -fsSO https://builds.hex.pm/installs/hex-1.x.csv.signed
>>>>     # run `mix local.public_keys --detailed` and create public_key.pem
>>>>     openssl dgst -sha256 -verify public_key.pem -signature <(openssl 
>>>> base64 -d -in hex-1.x.csv.signed) hex-1.x.csv
>>>>
>>>> `openssl` is available on macOS, Windows, and Ubuntu Desktop.
>>>>
>>>> ## Non-Goals
>>>>
>>>>   * No version management along the lines of asdf/mise/etc, this is 
>>>> better solved by these tools anyway.
>>>>
>>>> ## Caveats
>>>>
>>>> In my proof of concept, the script requires sh and unzip on UNIX. (On 
>>>> Windows it's using curl too, which is built-in, but can be easily 
>>>> rewritten 
>>>> to using Powershell `Invoke-WebRequest`.) One caveat with this is while 
>>>> this works out of the box on Ubuntu Desktop,
>>>> the official Ubuntu Docker images does not have these and so they need 
>>>> to be installed:
>>>>
>>>>     $ docker run --rm -it ubuntu bash
>>>>     docker$ apt update && apt install -y curl unzip
>>>>     docker$ curl -fsS https://elixir-install.org/install.sh | sh
>>>>
>>>> This applies to `openssl` mentioned in the security section too. We 
>>>> could solve this by instead of a script have an executable (written in 
>>>> Go/Rust/Zig/etc) that would have everything it needs to download, unpack, 
>>>> and verify things. I think this would complicate things (executable would 
>>>> now or down the road have to be code signed, which fortunately we have 
>>>> some 
>>>> experience with already), users will be presented with a list to pick, and 
>>>> scripts would need a heuristic to figure out which installer to download.
>>>>
>>>> ## BEAMup
>>>>
>>>> Tristan Sloughter is working on [BEAMup](
>>>> https://erlangforums.com/t/beamup-a-new-way-to-install-erlang-gleam-and-more-to-come/3912),
>>>>  
>>>> similar tool but way more ambitious and with bigger scope. I'd like to 
>>>> think much smaller scope of elixir-lang.org/install.sh would make it 
>>>> easier to maintain. The most complicated underlying piece, having prebuilt 
>>>> OTP, is shared between the tools anyway.
>>>>
>>>> ## Elixir.app
>>>>
>>>> Brian Cardarella shared a proof-of-concept of a GUI installer for 
>>>> macOS: https://x.com/bcardarella/status/1831040691801088308. Again, 
>>>> this would have bigger scope and the underlying foundation in prebuilt OTP 
>>>> is shared anyway.
>>>>
>>>> -- 
>>>> You received this message because you are subscribed to the Google 
>>>> Groups "elixir-lang-core" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send 
>>>> an email to elixir-lang-co...@googlegroups.com.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/elixir-lang-core/6bbf2aa9-7d1b-42fe-a61e-abf72729519an%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/elixir-lang-core/6bbf2aa9-7d1b-42fe-a61e-abf72729519an%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "elixir-lang-core" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to elixir-lang-co...@googlegroups.com.
>>>
>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/elixir-lang-core/CAP1mN_ymsbyx-wEN-hKNJGuLTAsS80gTLL7RpVtum90gYaVg%2Bw%40mail.gmail.com
>>>  
>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAP1mN_ymsbyx-wEN-hKNJGuLTAsS80gTLL7RpVtum90gYaVg%2Bw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/elixir-lang-core/e14e2571-0f1f-417d-9fbd-112315aec1f1n%40googlegroups.com.

Reply via email to