BusyBox의 기능 선택은 커널 설정과 별개입니다
BusyBox는 여러 명령을 하나의 실행 파일에 담는 사용자 공간 프로그램입니다. 그 안의 개별 명령을 applet이라고 부릅니다. applet not found가 나오면 우선 지금 실행한 BusyBox에 해당 applet이 포함되어 있는지 확인합니다.
command -v busybox
busybox --list
busybox sh -c 'printf "shell is available\n"' --list는 이 실행 파일이 제공하는 명령을 보여줍니다. 다른 장비나 다른 버전의 목록을 보고 현재 실행 파일에도 있다고 가정하면 안 됩니다. BusyBox의 .config와 커널의 .config는 각각 별도의 빌드 입력입니다.
- 셸이 명령을 찾음PATH, 함수, 내장 명령 등을 확인합니다.
- BusyBox가 applet을 선택이 실행 파일에 포함된 기능인지 확인합니다.
- applet이 시스템 호출을 사용이 단계에서 커널 기능과 권한이 영향을 줍니다.
위에서 아래로 실행이 진행되는 방향입니다. 앞 단계의 명령 검색 실패와 뒤 단계의 커널 기능 부족은 원인이 다릅니다.
메시지가 발생한 단계를 구분합니다
| 상황 | 먼저 확인할 내용 |
|---|---|
셸의 command not found | 오타, PATH, 실행 파일의 설치 위치를 확인합니다. |
BusyBox의 applet not found | 실제 BusyBox의 applet 목록과 빌드 설정을 확인합니다. |
| 명령은 시작했지만 기능을 지원하지 않음 | 인자, 권한, 장치, 파일시스템 및 커널 설정을 해당 오류에 맞춰 확인합니다. |
파일은 있는데 실행 시 No such file or directory | 스크립트의 shebang이나 ELF 인터프리터 경로가 존재하는지도 확인합니다. |
기능이 빠진 BusyBox를 수정하려면 그 프로그램을 구성하고 다시 빌드·설치해야 합니다. 커널 옵션 하나를 켜는 것으로 BusyBox 실행 파일에 새 applet이 생기지는 않습니다.
스크립트가 요구하는 셸을 확인합니다
#!/bin/bash
printf '%s\n' 'Bash script' 직접 실행하는 스크립트의 첫 줄이 위와 같으면 시스템에 /bin/bash가 있어야 합니다. Bash가 없고 BusyBox sh만 제공하는 시스템이라면 Bash를 설치하거나, 스크립트를 POSIX sh 문법으로 바꾼 뒤 #!/bin/sh로 실행해야 합니다. 첫 줄만 바꾼다고 배열이나 BASH_SOURCE 같은 Bash 문법이 호환되는 것은 아닙니다.
또한 Windows 형식의 CRLF가 shebang에 남으면 인터프리터 경로 끝에 CR 문자가 들어가 실행이 실패할 수 있습니다. 파일 존재 여부뿐 아니라 첫 줄의 실제 바이트와 줄바꿈도 확인합니다. ELF 실행 파일은 아키텍처와 동적 인터프리터 경로를 readelf -h, readelf -l로 확인할 수 있습니다.