July 26, 2025

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

以前、asdfについて調べたけど、asdfはWindows版がない。
WindowsとmacOSとDebianで共通して使えるバージョンマネージャはないものかと調べたら「mise」を見つけた。
「ミセ」でも「マイズ」でもなく『ミーズ』と読む。
フランス語の料理用語で、日本の料理界では「ミザンプラス」とも呼ばれることもある「mise-en-place(ミーズ・アン・プラス)」が由来で、「準備する」「所定の位置に置く」という意味。

uvと同じように、Pythonはビルド済みのバイナリをインストールしてくれるのがとても好み。

基本的にはmiseも個人が占有するPCでユーザーのホームディレクトリにインストールして使うものだけど、asdfと同じように全ユーザー用にシステムワイドに使えないかなと考えてみた。
asdfの時と同じく、WindowsやmacOSは個人が占有して使うものである、ということで、試すOSはDebian 12。
Bashが前提なので、ZshやFishを使うユーザーがいたら別途対応が必要…

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

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

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

  1. 必要なパッケージを追加
    $ sudo apt update
    $ sudo apt install curl acl
    
  2. 同じ名前のファイルが無いことを確認。
    $ ls -l /usr/local/bin/mise
    ls: '/usr/local/bin/mise' にアクセスできません: そのようなファイルやディレクトリはありません
    
  3. miseインストール
    $ curl https://mise.run | sudo MISE_INSTALL_PATH=/usr/local/bin/mise sh
    $ sudo chown root: /usr/local/bin/mise
    
    mise self-update で自分自身を更新するには、miseバイナリと同じディレクトリにファイル作成権限が必要だけど、/usr/local/bin/ はrootしか書けないので、mise自身の更新は sudo が必要
  4. バージョン確認
    $ mise version
                  _                                        __
       ____ ___  (_)_______        ___  ____        ____  / /___ _________
      / __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \
     / / / / / / (__  )  __/_____/  __/ / / /_____/ /_/ / / /_/ / /__/  __/
    /_/ /_/ /_/_/____/\___/      \___/_/ /_/     / .___/_/\__,_/\___/\___/
                                                /_/                 by @jdx
    2025.7.20 linux-x64 (2025-07-22)
    
  5. mise設定
    1. mise用の各種インストール先ディレクトリ作成
      あるグループに属するユーザーは全員読み書きしたいのでSGIDビットを立てる
      $ sudo mkdir -m 2775 /opt/mise
      
    2. ここではグループをadmにするけど、もちろん新規に専用グループを作っても構わない
      $ sudo chgrp adm /opt/mise
      
    3. /opt/mise の下に作成されるファイルやディレクトリは、admグループが読み書きできるようにしたい
      umaskでは実現できないのでACLを使う
      $ sudo setfacl -d -m g:adm:rwx /opt/mise
      
    4. 全ユーザー用に環境変数をセットする
      /etc/profile.d/asdf.sh を新規作成する、中身はこんな感じ
      export MISE_DATA_DIR=/opt/mise
      export PATH=$PATH:$MISE_DATA_DIR/shims
      
  6. asdfと同じように、mise install中に実行されるtarinstallコマンドはACLを無視するようで、グループの書き込み権が落ちてしまう
    setfaclで再度書き込み権を付与するなんらかのラッパーが必要、後で考える
  7. SSHを入り直すか、exec $SHELL -l でシェルを読み直す

© 2020 nissy-lab.com