Ezio
Ezio

Reputation: 1175

busybox in embedded linux shows "applet not found"

I compiled busybox myself,and I put it in our embedded linux. But I have some questions.

Question 1:When I try to use some command such as gzip,it prints "gzip: applet not found".While I checked the menuconfig of busybox,I make sure that I've selected "gzip".

Question 2:I used to work with VIM,but busybox just provide VI.So I make a link VIM to VI,but when I typed vim and run it,it also show "vim: applet not found".

Anybody can help me with this problem that "applet not found"? Thank you very much.

PS:I'm confused with the "applet" of busybox,what it is? Like "applet" in java?

Upvotes: 9

Views: 52976

Answers (3)

Lucas Almeida Carotta
Lucas Almeida Carotta

Reputation: 567

Even tho this is a Java-related question as @KEINOS pointed out this has more to do with the missing shebang notation. I've run into the issue when trying to build a Docker image based on Alpine Linux when installing R packages in it.

My jerry-rigged solution was to add the following script to run after installing R in the image and then running Buildx's muiltarch build:

#!/bin/sh
for script in $(ls -p /usr/lib/R/bin/ | grep -v / )
do
    sed -i '1 i\#!/bin/bash\n#' "/usr/lib/R/bin/$script"
done

This will add the shebang notation to all R-provided scripts.

And even so, some packages have their shell scripts missing the shebang notation also. I've just opened a PR in one of them to add this notation.

If you are trying to compile just to run in your x86 based system, probably won't make a difference this fix, but if you are trying to compile to any other architecture like arm/v6, arm/v7, arm/v8, ppc64le, and s390x; you will run into this issue.

Upvotes: 0

KEINOS
KEINOS

Reputation: 71

[F.Y.I.] Shebang's typo caused me the same applet not found error.

$ # The '!' was forgotten in shebang
$ cat sample.sh
#/bin/sh

echo 'hello world'

$ ./sample.sh
sample.sh: applet not found

In docker-compose, running the above script gives me the blow error:

standard_init_linux.go:211: exec user process caused "exec format error"

Upvotes: 1

Luis Lavaire
Luis Lavaire

Reputation: 701

The answer to questions 1 and 2 is: you must set your PATH variable first or compile busybox with FEATURE_PREFER_APPLETS enabled. You can set the PATH variable with:

$ export PATH=/bin:/sbin:/usr/bin:/usr/sbin

A busybox applet is a small application that is usually found in the UNIX common utilities (defined in the POSIX standard). This applets are compiled into a single executable: busybox.

Upvotes: 1

Related Questions