윈도우에서 WSL2로 손쉽게 리눅스와 golang 사용하기
How to install and setup Golang development under WSL 2
현재 windows에 wsl2와 Ubuntu가 설치되어 있는 상황이다(Windows에 wsl2와 Linux(혹은 Ubuntu)가 설치되어 있지 않은 경우 윈도우에 WSL로 리눅스 설치 라고 인터넷에 검색해보길!)
wsl -l -v
위 명령어를 cmd에서 실행시키면 사용가능한 Linux 배포판과 버전을 확인할 수 있다. (WSL의 기본 명령)
root 계정 대신 argo 계정을 만들어볼 것이다.
adduser argo
windows 명령프롬포트에서 wsl 명령어를 입력하면 wsl 환경이 뜨고 기본 계정인 root가 보이는데 이때, 위의 명령어를 입력하면 argo라는 이름의 계정을 생성한다. 패스워드 입력까지 진행되니 참고하길 바란다.
mkdir -p /home/argo
ls -l /home
위의 명령어는 각각 Ubuntu의 home 디렉토리에서 argo 폴더를 생성해주고 home에 있는 모든 파일과 디렉토리를 나열하는 명령어이다.
실제 Linux -> Ubuntu > home에 가보면 argo 폴더가 생성된 것을 확인할 수 있다.
chown -R 계정명:계정명 홈디렉토리 경로
argo라는 홈 디렉토리를 만들었으면 해당 홈 디렉토리에 argo 계정에 대한 권한을 부여해준다.
(해당 과정은 디렉토리에 본인이 원하는 계정이 특정 디렉토리에 대한 접근 권한을 부여한다. 위의 예시는 argo 계정에서 디렉토리를 생성했으므로 사실 안해도 된다^^)
🤔 잠깐! sudo 명령어시 에러발생
[계정] is not in the sudoers file. This incident will be reported.
sudo 명령어를 사용했는데 위와 같은 에러가 뜬다면 해당 계정이 root 권한이 없을 때 발생한다.
root 계정으로 바꾸고usermod -aG sudo argo grep "sudo" /etc/group
위외 같은 명령어로 root 권한을 부여해주고 확인해준다!
해당 가상 환경에 go를 설치하는 것이므로 그냥 다운로드 받으면 압축풀기를 할 때 가상환경에 접근을 못한다.
wget https://dl.google.com/go/go1.20.linux-amd64.tar.gz
wget https://dl.google.com/go/리눅스 버전
위의 명령어로 다운로드를 받은 후 golang 사이트에서 Linux 최신 버전을 입력한다.
sudo tar -xvf go1.20.linux-amd64.tar.gz
압축풀기를 진행한 후
sudo mv go /usr/local
go를 /usr/local 아래로 이동시킨다.
🤔잠깐 go 폴더에 접근권한이 없는 경우
su root
root로 계정을 바꾸고 해당 go 디렉토리가 있는 local 디렉토리까지 이동한 후
chmod 777 go
로 권한을 바꿔주었다! 확인해보니 소유자에 대해서만 접근권한이 있어서 root와 같은 그룹에 대해서는 접근이 불가했다.
파일 혹은 디렉토리 권한 바꾸기는 linux chmod 사용법를 참고하길 바란다.
짜잔 go 폴더에 잘 설치된 것을 확인할 수 있다.
go env
해당 명령어는 GOPATH
와 GOROOT
와 같은 환경변수를 확인할 수 있는 명령어이다.
GOPATH와 GOROOT가 디폴트로 설치된 경로를 확인할 수 있다. 이를 바꿔보자!
sudo vi ~/.bashrc
.bashrc를 vi에디터로 실행하라는 명령어이다.
i
키를 눌러서 변경 모드로 바꾸고
export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
esc
를 눌러서 명령어 모드로 전환하고 :wq
(저장, vi종료)를 입력한다.
source ~/.bashrc
echo $GOROOT
source ~/.bashrc로 변경사항을 적용시켜주고 $GOROOT의 값을 확인하는 명령어다.
잘 뜨는 것을 확인할 수 있다.
아까 GOPATH를 /home/argo/go
로 지정했기 때문에 /home/argo 디렉 아래에 go 폴더를 생성하고 그 아래에 src 폴더를 생성해준다.
src 폴더가 argo 프로젝트 소스 코드가 들어갈 곳이다!
git clone https://github.com/argoproj/argo-workflows.git $GOPATH/src/github.com/argoproj/argo-workflows
즉 argo 깃허브를 옆의 파일 경로에 clone하라는 의미이다.!
짜잔 잘 설치되었다.
해당 argo-workflows 경로가 위치한 곳(/home/oss/go/src/github.com/argoproj/argoproj-workflows)
sudo apt install nodejs npm
해당 명령어를 입력하여 nodejs와 npm을 설치해주고
npm install -g @devcontainers/cli
으로 devcontainer를 설치하고자 한다.
[NodeJS] npm install -g EACCES: permission denied 해결하기
'mkdir [경로]' 부분에서 에러가 났다. 즉 해당 경로가 존재하지 않기 때문에 mkdir 명령어를 실행할 수 없어 발생한 문제이다.
아놔 path가 /home/argo로 설정되어 있었다.. 조사해보니 $HOME
변수가.. /home/argo로 되어 있던 것.. 리눅스 환경변수 설정
root 계정에서 다음 명령어를 입력한다.
usermod -d /var/www/ testuser
즉 testuser의 홈디렉을 /var/www/로 변경해달라는 명령어이다.
이거.. 예전에도 본 에러같은데..?
이제야 알겠다. 어떤 에러인지!!!
즉 이름을 수정할 권한이 없어서 발생한 문제이다. 권한을 다시한번 확인해보라고 한다.
chmod -R 755 usr
즉 usr 폴더 아래에 있는 모든 애들의 권한을 755로 바꿔주었다.
그래도 또 똑같은 에러가 나길래
Error: EACCES: permission denied, rename '/usr/local/lib/node_modules/expo-cli'
블로그
먼저 root 계정에서 /usr/bin/sudo의 권한을 root와 root가 포함된 그룹에 부여하고 4755로 권한 변경을 한 후.. argo 계정에서 node_modules에 접근이 가능하도록 해주었다.
뭐가 그렇게 불만이냐 앙!!!!
Dev Container CLI
공식문서를 확인해보니 Nodejs가 14버전이어야 한다고 하길래 다 삭제해주고 최신 버전으로 설치하기로 했다.
nodejs, npm 제거
node js 실행 시 Error: Can not find module semver 에러 해결하기
이 문제는 접근권한에 대한 것이라
sudo chown -R $USER /usr/local/lib/node_modules
해당 명령어로 하면 해결 완..
드디어.. 드디어 되엇따!!!!!!!
docker desktop을 열고
devcontainer up --workspace-folder .
위의 명령어를 실행했는데...
outcome":"error","message":"Command failed: docker ps -q -a --filter label=devcontainer.local_folder=/home/oss/go/src/github.com/argoproj/argo-workflows --filter label=devcontainer.config_file=/home/oss/go/src/github.com/argoproj/argo-workflows/.devcontainer/devcontainer.json","description":"An error occurred setting up the container."}
어 이것도 어디서 본 에러다. docker desktop을 열고 실행하면 된다!
흐어어어 성공했다..ㅠㅠㅠㅠㅠ 한 5~10분 정도 걸린 것 같다.
Container, Images, Volumes이 위와 같이 생성되었다.
devcontainer exec --workspace-folder . /bin/bash
생성한 devcontianer에 접속하면
이렇게 아무것도 안 뜬다.(?)
Docker Desktop에 가서 restart를 눌러보니
종료되었음을 확인할 수 있다.
echo $SHELL
로 현재 사용중인 shell을 확인해보았는데 /bin/bash로 뜬다.. 현재 데브컨테이너가 실행중이고 해당 /bin/bash가 현재 내가 작업하고 있는 쉘이기 때문인 것 같다.
make clean
혹시 몰라 make clean을 해봤는데 흠 역시나 에러가 뜬다. 오호 go부분에서 에러가 뜬다. /home/argo에서 permission denied가 뜨는데 home 디렉 밑에 argo 디렉이 없기 때문이다. oss로 이름을 바꾸지 말껄.. 하... 어떤 부분이 /home/oss로 설정되어있는지를 찾는게 관건이다.
아놔 확인해보니까 PATH랑 GOPATH가 /home/argo로 잘못 설정되어 있는게 아닌가!!! (필자는 환경변수 설정을 다 해놓고 argo를 oss로 폴더 이름을 변경하였음. 여러분은 절대 그런 짓 하지 마쇼)
sudo vi ~/.bashrc
.bashrc를 vi에디터로 실행하고 수정해주었다.. 하이고...
docker desktop에 있는 container와 image와 volumes를 다 삭제해주고 다시 devcontainer 부터 생성해야 겠다.. 허허허
위와 같이 잘 뜨면
make start UI=true
로 실행시켜보자!!
왜 대체 나는 쉽게쉽게 진행되는 일이 없을까? 하나 문제 생기면 다른 곳 하나 문제 생기고 아주 난리난리^^
지금 makefile의 444줄에서 에러가 뜬다..
링크텍스트
슬랙에서 비슷한 에러를 해결하신 팀원분의 글을 보았다..(감사합니다.. 흙흙..)쳐기
아주 빡치는 구나..
list 확인
여기서 에러!!
아 설마 쿠버네티스를 안 깔아줘서?!
sudo apt install curl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
해주면
짜잔 잘 생성되었음
version확인
이후에 다시 docker로 돌아가
Configure Access to Multiple Clusters
생각해보니 pre-build.sh에서 쿠버네티스가 제대로 설치도 안 되어있고 생성이 안 되었던 걸 보면 curl 명령어가 실행이 안 되었던 것 같아. devcontainer 부터 다시 생성하기로 했다.
역시나.. curl 명령어가 되니 pre-build.sh에서 문제가 있었다.. 즉 pre-biuld.sh를 보면 sudo 명령어를 한다. 생각해보면 우분투에서 sudo명령어를 하면 계속 비미를 번호르(벨로그 정책상..)를 작성해주었는데... argo계정을 sudo 명령어 허가를 줘야 하는듯
# install kubectl
curl -LO https://dl.k8s.io/release/v1.27.3/bin/linux/$(go env GOARCH)/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl cluster-info
vi /etc/sudoers
로 수정해줄 것이다.
이렇게 수정해주고
Stack Overflow에 나와있는 것처럼
$ sudo apt-get remove curl
$ sudo apt install curl
를 진행한 후 다시 devcontainer up work..
그래도 똑같은 에러 발생하는데.. 흠.. 일단 kubectl 명령어를 입력하면 잘 출력하는 것을 보니 curl 명령어는 제대로 완료가 되었다. 문제는
chmod 명령어 허가가 안 되었다는 의미..
그래서 root로 바꿔주고 devcontainer 명령어를 주었다. 그래도 안 됨.. kubectl 파일은 있는데 HOME(/home/oss)에 .kube 폴더가 생성이 안 됨..
그래서 root 계정에서 src까지 접근한 후 prebuild.sh에 있는 명령어를 문제의 명령어까지 치니 갑자기 되는 것이 아니겠는가!!!
뭐야 왜 생긴거야~~
chmod -R 755 oss
아무래도 접근 권한 문제 가능성이 커서 root 계정으로 바꾸고 위와 같은 명령어로 권한을 바꿔주었다.
아니 그니까 되는데..?
아니 왜 되는거야?
이전에는 저 contecxt 부분이 다 null로 되어있었는데.. 진짜 감동이다... ㅠㅠㅠㅠ 심지어 context도 존재한다...
앗 그냥 Deocker desktop에서 컨테이너를 중지하고.. 했는데오
The connection to the server 192.168.1.2:6443 was refused - did you specify the right host or port?
현재 bash 쉘에서 config 파일을 확인해보면 잘 있었는데 클러스터가 없다???
오류가 난 Makefile 444줄의 코드를 bash에서 실행해봤는데... 역시ㅣ.. 자꾸 저 API 그룹을 찾을 수 없다고 뜬다.. 그리고 kubectl api-resources를 입력해보니 계속 같은 이슈발생!!
해당 파일 경로로 들어가보면 api 파일이 잘 있는디???
근데 etc/kubernetess 폴더가 존재하지 않는다.. 설치과정에서 문제가 있음이 분명 즉 .kube는 잘 설치되었으나... kluster와 node, api 등의 설치에 문제가 있는 것 같다.
해결방법 을 토대로 명령어를 입력하니
역시나 또 에러 발생^^ 그냥 명령어 앞에 sudo를 붙여주면 된다.
해당 경로에 kubernetes-archive가 없군.. 확실히 문제가 있었어.