Windows 터미널의 debian wsl에서 vagrant up을 실행하는 방법

Windows 터미널의 debian wsl에서 vagrant up을 실행하는 방법

vagrant upWindows 터미널에서 Debian WSL을 실행하고 싶습니다 . 방랑자를 설치했습니다.

/mnt/c/HS_DEV/Homestead$ vagrant --version

알겠어요

원더러 2.2.6

내가 실행하면 vagrant up다음을 얻습니다.

The executable 'cmd.exe' Vagrant is trying to run was not
found in the PATH variable. This is an error. Please verify
this software is installed and on the path.

그래서 Windows 터미널 구성에서 기본 cmd.exe 대신 debian.exe를 사용해 보았지만 여전히 작동하지 않습니다. 어떻게 달릴 수 있나요 vagrant up? 이 질문은 어디서 나온 걸까요?

powershell, cmd.exe 및 gitbash를 사용하면 작동한다는 것을 알았지만 Debian WSL에서 이 작업을 수행하고 싶습니다.

답변1

전체 공개 - 저는 Vagrant를 사용하지 않지만 과거에 WSL과 비슷한 PATH 문제를 겪었으며 이것이 귀하의 문제에 대한 해결책이 되기를 바라고 있습니다.

먼저, 나는 당신이WSL 설명노숙자를 위해. 그렇다면 두 가지 버전의 Vagrant가 설치되어 있는 것입니다. 첫 번째 버전은 Windows 버전입니다(PowerShell 및 cmd에서 실행한다고 언급한 이후). 문서에 나와 있듯이"Vagrant Windows 설치에서 제공되는 vagrant.exe 실행 파일은 WSL에서 액세스할 수 있지만 예상대로 실행되지 않습니다."

따라서 이 지침을 따랐다면반품.deb 파일을 통해 WSL 인스턴스에 Debian 버전을 설치합니다.

하지만 WSL은 실제로 Debian 버전을 사용하고 있나요? 아마도 그렇지 않을 것입니다. Windows 버전도 설치되어 있고 WSL은 Windows 경로를 WSL 경로 앞에 "효과적으로" 추가하므로 vagrant upWSL/Debian 내에서 실행하면 vagrant경로에서 첫 번째 경로(아마도 Windows 버전)를 찾을 수 있습니다. 이는 실제로 WSL과 설치된 도구의 Windows 및 Linux 버전 모두에서 매우 일반적인 문제입니다.

which vagrantDebian 내에서 실행하여 어떤 실행 파일이 있는지 확인하면 이를 확인할 수 있습니다 . Windows 버전이라면 이것이 범인이기를 바랍니다.

내가 아는 한 몇 가지 가능한 해결 방법이 있습니다.

  1. 경로에서 Windows 노드를 제거하거나 최소한 Linux 버전에 더 높은 우선 순위를 부여하는 시작 스크립트(예: bashrc 또는 선택한 셸에 해당하는 것과 같은)를 만듭니다.

  2. 만들다/etc/wsl.conf그리고...

    [interop]
    appendWindowsPath = false
    

    이것은 제거됩니다모두WSL 세션의 Windows 경로입니다. 단점은 일부 유용한 Windows 유틸리티가 더 이상 WSL 경로에 없지만 시작 스크립트에서 언제든지 수동으로 다시 추가할 수 있다는 것입니다. 적어도 스크립팅 관점에서는 경로를 수동으로 삭제하는 것보다 쉬울 수 있습니다.

  3. 더 이상 필요하지 않고 Linux/WSL 버전만 사용하려는 경우 Windows Vagrant를 제거할 수 있습니다.

답변2

최신 버전의 Vagrant 또는 최소 2.2.15를 사용하고 있는지 확인하십시오. 그렇지 않으면 Windows 실행 파일이 Linux에서 올바르게 실행되지 않을 수 있습니다.

cmd.exeLinux에서 경로를 추가하기만 하면 됩니다.

export PATH="$PATH:/mnt/c/Windows/System32"

그렇지 않으면 설명한 대로 다음과 같은 오류가 발생합니다.

The executable 'cmd.exe' Vagrant is trying to run was not
found in the PATH variable. This is an error. Please verify
this software is installed and on the path.

위 줄을 ~/.profile파일에 추가하고 다음을 사용하여 다시 로드할 수 있습니다.

nano ~/.profile
source ~/.profile

이렇게 하면 Vagrant가 그것을 찾을 수 있을 것입니다 cmd.exe.

Vagrant는 환경 변수를 통해 VAGRANT_WSL_ENABLE_WINDOWS_ACCESS실행 파일을 실행하고 폴더 동기화와 같은 기능을 사용하기 위해 Windows 시스템에 액세스할 수 있다는 사실을 알게 되었습니다. 당신은 찾을 수 있습니다이 변수에 대한 자세한 내용은 Vagrant 공식 홈페이지의 해당 페이지를 참고하세요..

export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"

Vagrant는 이 변수를 사용하여 Windows 명령 셸을 포함하여 Linux에서 Windows 실행 파일을 시작합니다 cmd.exe.

하나 있다Windows 10의 Ubuntu 18 및 VirtualBox의 WSL1에 Vagrant를 설치하는 방법에 대한 YouTube 비디오. 그러나 이 비디오에서는 이전 소프트웨어의 사용을 보여주기 때문에 최신 소프트웨어는 비디오에 설명된 대로 작동하지 않을 수 있습니다. 그 외에도 비디오는 cmd.exe귀하가 설명하는 문제를 명시적으로 다루지 않습니다 .

그럼에도 불구하고 Linux에서 Vagrant를 실행하여 Windows VirtualBox에서 가상 머신을 생성하는 것이 항상 원활하게 작동하는 것은 아닙니다. 다음과 유사한 오류가 발생할 수 있습니다.

There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "a1d5c124-261b-4e4b-a11a-88f7bfdda6df", "--type", "headless"]

Stderr: VBoxManage.exe: error: Failed to get device handle and/or partition ID for 
0000000001cf34e0 (hPartitionDevice=0000000000000a39, Last=0xc0000002/1) 
(VERR_NEM_VM_CREATE_FAILED)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

이러한 오류를 방지하고 Vagrant가 안정적으로 작동하려면 Windows WSL 또는 Docker 컨테이너가 아닌 물리적 하드웨어에서 Linux를 실행해야 합니다. 물리적 하드웨어에서 Linux를 실행하는 경우 VirtualBox도 Linux에서 실행되며 Vagrant는 Linux와 Windows 간 통신을 위해 Linux에서 Windows 실행 파일을 실행할 필요가 없습니다.

관련 정보