문제 상황
AWS ec2에 power shell script를 사용해서 bun+express 서버를 배포해서 서버를 실행하니깐
Permission denied 에러가 발생했다.
sudo로 다시 실행
sudo bun run start
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
'에러노트' 카테고리의 다른 글
Express 4.x에서 express-async-errors로 Rejected Promise 처리하기 (0) | 2024.06.25 |
---|