본문 바로가기
Cloud Computing & MSA

CHEF(cookbook)의 file 에서 ^M: bad interpreter: No such file or directory

강철지그·2015년 5월 28일·조회 3,129

template으로 배포할 때는 문제가 없지만, file로 배포할 때 다음과 같은 오류가 발생하는 경우가 있습니다.

/bin/sh^M: bad interpreter: No such file or directory

원인

이 문제는 DOS/Windows와 Unix 계열 시스템의 줄바꿈 문자 차이 때문에 발생합니다. Windows 형식의 줄바꿈은 CRLF이고, Unix 형식의 줄바꿈은 LF입니다. 스크립트 파일의 첫 줄인 shebang에 ^M 문자가 섞이면 Unix 환경에서 인터프리터 경로를 올바르게 해석하지 못해 위와 같은 오류가 납니다.

해결 방법으로는 dos2unix를 사용하거나, vi에서 set ff=unix로 파일 포맷을 변경하는 방법 등이 있습니다.

Chef에서 방어적으로 처리하기

그래서 배포 후 파일 포맷을 Unix 형식으로 맞추도록 아래와 같이 구현했습니다.

bash 'file_format_to_unix' do
  code <<-EOH
    vi -c "set ff=unix" -c "wq" #{dir}/#{file}
  EOH
end

적용 후에는 대상 서버에서 해당 스크립트를 직접 실행해 보거나, cat -v 등으로 파일에 ^M 문자가 남아 있는지 확인하면 됩니다. 같은 오류가 반복된다면 소스 저장소에 올라간 파일 자체가 Windows 형식으로 저장되어 있는지도 함께 확인하는 것이 좋습니다.

관련 글

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.