Open8

Ubuntu 24.04 LTSにasdfをインストールする(Bash)

shuichishuichi

Elixirインストールのために、前段階として、複数のElixirのバージョン管理ができるasdfをUbuntuにインストールします。

asdfのインストールのガイドページ:
https://asdf-vm.com/guide/getting-started.html

「1. Install asdf」の「With Package Manager」にはaptを使った方法が書いていないので、「Build from Source」を参考にソースビルドします。

今回は、ホームディレクトリ配下の「.asdf/」ディレクトリ内にasdfコマンドをビルド・配置することにします。

使うシェルは、UbuntuのデフォルトシェルであるBashです。

shuichishuichi

手順

以下に示す手順は、前述の「1. Install asdf」の「Build from Source」のUbuntu+aptの場合のコマンドを参考に、省略された部分の補足や前述の条件に合うような変更をしたものです。

目指す最終形は、以下のようになります:

  • ビルドしたasdfコマンドは「~/.asdf/」ディレクトリ内に配置される
  • PATHの設定やasdfの基本的な設定は、「~/.asdf/asdf.sh」をBash起動時に読み込むことで行う

aptリポジトリ情報の最新化

sudo apt update -y

gitとunzipのインストール

gitはasdfのインストール時に、unzipはインストールしたasdfを使ったElixirインストール時に、それぞれ必要になります。

sudo apt install -y git unzip

asdfのインストール

asdfのGitリポジトリのクローン

asdfのGitリポジトリを、ホームディレクトリ配下の「.asdf/」ディレクトリとしてgitクローンします:

git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.16.7

gitクローンして「.asdf/」ディレクトリが作成されていることを確認する:

ls ./ -pa
出力例
出力例
~$ ls ./ -pa
.asdf/ # ←このディレクトリができていればOK!

makeコマンドを実行して、asdfをビルドする

「~/.asdf/」ディレクトリに移動します:

cd ~/.asdf/

makeコマンドを実行して、asdfをビルドします:

make

今いる「~/.asdf/」ディレクトリ内に、asdfコマンド(=実行ファイル)が作成されています:

ls -l asdf
出力例
出力例
~/.asdf$ ls -l asdf
-rwxr-xr-x 1 shuichi shuichi 11776260 Apr 27 03:33 asdf

このasdfコマンドのビルドが成功していることを確認しましょう:

./asdf version
出力例
$ ./asdf version
"cbe8c6b-dev"
shuichishuichi

「~/.asdf/asdf.sh」をBash起動時に読み込むようにする

asdfのGitリポジトリにはシェルスクリプト「asdf.sh」があり、これを読み込むことで、PATHの設定やasdfの基本的な設定を行ってくれます。

Bash起動時に読み込まれる「~/.profile」に、「~/.asdf/asdf.sh」を読み込む設定を追記します。

ホームディレクトリに戻ります:

cd ~

「~/.profile」のバックアップを作成する

念の為、「~/.profile」のバックアップを作成しておきます。
バックアップファイル名は、タイムスタンプをつけた「~/.profile.<YYYY-mm-dd_HH-MM-SS>」とします。

  1. まず、バックアップファイル名をシェル変数profile_backup_filenameに格納しておきます。
    バックアップファイル作成時の他、その後でのバックアップファイルの作成の成否確認の際にこのファイル名が必要になるため、使い回せるようにします。

    profile_backup_filename=".profile.$(date '+%Y-%m-%d_%H-%M-%S')"
    

    確認のために、バックアップファイル名を出力しておきましょう:

    echo "${profile_backup_filename}"
    
    出力例
    ~$ echo "${profile_backup_filename}"
    .profile.2025-04-27_04-05-03
    
  2. バックアップファイルを作成します:

    cp ~/.profile ~/"${profile_backup_filename}"
    
  3. バックアップファイルが作成されたことを確認します:

    • ファイルの存在確認

      ls -a ~/"${profile_backup_filename}"
      
      出力例
      ~$ ls -a ~/"${profile_backup_filename}"
      /home/shuichi/.profile.2025-04-27_04-05-03
      
    • ファイルの内容が一致することを確認:出力がなければOK

      sdiff -s ~/.profile ~/"${profile_backup_filename}"
      
shuichishuichi

「.profile」に「~/.asdf/asdf.sh」を読み込む設定を追記する

echo -e "\n# asdf" >> ~/.profile
echo 'export PATH=$PATH:$HOME/.asdf' >> ~/.profile
sdiff -s ~/.profile ~/"${profile_backup_filename}"
出力例
~$ sdiff -s ~/.profile ~/"${profile_backup_filename}"
                                                              <
# asdf                                                        <
export PATH=$PATH:$HOME/.asdf                                 <

シェルに新たにログインします

asdf version
type -a asdf
出力例
~$ type -a asdf
asdf is /home/shuichi/.asdf/asdf
「.profile」を変更前の状態に戻す
cp ~/"${profile_backup_filename}" ~/.profile
shuichishuichi

https://asdf-vm.com/guide/getting-started.html#_2-configure-asdf

ドキュメントの「2. Configure asdf 」の「Bash」のセクションを参考にする。

ただし、編集するファイルは変更する。
ドキュメントでは「~/.bash_profile」「~/.bashrc」を編集しているが、Ubuntuなので(説明を追記)いずれも「.profile」の編集に変更する。

echo 'export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"' >> ~/.profile

コマンド補完

echo '. <(asdf completion bash)' >> ~/.profile

再ログイン

shuichishuichi

ErlangとElixirのインストール

ElixirはErlangの上で動くので、ErlangとElixirの両方をインストールする。
asdfのpluginでそれぞれインストールする。

ErlangとElixirのバージョンの組み合わせの確認

このあと言及する「asdf-elixir」プラグインのREADME.mdの「Check compatibility between elixir and erlang:」セクションに記載されている以下のリンク先から、インストールしたいElixirのバージョンとそれに対応したErlangのバージョンを確認する:

https://hexdocs.pm/elixir/compatibility-and-deprecations.html#between-elixir-and-erlang-otp

今回は、以下のバージョンの組み合わせでインストールすることにする:

Erlangのインストール

Elixirより先に、Erlang 27.3.3をインストールする。

「asdf-erlang」プラグインのインストール

https://github.com/asdf-vm/asdf-erlang

asdf plugin add erlang https://github.com/asdf-vm/asdf-erlang.git

Erlangインストールに必要なライブラリのインストール

https://github.com/asdf-vm/asdf-erlang?tab=readme-ov-file#ubuntu-2404-lts

sudo apt install -y build-essential autoconf m4 libwxgtk3.2-dev libwxgtk-webview3.2-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils libncurses-dev openjdk-11-jdk

Erlangのインストール

asdf list all erlang 27
出力例
~$ asdf list all erlang 27
27.0-rc1
27.0-rc2
27.0-rc3
27.0
27.0.1
27.1
27.1.1
27.1.2
27.1.3
27.2
27.2.1
27.2.2
27.2.3
27.2.4
27.3
27.3.1
27.3.2
27.3.3 # ←これをインストールする!
asdf install erlang 27.3.3
asdf set -u erlang 27.3.3
asdf current
出力例
~$ asdf current
Name            Version         Source                       Installed
erlang          27.3.3          /home/shuichi/.tool-versions true
shuichishuichi

Elixirのインストール

次に、Elixir 1.18.3をインストールする。

「asdf-elixir」プラグインのインストール

https://github.com/asdf-vm/asdf-elixir

asdf plugin add elixir https://github.com/asdf-vm/asdf-elixir.git

Elixirインストールに必要なライブラリのインストール

「asdf-elixir」のGitHubリポジトリのREADME.md(前節のリンク)を見るに、特にライブラリのインストールは必要ない。

Elixirのインストール

asdf list all elixir 1.18
出力例
~$ asdf list all elixir 1.18
1.18.0
1.18.0-otp-25
1.18.0-otp-26
1.18.0-otp-27
1.18.0-rc.0
1.18.0-rc.0-otp-25
1.18.0-rc.0-otp-26
1.18.0-rc.0-otp-27
1.18.1
1.18.1-otp-25
1.18.1-otp-26
1.18.1-otp-27
1.18.2
1.18.2-otp-25
1.18.2-otp-26
1.18.2-otp-27
1.18.3
1.18.3-otp-25
1.18.3-otp-26
1.18.3-otp-27 # ←これをインストールする!
asdf install elixir 1.18.3-otp-27
asdf set -u elixir 1.18.3-otp-27
asdf current
出力例
~$ asdf current
Name            Version         Source                       Installed
elixir          1.18.3-otp-27   /home/shuichi/.tool-versions true
erlang          27.3.3          /home/shuichi/.tool-versions true
elixir --version
出力例
~$ elixir --version
Erlang/OTP 27 [erts-15.2.6] [source] [64-bit] [smp:24:24] [ds:24:24:10] [async-threads:1] [jit:ns]

Elixir 1.18.3 (compiled with Erlang/OTP 27)
shuichishuichi
cat ~/.tool-versions
出力例
~$ cat ~/.tool-versions
erlang 27.3.3
elixir 1.18.3-otp-27