WSL2에서 VAGRANT로 ubuntu 설치 해보기
Kubernetes Advanced Networking Study
를 위해서 vagrant를 windows에 설치했습니다. 그리고vagrant ssh
명령어를 실행했을 때, private_key 파일에권한이 너무 많이 오픈되었다
는 오류를 만났습니다. windows 10에서는 해당 오류를 보안 설정에서 수정이 가능한다고 하지만, windwos 11에서는 해당 메뉴가 보이지 않았습니다. 이를 해결하기 위해서 삽집을 계속 하다가, 이럴꺼면wsl2
에서 vagrant를 실행하고 싶어 검색해 보니 How to run Vagrant + VirtualBox on WSL 2 (2021)를 찾았습니다. 이를 보고 따라한 과정을 정리하였습니다.
준비 사항
2022년도 1월 7일 기준으로 설치했습니다.
- windows 11 (10 이상)
- VirtualBox
- wsl2
- Vagrant
- Vagrant plugin: virtualbox_WSL2
- PowserShell 7.2 이상
1. VirtualBox 설치
VirtualBox 6.1.30
버전을 설치 했습니다.
이곳에서 다운로드를 받습니다.
Windows hosts
를 클릭해서 VirtualBox-6.1.30-148432-Win.exe
를 다운 받은 후 설치를 합니다.
2. PowserShell 7.2 설치
이곳에서 다운로드를 받습니다.
저의 경우는 PowerShell-7.2.1-win-x64.msi
파일을 받아서 설치 했습니다.
3. wsl2 설치
windows 10
에서는 복잡하게 설치해야 했던 wsl2
를 windows 11
은 Powsershell
에서 아래 명령어로 설치 할 수 있습니다.
$ wsl --install
기본적으로 wsl2
가 설치되며 Linux 배포판은 Ubuntu입니다.
4. Vagrant 설치
wsl2를 관리자 모드로 실행합니다.
검색버튼을 누르고 Ubuntu
로 검색하여서 관리자 권한으로 실행합니다.
wsl2 에서 다음 명령어로 vagrant
를 설치 합니다.
$ curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
$ sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
$ sudo apt-get update && sudo apt-get install vagrant
이후 환경 변수에 다음을 추가 합니다.
# ~/.bashrc 에 VAGRANT_WSL_ENABLE_WINDOWS_ACCESS과 virtualbox 위치 추가
$ echo 'export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"' >> ~/.bashrc
$ echo 'export PATH="$PATH:/mnt/c/Program Files/Oracle/VirtualBox"' >> ~/.bashrc
# ~/.bashrc 다시 로드 처리
$ source ~/.bashrc
4.1 Install virtualbox_WSL2 plugin 설치
vagrant 설치가 완료 되었다면, virtualbox_WSL2 플러그인을 설치합니다.
$ vagrant plugin install virtualbox_WSL2
해당 플러그인은wsl2와 virtualbox 간의 ssh 연결 오류
를 해결해 줍니다.
5. WSL2 에서 Vagrant 를 이용해서 Hello World
VM 생성하기
Vagrant를 사용하기 위해서는
Windows 파일 시스템
에서 진행해야 합니다. 다음 명령어로Hello World
프로젝트를 실행합니다.
# Windows 밑에 사용자 디렉토리로 이동
$ cd /mnt/c/Users/<my-user-name>/
# projects/vagrant-demo 디렉토리 생성
$ mkdir -p projects/vagrant-demo
$ cd projects/vagrant-demo
# Vagrant CLI를 이용해서 vagrantfile 생성
$ vagrant init hashicorp/bionic64
$ ls -l Vagrantfile
# Vagrantfile을 이용한 VM 생성
$ vagrant up
# SSH로 VM에 접근
$ vagrant ssh
6. WSL2 에서 KANS 1주차 VM 생성하기
앞의 긴 여정은 사실 KANS에서 진행할 1주차 VM 생성을 위한 작업이었습니다. 작업을 하면서 발생한 오류를 해결을 하였습니다.
Vagrantfile 파일은 가시다님이 제공해주시는 파일입니다.
내용을 간단하게 설명하면 아래와 같습니다.
Vagrant.configure("2") do |config|
# 이미지 정보
config.vm.box = "ubuntu/focal64"
config.vm.box_version = "20211026.0.0"
# 실행 shell
config.vm.provision "shell", inline: "echo 'sudo su -' >> .bashrc"
config.vm.provision "shell", inline: "apt update"
config.vm.provision "shell", inline: "apt install -y conntrack bridge-utils net-tools resolvconf jq tree"
config.vm.provision "shell", inline: "echo 'nameserver 8.8.8.8' > /etc/resolvconf/resolv.conf.d/head"
config.vm.provision "shell", inline: "resolvconf -u"
# network 설정
config.vm.network "private_network", ip: "192.168.50.10"
config.vm.network "forwarded_port", guest: 22, host: 60510, auto_correct: true, id: "ssh"
# synced_folder 설정
config.vm.synced_folder "./", "/vagrant", disabled: true
# virtualbox 설정
config.vm.provider "virtualbox" do |spec|
# memory 설정
spec.memory = "2048"
# cpu 설정
spec.cpus = "2"
spec.linked_clone = true
end
end
Vagrantfile
을 curl로 받은 후 vagrant up
명령어를 실행하면 됩니다.
$ curl -O https://raw.githubusercontent.com/gasida/NDKS/main/1/Ubuntu/Vagrantfile
$ vagrant up
아래는 vagrant up
를 했을 때 발견된 오류들 입니다.
6.1 host-only 오류 해결하기
6.7. Host-Only Networking 참고해서 작업 하면 쉽게 해결할 수 있는 문제 입니다.
# 관리자 권한으로 실행해야 합니다.
$ sudo mkdir /etc/vbox/
$ sudo vi /etc/vbox/networks.conf
# * 를 포함해서 아래 내용을 등록 합니다.
# * 를 포함하지 않을 경우 오류가 발생합니다.
* 10.0.0.0/8 192.168.0.0/16
# :qw 로 저장후 다시 vagrant up을 실행합니다.
6.2 VirtualBox에서 startvm --type headless error
오류 해결하기
Stderr: VBoxManage.exe: error: RawFile#0 failed to create the raw output file ../ubuntu-xenial-16.04-cloudimg-console.log (VERR_PATH_NOT_FOUND)을 참고하면, virtualbox 구성에서 직렬 포트를 OFF해서 해결이 되었다 합니다.
이는 VM 생성후 처리 해야하는 방식으로 저는 Vagrantfile
에 spec.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
을 추가 하여 VM 생성과 함게 처리하였습니다.
Vagrant.configure("2") do |config|
# 이미지 정보
config.vm.box = "ubuntu/focal64"
config.vm.box_version = "20211026.0.0"
# 실행 shell
config.vm.provision "shell", inline: "echo 'sudo su -' >> .bashrc"
config.vm.provision "shell", inline: "apt update"
config.vm.provision "shell", inline: "apt install -y conntrack bridge-utils net-tools resolvconf jq tree"
config.vm.provision "shell", inline: "echo 'nameserver 8.8.8.8' > /etc/resolvconf/resolv.conf.d/head"
config.vm.provision "shell", inline: "resolvconf -u"
# network 설정 i
config.vm.network "private_network", ip: "192.168.50.10"
config.vm.network "forwarded_port", guest: 22, host: 60510, auto_correct: true, id: "ssh"
# synced_folder 설정
config.vm.synced_folder "./", "/vagrant", disabled: true
# virtualbox 설정
config.vm.provider "virtualbox" do |spec|
# memory 설정
spec.memory = "2048"
# cpu 설정
spec.cpus = "2"
spec.linked_clone = true
# 직렬포트 disconnected 설정
spec.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
end
end
6.3 ssh timeout 오류 발생시
ssh 접근시 timeout의 경우는 단순하게 VM이 완전히 기동되지 않아서 발생하는 문제일 가능성이 높습니다.
VirutalBox의 VM 상태를 확인하고 다시 vagrant up
명령어를 실행하면 정상 기동 되었습니다.
다른 방법으로 Vagrantfile
에 아래와 같이 timeout 시간을 지정할 수 있습니다.
Vagrant.configure("2") do |config|
# timout 변경 처리 기본 값은 300 입니다.
config.vm.boot_timeout = 1800
config.vm.box = "ubuntu/focal64"
config.vm.box_version = "20211026.0.0"
config.vm.provision "shell", inline: "echo 'sudo su -' >> .bashrc"
config.vm.provision "shell", inline: "apt update"
config.vm.provision "shell", inline: "apt install -y conntrack bridge-utils net-tools resolvconf jq tree"
config.vm.provision "shell", inline: "echo 'nameserver 8.8.8.8' > /etc/resolvconf/resolv.conf.d/head"
config.vm.provision "shell", inline: "resolvconf -u"
config.vm.network "private_network", ip: "192.168.50.10"
config.vm.network "forwarded_port", guest: 22, host: 60510, auto_correct: true, id: "ssh"
config.vm.synced_folder "./", "/vagrant", disabled: true
config.vm.provider "virtualbox" do |spec|
spec.memory = "2048"
spec.cpus = "2"
spec.linked_clone = true
spec.customize [ "modifyvm", :id, "--uartmode1", "disconnected" ]
end
end
6.4 wsl2 에서 private-key Permissions 오류 발생시 또는 chmod 동작 안할 시 처리 방안
아래와 같은 오류가 발생한거나, /mnt/c/User/lahum
이하 디렉토리 또는 파일이 0777
권한을 가지고 있다면,
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0777 for '/home/lahuman/.ssh/private-key.pem' are too open.
/etc/wsl.conf
파일에 아래의 내용을 저장 하세요.
$ sudo vi /etc/wsl.conf
# 아래 내용 추가 후 저장
[automount]
enabled = true
options = metadata,uid=1000,gid=1000,umask=0022
이후 powsershell
에서 wsl을 중지 후 다시 실행 합니다.
# wsl 종료 명령어
$ wsl --shutdown
6.5 ssh 접근 성공
험난 했던 문제들를 해결하고 드디어 vagrant ssh
로 VM에 SSH 접근을 하였습니다.
작업을 하면서 많이 배우고 알게 된 귀중한 시간이었습니다.
마지막으로
스터디의 첫 시간을 준비하며 Vagrant를 처음 경험해보았는데, 신기하고 재미있었습니다. 그리고 terraform과 같은 회사에서 만든 프로젝트라는 것도 알게 되었습니다.
두 Tool의 차이는
- Vagrant는 개발 환경 관리에 중점을 둔 도구 => 개발 환경을 위한 것
- Terraform은 인프라 구축을 위한 도구 => 인프라 관리를 위한 것
라고 합니다.
마지막으로 앞으로의 Kubernetes Advanced Networking Study
여정도 많이 기대 됩니다.