Skip to content

Aqua를 이용하여 Windows에서 rutnime version을 관리하자

Published: at 오후 08:23

Table of contents

Open Table of contents

들어가며

Windows에는 Linux와 macOS에서 쓰이는 asdf라는 runtime version manager를 사용할 수 없다.
그래서 이것 저것 서칭을 해 보다가.
어떤 일본 분이 만드신 aqua라는 것을 알아 냈다.
그래서 이걸로 Windows에서 cli program version managing을 해 보려고 한다.
(아 이거 node, python 그리고 ruby 지원을 안 하네 ㅋㅋ)

번역하면 asdf가 지원하는 python, ruby, node.js는 aqua가 지원하지 않는다는 내용이다.
그래도 gobun은 설치가 되고, 뭔가 복잡한 설정을 하면 jdk도 설정이 가능하다! (하기 discussion 참고)

필자의 생각은 그냥 Windows면, nvm-windows, pyenv-win, jabba를 사용해서 runtime version managing을 하는 게 좋을 것 같다는 생각이 든다.(하기 포스트 참고)

aqua 설치

Download prebuilt binaries from GitHub Releases

상기 URI로 접속하여, Windows Binary를 다운로드 받는다.

환경 변수 AQUA_ROOT_DIR, PATH 설정

상기 이미지처럼 $env:LOCALAPPDATA\aquaproj-aqua\ 디렉터리에 bat 폴더와 bin 파일을 만들어 놓는다.
그리고 하기 사진처럼 bin\ 디렉터리에 다운로드 받아 놓았던 Windwos aqua binary를 복사해 놓는다.

그리고 Powershell에 Administrator 권한 session으로 접속한다.

[System.Environment]::SetEnvironmentVariable("AQUA_ROOT_DIR", "$env:LOCALAPPDATA\aquaproj-aqua", [System.EnvironmentVariableTarget]::Machine)

상기 이미지처럼 입력을 한다.
PowerToys에 들어가서 확인하니, 잘 바뀐 것을 알 수 있다.

그 다음 다시 일반 User Session으로 Powershell에 접속을 하고, 하기 명령어를 입력한다.

Set-Item Env:Path "$Env:AQUA_ROOT_DIR\bat;$Env:AQUA_ROOT_DIR\bin;$ENV:Path"

상기 이미지처럼 잘 환경 변수 PATH가 설정된 것을 알 수 있다.
그런데 이렇게 설정을 하면 Powershell Session이 종료되면, 다시 $env:PATH 값은 초기화 된다.
세션을 종료했다가, 다시 접속하면 하기 이미지처럼 다시 $env:PATH 값이 초기화 된 것을 알 수 있다.

그래서 초기화 되지 않게 하려면, Administrator 권한으로 Powershell에 접속하여, 하기 script를 입력한다.

$envPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine)
$newPath = "$Env:AQUA_ROOT_DIR\bat;$Env:AQUA_ROOT_DIR\bin;$envPath"
[System.Environment]::SetEnvironmentVariable("Path", $newPath, [System.EnvironmentVariableTarget]::Machine)

그러면 상기 이미지 처럼 잘 변한 것을 확인할 수 있다.
다시 일반 User Session으로 Powershell에 접속하여, $env:PATH가 잘 설정됐는지 확인해 보자.

echo $env:PATH | findstr aquaproj-aqua

(잘 나오네 ㅎㅎ)

환경 변수 AQUA_GLOBAL_CONFIG 설정

하기 이미지처럼 $HOME 디렉터리에 .config 디렉터리를 생성한다.

그리고 .config 디렉터리 안에 aquaproj-aqua 디렉터리를 생성하고, aqua.yml 파일을 생성한다.

$env:LOCALAPPDATA\aquaproj-aqua\aqua.yaml:

---
# aqua - Declarative CLI Version Manager
# https://aquaproj.github.io/
# checksum:
#   enabled: true
#   require_checksum: true
#   supported_envs:
#   - all
registries:
  - type: standard
    ref: v4.104.0 # renovate: depName=aquaproj/aqua-registry
packages:
  - name: cli/cli@v2.40.1

그리고 User Session을 끊고, Administrator Session으로 Powershell에 접속한다.

$envAquaGlobalConfig = [System.Environment]::GetEnvironmentVariable("AQUA_GLOBAL_CONFIG", [System.EnvironmentVariableTarget]::Machine)
$newAquaGlobalConfig = "$env:LOCALAPPDATA\aquaproj-aqua\aqua.yaml;$envAquaGlobalConfig"
[System.Environment]::SetEnvironmentVariable("AQUA_GLOBAL_CONFIG", $newAquaGlobalConfig, [System.EnvironmentVariableTarget]::Machine)

상기 이미지처럼 환경 변수 AQUA_GLOBAL_CONFIG가 잘 설정된 것을 알 수 있다.

Administrator Session을 끊고 나와서, 다시 User Session으로 Powershell에 접속하여 gh version을 입력하면 global로 설치가 되어, command가 잘 먹는 것을 알 수 있다.

마치며

들어가며에도 써 놨지만, node.js, python3, ruby 와 같은 runtime 지원이 없다.
그래서 이 글에서 예시로 보여준 gh command 말고도, neovim version 관리로 쓰고 있다.

참고 문서