Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Windows] Cannot execute symlinks for installed tools under $AQUA_ROOT_DIR/bin #885

Closed
pddg opened this issue Jun 18, 2022 · 10 comments
Closed
Labels
bug Something isn't working windows

Comments

@pddg
Copy link

pddg commented Jun 18, 2022

aqua version

$ aqua -v
aqua version 1.12.0-0 (ccaff1e0366e41a6d6fe34ff07a325b18cf16813)

Environment

⚠️ aqua doesn't support Windows.

I understand that Windows is not officially supported. I am not an expert on Windows myself.
I would be happy if there is anything useful information.

  • OS (Linux, macOS, etc): Windows 11 Pro 22H2 (22621.105)
  • CPU Architecture (amd64, arm64, etc): amd64

Overview

How to reproduce

  • aqua.yaml
  • executed command and output

aqua.yaml should be not partial but complete configuration.
Please remove unneeded configuration to reproduce the issue.

# aqua.yaml
---
# aqua - Declarative CLI Version Manager
# https://aquaproj.github.io/
registries:
- type: standard
  ref: v2.27.0 # renovate: depName=aquaproj/aqua-registry
packages:
- name: golang/go@go1.18.3
- name: golangci/golangci-lint@v1.46.2

Enable "Developer Mode"[1] and restart the computer to allow non-admin user to create symlink.

$ cd /path/to/aqua.yaml
$ aqua i
# Some symlinks under AQUA_ROOT_DIR/bin exist
$ dir "$($Env:AQUA_ROOT_DIR)\bin"

    ディレクトリ: C:\Users\pudding\.local\share\aquaproj-aqua\bin

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---l        2022/06/18     13:30              0 aqua-proxy
-a---l        2022/06/18     13:30              0 go
-a---l        2022/06/18     13:30              0 gofmt
-a---l        2022/06/18     13:30              0 golangci-lint

#  AQUA_ROOT_DIR/bin is added to PATH
$ $Env:Path -Split ";" | Select-String aquaproj-aqua

C:\Users\pudding\.local\share\aquaproj-aqua\bin

There is no executable binary named go without the symlink created by aqua.

Debug Output

$ $Env:AQUA_LOG_LEVEL
debug

$ aqua i
time="2022-06-18T13:30:45+09:00" level=debug msg="install the proxy" aqua_version=1.12.0-0 env=windows/amd64 package_name=aqua-proxy package_version=v1.1.2 program=aqua registry=
time="2022-06-18T13:30:45+09:00" level=debug msg="check if aqua-proxy is already installed" aqua_version=1.12.0-0 env=windows/amd64 package_name=aqua-proxy package_version=v1.1.2 program=aqua registry=
time="2022-06-18T13:30:45+09:00" level=debug msg="check if the package is already installed" aqua_version=1.12.0-0 env=windows/amd64 package_name=aqua-proxy package_version=v1.1.2 program=aqua registry=
time="2022-06-18T13:30:45+09:00" level=info msg="download and unarchive the package" aqua_version=1.12.0-0 env=windows/amd64 package_name=aqua-proxy package_version=v1.1.2 program=aqua registry=
time="2022-06-18T13:30:57+09:00" level=info msg="create a symbolic link" aqua_version=1.12.0-0 env=windows/amd64 link_file="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\bin\\aqua-proxy" new="..\\pkgs\\github_release\\github.com\\aquaproj\\aqua-proxy\\v1.1.2\\aqua-proxy_windows_amd64.tar.gz\\aqua-proxy.exe" package_name=aqua-proxy package_version=v1.1.2 program=aqua registry=
time="2022-06-18T13:30:57+09:00" level=info msg="create a symbolic link" aqua_version=1.12.0-0 env=windows/amd64 link_file="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\bin\\go" new=aqua-proxy package_name=golang/go package_version=go1.18.3 program=aqua registry=standard registry_ref=v2.27.0
time="2022-06-18T13:30:57+09:00" level=info msg="create a symbolic link" aqua_version=1.12.0-0 env=windows/amd64 link_file="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\bin\\gofmt" new=aqua-proxy package_name=golang/go package_version=go1.18.3 program=aqua registry=standard registry_ref=v2.27.0
time="2022-06-18T13:30:57+09:00" level=info msg="create a symbolic link" aqua_version=1.12.0-0 env=windows/amd64 link_file="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\bin\\golangci-lint" new=aqua-proxy package_name=golangci/golangci-lint package_version=v1.46.2 program=aqua registry=standard registry_ref=v2.27.0
time="2022-06-18T13:30:57+09:00" level=debug msg="install the package" aqua_version=1.12.0-0 env=windows/amd64 package_name=golangci/golangci-lint package_version=v1.46.2 program=aqua registry=standard
time="2022-06-18T13:30:57+09:00" level=debug msg="install the package" aqua_version=1.12.0-0 env=windows/amd64 package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:30:57+09:00" level=debug msg="check if the package is already installed" aqua_version=1.12.0-0 env=windows/amd64 package_name=golangci/golangci-lint package_version=v1.46.2 program=aqua registry=standard
time="2022-06-18T13:30:57+09:00" level=info msg="download and unarchive the package" aqua_version=1.12.0-0 env=windows/amd64 package_name=golangci/golangci-lint package_version=v1.46.2 program=aqua registry=standard
time="2022-06-18T13:30:57+09:00" level=debug msg="check if the package is already installed" aqua_version=1.12.0-0 env=windows/amd64 package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:30:57+09:00" level=info msg="download and unarchive the package" aqua_version=1.12.0-0 env=windows/amd64 package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:30:58+09:00" level=debug msg="check the permission" aqua_version=1.12.0-0 env=windows/amd64 file_name=golangci-lint package_name=golangci/golangci-lint package_version=v1.46.2 program=aqua registry=standard
time="2022-06-18T13:30:58+09:00" level=debug msg="add the permission to execute the command" aqua_version=1.12.0-0 env=windows/amd64 file_name=golangci-lint package_name=golangci/golangci-lint package_version=v1.46.2 program=aqua registry=standard
time="2022-06-18T13:31:11+09:00" level=debug msg="check the permission" aqua_version=1.12.0-0 env=windows/amd64 file_name=go package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:31:11+09:00" level=debug msg="add the permission to execute the command" aqua_version=1.12.0-0 env=windows/amd64 file_name=go package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:31:11+09:00" level=debug msg="check the permission" aqua_version=1.12.0-0 env=windows/amd64 file_name=gofmt package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:31:11+09:00" level=debug msg="add the permission to execute the command" aqua_version=1.12.0-0 env=windows/amd64 file_name=gofmt package_name=golang/go package_version=go1.18.3 program=aqua registry=standard

Execute go command with AQUA_LOG_LEVEL=debug does not show any logs.

Expected Behaviour

Either of the following methods will produce the correct results.

$ go version
$ aqua exec -- go version

Actual Behaviour

Execute go command, then "How to open the file" window is shown.

$ go version

I am a Japanese user so the UI is displayed in Japanese. Sorry.

image

The same result was obtained when executed with an absolute path.

$ C:\Users\pudding\.local\share\aquaproj-aqua\bin\go

Important Factoids

aqua-proxy under the $AQUA_ROOT_DIR\bin is executable (and it exit immediately).

time="2022-06-18T13:56:41+09:00" level=fatal msg="aqua failed" aqua_version=1.12.0-0 env=windows/amd64 error="command is not found" exe_name=aqua-proxy.exe program=aqua

[プロセスはコード 1 (0x00000001) で終了しました]

This may be unrelated, but some errors are shown when exec the command by aqua exec.

$ aqua exec -- go version
time="2022-06-18T13:40:16+09:00" level=debug msg="install the package" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:40:16+09:00" level=debug msg="check if the package is already installed" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:40:16+09:00" level=debug msg="check the permission" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" file_name=go package=golang/go package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:40:16+09:00" level=debug msg="add the permission to execute the command" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" file_name=go package=golang/go package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:40:16+09:00" level=debug msg="check the permission" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" file_name=gofmt package=golang/go package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:40:16+09:00" level=debug msg="add the permission to execute the command" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" file_name=gofmt package=golang/go package_name=golang/go package_version=go1.18.3 program=aqua registry=standard
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=1
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=2
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=3
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=4
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=5
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=6
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=7
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=8
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=9
time="2022-06-18T13:40:16+09:00" level=debug msg="check if exec file exists" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
time="2022-06-18T13:40:16+09:00" level=debug msg="command isn't found. wait for lazy install" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua retry_count=10
time="2022-06-18T13:40:16+09:00" level=debug msg="execute the command" aqua_version=1.12.0-0 env=windows/amd64 exe_path="C:\\Users\\pudding\\.local\\share\\aquaproj-aqua\\pkgs\\http\\golang.org\\dl\\go1.18.3.windows-amd64.zip\\go\\bin\\go.exe" package=golang/go program=aqua
go version go1.18.3 windows/amd64

The file actually exists.

$ dir C:\Users\pudding\.local\share\aquaproj-aqua\pkgs\http\golang.org\dl\go1.18.3.windows-amd64.zip\go\bin\go.exe


    ディレクトリ: C:\Users\pudding\.local\share\aquaproj-aqua\pkgs\http\golang.org\dl\go1.18.3.windows-amd64.zip\go\bin


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2022/06/18     13:31       14466560 go.exe

References

[1] Developer Mode features and debugging

@suzuki-shunsuke suzuki-shunsuke added bug Something isn't working windows labels Jun 18, 2022
@suzuki-shunsuke
Copy link
Member

Thank you for your report.

Execute go command, then "How to open the file" window is shown.

In my environment, the windows isn't shown.
It's interesting.

I'll take a look.

@suzuki-shunsuke
Copy link
Member

suzuki-shunsuke commented Jun 18, 2022

Note that aqua's Windows Support is still under development.
#850

@pddg
Copy link
Author

pddg commented Jun 18, 2022

I forgot to mention something important.

All the above results were verified with Powershell; using Git Bash gave different results.

$ echo $AQUA_ROOT_DIR
/c/Users/pudding/.local/share/aquaproj-aqua

$ $HOME/.local/share/aquaproj-aqua/bin/go version
time="2022-06-18T14:20:30+09:00" level=fatal msg="aqua failed" aqua_version=1.12.0-0 env=windows/amd64 error="command is not found" exe_name=go program=aqua

@suzuki-shunsuke
Copy link
Member

suzuki-shunsuke commented Jun 18, 2022

Reproduced the issue with PowerShell.

How do you want to open this file?

image

https://www.google.co.jp/search?q=PowerShell+How+do+you+want+to+open+this+file

aqua exec works well.

PS D:\Users\shunsukesuzuki\workspace\powershell> aqua exec -- tfcmt -v
tfcmt version 3.2.5 (904dacccd7081d9ef2a74f5ba31f833e470fd559)

D:\Users\shunsukesuzuki\AppData\Local\aquaproj-aqua\bin\tfcmt -v shows the same popup.

Running tfcmt directly works well.

PS D:\Users\shunsukesuzuki\workspace\powershell> D:\Users\shunsukesuzuki\AppData\Local\aquaproj-aqua\pkgs\github_release\github.com\suzuki-shunsuke\tfcmt\v3.2.5\tfcmt_windows_amd64.tar.gz\tfcmt.exe -v
tfcmt version 3.2.5 (904dacccd7081d9ef2a74f5ba31f833e470fd559)

@suzuki-shunsuke
Copy link
Member

suzuki-shunsuke commented Jun 18, 2022

@suzuki-shunsuke
Copy link
Member

suzuki-shunsuke commented Jun 18, 2022

I'm considering to replace symbolic links to few lines scripts on Windows.
In addition to this issue, Windows requires the administrative permission or developer mode to create symbolic links.
https://zenn.dev/shunsuke_suzuki/scraps/88e008721e748b
#893

@suzuki-shunsuke
Copy link
Member

@pddg

I have published the prerelease version v1.12.0-3.
Could you try this?
For the detail, please see the Release Note.

@pddg
Copy link
Author

pddg commented Jun 20, 2022

@suzuki-shunsuke
I have confirmed that I can launch the command in Powershell.
Thank you for your support!

$ aqua version
aqua version 1.12.0-4 (253f538a3469c660d75bb6d5fa1c327c8464f21e)

$ $Env:Path -Split ";" | Select-String aquaproj-aqua

C:\Users\pudding\.local\share\aquaproj-aqua\bat

$ aqua exec -- go version
go version go1.18.3 windows/amd64

$ go version
go version go1.18.3 windows/amd64

$ C:\Users\pudding\.local\share\aquaproj-aqua\bat\go.bat version
go version go1.18.3 windows/amd64

@suzuki-shunsuke
Copy link
Member

Thank you for your confirmation.
FYI, the default path of AQUA_ROOT_DIR has been changed from v1.12.0-2.
https://github.com/aquaproj/aqua/releases/tag/v1.12.0-2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working windows
Projects
None yet
Development

No branches or pull requests

2 participants