July 6, 2025

asdfをLinuxの全ユーザーで使う

いろんなツールのバージョンマネージャの asdf は、個人が占有するPCでユーザーのホームディレクトリにインストールして使うもの。
WindowsやmacOSは個人が占有して使うことが多い気がするけど、Linuxは複数ユーザーで使うこともある。
ユーザー毎にホームディレクトリにインストールするのもなんだかなーと思ったので、全ユーザー用にシステムワイドにasdfを使う方法を考えてみた。

確認のために用意した環境

Debian 12を最小セットアップしたマシン

asdfを全ユーザー用にインストール

  1. 必要なパッケージを追加
    $ sudo apt update
    $ sudo apt install curl git acl
    
  2. 同じ名前のファイルが無いことを確認。
    $ ls -l /usr/local/bin/asdf
    ls: '/usr/local/bin/asdf' にアクセスできません: そのようなファイルやディレクトリはありません
    
  3. インストール
    asdfはv0.16.0でGoで書き直されてバイナリファイルが1つだけなので、https://github.com/asdf-vm/asdf/releases から自分のOS、アーキテクチャのファイルをダウンロードして展開するだけ。
    AMD64のv0.18.0の例:
    $ curl -OL https://github.com/asdf-vm/asdf/releases/download/v0.18.0/asdf-v0.18.0-linux-amd64.tar.gz
    $ sudo tar xzf ~/asdf-*.tar.gz -C /usr/local/bin
    $ $ asdf version
    v0.18.0 (revision 2114f1e)
    
  4. 設定
    1. asdf用の各種プラグインのインストール先ディレクトリ作成
      あるグループに属するユーザーは全員読み書きしたいのでSGIDビットを立てる
      $ sudo mkdir -m 2775 /opt/asdf
      
    2. ここではグループをadmにするけど、もちろん新規に専用グループを作っても構わない
      $ sudo chgrp adm /opt/asdf
      
    3. 新規作成されるファイルやディレクトリは、admグループが読み書きできるようにしたい
      umaskでは実現できないのでACLを使う
      $ sudo setfacl -d -m g:adm:rwx /opt/asdf
      
    4. 全ユーザー用に環境変数をセットする
      /etc/profile.d/asdf.sh を新規作成する、中身はこんな感じ
      export ASDF_DATA_DIR="/opt/asdf"
      export PATH="$ASDF_DATA_DIR/shims:$PATH"
      
  5. SSHを入り直すか、exec $SHELL -l でシェルを読み直す

あとは公式ドキュメントのとおりに各種プラグインを入れていけばいい。
asdf set HOGE latest 等でそれぞれのプラグイン毎にインストールしたバージョンを指定するのはユーザー毎に実施する。

© 2020 nissy-lab.com