Linux 사용자 공간 · BusyBox의 실제 빌드 설정 기준

BusyBox의 applet not found는 무엇을 확인해야 할까요?

명령 검색 실패, BusyBox에 빠진 기능, 인터프리터 오류, 커널 기능 부족을 구분합니다.

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는 각각 별도의 빌드 입력입니다.

명령 실행의 경계
  1. 셸이 명령을 찾음PATH, 함수, 내장 명령 등을 확인합니다.
  2. BusyBox가 applet을 선택이 실행 파일에 포함된 기능인지 확인합니다.
  3. 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로 확인할 수 있습니다.

확인한 문서

Linux 사용자 공간 · BusyBox의 실제 빌드 설정 기준