에러노트

(AWS EC2)Linux Bun/Sudo Bun 실행 “command not found” 에러

JohnnyDeveloper 2024. 7. 15. 19:56

문제 상황

AWS ec2에 power shell script를 사용해서 bun+express 서버를 배포해서 서버를 실행하니깐

Permission denied

Permission denied 에러가 발생했다.

sudo로 다시 실행

sudo bun run start

command not found error

command not found error 발생

 

왜 그런지 생각해보니, bun을 두가지 방법으로 설치 할 수 있었다. 나는 npm을 이용해서 설치했었고 다른 방법은 curl 명령어를 이용하는 방법이 있었다.

그래서 지우고 다른 방법으로 설치하기로 결정했다.

 

먼저 npm으로 제거

npm uninstall -g bun

 

그다음 curl로 다시 설치

curl -fsSL https://bun.sh/install | bash

 

이번엔.. unzip이 필요하다는 에러 발생. unzip을 apt로 설치한다.

sudo apt install unzip

 

unzip 설치 후 다시 bun 설치를 하니 정상적으로 설치가 되었다.

bun -version

 

하지만 버전을 확인해보니, 이번에는 전에 npm으로 설치했던 bun의 환경변수 PATH가 그대로 남아있어서, 인식을 못하는 에러가 발생했다. 따라서 아래 명령어로 PATH를 변경해준다.

export PATH=”/home/<user_name>/.bun/bin:PATH”

 

다시 "sudo bun" 명령어 입력

 

그러나 또 같은 에러가 발생한다.

 

해결방안

검색해서 내가 찾은 해결방안은 총 2가지이다. sudo가 bun을 인식을 못하니 결국 인식하게 해주면 되는(?) 문제이다.

방법 1.

sudo visudo

 

위의 명령어를 사용해서 sudo가 참조하는 PATH 추가해 주기. 위의 명령어를 입력하면 sudo 설정 파일을 진입해서 수정할 수 있게 된다.

Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:$(echo $HOME)/.bun/bin"

 

여기서 secure_path 부분을 찾아서 맨 뒤에 `$(echo $HOME)/.bun/bin`를 붙여 넣어주면 된다.

하지만 이 방법은 설정 파일을 건드리는거기 때문에 잘못 건드려서 사이드 이펙트가 또 발생할 수 있는 위험이 존재한다.

방법 2.

ln -s $(which bun) /usr/bin

 

심볼릭 링크 사용하기.

이 방법은 bun 실행 파일의 절대 경로를 찾아 그 경로를 /usr/bin 디렉토리에 심볼릭 링크로 생성합니다. 예를 들어  bun 실행 파일이 /usr/local/bin/bun에 위치해 있다면, 이 명령어를 실행한 후 /usr/bin/bun은 /usr/local/bin/bun을 가리키는 심볼릭 링크가 됩니다.

 

해당 방법이 방법1 보다 훨씬 안전하며, 단순합니다. 따라서 2번을 추천드립니다.

도커 사용 시

RUN curl -fsSL https://bun.sh/install | bash && ln -s $(which bun) /usr/bin