root ユーザで SDKMAN! を使ってインストールした Java や Grails を、他のユーザ使用できるのならシステムワイドにインストールする必要はない。
そのように考え試してみましたところ、ダメ!
具体的には root ユーザで Java をインストールして、別ユーザで java コマンド確認したら無いって言われてしまいました。
- 全ユーザが sdk コマンドで SDK をインストール等できる。
- 全ユーザが sdk コマンドで使用可能にした Java 等を利用できる。
という環境を作成してみました。
まずは従来の普通の方法を見た後、システムワイドに SDKMAN! をインストールする方法書いていきます。
普通の SDKMAN! インストール方法
# インストール curl -s "https://get.sdkman.io" | bash # コマンドを即時使えるように設定 source "$HOME/.sdkman/bin/sdkman-init.sh" # バージョンを見ることでインストール確認 sdk version
システムワイドな SDKMAN! インストール方法
- /usr/local/sdkman にインストールする。
- 方法自体は、公式のインストールページに書いてあるが、記述以外に必要なことを補った。
Installation – SDKMAN!
# /usr/local/ は root ユーザの持ち物のため、root ユーザに切り替え su - # 場所を指定してインストール export SDKMAN_DIR="/usr/local/sdkman" && curl -s "https://get.sdkman.io" | bash # root ユーザがコマンドを即時使えるように設定 source "/usr/local/sdkman/bin/sdkman-init.sh" # バージョンを見ることでインストール確認 sdk version # 全ユーザが使用できるようにフルアクセス権を付与 chmod -R 777 /usr/local/sdkman # 全ユーザが sdk コマンドを使えるように設定 cat > /etc/profile.d/sdkman.sh <<'EOF' #THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!! export SDKMAN_DIR="/usr/local/sdkman" [[ -s "/usr/local/sdkman/bin/sdkman-init.sh" ]] && source "/usr/local/sdkman/bin/sdkman-init.sh" EOF
注意点としては、インストールを実行したユーザの ~/.bashrc に SDKMAN! の設定が記述されてしまうことが挙げられます。
おわりに
すべての Linux ユーザがシステムワイドに SDKMAN! を利用できるようにしたのは、Vagrant を使った開発を楽にしたかったからでした。
本番環境では、もっと制限をかけた方がよいかと思います。
以上です。